3

我们的项目需要对 node.js 做 TCP 包负载均衡。

建议是:(Nginx 或 LVS)+ Keepalived + Node Cluster

在此处输入图像描述

问题:

  1. 与 TCP 服务器的高并发客户端连接需要长期存在。Nginx 和 LVS 哪个更合适?
  2. 我们需要为 Master 服务器上的节点 master 分配不同的优先级(本地服务器的优先级会高于远程服务器)。哪个可以做到这一点,Nginx 或 LVS?
  3. Nginx 还是 LVS,谁的 CPU 利用率更小,吞吐量更高?
  4. Nginx 和 LVS 之间的性能基准测试/功能比较有什么推荐的文档吗?

最后,我们怀疑我们的提议是否合理。还有其他更好的建议或组件可供选择吗?

4

1 回答 1

3

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

1) nginx 仅支持 TCP 通过 3rd 方模块https://github.com/yaoweibin/nginx_tcp_proxy_module 如果你不需要网络服务器,我会说 LVS 更合适,但请参阅我在#末尾的附加评论会回答。

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

3)可能是LVS:nginx是用户态,LVS内核。

4)谎言,该死的谎言和基准。您必须在设备上模拟负载,编写节点客户端脚本并完善您的设置。

我们正在考虑将所有节点从前到后进行https://github.com/LearnBoost/up 尚未投入生产,但我们正在追求这条路线,原因如下:

1)我们也有优先级要求,但它们是自定义的并且是动态变化的。我们正在运行时调整优先级,我们用了不到一个小时的时间来对节点进行编程。

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

3)我们可以看到一切,因为我们将任何我们想看到的指标推送到 redis 服务器中。

我确信它不是每个进程/服务器性能最高的,但是拥有如此多的程序控制的优势是值得的,并且横向扩展具有更多冗余的优势,因此我们不会考虑挤出最后一点性能堆栈。

我只是快速检查一下是否可以复制/粘贴一堆代码,但我们正在快速对其进行编码,并且它有很多不适合公众消费的东西的引用。

于 2012-04-20T07:22:24.017 回答