在多台机器实现负载均衡的时候,经常用到轮询调度算法(Round-Robin Scheduling)。
轮询调度算法就是以循环的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。
算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
1、算法流程:
假设有一组服务器 S = {S0, S1, …, Sn-1} ,有相应的权重,变量i表示上次选择的服务器,权值cw初始化为0,i初始化为-1 ,当第一次的时候取权值取最大的那个服务器,通过权重的不断递减,寻找适合的服务器返回,直到轮询结束,权值返回为0
1 import java.math.BigInteger;
2 import java.util.ArrayList;
3 import java.util.HashMap;
4 import java.util.List;
5 import java.util.Map;
6 import java.util.Map.Entry;
7
8 /**
9 * 权重轮询调度算法(WeightedRound-RobinScheduling)-Java实现
10 * @author huligong
11 * */
12 public class WeightedRoundRobinScheduling {
13
14 private int currentIndex = -1;// 上一次选择的服务器
15 private int currentWeig