Ribbon负载均衡原理

本文介绍了Ribbon结合restTemplate实现负载均衡的原理。LoadBalancerClient执行负载均衡,使用IRule选择服务并由IPing定时更新服务列表。restTemplate通过@LoadBalanced注入LoadBalancerInterceptor,拦截请求并选择服务地址,再进行远程调用。代码配置包括RestConfig配置restTemplate,RibbonService调用服务,RibbonControl暴露接口,实现轮询调用多个副本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ribbon + restTemplate相结合实现负载均衡,具体原理图详见以下截图:

  • LoadBalancerClient 类执行具体的负载均衡,其继承于 LoadBalancerBase。
  • LoadBalancerInterceptor 中注入了 LoadBalancerClient 对象,LoadBalancerClient执行具体的负载均衡,其执行原理为:根据负载规则IRule选择具体的服务,并且IPing会每隔10S向Eureka Client请求同步一次服务列表且检查服务健康状况。
  • restTemplate通过@LoadBalanced的修饰符将LoadBalancerInterceptor 注入到了restTemplate对象中。
  • restTemplate拦截器中注入 LoadBalancerInterceptor 对象,当用户http请求到达时 LoadBalancerInterceptor 对象对齐进行拦截处理,选择具体的请求服务路径,然后restTemplate执行远程服务调用。
  • restTemplate进行rest远程请求的原理详见restTemplate详解,其实质上封装了http请求,默认为HttpUrlConnection,可选Apache的httpClient、Okhttp等。
  • 综上所述,restTemplate的作用即是执行远程服务调用,而LoadBalancerClient作用即选择具体的服务地址来执行负载均衡;在restTemplate进行远程服务调用前因注入了拦截器LoadBalancerInterceptor对http进行了拦截处理,拦截后LoadBalancerClient获取IRule规则选择 IPing维护的本地缓存的服务地址,并将地址返回给restTemplate;restTemplate根据服务地址则执行远程请求调用。
  • ribbon具体实现的代码如下:
    1、RestConfig配置 restTemplate。
     


  • 2、RibbonService,则通过restTempate调用具体的服务,其中eureka-hi为具体的服务名称,而其存在多个副本



    3、RibbonControl对外曝露一个借口。




    4、如果eureka-hi服务存在两个副本端口号分别为 8771、8772,如果访问 http:/localhost:8764/hi,则会轮询调用eureka-hi的2个副本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值