Node.js Nodejs中的负载平衡
我最近开始使用node,我读了很多关于它的单线程限制以及它如何不利用您的内核的内容,然后我读了这篇文章 (其中谈到用于负载平衡的nodejs的新集群模块) 现在我不确定我是否完全同意:)因为在开始使用node之前,我想到的第一件事是如何通过web服务器(比如nginx模块)实现核心的负载平衡 像这样做Node.js Nodejs中的负载平衡,node.js,nginx,load-balancing,Node.js,Nginx,Load Balancing,我最近开始使用node,我读了很多关于它的单线程限制以及它如何不利用您的内核的内容,然后我读了这篇文章 (其中谈到用于负载平衡的nodejs的新集群模块) 现在我不确定我是否完全同意:)因为在开始使用node之前,我想到的第一件事是如何通过web服务器(比如nginx模块)实现核心的负载平衡 像这样做 upstream domain1 { server http://nodeapp1; server http://nodeapp2; server http://nodeapp
upstream domain1 {
server http://nodeapp1;
server http://nodeapp2;
server http://nodeapp3;
}
因此,我的问题是,使用这样的集群模块进行负载平衡是否有优势,以利用核心,与web服务器负载平衡相比,它是否有任何显著的优势
或者是博客文章离实际用途太远了
注意:我不关心诸如passenger之类的各种应用服务器的负载平衡处理(passenger也支持nodejs,但我不想寻找答案:)。我已经知道了,因为我大部分是ruby程序员据我所知,内置节点集群还不是一个好的解决方案(荷载未均匀分布在堆芯上)。在v0.12之前:
因此,在此之前,您应该使用nginx。之后,我们将看到一些基准测试,比较这两个选项,并查看内置集群模块是否是一个不错的选择。可以用于集群NodeJs应用程序的另一个选项是使用PM2部署应用程序 集群就这么简单,您不需要手动实现集群
pm2 start app.js -i max
PM2是自动检测可用CPU数量并运行尽可能多进程的专家
在这里阅读PM2集群模式
为了控制IO操作的负载,我使用记忆化概念编写了一个名为QueueP的库。您甚至可以自定义记忆化逻辑,有时可以获得超过10的加速比值
我确实读到过,即使采用循环调度,它还能带来什么好处,因为我相信nginx上游在发生负载时也会使用循环调度策略(即用于负载平衡),这有一个区别:通过集群,您可以将工作人员的信息发送给父级和副级(例如:计算所有工作人员服务的请求数).但是关于性能,我不知道使用集群或nginx是否有任何优势对不起,这是一个有趣的问题。有用但离题。