2019-04-29
负载均衡算法-最小活跃数LeastActive
负载均衡 评论:0 浏览:294

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

编写Server类

封装服务器的信息,包括地址,总的请求数,活跃数

封装增加总的请求数,增加/减少活跃数的方法

选取服务器

定义 服务器列表

定义 随机数生成器

选取的时候

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

定义3个变量

     leastActiveReqCnt最小活跃数

     leastCount服务器具有相同最小活跃数的 个数

     leastIndex选取的最小活跃数服务器的索引数组(可能多个服务器的活跃数都是最小数)

循环服务器列表

     对于每个服务器,拿到服务器当前的活跃数

     如果活跃数 小于 最小活跃数,

          修改最小活跃数leastActiveReqCnt为 当前服务器的 活跃数

          修改最小活跃数服务器数量leastCount为1

          修改服务器索引数组第一个元素leastIndex[0]为 当前服务器的索引

    如果活跃数 等于 最小活跃数,

          修改最小活跃数服务器数量 leastCount加1

          修改服务器索引数组 的 对应位置 leastIndex[leastCount++] 为当前服务器的索引

循环结束之后,

     如果具有最小活跃数的服务器的个数leastCount为1,

          则直接选择这个服务器

     如果leastCount不为1,

          则存在多个服务器 具有 相同的 最小活跃数,

          使用随机算法,随机选择其中的一个服务器

添加和删除服务器

采用Copy-And-Write模式

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

然后进行修改,

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

 

修改服务器列表

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

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

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

测试

编写发送请求的方法sendRequest,

     使用Thread的sleep方法模拟业务耗时

编写处理请求的方法handRequest,

     先选取服务器,

    再增加服务器的总请求数,活跃数

    然后发送请求,

    最后,发送请求完毕,减少服务器的活跃数

说明:

    这里仅为了测试,编写代码方便,

    将发送请求和处理请求的方法放在 负载均衡器中

    实际业务场合,应该将这些方法剥离出去

执行测试

 

 

 

 



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

Copyright © 2018 oldnoop.tech. All Rights Reserved

鄂ICP备2023022735号-1