用户上线的时候,需要和长连服务器建连,本文将涉及服务器地址下发设计。
由于无法得知SLB的可用度,需要计算求和每一台ECS的可用度,间接得出。
在每一台长连网关
程序上都启动了一个定时任务,每隔 5s
获取调度一次,计算pps
及bytes
,然后将二者分别除去设置的阈值,得到一个已用度
,再用 1 - 已用度
得到 可用度
的值,再在二者之中取最小值,作为当前ECS服务器
的最终可用度,然后将这个值存到Redis
中。(PPS及Bytes计算方法)
在下发IP服务
程序中,会去读取Redis
中存储的每一个SLB
对应的ECS
服务器列表,每次统计可用度的时候,读出所有ECS
服务器当前的可用度
,将可用度求和,作为当前SLB
的可用度。将计算得出的SLB可用度缓存到机器内存(调用Guava的LoadingCache实现)及Redis中。
为了让可用度比较接近的SLB被均衡连接,将可用度乘以一个随机数再去进行排序,让同一时刻内返回的SLB列表不会过于固定,造成某一个SLB过于饱和。