SpringCloud系列之负载均衡Ribbon·7-负载均衡器

2021-04-22  本文已影响0人  那钱有着落吗

前面我们学习了Ribbon的7种内置负载均衡策略,那么大家知道是谁在这中间牵线搭桥,把配置的负载均衡策略“加塞”到一个HTTP请求的调用链路里的吗?这就要讲到Ribbon对RestTemplate的改造。
之前我们搭建了自己的ribbon-consumer,大家都知道Ribbon通过RestTemplate来发起调用请求。可是,RestTemplate分明是spring-web包下的通用类,它诞生的时候Ribbon还不知道在哪儿呢,那Ribbon是如何实现偷天换日,悄悄把自己“加塞”到RestTemplate中去的呢?

@LoadBalanced注解,它会将RestTemplate传送到Ribbon的自动装配类里进行改造。

@LoadBalanced 这个注解一头挂在RestTemplate上,另一头挂在LoadBalancerAutoConfiguration这个类上。它就像连接两个世界的传送门,将所有顶着「LoadBalanced」注解的RestTemplate类,都传入到LoadBalancerAutoConfiguration中。如果要深挖底层的作用机制,大家可以发现这个注解的定义上还有一个@Qualifier注解,可能对Spring比较熟悉的同学就恍然大悟了。@Qualifier注解搭配@Autowired注解做自动装配,可以通过name属性,将指定的Bean装载到指定位置(即使有两个同样类型的Bean,也可以通过Qualifier定义时声明的name做区分)。这里「LoadBalanced」也是借助Qualifier实现了一个给RestTemplate打标签的功能,凡是被打标的RestTemplate都会被传送到AutoConfig中做进一步改造。
 LBAutoConfig 从前一步中传送过来的RestTemplate,会经过LBAutoConfig的装配,将一系列的Interceptor(拦截器)添加到RestTemplate中。拦截器是类似职责链编程模型的结构,我们常见的ServletFilter,权限控制器等,都是类似的模式。Ribbon拦截器会拦截每个网络请求做一番处理,在这个过程中拦截器会找到对应的LoadBalancer对HTTP请求进行接管,接着LoadBalancer就会找到默认或指定的负载均衡策略来对HTTP请求进行转发。
总结Ribbon的作用机制就是,由LoadBalanced在RestTemplate上打标,Ribbon将带有负载均衡能力的拦截器注入标记好的RestTemplate中,以此实现了负载均衡。在稍后的源码阅读章节,将带大家深入研究LoadBalanced注解的作用机制。

image.png image.png image.png

IPing机制

在计划生育实施的初期,效果并不好,因为那时候没有如今各种丰富的娱乐活动,大家下了班都闲着没事干,闲着没事那就只好造人了。后来有个村支书想了个法子,他给每家配了一台电视机,这样一来每家每户晚上就有事情可干了,超生指标立马就降下来了。这说明了一个问题,闲着没事就得要找点事干。
Ribbon也正面临这么个问题,和其它SpringCloud组件相比,Ribbon可谓称得上闲差,因为它的职责相对单一,只应用在负载均衡方面,说明它太闲了,所以这才要给Ribbon找点事儿干。
IPing机制就是SpringCloud发给Ribbon家的电视机,那它放哪些电视节目呢?现在请收看电视节目《撩妹指南》

IPing是一个主动出击撩妹子的机制,他主动判断服务节点的当前状态,决定是否可作为目标节点,只有当前可用的节点才会作为负载均衡器的目标节点。IPing有以下几个撩妹手段:

上一篇下一篇

猜你喜欢

热点阅读