负载均衡算法

一.轮询

   将请求顺序轮流分配到后端服务器上,均衡的对待后端每一台服务器,而不关心服务器当前的连接数和系统负载。对于当前轮询的位置变量pos,为了保证服务器选择的顺序性,需要对轮询的位置变量pos加synchronized锁来保证互斥性。因此会引起轮询的并发吞吐量明显下降。

   需要注意的是服务配置中心随时有可能有服务器上线或下线。为了避免出现并发问题。轮询算法在每个线程中首先将配置列表存放至本地,避免被多个线程修改。如此带来的问题是在这一轮服务器的选择中,服务器的上下架轮询算法都无法获知。特别是当有服务器下线时,服务的消费者有可能访问到不存在的地址。因此服务的消费者需要考虑该问题,并做好容错处理。比如重新发起一次调用。


二.随机

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


三.源址Hash算法

   获取客户端访问的IP地址,通过哈希算法得到一个数值。用该数值对服务器列表的大小进行取模运算,得到的结果就是要访问的服务器的序号。采用源址哈希算法进行负载均衡,当后端服务器列表不变的情况下,同一IP地址的客户端,他的每次请求都会被映射到同一台后端服务器进行访问。


四.加权轮询算法

    不同后台服务器可能机器配置和当前系统的负责并不相同,抗压能力也不相同。给配置高、负载低的服务器更高的权重。加权轮询算法负责将请求顺序且按照权重分配到后端。


五.加权随机算法

   不同后台服务器可能机器配置和当前系统的负责并不相同,抗压能力也不相同。给配置高、负载低的服务器更高的权重。加权轮询算法负责将请求按照权重随机分配到后端。


六.最小连接数算法

    根据后台服务器当前的连接情况,动态的选择其中当前积压连接数最少的一台服务器来处理当前请求。尽可能的提高后台服务器的利用效率,将负责合理地分流到每一台服务器。

 


七.一致性hash算法(用于缓存服务器的负载均衡算法)

    一致性hash算法能够在移除/添加一台缓存服务器时,尽可能小的改变已存在的key映射关系,避免大量的key重新映射

    将Hash算法的值域空间组成一个圆环,整个空间按照顺时针进行组织,然后将服务器节点进行hash,然后映射到Hash环上。假使我们要4台主机(node1,node2,node3,node4顺时针排放在hash环上),接下来使用相同的hash函数,计算出key的hash值。将其映射到hash环上对应的位置。如果该位置位于node1与node2之间,则该访问请求会被定位到node2服务节点进行处理。

   当节点较少的时候,该算法存在弊端,会造成请求分布不均匀,导致数据访问发生倾斜。为了避免这种情况,可以尽可能多的引入虚节点,对每一个服务器都计算出多个hash值,每一个hash值都对应hash环上的一个节点位置,该节点称为虚拟节点。当虚拟节点足够多时,即时实际节点较少,也能使key分布的足够均匀。只是多了一步从虚拟节点再映射到真实节点的过程。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道化简

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值