平滑加权轮询算法java实现

实现代码

java 复制代码
   /**
     * 功能描述: 平滑加权轮询算法
     *
     * @author zhang pu
     * @date 11:46 2023/9/22
     */
   public static void smoothnessWeightPollLoadBalance() {
        Server serverA = new Server("127.0.0.1", 5, 0);
        Server serverB = new Server("127.0.0.2", 3, 0);
        Server serverC = new Server("127.0.0.3", 2, 0);
        List<Server> serverList = new ArrayList<>();
        serverList.add(serverA);
        serverList.add(serverB);
        serverList.add(serverC);
        int i = 0;
        //模拟10个请求
        while (i < 10)
        {
            for (Server server : serverList)
            {
                server.setCurrentWeight(server.getCurrentWeight() + server.getWeight());
            }
            Collections.sort(serverList);
            //获取最高实时权重的服务器去执行业务
            Server server = serverList.get(0);
            logger.info("执行业务的服务器ip:{}", server.getIp());
            int sum = serverList.stream().mapToInt(Server::getWeight).sum();
            //取出本轮最大的实时权重 - 所以有服务器固定权重之和
            //减权操作
            server.setCurrentWeight(server.getCurrentWeight() - sum);
            logger.info("所有服务器本轮情况:{}", JSON.toJSONString(serverList));
            //进行下一轮
            i++;
        }
    }

实体

java 复制代码
/**
 * @Auther: ZHANG PU
 * @Date: 2023/9/22 13:05
 * @Description:
 */
public class Server implements Comparable {

    /**
     * 服务器ip
     */
    private String ip;
    /**
     * 固定权重
     */
    private int weight;
    /**
     * 动态实时权重
     */
    private int currentWeight;

    public Server() {
    }

    public Server(String ip, int weight, int currentWeight) {
        this.ip = ip;
        this.weight = weight;
        this.currentWeight = currentWeight;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public int getCurrentWeight() {
        return currentWeight;
    }

    public void setCurrentWeight(int currentWeight) {
        this.currentWeight = currentWeight;
    }

    @Override
    public int compareTo(Object o) {
        return ((Server) o).getCurrentWeight() - this.currentWeight;
    }
}

运行结果

相关推荐
TTGGGFF3 分钟前
Supertonic 部署与使用全流程保姆级指南(附已部署镜像)
开发语言·python
木木木一7 分钟前
Rust学习记录--C7 Package, Crate, Module
开发语言·学习·rust
love530love7 分钟前
升级到 ComfyUI Desktop v0.7.0 版本后启动日志报 KeyError: ‘tensorrt‘ 错误解决方案
开发语言·windows·python·pycharm·virtualenv·comfyui·comfyui desktop
Evand J1 小时前
【MATLAB例程】【空地协同】UAV辅助的UGV协同定位,无人机辅助地面无人车定位,带滤波,附MATLAB代码下载链接
开发语言·matlab·无人机·无人车·uav·协同定位·ugv
chao1898441 小时前
基于MATLAB实现多变量高斯过程回归(GPR)
开发语言·matlab·回归
ytttr8736 小时前
隐马尔可夫模型(HMM)MATLAB实现范例
开发语言·算法·matlab
天远Date Lab6 小时前
Python实战:对接天远数据手机号码归属地API,实现精准用户分群与本地化运营
大数据·开发语言·python
listhi5207 小时前
基于Gabor纹理特征与K-means聚类的图像分割(Matlab实现)
开发语言·matlab
野生的码农7 小时前
码农的妇产科实习记录
android·java·人工智能
qq_433776427 小时前
【无标题】
开发语言·php