Class SmoothWeightSelector<T>
java.lang.Object
org.miaixz.bus.core.lang.selector.SmoothWeightSelector<T>
- Type Parameters:
T- 对象类型
- All Implemented Interfaces:
Selector<T>
平滑加权轮询选择器
思路: 比如 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,- Since:
- Java 17+
- Author:
- Kimi Liu
-
Constructor Summary
ConstructorsConstructorDescription构造SmoothWeightSelector(Iterable<? extends WeightObject<T>> weightObjList) 构造 -
Method Summary
Modifier and TypeMethodDescriptionadd(WeightObject<T> weightObj) 增加权重对象增加对象static <T> SmoothWeightSelector<T> of()创建平滑加权获取器select()通过平滑加权方法获取列表中的当前对象
-
Constructor Details
-
SmoothWeightSelector
public SmoothWeightSelector()构造 -
SmoothWeightSelector
构造- Parameters:
weightObjList- 权重对象列表
-
-
Method Details