负载均衡加权轮询算法

随机数加权轮询算法

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;
    }
相关推荐
jyyyx的算法博客3 分钟前
LeetCode 面试题 16.22. 兰顿蚂蚁
算法·leetcode
TL滕8 分钟前
从0开始学算法——第五天(初级排序算法)
数据结构·笔记·学习·算法·排序算法
Q741_14713 分钟前
C++ 高精度计算的讲解 模拟 力扣67.二进制求和 题解 每日一题
c++·算法·leetcode·高精度·模拟
夏乌_Wx16 分钟前
练题100天——DAY19:含退格的字符串+有序数组的平方
算法
Ayanami_Reii18 分钟前
进阶数据结构应用-线段树扫描线
数据结构·算法·线段树·树状数组·离散化·fenwick tree·线段树扫描线
BugShare18 分钟前
粗心大意必酿大祸,记录nginx配置文件的一次闹剧
运维·nginx
leoufung18 分钟前
LeetCode 98 Validate Binary Search Tree 深度解析
算法·leetcode·职场和发展
水木姚姚20 分钟前
C++ begin
开发语言·c++·算法
浅川.2522 分钟前
xtuoj 素数个数
数据结构·算法
jerryinwuhan31 分钟前
机器人控制程序
linux·运维·网络