关于负载均衡这个概念在上一篇文章中有所提到,在消费者远程调用之前有一个重要的环节就是负载均衡,那么为什么要进行负载均衡呢?其原理及实现流程如何?
其实 Ribbon 负载均衡可以认为是一种策略,也可以说是某种规则,当消费者发起请求时,就会被负载均衡拦截器给拦截到,然后获取到请求中的 id,再按照某种规则选择某个服务,继而修改请求 url,再次发起请求,这时候才获取到提供者的服务;
本篇文章主要介绍负载均衡的原理及详细的实现流程,然后简单介绍一下什么是饥饿加载,从而彻底明白实现的过程!!!
这里还是以源码的形式来看一下具体的实现流程,如下图所示:
总之,当消费者发起请求后,将会有一个拦截器进行拦截, 拦截到之后将将这个请求交给 RibbonLoadBalancerClient, 获取到 url 中的服务 id,如上面的 consumerservice,根据 DynamicServerListLoadBalancer 拉取到服务列表后开始进行负载均衡,基于 IRule 根据一种规则选择一条服务, 如轮循规则选中一个 8081 的服务, 将此 url 替代消费者发起的请求 url, 最后再发送到服务提供者, 请求到服务提供者的列表中的 8081 这个服务.
Ribbon 默认的是采用懒加载,也就是说第一次访问的时候才会去创建 LoadBalancerClient,请求的时间也会比较长,而饥饿加载可以在项目启动的时创建,从而降低第一次访问的耗时,配置如下:
在服务消费者(consumer - service)的 application.yml 文件中配置;