Nginx或LVS的Node.js负载均衡?

我们的项目需要对node.js进行TCP数据包负载平衡。

build议是:(Nginx或LVS)+ Keepalived +节点集群

在这里输入图像说明

问题:

  1. 到TCP服务器的高并发客户端连接需要很长的时间。 哪一个更适合,Nginx还是LVS?
  2. 我们需要为主服务器上的节点主节点分配不同的优先级(localhost服务器的优先级将高于远程服务器)。 哪一个可以做到这一点,Nginx或LVS?
  3. 谁的CPU利用率较小,吞吐量较高,Nginx或LVS?
  4. Nginx和LVS之间性能基准testing/function比较的推荐文档?

最后,我们想知道我们的build议是否合理。 还有其他更好的build议或组件可供select吗?

我假设你不需要nginx服务器静态资产,否则LVS不会是一个选项。

1)nginx只支持通过第三方模块的TCP https://github.com/yaoweibin/nginx_tcp_proxy_module如果你不需要一个网络服务器,我会说LVS更合适,但看到我的额外评论#答案。

2)LVS支持优先级,nginx不支持。

3)可能是LVS:nginx是userland,LVS内核。

4)谎言,诅咒谎言和基准。 你必须在你的装备上模拟你的负载,编写一个节点客户端脚本并敲击你的设置。

我们正在考虑使用https://github.com/LearnBoost/up从前面到后面的所有节点尚未投入生产,但是我们正在追求这条路线,理由如下:

1)我们也有优先要求,但是他们是自定义的,动态变化。 我们正在调整运行时的优先级,我们花了不到一个小时编程节点来做到这一点。

2)我们部署了大量的代码更新,并允许我们在不中断现有客户端的情况下进行更新。 因为你可以编写代码来做任何你想做的事情,所以我们可以启动全新的流程来处理新的连接,并在现有连接全部消失的情况下让旧连接断开。

3)我们可以看到所有的东西,因为我们把我们想看到的任何度量标准都放到了redis服务器上。

我确定这不是每个进程/服务器中性能最高的,但是具有这么多的程序控制的优势是值得的,而扩展具有更多冗余的优势,所以我们并没有考虑将性能的最后一点压缩堆栈。

我只是检查了一下,看是否可以复制/粘贴一堆代码,但是我们正在快速编写代码,并且提供了很多不适合公共消费的东西。