Ribbon负载均衡原理

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个副本

猜你喜欢

转载自blog.csdn.net/wangqiubo2010/article/details/113846368
今日推荐