12-ribben-负载均衡原理

当ribben和eureka 放一起看待的时候

ribben的基本原理:

  1. 利用注解@LoadBalanced给restTemplate添加拦截器-LoadBalancerInterceptor
    • request.getURI():获取请求uri,本例中就是 http://user-service/user/8
    • originalUri.getHost():获取uri路径的主机名,其实就是服务id,user-service
    • this.loadBalancer.execute():处理服务id,和用户请求。

  2. 拦截器中通过 LoadBalancerClient 客户端对服务名称进行替换
    • getLoadBalancer(serviceId):根据服务id获取ILoadBalancer,而ILoadBalancer会拿着服务id去eureka中获取服务列表并保存起来。
    • getServer(loadBalancer):利用内置的负载均衡算法,从服务列表中选择一个。本例中,可以看到获取了8082端口的服务

  3. LoadBalancerClient 通过 负载平衡器 ILoadBalancer获得最后的IP端口
  4. ILoadBalancer 是 SpringClientFactory 生产出来的 工厂实际生产的子类是 dynamicServerListLoadBalancer
  5. 获取平衡器以后就选择平衡策略
  6. 选择的方法进去以后可以明显看出是规则类进行实际判断
  7. 以下给出规则类的继承树

至此ribben整体流程如下所示

posted @ 2023-08-09 08:16  356a  阅读(70)  评论(0编辑  收藏  举报