负载平衡网络套接字

我有一个关于如何负载平衡Web套接字的问题。

我有一个支持网络套接字的服务器。 浏览器连接到我的网站,每个人打开www.mydomain.com网页套接字。 这样,我的社交网络应用程序可以将消息推送给客户端。

传统上,只使用HTTP请求,我会通过在两台Web服务器之前添加第二台服务器和负载平衡器来扩大规模。

使用网络套接字时,连接必须直接与网络服务器,而不是负载平衡器,因为如果一台机器的物理限制为64k开放端口,并且客户端连接到负载平衡器,则我无法支持超过64k的并发用户。

那么我该如何 -

  • 在页面加载时让客户端直接连接到Web服务器(而不是负载平衡器)? 我是否简单地从一个节点加载JavaScript,并且每次页面最初被请求时,负载平衡器(或其他)随机修改脚本的URL?

  • 处理波纹开始? 浏览器会注意到在Web服务器关闭时连接已关闭。 我可以编写JavaScript代码来尝试重新打开连接,但该节点将消失一段时间。 所以我想我不得不回到负载平衡器来查询下一个使用的节点的地址?

  • 我确实想知道负载平衡器在初始请求时发送重定向,以便浏览器最初请求www.mydomain.com并将其重定向到www34.mydomain.com 。 这很有效,直到节点停止运行 - 像Facebook这样的网站不会那样做。 他们是如何做到的呢?


  • 放置一个L3负载均衡器,将基​​于源IP端口哈希的IP数据包分发到您的WebSocket服务器场。 由于L3平衡器不保持状态(使用散列源IP端口),它将在低端硬件(比如10GbE)上扩展到线速。 由于分布是确定性的(使用散列源IP端口),它将与TCP(因此也适用于WebSocket)一起工作。

    另请注意,64k硬限制仅适用于给定(源)IP地址的传出TCP / IP。 它不适用于传入的TCP / IP。 我们已经在2核4GB内存虚拟机上测试了具有200k活动连接的Autobahn(高性能WebSocket服务器)。

    另请注意,您可以在初始WebSocket握手期间宣布的HTTP路径上执行L7负载平衡。 在这种情况下,负载均衡器必须保持状态(哪个源IP端口对要传送到哪个后端节点)。 尽管如此,体面的设置可能会扩展到数百万的连接。

    免责声明:我是Autobahn的原创作者,为Tavendo工作。


    还有其他方法,如基于DNS的负载平衡或使用基于http的编排服务器。 我试图在https://deepstream.io/blog/load-balancing-websocket-connections/上总结每种方法的优缺点


    您还可以通过检查和“路由功能”实现第7层负载平衡,

    请参阅“如何使用Stingray Traffic Manager检查和平衡WebSocket流量,并在必要时管理如何管理在同一IP地址和端口上接收到的WebSockets和HTTP流量。” https://splash.riverbed.com/docs/DOC-1451

    链接地址: http://www.djcxy.com/p/7787.html

    上一篇: Loadbalancing web sockets

    下一篇: Is native PHP support for Web Sockets available?