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