出于实验/学习目的(假设我的应用程序有很多持久/并发流量),我有一个运行docker的VM。对于docker,我有以下设置:
一切都有自己的容器并与端口通信。我试图模拟两个不同的服务器(Nginx),由HAProxy负载均衡。
现在它工作得很好,但据我所知,Node仍在单线程中运行。
Nginx包含的唯一配置是作为Node的反向代理(其他一切都是默认的)。每个Nginx服务器每个服务器(节点)只处理一个域。
我应该使用Node Cluster 进行多线程处理吗?
或者(假设每个服务器有2个核心)我应该为每个Nginx服务器创建两个节点实例并让它进行负载平衡吗?在这种方法中,我不确定负载平衡如何工作。如果有两个Node实例,由Nginx(或HAProxy)负载均衡,那么它看起来像:
现在我想要Nginx的原因是用于静态缓存和DDOS保护之类的东西。这真的有意义吗?或者我应该在没有HAProxy的所有四个Node服务器之间只有一个Nginx负载平衡(我引入HAProxy的原因是因为一些研究表明它比Nginx更快/更可靠(未经证实))。
还是新手。基本上,我想模拟两个服务器,每个服务器运行Node.js两个核心,Nginx反向代理静态缓存等,并通过HAProxy进行负载均衡。
答案 0 :(得分:1)
找到答案(前一段时间,但只是在有人帮助的情况下更新此帖子。)
Nginx可以运行多个工作进程。所以我们可以使用多个虚拟服务器块来实现这一点。我跟随Docker / Nginx / Node的当前方法是:
Nginx服务器块1:这会侦听端口81上的所有请求。这会将所有这些请求转发给节点实例(让我们称之为 node1 )
Nginx服务器块2:这会侦听端口82上的所有请求。并将所有请求转发到另一个节点实例(让我们称之为 node2 )。
简单来说,一个服务器块与node1通信,另一个服务器块与node2通信,其中node1和node2是两个节点实例(单独的docker容器)。
然后由HAProxy对它们进行负载平衡。服务器配置(按照docker)如下:
server n1 nginx:81
server n2 nginx:82
nginx
是容器名称。 Nginx目前运行2个工作进程。
(添加所需的任何http / tcp检查,这只是最小配置。)
向更好的方法提出建议。