我们正试图devise一个能够处理超过64k的websocket的架构。
我们首先尝试与亚马逊ELB,但其devise不允许意外的交通高峰或websocket。 (TCP模式意外地超时了websockets)
使用HAProxy,这些限制不适用,但我们将被限制在HA和后端服务器之间维护的约64k个WebSockets。
想到多种解决scheme:
有没有更好的方法来做到这一点?
如果你的64k限制是源于源端口的话,你可以做一些类似下面的事情(有点不好意思,但是现在我们在SE上是用websockets做的(通常和HAProxy有类似的。
server ny-web01-1 10.0.0.1:8081 check server ny-web01-2 10.0.0.1:8082 check server ny-web01-3 10.0.0.1:8083 check
多个实例也可以通过keepalived来实现。 只需在多个IP上进行循环DNS即可。 只要确保IP总是被活动的负载平衡器所取代,因为DNS本身不会给你负载平衡(这里也有更多的select,这个只是简单的)。
您可以使用Anycast和BGP或其他边界路由协议来设置多个共享相同IP的HAproxy系统。 这样所有的HAproxy系统都处于活动状态; 如果其中任何一个发生故障,你停止在该系统上发布BGP路由,并且在大约30秒内停止接收stream量。 将被重新分配给广告相同范围的其他可用系统。
例如检查这个 URL如何设置这样的布局