我们的项目需要对node.js进行TCP数据包负载平衡。
提案是:(Nginx或LVS)+ Keepalived + Node Cluster
问题:
最后,我们想知道我们的提案是否合理。还有其他更好的建议或组件可供选择吗?
答案 0 :(得分:3)
我假设您不需要nginx来服务静态资产,否则LVS将不是一个选项。
1)nginx仅通过第三方模块支持TCP https://github.com/yaoweibin/nginx_tcp_proxy_module如果您不需要网络服务器,我会说LVS更合适,但请看#d答案结尾处的其他评论
2)LVS支持优先级,nginx不支持。
3)可能是LVS:nginx是userland,LVS内核。
4)谎言,诅咒谎言和基准。您必须模拟装备上的负载,编写节点客户端脚本并敲定设置。我们正在寻找从前到后的所有节点https://github.com/LearnBoost/up尚未投入生产,但我们正在寻求这条路线,原因如下:
1)我们也有优先级要求,但它们是自定义的并且动态变化。我们正在调整运行时的优先级,我们花了不到一个小时的时间来编程节点。
2)我们部署了大量代码更新,并允许我们在不中断现有客户端的情况下完成更新。因为你可以编写代码来做你想做的任何事情,所以我们可以启动全新的流程来处理新的连接,并在现有的连接全部消失时让旧的连接消失。
3)我们可以看到所有内容,因为我们将要查看的任何指标推送到redis服务器。
我确信它不是每个进程/服务器中性能最高的,但是拥有如此多的程序控制的优势是值得的,并且向外扩展具有更多冗余的优势,因此我们不会考虑挤压最后一点表现越来越好。
我只是快速检查一下,看看我是否可以复制/粘贴一堆代码,但是我们正在快速编写它并且它有很多引用不适合公共消费的内容。