转载请注明出处: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模式
先复制当前的服务器列表,得到一个新的集合,
然后进行修改,
最后将修改后的数据设置回去
修改服务器列表
修改服务器列表的同时,修改轮询的列表,按照权重数字,分配 指定的次数
修改的时候,采用读写锁,目前暂时用到了写锁,
为了扩展考虑,如果有操作需要先读取并且要求防止并发的情形,可以采用读锁,减少锁竞争
测试