=============
== cxis.me ==
=============
脚踏实地

基础之负载均衡算法简介

负载均衡算法的基础知识记录。

负载均衡算法有以下几种:

  • 轮询(Round Robin)
  • 加权轮询(Weight Round Robin)
  • 随机(Random)
  • 加权随机(Weight Random)
  • 源地址哈希(Hash)
  • 一致性哈希(ConsistentHash)
  • 最小连接数(Least Connections)

轮询(Round Robin)

按照顺序将请求轮流的分配到服务器上。不关心服务器实际负载以及服务器的链接数。

优点:请求均衡的分配到每台服务器。

缺点:

  • 由于不关心服务器的负载,可能会导致请求积压到处理能力比较慢的服务器上。
  • 为了轮询服务器,还需要维护一个全局变量,用来表示选择的服务器的索引,这样会涉及到共享变量的竞争问题,导致并发吞吐量下降。

加权轮询(Weight Round Robin)

轮询(Round Robin)不关心服务器的负载,可能会导致请求积压在处理能力比较慢的服务器上。加权轮询可以解决该问题。

加权轮询给配置高、负载低的服务器配置更高的权重,给配置低、负载高的服务器较低的权重,这样高权重的服务器处理更多的请求,低权重的服务器处理较少的请求。

随机(Random)

随机选择服务器进行请求的处理,调用量越大,请求分布越均匀。

加权随机(Weight Random)

也是随机选择服务器进行请求处理,只不过会根据不同服务器设置不同权重,按照权重随机请求服务器。

源地址哈希(Hash)

根据客户端的ip地址(也可以是其他参数),通过哈希函数计算一个数值,然后使用该数值对服务器列表大小进行取模运算,就能得到要访问的服务器。

优点:同一个ip请求总能被分配到同一台服务器。

缺点:如果服务器上线或者下线,导致服务器列表发生变化,会导致前后请求不能到同一台服务器上,如果是有状态的请求,可能会导致状态丢失。

一致性哈希(ConsistentHash)

和源地址哈希算法基本一样,只不过一致性哈希会提供虚拟节点,如果服务器列表发生变化,只影响一小部分服务器映射发生变化,不会产生剧烈变动,而源地址哈希可能会导致所有服务器映射都发生变化。

最小连接数(Least Connections)

最小连接数,或者是最少活跃调用(Least Active),动态的选择连接数最少的服务器进行处理请求,尽可能高的提升服务器利用率。

参考