轮询算法简介
在工作中很多人都使用到了nginx,对nginx得配置也是烂熟于心,今天我主要想介绍一下nginx轮询算法得几种底层实现方式。
简单轮询算法
这种算法比较简单,举个例子就是你有三台服务器
第一台服务器 | 192.168.1.1 |
第二台服务器 | 192.168.1.2 |
第三台服务器 | 192.168.1.3 |
第一个请求过来之后默认访问第一台,第二个请求过来访问第二台,第三次请求过来访问第三台,第四次请求过来访问第一台,以此类推。以下是我代码实现简单得算法:
public class SimplePolling {
/**
* key是ip
*/
public static List <String> ipService = new LinkedList <>();
static {
ipService.add("192.168.1.1");
ipService.add("192.168.1.2");
ipService.add("192.168.1.3");
}
public static int pos = 0;
public static String getIp(){
if(pos >= ipService.size()){
//防止索引越界
pos = 0;
}
String ip = ipService.get(pos);
pos ++;
return ip;
}
public static void main(String[] args) {
for (int i = 0; i < 4; i++) {
System.out.println(getIp());
}
}
}
模拟执行4次执行结果是
此时如果我有一台服务器性能比较好(比如192.168.1.1),我想让这台服务器处理多一点请求,此时就涉及到了权重得概率,这种算法就不能实现,请看我后面描述的轮询升级版算法。