【问题标题】:Nginx or LVS for Node.js load balance?用于 Node.js 负载平衡的 Nginx 或 LVS?
【发布时间】:2012-05-01 16:02:02
【问题描述】:

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

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

问题:

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

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

【问题讨论】:

    标签: node.js nginx load-balancing


    【解决方案1】:

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

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

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

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

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

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

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

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

    3) 我们可以看到所有内容,因为我们将想要查看的任何指标推送到 redis 服务器中。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2013-03-01
      相关资源
      最近更新 更多