See: Description
Interface | Description |
---|---|
Selector<T> |
选择器接口
用于抽象负载均衡策略中的选择方式 |
Class | Description |
---|---|
IncrementSelector<T> |
简单的轮询选择器
|
RandomSelector<T> |
随机选择器
|
SmoothWeightObj<T> |
平滑权重对象
|
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,
|
WeightListRandomSelector<E> |
动态按权重随机的随机池,底层是list实现。
|
WeightObj<T> |
带有权重的对象包装
|
WeightRandomSelector<T> |
权重随机选择算法实现
平时,经常会遇到权重随机算法,从不同权重的N个元素中随机选择一个,并使得总体选择结果是按照权重分布的。 |
Copyright © 2025. All rights reserved.