轮询算法(Round-Robin)
轮询算法是最简单的一种负载均衡算法。它的原理是把来自用户的请求轮流分配给内部的服务器:从服务器1开始,直到服务器N,然后重新开始循环。
算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
假设有N台服务器:S = {S1, S2, …, Sn},一个指示变量i表示上一次选择的服务器ID。变量i被初始化为N-1。该算法的伪代码如下:
j = i;
do
{
j = (j + 1) mod n;
i = j;
return Si;
} while (j != i);
return NULL;
轮询算法假设所有服务器的处理性能都相同,不关心每台服务器的当前连接数和响应速度。当请求服务间隔时间变化比较大时,轮询算法容易导致服务器间的负载不平衡。所以此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。
package com.markor.lunxun;
/**
* @describe:
* @author: caichangmeng <modules@163.com>
* @since: 2018/10/22
*/
public class Demo {
/**
* @Date: 2018/10/22
* @describe: 简单的轮训算法...
* 简介: 1. 将目标放置一容器内.
* 2. 定义一标识, 记录上次访问的该目标对象(标识应该是索引等, 需要有规律性)
* 3. (该标识 + 1) 取模, 然后获取到该目标对象. 同时更新该目标标识
* @return : null
* @throws:
*/
public static void main(String[] args) {
int i = 0;
int[] arr = {10,9,8,7,6,5,4,3,2,1,0};
int index = 0;
for (; i < 11; i++) {
int nextIndex = (index+1) % arr.length;
index = nextIndex;
System.out.println(arr[index]);
}
}
}