| Package | Description |
|---|---|
| org.dromara.hutool.core.lang.selector |
| Modifier and Type | Class and Description |
|---|---|
class |
IncrementSelector<T>
简单的轮询选择器
|
class |
RandomSelector<T>
随机选择器
|
class |
SmoothWeightSelector<T>
平滑加权轮询选择器
来自:https://gitee.com/dromara/hutool/pulls/982/
介绍:https://cloud.tencent.com/developer/beta/article/1680928
思路: 比如 A : 5 , B : 3 , C : 2 (服务器 A,B,C 对应权重分别是 5,3,2)
ip: A,B,C
weight: 5,3,2 (计算得到 totalWeight = 10)
currentWeight: 0,0,0 (当前ip的初始权重都为0)
请求次数: | currentWeight = currentWeight + weight | 最大权重为 | 返回的ip为 | 最大的权重 - totalWeight,其余不变
1 | 5,3,2 (0,0,0 + 5,3,2) | 5 | A | -5,3,2
2 | 0,6,4 (-5,3,2 + 5,3,2) | 6 | B | 0,-4,4
3 | 5,-1,6 (0,-4,4 + 5,3,2) | 6 | C | 5,-1,-4
4 | 10,2,-2 (5,-1,-4 + 5,3,2) | 10 | A | 0,2,-2
5 | 5,5,0 | 5 | A | -5,5,0
6 | 0,8,2 | 8 | B | 0,-2,2
7 | 5,1,4 | 5 | A | -5,1,4
8 | 0,4,6 | 6 | C | 0,4,-4
9 | 5,7,-2 | 7 | B | 5,-3,-2
10 | 10,0,0 | 10 | A | 0,0,0
至此结束: 可以看到负载轮询的策略是: A,B,C,A,A,B,A,C,B,A,
|
class |
WeightListRandomSelector<E>
动态按权重随机的随机池,底层是list实现。
|
class |
WeightRandomSelector<T>
权重随机选择算法实现
平时,经常会遇到权重随机算法,从不同权重的N个元素中随机选择一个,并使得总体选择结果是按照权重分布的。 |
Copyright © 2024. All rights reserved.