Ribbon原理

286 阅读1分钟

1.Ribbon负载均衡

Ribbon 是 Netflix 公司开源的一款负载均衡组件,负载均衡的行为在客户端发生(客户端行为,将负载均衡的策略绑定到客户端上,客户端会维护一份服务提供者列表,通过客户端负载均衡策略分发到不同的服务提供者)。

Feign 底层集成了 Ribbon,不用额外的配置,开箱即用

2.如何获取注册中心服务实例

  1. 负载均衡客户端在初始化时向 Nacos 注册中心获取服务注册列表信息
  2. 根据不同的 IPing 实现,向获取到的服务列表 串行发送 ping,以此来判断服务的可用性。没错,就是串行,如果你的实例很多,可以 考虑重写 ping 这一块的逻辑
  3. 如果服务的可用性 发生了改变或者被人为下线,那么重新拉取或更新服务列表
  4. 当负载均衡客户端有了这些服务注册类列表,自然就可以进行 IRule 负载均衡策略

3.服务列表定时维护

针对于服务列表的维护,在 Ribbon 中有两种方式,都是通过定时任务的形式维护客户端列表缓存

  1. 使用 IPing 的实现类 PingUrl,每隔 10 秒会去 Ping 服务地址,如果返回状态不是 200,那么默认该实例下线
  2. Ribbon 客户端内置的扫描,默认每隔 30 秒去拉取 Nacos注册中心的服务实例,如果已下线实例会在客户端缓存中剔除

image.png