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