负载均衡加权轮询算法

随机数加权轮询算法

java 复制代码
public int select() {
        int[] weights = {10, 20, 50};
        int totalWeight = weights[0] + weights[1] + weights[2];
        // 取随机数
        int offset = ThreadLocalRandom.current().nextInt(totalWeight);
        for (int i = 0; i < weights.length; i++) {
            offset -= weights[i];
            if (offset < 0) {
                return i;
            }
        }
        return -1;
    }

平滑加权轮询算法

java 复制代码
int[] weights = {10, 20, 50};   // 节点权重
    int totalWeight = weights[0] + weights[1] + weights[2]; // 总权重
    int[] current = new int[]{10, 20, 50};  // 初始化当前权重

    public int select() {
        int maxCurrent = -1, selected = -1;
        // 遍历所有节点,找到当前权重最大的节点
        for (int i = 0; i < weights.length; i++) {
            // 重新计算当前权重
            current[i] += weights[i];
            int cur = current[i];
            if (cur > maxCurrent) {
                maxCurrent = cur;
                selected = i;
            }
        }
        // 被选中的节点减去总权重
        current[selected] -= totalWeight;
        return selected;
    }
相关推荐
minji...3 分钟前
C++ AVL树(二叉平衡搜索树)的概念讲解与模拟实现
数据结构·c++·b树·算法·avl
叫致寒吧7 分钟前
web和Nginx的搭建
运维·nginx
CNRio18 分钟前
ZUC国密算法深度研究:原理、实现与应用(Python、Rust)
python·算法·rust
星期天223 分钟前
【无标题】
数据结构·c++·算法
老李四1 小时前
Java 内存分配与回收策略
java·jvm·算法
z***I3941 小时前
Docker书籍
运维·docker·容器
小嘟嘟26791 小时前
Linux-奇怪的No such file or directory
linux·运维·服务器
shizhan_cloud1 小时前
iSCSI 服务器
linux·运维
做怪小疯子1 小时前
LeetCode 热题 100——普通数组——除自身以外数组的乘积
数据结构·算法·leetcode
百***61871 小时前
linux 设置tomcat开机启动
linux·运维·tomcat