如何在添加/删除服务器时扩展websocket连接负载?

问题描述 投票:1回答:1

解释问题:

With HTTP:

假设有100个请求/秒到达。

  1. 如果有4台服务器,负载均衡器(LB)可以均匀地分配负载,每台服务器25 /秒
  2. 如果我添加一台服务器(总共5台服务器),LB会更均衡地平衡每台服务器20 /秒
  3. 如果我删除一台服务器(总共3台服务器),LB会将每台服务器的负载减少到每台服务器33.3 /秒

因此,当我添加/删除服务器时,每个服务器的负载会自动平衡,因为每个连接都是如此短暂。

With Websockets

假设有100个客户端,2个服务器(在LB后面)

  1. LB最初均衡地平衡每个传入连接,因此每个服务器有50个连接。
  2. 但是,如果我添加服务器(总共3台服务器),则第3台服务器将获得0个连接,因为现有的100台客户端已连接到2台服务器。
  3. 如果我删除一台服务器(总共1台服务器),那100个连接将重新连接,现在由1台服务器提供服务。

Problem

由于websocket连接是持久的,因此在客户端决定重新连接之前,添加/删除服务器不会增加/减少每台服务器的负载。

那么如何有效地扩展websockets并管理每台服务器的负载?

websocket architecture scaling autoscaling
1个回答
-1
投票

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将在不同的流量上分配,对于现有连接,除非关闭任何实例,否则不会发生任何事情。

© www.soinside.com 2019 - 2024. All rights reserved.