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 参数分为全局配置和指定客户端配置;
  • 参数格式: <client>.ribbon.<key>=<value>,比如针对客户端 hello-service-provider 的 Ribbon 相关配置,可以定义如下:
hello-service-provider:
  ribbon:
    MaxTotalTimeToPrimeConnections: 3
  • 全局配置举例:
ribbon:
  MaxTotalTimeToPrimeConnections: 3
  • 在全局配置和指定客户端配置同时配置的情况下,指定客户端配置生效;如果都没配置,那么 com.netflix.client.config.DefaultClientConfigImpl 中的配置生效;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值