1. 概述
Ribbon实现客户端的负载均衡。Spring cloud Feign已经默认集成Ribbon。这是我开始学习ribbon和fegin迷惑的地方,为什么很多文章都先讲了ribbon,然后直接讲feign,但是没有提到Fegin和ribbon的关系。
本文的主要的内容如下
- 1.ribbon功能说明
- 2.ribbon的6个主要组件:IRule、IPing、ServerList 、ServerListFilter、ServerListUpdater、ILoadBalancer
- 3.ribbon通过属性文件配置ribbon
2. Ribbon功能说明
Ribbon实现客户端的负载均衡,负载均衡器提供很多对http和tcp的行为控制。Spring cloud Feign已经集成Ribbon,所以注解@FeignClient的类,默认实现了ribbon的功能。
Ribbon主要包括如下功能
- 1.支持通过DNS和IP和服务端通信
- 2.可以根据算法从多个服务中选取一个服务进行访问
- 3.通过将客户端和服务器分成几个区域(zone)来建立客户端和服务器之间的关系。客户端尽量访问和自己在相同区域(zone)的服务,减少服务的延迟
- 4.保留服务器的统计信息,ribbon可以实现用于避免高延迟或频繁访问故障的服务器
- 5.保留区域(zone)的统计数据,ribbon可以实现避免可能访问失效的区域(zone)
3. Ribbon主要组件
Ribbon主要包含如下组件:
- 1.IRule
- 2.IPing
- 3.ServerList
- 4.ServerListFilter
- 5.ServerListUpdater
- 6.IClientConfig
- 7.ILoadBalancer
3.1. IRule
功能:根据特定算法中从服务列表中选取一个要访问的服务
常用IRule实现有以下几种:
RoundRobinRule
轮询规则,默认规则。同时也是更高级rules的回退策略
AvailabilityFilteringRule
这个负载均衡器规则,会先过滤掉以下服务:
- a. 由于多次访问故障而处于断路器跳闸状态
- b. 并发的连接数量超过阈值
然后对剩余的服务列表按照RoundRobinRule策略进行访问
WeightedResponseTimeRule
根据平均响应时间计算所有服务的权重,响应时间越快,服务权重越重、被选中的概率越高。刚启动时,如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够,会切换到WeightedResponseTimeRule。
RetryRule
先按照RoundRobinRule的策略获取服务,如果获取服务失败,则在指定时间内会进行重试,获取可用的服务
BestAvailableRule
此负载均衡器会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
RandomRule
随机获取一个服务
3.2. IPing
功能:在后台运行的一个组件,用于检查服务列表是否都活
NIWSDiscoveryPing
不执行真正的ping。如果Discovery Client认为是在线,则程序认为本次心跳成功,服务活着
PingUrl
此组件会使用HttpClient调用服务的一个URL,如果调用成功,则认为本次心跳成功,表示此服务活着。
NoOpPing
永远返回true,即认为服务永远活着
DummyPing
默认实现,默认返回tru