分布式系统中,业务系统都是集群部署,而且一般会做微服务化。那么,从一个系统rpc请求到另一个系统,应该路由到哪一台节点呢?这,就涉及到负载均衡。
负载均衡的核心,便是负载均衡算法,算法有很多,主要介绍其中六种,并说一说各自算法的优缺点。
1. 加权随机
加权随机,顾名思义,就是路由到哪一台节点,是通过随机算法来得到,权重设置大的节点,概率也大。
比如有节点A B C,权重分别为3 2 1,可以建一个数组 A A A B B C,通过随机数,得到数组下标,便可以得到路由节点。
优点:实现简单,当请求多了以后,各节点请求比例会按照权重来分布。
缺点:权重不好分配,不能动态化,性能差的节点可能积累慢请求。
2. 加权轮询
顾名思义,就是按照权重轮询。
比如有节点A B C,权重分别为3 2 1,可以建一个数组 A A A B B C,直接循环往复的轮询即可,这种算法可能导致短时间内权重大的节点流量过大。
为了解决这个问题,一般借鉴nginx的平滑加权轮询,如下:
经过这样的一轮后,又回到了起点,从而周而复始。
优点:流量平滑的路由到各节点,且按权重分配。
缺点:权重不好分配,不能动态化,性能差的节点可能积累慢请求。
3. 一致性hash
相同的参数,路由到固定的节点。
优点:当服务提供者是有状态的,适合用这个算法。
缺点:可能某台节点承受很大的流量。
4. 最少活跃优先
所谓活跃,便是服务提供者仍在处理请求,活跃数越少,说明服务提供者的处理能力越强,则优先路由到该节点。
如果活跃数相同,则加权随机分配。
优点:动态化路由请求,保证性能好的节点来处理请求。
缺点:可能导致流量集中在高性能节点。
5. 最短响应优先
在一个滑动窗口内,节点的平均响应时间最短的,优先分配。相等,则加权随机分配。
优点:动态化路由请求,保证性能好的节点来处理请求。
缺点:可能导致流量集中在高性能节点。
6. P2C类算法
随机选择两个节点,通过比较两个节点的性能或者负载,分配给更佳的那一个节点。
比如通过活跃数(活跃数越小,说明处理能力越强),比如通过节点的CPU负载(负载越小,说明节点还能承受更多的流量)。
优点:动态化路由请求,性能差的节点也有更多机会承载流量。
缺点:可能导致多台性能差的节点积累慢请求。
标签:负载,请求,算法,动态化,均衡,分布式系统,节点,路由 From: https://www.cnblogs.com/kingcode/p/17883944.html