我们的应用目前只是一个“常规”的 Web 应用程序,没有流式 HTTP 或 WebSockets 等花哨的东西。它主要是轨道应用程序,由少数人提供服务(2 台机器上有 20 个)独角兽工人,由一位受人尊敬的nginx处理负载平衡的服务器。
在过去的一年里,这一功能运行良好,现在该应用程序可以每秒 400 到 800 个请求在一天中的任何时候。
我们即将发布 2 个新 API,它们均由节点应用程序:网络套接字一个,以及一个长轮询 HTTP 一.(类似 Twitter 流式 API 的奇特功能,其中 HTTP 连接永不结束)。它们都在节点上使用相同的端口,并且由于节点应用程序是无状态的,我们当然可以部署其中几个来处理流量。
该应用程序(节点)现已部署在 5 个实例中,并且正在同一主机上监听 5 个不同的“私有”端口。我们需要在它们前面放置一些东西来平衡负载,但也需要一些东西来处理旨在保持“运行”数天的套接字(WebSocket 或 HTTP 流)。
那么问题是:什么?我在某处读到HAProxy在这方面比 Nginx 做得更好。你有什么推荐的吗?
答案1
Nginx 根本不支持 WebSockets,因此您需要使用另一个负载均衡器。我对 HAProxy 的使用体验很好。请查看此 StackOverflow 线程以获取示例配置:https://stackoverflow.com/questions/2419346/can-nginx-be-used-as-a-reverse-proxy-for-a-backend-websocket-server
答案2
更好的是,什么都不放。DNS 负载平衡 + 重定向。您将要无论如何,最终都希望实现智能节点亲和性,您可以通过重定向实现这一点。DNS 负载平衡在短期内并不理想,但从长远来看,作为平衡传入连接的良好种子,它是可行的。
或者,朱利安,你可以和像我这样的人合作,为像你这样的人解决这个问题。;)