java实现加权轮询_负载均衡--加权轮询算法(Weight Round)

加权轮询算法:不同的后端服务器,在机器的配置和当前系统的负载方面,可能并不相同。因此,它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请求;给配置低、负载高的机器分配较低的权重,降低系统负载。加权轮询算法能很好地处理这一问题,并将请求顺序地按照权重分配到后端服务器。一、算法描述假设有 N 台服务器 S = {S0, S1, S2, …, Sn},默认权重为 W = {W...
摘要由CSDN通过智能技术生成

加权轮询算法:不同的后端服务器,在机器的配置和当前系统的负载方面,可能并不相同。因此,它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请求;给配置低、负载高的机器分配较低的权重,降低系统负载。加权轮询算法能很好地处理这一问题,并将请求顺序地按照权重分配到后端服务器。

一、算法描述

假设有 N 台服务器 S = {S0, S1, S2, …, Sn},默认权重为 W = {W0, W1, W2, …, Wn},服务器列表为 serverList,算法可以描述为:

1、初始化 serverList,将 W0 个 S0 加入至serverList,将 W1 个 S1 加入至serverList,依据此规则,将所有的服务器加入至 serverList 中;

2、从 serverList 的从 S0 开始依序调度;

3、若所有服务器都已被调度过,则从头重新开始,循环调度。

假定我们现在有如下四台服务器:

服务器地址权重192.168.1.11

192.168.1.22

192.168.1.33

192.168.1.44

初始化服务列表后, serverList 如下:

服务器地址序号192.168.1.11

192.168.1.22

192.168.1.23

192.168.1.34

192.168.1.35

192.168.1.36

192.168.1.47

192.168.1.48

192.168.1.49

192.168.1.410

通过在服务器列表中增加相应权重个数的服务器,加权轮训算法实现加权效果,每个服务器会依序被轮训到。

二、java代码实现

package com.test.mvp.schedulealgothrim;

import com.google.common.collect.SortedMultiset;

import com.google.common.collect.TreeMultiset;

import org.springframework.util.CollectionUtils;

import java.io.Serializable;

import java.util.ArrayList;

import java.util.Map;

import java.util.Set;

import java.util.TreeMap;

import java.util.concurrent.atomic.AtomicInteger;

class Server implements Serializable {

private static final long serialVersionUID = 7246747589293111189L;

private String server;

private Integer weight;

private String description;

public Server(String server, String description, Integer weight) {

this.server = server;

this.description = description;

this.weight = weight;

}

public String getDescription() {<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值