负载均衡算法实现方式

轮询(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.根据连接情况选择最小连接

posted @ 2018-11-03 14:29  Twinhead  阅读(215)  评论(0编辑  收藏  举报