Ribbon是Netflix公司开源的一个负载均衡的项目,已经被收录到spring cloud体系里面。本文通过阅读分析ribbon负载均衡部分源码,归纳整理ribbon的七种负载均衡策略。
先看看整理的结果
1
RandomRule
逻辑比较简单,核心是拿到服务的数量,然后得到一个随机服务。
2
RoundRobinRule
初始化一个计数器,通过这个计算器得到这次轮到的服务。如果10次都没找到,就没有服务。
3
RetryRule
在一段时间内,一直轮询,直到找到可用服务。在初始化时,设置了默认的时间为500毫秒,也可以自己修改。
4
WeightedResponseTimeRule
初始化时,启动一个定时器,每隔30秒去统计每个服务的权重。得到权重之后,通过随机数的方式,决定哪个服务被选中。
比如:
3个服务,平均响应时间为:A:100,B:200,C:300毫秒
则A的权重: 600-100 = 500
B的权重:500+600-200 = 900
C的权重:900+600-300 = 1200
取最后一条数据取到1200,则随机1200,
如果随机数在0-500,则选A;
如果随机数在500-900,则选B;
如果随机数在900-1200,则选C;
如果没有服务命中或者权重没有初始化,则取轮询的结果。
5
BestAvailableRule
继承ClientConfigEnabledRoundRobinRule
先根据负载均衡统计结果,过滤掉故障服务,然后选出并发请求最小的服务。
如果无结果,就轮询一个。
依赖负载均衡统计类,如果统计类为空,则轮询一个。
6
AvailabilityFilteringRule
继承PredicateBasedRule
先轮询出一个服务,如果不匹配过滤条件,则继续轮询10次,如果10次之后还未找到,就轮询一个。
条件:排除故障 或者 超过设置的并发阈值的(阈值默认2的31次方减1,可以自定义)。
7
ZoneAvoidanceRule
继承PredicateBasedRule
先过滤掉整个不可用zone(区域)的服务,再过滤故障或者超阈值的服务,然后轮询一个。
本文从spring cloud ribbon源码出发,分析了ribbon的七种负载均衡策略。
—END—
自由,
是因为自己真的有方向。
领取专属 10元无门槛券
私享最新 技术干货