负载均衡算法实现方式
轮询(Round Robin)法
1.获取ip列表
2.根据ip在list的中pos顺序获取,server = keyList.get(pos);(使得同一时刻只能有一个线程可以修改pos的值)
随机(Random)法
1.获取ip列表
2.Random的nextInt方法取0~keyList.size()区间的一个随机值 int randomPos = random.nextInt(keyList.size());
源地址哈希(Hash)法
获取客户端访问的IP地址值,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是要访问的服务器的序号,结果便是选用的服务器在服务器列表中的索引值。
1.获取远程ip,计算hash值
2.取模计算该hash值得pos 序列号(保证了相同客户端IP地址将会被哈希到同一台后端服务器)
加权轮询(Weight Round Robin)法
在获取服务器地址之前增加了一段权重计算的代码,根据权重的大小,将地址重复地增加到服务器地址列表中,权重越大,该服务器每轮所获得的请求数量越多。
1.根据权重比例重复添加到ip列表中
for (int i = 0; i < weight; i++)
serverList.add(server);
2.按照pos轮询列表。server = serverList.get(pos);
加权随机(Weight Random)法
原理同加权和随机一样
1.1.根据权重比例重复添加到ip列表中
for (int i = 0; i < weight; i++)
serverList.add(server);
2.int randomPos = random.nextInt(serverList.size());
最小连接数(Least Connections)法
以后端服务器的视角来观察系统的负载,而非请求发起方来观察。
根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前请求,尽可能地提高后端服务器的利用效率,将负载合理地分流到每一台机器。
1.需要后端服务器定时上报连接情况
2.根据连接情况选择最小连接