Ribbon 快速上手
Ribbon 是一个负载均衡组件,基于Http和TCP客户端的负载均衡工具,通过spring cloud 封装,面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。有多种负载均衡的策略。不需要,像注册中心之类的需要部署,Ribbon 可以存在每一个spring Cloud 构建的微服务基础设施中,Feign,zuul都集成了Ribbon
负载均衡策略
内置策略
策略类 | 策略 | 描述 | 实现 |
---|---|---|---|
RandomRule | 随机 | 随机调用 service | |
RoundRobinRule | 轮询 | 循环选择 service | |
RetryRule | 重试 | 对选定的负载均衡策略机上重试 | 在一个配置时间段内当选择服务器不成功,则一直尝试 subRule 方式选择一个可用 服务 |
BestAvailableRule | 最低并发 | 选择一个并发请求量最少的服务器 | 逐个考察服务器,如果服务器的断路器打开,则忽略,再选择其他并发连接数最低的服务 |
AvailabilityFiteringRule | 可用过滤 | 过滤一直连接失败的并标记为 circuit tipped 的服务 过滤高并发连接服务器(active connections 超过配置值) | 使用 AvailabilityPredicate 来包含过滤服务器逻辑。 |
WeightedResponseTimeRule | 响应时间加权 | 根据服务器的响应时间分配权重,响应时间越长,权重月底前 | 后台线程,定期从status 中读取响应时间,计算权重。 第一次计算前使用轮训的策略选择服务器 |
ZoneAvoidanceRule | 区域权衡 | 综合判断服务器所在区域的性能和服务器可用性来轮询选择服务器,并且判断一个Zone的运气性能是否可用。自动剔除不可用的 Zone 中的所有服务器 | 使用 ZoneAvoidancePredicate 和 AvailabilityPredicate 来判断是否选择某个服务器,前一个判断判定一个zone 的运行性能是否可用,剔除不可用的zone 的所有服务器,AvailabilityPredicate 则用与过滤掉连接数过多的服务器 |
核心 接口
接口 | 描述 | 默认实现类 |
---|---|---|
IClientConfig | 定义Ribbon 中管理配置接口 | DefaultClientConfigImpl |
IRule | 定义Ribbon 中负载均衡的策略接口 | ZoneAvoidanceRule |
IPing | 定义定期ping 服务检测可用性的接口 | DummyPing |
ServerList<Server> | 定义获取服务列表方法的接口 | ConfigurationBasedServerList |
ServerListFilter<Server> | 定义期望获取服务列表方法接口 | ZonePreferenceServerLsitFilter |
ILoadBalancer | 定义负载均衡选择服务的核心方法的接口 | ZoneAwareLoadBalancer |
ServerListUpDater | 为 DynamicServerListLoadBalancer 定义动态跟新服务列表的接口 | PollingServerListUpdater |
项目实战
nocas 本身就是使用 ribbon 做的负载均衡,只需要简单的配置即可
这里 IRule 是现象的策略,需要什么策略直接 new 即可。其他的地方代码都不需要修改