负载均衡加权轮询算法

随机数加权轮询算法

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;
    }
相关推荐
Yyyy48211 分钟前
Ubuntu部署 Kubernetes1.23
linux·运维·ubuntu
py有趣15 分钟前
LeetCode算法学习之移动0
学习·算法·leetcode
lixinnnn.19 分钟前
算法总结篇(枚举-分治)
算法·1024程序员节
on_pluto_21 分钟前
【基础复习3】决策树
算法·决策树·机器学习
熬了夜的程序员21 分钟前
【LeetCode】90. 子集 II
数据结构·算法·leetcode·链表·职场和发展·排序算法
moisture23 分钟前
集合通信原语
后端·算法
熬了夜的程序员29 分钟前
【LeetCode】91. 解码方法
算法·leetcode·链表·职场和发展·排序算法
人工智能训练36 分钟前
在 Ubuntu 系统中利用 conda 创建虚拟环境安装 sglang 大模型引擎的完整步骤、版本查看方法、启动指令及验证方式
linux·运维·服务器·人工智能·ubuntu·conda·sglang
大数据张老师37 分钟前
数据结构——内部排序算法的选择和应用
数据结构·算法·排序算法
掘金安东尼1 小时前
AWS × Caddy:一键部署多站点反向代理 + 负载均衡网关(Terraform + ECS Fargate)
负载均衡·aws·terraform