一 算法
轮询就是后端有多少个服务节点要分配,根据顺序进行轮询分配,分配完后最后一个节点后,再轮流回到第一个节点进行分配。
轮询有一个缺点,后端不同节点的处理能力可能不同,简单的轮询会导致真正处理能力强的节点并没有完全发挥处理能力。
不同客户端对于服务器的访问请求以轮询的方式依次分配给后端服务器。
二 实现
package loadbalance;
/**
* @className: RobinSelect
* @description: 基本轮询
* @date: 2022/1/15
* @author: cakin
*/
public class RobinSelect {
// 当前要分配的服务器的序号,从 0 开始
static int curServer = 0;
/**
* 功能描述:基本轮询算法
*
* @param serverNum 后端服务器总量
* @return int 服务器的序号,可以根据序号找到服务器 IP 地址并转发
* @author cakin
* @date 2022/1/15
* @description: 每次转发给后端 server 前调用该方法,轮询后分配给后端
*/
static int robinSelect(int serverNum) {
// 如果轮询到最后一台机器,则从头开始轮询
if (curServer == serverNum) {
curServer = 0;
}
return curServer++;
}
public static void main(String[] args) {
for (int i = 0; i < 28; i++) {
int curServer = robinSelect(6);
System.out.println("当前选择第 " + curServer + " 台服务器");
}
}
}
三 测试
当前选择第 0 台服务器
当前选择第 1 台服务器
当前选择第 2 台服务器
当前选择第 3 台服务器
当前选择第 4 台服务器
当前选择第 5 台服务器
当前选择第 0 台服务器
当前选择第 1 台服务器
当前选择第 2 台服务器
当前选择第 3 台服务器
当前选择第 4 台服务器
当前选择第 5 台服务器
当前选择第 0 台服务器
当前选择第 1 台服务器
当前选择第 2 台服务器
当前选择第 3 台服务器
当前选择第 4 台服务器
当前选择第 5 台服务器
当前选择第 0 台服务器
当前选择第 1 台服务器
当前选择第 2 台服务器
当前选择第 3 台服务器
当前选择第 4 台服务器
当前选择第 5 台服务器
当前选择第 0 台服务器
当前选择第 1 台服务器
当前选择第 2 台服务器
当前选择第 3 台服务器