springcloud入门实战:Feign+Ribbon实现客户端负载均衡

演示过程大致如下:

(1)demo-provider模块在增加Spring Cloud Ribbon依赖后,Feign+Ribbon的客户端负载均衡将自动生效。演示还是使用“

/api/call/uaa/user/detail/v2”REST接口,这一次其将以负载均衡的方式访问uaa-provider的“/api/user/detail/v1”REST接口。

(2)启动两个uaa-provider服务提供者:可以在IDEA调试环境(localhost)中启动一个,在另一台主机(如虚拟机)上启动一个。

在Eureka上查看uaa-provider实例清单,确保两个uaa-provider提供者实例都成功启动。

(3)在IDEA调试环境启动demo-provider实例,在demo-provider的swagger-ui界面上发起对uaa-provider服务提供者的RPC调用。这里为了演示客户端的负载均衡,可以在提供者uaa-provider的swagger-ui界面上多次访问“

/api/call/uaa/user/detail/v2”REST接口。

(4)在demo-provider重要的源码处打上断点,通过断点可以查看每次RPC实际访问的目标提供者uaa-provider的实例。

断点之一设置在ribbon-loadbalancer组件LoadBalancerContext类的getServerFromLoadBalancer方法的某行代码上(见图2-14),该方法的功能是获取目标Provider实例。每次RPC请求调用到来时,可以查看Ribbon负载均衡计算出来的Provider,它放置在类型为Server的svc变量中。

springcloud入门实战:Feign+Ribbon实现客户端负载均衡

图2-14 Ribbon计算出来的Provider值示意图

断点之二可以设置在ribbon-loadbalancer组件的

AbstractLoadBalancerAwareClient类的方法executeWithLoadBalancer的某行代码上(见图2-15),可以查看到每次RPC调用的最终URL地址保存在finalUri变量中。

springcloud入门实战:Feign+Ribbon实现客户端负载均衡

图2-15 Ribbon计算出来的最终URL地址值示意图

多次执行并观察断点处的变量值可以发现uaa-provider的两个实例轮番被RPC访问到。

本小节的演示过程可参见疯狂创客圈社群网盘小视频:“SpringCloud实战视频:Feign+Ribbon实现客户端负载均衡.mp4”。

Spring Cloud Ribbon的负载均衡策略

==========================

Ribbon负载均衡的原理是:从Eureka Client实例获取Provider服务列表清单,并且定期通过IPing实例判断清单中Provider服务实例的可用性。每次RPC调用到来时,在Provider服务列表清单中根据IRule策略类的Bean计算出每次RPC要访问的最终Provider。

Ribbon内部有一个负载均衡器接口ILoadBalance,定义了添加Provider、获取所有的Provider列表、获取可用的Provider列表等基础的操作。该接口的核心实现类

DynamicServerListLoadBalancer会通过EurekaClient(实现类为DiscoveryClient)获取Provider清单,并且通过IPing实例定期(如每10秒)向每个Provider实例发送“ping”,并且根据Provider是否有响应来判断该Provider实例是否可用。如果该Provider的可用性发生了改变,或者Provider清单中的数量和之前的不一致,就从注册中心更新或者重新拉取Provider服务实例清单。

每次RPC请求到来时,由Ribbon的IRule负载均衡策略接口的某个实现类来进行负载均衡。主要的负载均衡策略实现类如下:

1.随机策略(RandomRule)

RandomRule实现类从Provider服务列表清单中随机选择一个Provider服务实例,作为RPC请求的目标Provider。

2.线性轮询策略(RoundRobinRule)

RoundRobinRule和Random

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值