2019-04-25
负载均衡算法-加权随机WeightedRandom
负载均衡 评论:0 浏览:159

转载请注明出处:https://oldnoop.tech/c/199.html

编写Server类

封装服务器的地址和权重信息

选取服务器

定义 服务器列表

定义 随机数生成器

选取的时候

先获取当前的服务器列表,

计算所有服务器的配置权重之和totalWeight,

并判断 所有的服务器是否 配置的权重 相同 sameWeight

如果权重都相等,

      获取 服务器个数范围内 的 随机数,在当前服务器列表中选一个

如果权重不相同

      配置权重之和totalWeight代表整个选取区间, 每个服务器的权重数字 代表一定的区间范围,

      比如:a,b,c 的权重为 6:3:1, a区间为位置0-5, b区间为位置6-8,c区间为位置9

      获取 权重之和 范围内 的 随机数,随机数落在哪个区间,就选择哪个服务器

添加和删除服务器

采用Copy-And-Write模式

先复制当前的服务器列表,得到一个新的集合,

然后进行修改,

最后将修改后的数据设置回去

修改服务器列表

修改服务器列表的同时,修改轮询的列表,按照权重数字,分配 指定的次数

修改的时候,采用读写锁,目前暂时用到了写锁,

为了扩展考虑,如果有操作需要先读取并且要求防止并发的情形,可以采用读锁,减少锁竞争

测试



  • 转载请注明出处:https://oldnoop.tech/c/199.html

Copyright © 2018 oldnoop.tech. All Rights Reserved

鄂ICP备2023022735号-1