解释问题:
假设有100个请求/秒到达。
因此,当我添加/删除服务器时,每个服务器的负载会自动平衡,因为每个连接都是如此短暂。
假设有100个客户端,2个服务器(在LB后面)
由于websocket连接是持久的,因此在客户端决定重新连接之前,添加/删除服务器不会增加/减少每台服务器的负载。
那么如何有效地扩展websockets并管理每台服务器的负载?
Websockets基于TCP和TCP构建如果您有正确的请求路由算法,例如least outstanding requests
,load将自动在服务器之间均匀分布。相反,如果已经循环,那么将有不相等的负载。
让我举例说明3个实例(a,b,c)有100个请求(每个约33个连接)并且你要添加一个新的框(d),假设一段时间后新的100个请求进来(总共200个请求),随着循环使用,旧箱子(a,b,c)的负荷进一步增加,因为每个都有58个(33个现有+ 25个新的)连接,新的箱子将有25个连接,这里负载不均匀。
ROUND ROBBIN
a,b,c 58(33现存+ 25新)
d - 25(25新)
对于相同的情况,如果你有least outstanding requests
,那么所有的盒子将有多个连接。
LEAST CONNECTION
a,b,c - 50(33现存+ 17新)
d - 50(50新)
同样适用于删除实例,但这里的关键是load将在不同的流量上分配,对于现有连接,除非关闭任何实例,否则不会发生任何事情。