Netflix源码解析之Ribbon:看Spring-cloud怎样使用Ribbon

关注下spring cloud是如何进行客户端负责均衡。 看怎么调用到负载均衡的,怎么定义负载均衡的,然后是怎么实现的?

第一个其实可以不用关心,调用的地方应该很多,找到一个地方来说明怎么调用的即可。 第二个,可以猜下,最主要的应该是一个类似 serviceInstance get(string serviceId)这样的方法吧。 第三个问题,明摆着,使用netflix的ribbon呗。

发起一个调用时,LB对输入的serviceId,选择一个服务实例。

??关键代码看到调用的是一个LoadBalancerClient的choose方法,对一个serviceId,选择一个服务实例。看下LoadBalancerClient是一个接口:

LoadBalancerClient_outline

足够简单,只定义了三个方法,根据一个serviceId,由LB选择一个服务实例。reconstructURI使用Lb选择的serviceinstance信息重新构造访问URI,能想来也就是用服务实例的host和port来加上服务的路径来构造一个真正的刘访问的真正服务地址。

可以看到这个类定义在spring-cloud-commons.jar的package org.springframework.cloud.client.loadbalancer下面,满篇不见ribbon字样。只有loadbalancer,即这是spring-cloud定义的loadbalancer的行为,至于ribbon,只是客户端LB的一种实现。

Ribbon的实现定义在spring-cloud-netflix-core.jar中的org.springframework.cloud.netflix.ribbon包下的RibbonLoadBalancerClient。看下RibbonLoadBalancerClient中choose(String serviceId)方法的实现。

看到,最终调到的是ILoadBalancer的chooseServer方法。即netflix的LB的能力来获取一个服务实例。

 

至于netflix如何提供这个能力的在另外一篇博文中尝试解析下。

?

原创文章。为了维护文章的版本一致、最新、可追溯,转载请注明: 转载自idouba

本文链接地址: Netflix源码解析之Ribbon:看Spring-cloud怎样使用Ribbon


, , , ,

No comments yet.

发表评论