2019-04-23
负载均衡-加权轮询-WeightedRoundRobin
负载均衡 评论:0 浏览:240

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

编写Server类

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

定义 服务器列表 和服务器 轮询列表

服务器列表是真实的有几台服务器

服务器轮询列表,按照权重数据,每个服务器在列表中设置多次

轮询操作

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

采用AtomicInteger原子操作类,先获取到当前存储的索引编号,加1操作,

为了防止累加超过上限,加1后对轮询的服务器个数取模,获取下一个服务器的索引编号,

然后使用原子类的CAS操作,防止此时有其他线程并发执行,

如果CAS操作成功,则从服务器轮询列表中取 索引编号 对应的 服务器

如果不成功,采用自旋,避免锁竞争

添加和删除服务器

采用Copy-And-Write模式

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

然后进行修改,

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

修改服务器列表

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

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

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



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

Copyright © 2018 oldnoop.tech. All Rights Reserved

鄂ICP备2023022735号-1