spring cloud ribbon客户端负载均衡

客户端负载均衡

         spring cloud ribbon是一个基于HTTP和TCP的客户端负载均衡工具,基于NetFlix Ribbon实现。不同于服务端负载均衡硬件列如F5,软件列如Nginx,客户端负载均衡最大的特点服务清单所存储的位置。在客户端负载均衡中,所以客户端截点都维护着自己要访问的服务端清单,在spring cloud架构体系中,可以通过Eureka来获取服务清单。

Riibon调用时序图

负载均衡策略

  • RoundRobinRule: 轮询策略,Ribbon以轮询的方式选择服务器,这个是默认值。所以示例中所启动的两个服务会被循环访问;
  • RandomRule: 随机选择,也就是说Ribbon会随机从服务器列表中选择一个进行访问;
  • BestAvailableRule: 最大可用策略,即先过滤出故障服务器后,选择一个当前并发请求数最小的;
  • WeightedResponseTimeRule: 带有加权的轮询策略,对各个服务器响应时间进行加权处理,然后在采用轮询的方式来获取相应的服务器;
  • AvailabilityFilteringRule: 可用过滤策略,先过滤出故障的或并发请求大于阈值一部分服务实例,然后再以线性轮询的方式从过滤后的实例清单中选出一个;
  • ZoneAvoidanceRule: 区域感知策略,先使用主过滤条件(区域负载器,选择最优区域)对所有实例过滤并返回过滤后的实例清单,依次使用次过滤条件列表中的过滤条件对主过滤条件的结果进行过滤,判断最小过滤数(默认1)和最小过滤百分比(默认0),最后对满足条件的服务器则使用RoundRobinRule(轮询方式)选择一个服务器实例。

重试机制

     由于spring cloud eureka实现的服务治理机制强调CAP原理中的AP,即可靠性与分区容错性,与zookpper不同CP(一致性,容错性)。eureka为了实现更高的服务可用性,牺牲了一定的一致性,在极端情况下宁愿接受故障实例也不要丢掉健康实例。

由于eureka在可用性和一致性的取舍,无论是由于触发了保护机制还是服务剔除延迟,引起服务调用到故障实例的时候,我们还是希望能够增强对这些类容错,所以引入了重试机制。

各项主要参数配置如下(xxx-service指的是具体的服务名

  • hystrix。command.default.execution.isolation.thread.timeoutInMilliseconds:短路器的超时时间需要大于Ribbo的超时时间,不然不会触发重试
  • xxx-service.ribbon.ConnectTimeout: 请求连接的超时时间。
  • xxx-service.ribbon.ReadTimeout:请求处理的超时时间
  • xxx-service.ribbon.OkToRetryOnAllOperations:对所以操作请求都进行重试
  • xxx-service.ribbon.MaxAutoRetriesNextServer:切换实例的重试次数
  • xxx-service.ribbon.MaxAutoRetries:对当前实例重试次数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值