假设我需要实现一个具有大量并发用户的 Web 应用程序。我决定使用 node.js,因为它可以很好地扩展,它具有良好的性能,开源社区等等。然后,为了避免瓶颈,因为我可以在同一个事件循环中拥有大量的用户,我决定使用一个集群进程以利用多核 CPU。此外,我有 3 台机器(main + 2),因为我需要使用 Cassandra 处理大数据。太棒了,这意味着我有 3*n node.js 进程,其中 n 是 cpu 的核心数(机器是相同的)。
好的,然后我开始研究,并以以下模式结束:
- Nginx 监听 80 端口,仅用于提供静态内容(img、css、js 等)。
将动态流量转发到 haproxy。我知道怎么配置nginx,但是还是得看一下haproxy,所以我就说haproxy正在监听4000端口。Nginx和haproxy安装在主机(入口点)。 - 3 台机器之间的 Haproxy 负载平衡。它将流量转发到 4001 端口,即 node.js 进程正在监听 4001。
- 每个 node.js 都有一个由 n 个进程组成的集群,监听 4001。
如果我是正确的,单个 http 请求将被转发到单个 node.js 进程。
创建会话很正常,对吗?一个会话只是一个映射,而这个映射是一个对象,这个对象存在于一个 node.js 进程中。Haproxy 将配置循环调度程序,因此可以将同一用户转发到不同的 node.js 进程。如何在所有 node.js 进程中共享相同的会话对象?我如何共享一个全局对象(这包括在同一台机器(node.js 集群)和整个网络中)?我应该如何使用 node.js 设计分布式 Web 应用程序?是否有任何模块可以简化同步任务?