首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

spring cloud源码分析——ribbon负载均衡策略

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—

自由,

是因为自己真的有方向。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181001G0OJME00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券