负载均衡算法

负载均衡算法,第1张

负载均衡算法

服务消费者从服务配置中心获取到服务的地址列表后,需要选取其中一台来发起RPC调用。如何选择,则取决于具体的负载均衡算法,对应于不同的场景,选择的负载均衡算法也不同。常见的负载均衡算法包括轮询法、随机法、源地址哈希法、加权轮询法、加权随机法、最小连接法。

1. 轮询法

轮询很容易实现,将请求按顺序轮流分配到后台服务器上,均衡的对待每一台服务器,而不关心服务器实际的连接数和当前的系统负载。使用轮询策略的目的是,希望做到请求转移的绝对均衡,但付出的代价性能也是相当大的。为了保证pos变量的并发互斥,引入了重量级悲观锁synchronized,将会导致该轮询代码的并发吞吐量明显下降。

serverWeightMap = new HashMap();

serverWeightMap.put(“192.168.1.100”,1);

serverWeightMap.put(“192.168.1.101”,1);

serverWeightMap.put(“192.168.1.102”,4);

serverWeightMap.put(“192.168.1.103”,1);

serverWeightMap.put(“192.168.1.104”,1);

serverWeightMap.put(“192.168.1.105”,3);

serverWeightMap.put(“192.168.1.106”,1);

serverWeightMap.put(“192.168.1.107”,2);

serverWeightMap.put(“192.168.1.108”,1);

serverWeightMap.put(“192.168.1.109”,1);

serverWeightMap.put(“192.168.1.110”,1);

public static String testRoundBobin() {

    Map serverMap = new HashMap();

    serverMap.putAll(serverWeightMap);

    Set keySet = serverMap.keySet();

    ArrayList keyList = new ArrayList();

    keyList.addAll(keySet);

    String server = null;

    synchronized(pos) {

        if(pos>=keySet.size()) {

            pos = 0;

        }

        server = keyList.get(pos);

        pos++;

    }

    return server;

}

轮询法适用于机器性能相同的服务,一旦某台机器性能不好,极有可能产生木桶效应,性能差的机器扛不住更多的流量。

2. 随机法

通过系统随机函数,根据后台服务器列表的大小值来随机选取其中一台进行访问。由概率概率统计理论可以得知,随着调用量的增大,其实际效果越来越接近于平均分配流量到后台的每一台服务器,也就是轮询法的效果。

同样地,它也不适用于机器性能有差异的分布式系统。

3. 源地址哈希法

源地址哈希法的思想是根据服务消费者请求客户端的IP地址,通过哈希函数计算得到一个哈希值,将此哈希值和服务器列表的大小进行求模运算,得到的结果便是要访问的服务器地址的序号。采用源地址哈希法进行负载均衡,相同的IP客户端,如果服务器列表不变,将映射到同一个后台服务器进行访问。该方法适合访问缓存系统,如果为了增强缓存的命中率和单调性,可以用一致性哈希算法,

4. 加权轮询法

不同的后台服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不一样。给配置高、负载低的机器分配更高的权重,使其能处理更多的请求,而配置低、负载高的机器,则给其分配较低的权重,降低其系统负载,加权轮询很好的处理了这一问题,并将请求按照顺序且根据权重分配给后端。Nginx的负载均衡默认算法是加权轮询算法。

5. 加权随机法

加权随机法跟加权轮询法类似,根据后台服务器不同的配置和负载情况,配置不同的权重。不同的是,它是按照权重来随机选取服务器的,而非顺序。

6. 最小连接数法

最小连接数法比较灵活和智能,由于后台服务器的配置不尽相同,对请求的处理有快有慢,它正是根据后端服务器当前的连接情况,动态的选取其中当前积压连接数最少的一台服务器来处理当前请求,尽可能的提高后台服务器利用率,将负载合理的分流到每一台服务器。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5696583.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存