Ribbon

Ribbon 概述

Ribbon 是客户端负载均衡器;

Ribbon 核心功能

  • 服务发现;
  • 服务选择规则;
  • 服务监听,可以监听服务列表中哪个服务可用,哪个不可用;

Ribbon 与 Eureka 整合

  • Ribbon 天然与 Eureka 无缝整合,引入 spring-cloud-starter-netflix-eureka-client 就引入了 Ribbon;
  • 通过在 RestTemplate 上加 @LoadBalanced 使用 Ribbon 提供的负载均衡功能;
  • 通过 ribbon.eureka.enabled=false 禁止从 Eureka Server 中获取 server list,一般没人这么干;

Ribbon 核心 | IRule

  • IRule 就是配置负载均衡算法的;
  • IRule 通常使用的负载均衡算法有两种:
    • BestAvailableRule;
    • WeightedResponseTimeRule;
IRule 算法实现
IRule 算法 算法描述
RoundRobinRule 轮询规则
RandomRule 随机规则
AvailabilityFilteringRule 可用过滤规则
WeightedResponseTimeRule 根据平均响应时间计算所有服务的权重
RetryRule 遵循 RoundRobinRule 规则处理,但是会对失败的服务进行重试
BestAvailableRule 结合了可用过滤规则和响应时长规则
ZoneAvoidanceRule 符合判断 server 所在区域性能和可用性选择服务器

Ribbon 核心 | IPing

Ribbon 中有 2 个 server list,一个是 allServerList,一个是 upServerList;这两个集合本身可以从 Eureka Server 中获取到,还可以通过 IPing,不断检测服务端是否存活,然后动态修改 2 个集合;

  • IPing 是 Ribbon 保证服务可用的基石;
  • 常见实现:NIWSDDiscoveryPing,PingUrl;
IPing 算法实现
IPing 算法 算法描述
NIWSDiscoveryPing 不执行 Ping 操作,以 Eureka Client 从 Eureka Server 中拿到的 server list 为准
PingUrl 使用 HttpClient 对服务进行 Ping 操作
DummyPing “人性本善”流算法,如果不明确的探测出问题,就返回 true
NoOpPing 永远返回 true

Ribbon 核心 | ServerList

  • ServerList 是 Ribbon 存储的可用服务列表;
  • ServerList 可以手动设置;
  • ServerList 常见的数据来源是 Eureka Server;

Ribbon 参数配置

  • 默认配置定义在: com.netflix.client.config.DefaultClientConfigImpl 中;
  • Ribbon Key 定义在:com.netflix.client.config.CommonClientConfigKey 中;
  • Ribbon 参数分为全局配置和指定客户端配置;
  • 参数格式: .ribbon.=,比如针对客户端 hello-service-provider 的 Ribbon 相关配置,可以定义如下:
hello-service-provider:
  ribbon:
    MaxTotalTimeToPrimeConnections: 3
  • 全局配置举例:
ribbon:
  MaxTotalTimeToPrimeConnections: 3
  • 在全局配置和指定客户端配置同时配置的情况下,指定客户端配置生效;如果都没配置,那么 com.netflix.client.config.DefaultClientConfigImpl 中的配置生效;

你可能感兴趣的:(Ribbon)