Ribbon

本文深入探讨了Ribbon负载均衡的工作流程,从RestTemplate请求到ZoneAwareLoadBalancer的选择策略,再到具体的负载均衡策略如随机、轮询及权重策略。特别介绍了大转盘算法在权重策略中的应用,并讨论了Ribbon调用失败的重试机制。

通过RestTemplate发送请求-》

被负载均衡拦截器拦截-》

通过RibbonClientAutoConfiguration自动装配的ILoadBalancer的实现类ZoneAwareLoadBalancer(负载均衡器)实现的选择策略选择服务实例-》

向此实例发送请求

----------------------------

负载均衡器:

BaseLoadBalancer:轮询-线性负载均衡,缺陷:没有区域Zone的概念,所有的实例同出一个defaultZone,在多区域部署的环境下会产生跨区域访问的问题。跨区域访问应该作为本区域相关实例出现故障时的备用选项,而不应该在平时就放任跨区域访问带来的延迟

ZoneAwareLoadBalancer:每个区域都有各自的负载均衡器,它负责维护各自区域的实例清单。实现区域亲和策略,将处于不同机房的实例配置成不同区域值,实现跨区域容错机制:eureka.instance.metadataMap.zone=shanghai

当请求调用某服务时,ZoneAwareLoadBalancer会根据区域无效策略过滤掉不符合的Zone(故障率[断路器断开次数]、平均负载 等),然后使用轮询策略选择一个Zone,采用此Zone的负载均衡器执行选择服务实例的策略

----------------------------

负载均衡策略:

随机策略、轮询策略

权重策略:对轮询策略的扩展,根据实例运行状况(平均响应时间)计算权重,根据权重挑选实例,平均响应时间越小的实例被选中的几率越大

区域无效策略:过滤掉不符合的Zone(故障率[断路器断开次数]、平均负载 等)

权重策略实现大转盘算法实例

管理端配置

实例ABCD
平均响应时间104080100

落盘算法逻辑:

总平均响应时间:10+40+80+100=230

A落盘区间:[0,230-10) -> [0,220)

B落盘区间:[220,220+(230-40)) -> [220,410)

C落盘区间:[410,410+(230-80)) -> [410,560)

D落盘区间:[560,560+(230-100)] -> [560,690]

-------------------------------------

Ribbon调用失败重试

eureka不会立即剔除故障实例,导致ribbon调用故障实例时出错,可设置当前实例重试次数、更换实例重试次数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值