负载均衡加权轮询算法

随机数加权轮询算法

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;
    }
相关推荐
雪可问春风1 天前
docker环境部署
运维·docker·容器
lwx9148521 天前
Linux-Shell算术运算
linux·运维·服务器
小O的算法实验室1 天前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
翻斗包菜1 天前
PostgreSQL 日常维护完全指南:从基础操作到高级运维
运维·数据库·postgresql
somi71 天前
ARM-驱动-02-Linux 内核开发环境搭建与编译
linux·运维·arm开发
海的透彻1 天前
nginx启动进程对文件的权限掌控
运维·chrome·nginx
路溪非溪1 天前
Linux驱动开发中的常用接口总结(一)
linux·运维·驱动开发
郭涤生1 天前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
航Hang*1 天前
第3章:Linux系统安全管理——第2节:部署代理服务
linux·运维·服务器·开发语言·笔记·系统安全
༾冬瓜大侠༿1 天前
vector
c语言·开发语言·数据结构·c++·算法