聊聊Ribbon

2020-04-10

Ribbon 是什么

Ribbon 是一个进程内实现负载均衡算法的客户端组件。它提供了以下特性

  • 多种负载均衡策略/可插拔式负载均衡制定
  • 可集成服务发现(Eureka)
  • 支持云原生
  • Built-in failure resiliency (容错)
  • 缓存和批处理

内置负载均衡

负载均衡包含3大组件,Rule,Ping,ServerList 。 Rule 组件根据什么策略决定返回哪台机器。 Ping 后台运行确保哪些机器存活。 ServerList 服务列表,它可以是静态配置的也可以是动态的。

轮询选择(RoundRobinRule)(默认)

轮询策略每次都顺序取一个服务返回,比如有5个 provider,第一次返回第1个,第二次返回第2个,…以此类推。

权重轮询(WeightedResponseTimeRule)

此策略根据服务的响应时间设置权重,响应越长,权重越低。怎么获取权重的呢?一开始使用轮询策略,同时开启一个计时器,每30秒收集一次各个服务的平均响应时间,当信息足够时,给每个服务加上权重,根据权重随机选择返回。

可用性过滤选择(AvailabilityFilteringRule)

这个策略会跳过哪些认为是服务熔断的或者并发连接数高的机器。一般一个实例如果连续三次连接都返回失败它会标记此种状态并保持30秒,如果下一次还是失败则会变成暂时不可用的状态

随机选择 (RandomRule)

从服务列表随机选择一个返回

最少并发数策略(BestAvailableRule)

选择目前请求数最小的服务,除非这个服务在熔断中。

重试策略(RetryRule)

这个策略跟其他策略组合使用,比如跟轮询策略组合,在设定的时间端内选择不成功就用轮询策略直到找到一个可用的返回

自定义负载均衡

自定义负责均衡策略实现 AbstractLoadBalanceRule 类即可。

maven 打单体 jar 遇到的问题