Ribbon负载均衡
负载均衡流程
-
-
ribbon发送给eureka-server注册中心拉取userservice
-
eureka-service返回user-service服务列表给Ribbon
-
负载均衡原理
源码阅读
-
从RestTemplate所发起的请求要被Ribbon进行拦截处理
-
LoadBalancerInterceptor接口实现ClientHttpRequestInterceptor,CHRI的intercept方法拦截由客户端发起的请求,LoadBalancerInterceptor重写了intercept方法,获取原始URI路径,通过URI的gethost方法获取服务的名字,并根据服务名称调用了RibbonLoadBalancer的excute方法,在excute方法中DynamicServerListLoadBalancer使用getServer方法完成了服务列表
Server
的拉取 -
继续向下追踪getServer进入 ZoneAwareLoadBalancer的chooseServer方法,内部调用其父类BaseLoadBalancer的chooseServer,在其中有rule.choose方法,rule就代表负载均衡的规则,
-
rule是IRule接口类型,决定了负载均衡的策略,IRule实现类如下:RandomRule代表随机、RoudRobinRule代表轮询负载均衡,默认的负载均衡是ZoneAvoidanceRule
-
-
我们可以负载均衡获取到真实的服务地址8081,代替原来的服务名称发起真实请求
-
-
RibbonLoadBanlancerClient拉取请求中的服务id给DynamicServeriListLoadBalancer
-
DynamicServeriListLoadBalancer去注册中线拉取userService
-
注册中心返回服务列表给DynamicServiListLoadBalancer
-
DSLB找IRule接口,根据规则进行对服务列表进行负载均衡
-
IRlue选择某个服务发从给RibbonLoadBanlancerClient
-
Ribbon负载均衡的规则是IRule接口实现来定义的,每个子接口都是一种规则
默认负载均衡规则是ZoneAvoidanceRule:
以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架。而后对Zone内的多个服务做轮询,服务消费者优先选择在同一个Zone的服务再做轮询RoundRobinRule
常见的负载均衡策略
调整负载均衡策略
通过IRule实现可以修改负载均衡规则
1、通过代码定义一个新的IRule - 全局配置
全局配置范围:无论哪个服务提供都会进行此规则的负载均衡
在配置类OrderApplication定义一个新的IRule
@Bean public IRule randomRule(){ return new RandomRule(); }
2、配置文件方式 - 单独配置
单独配置范围:不同服务配置不同规则
在Order-service的applicatioon.yml文件中,添加新的配置也可以修改规则
userservice: #指定要配置负载均衡的服务 ribbon: #Ribbond负载均衡的规则 NFLoadBalancerRuleClassName:com.netfile.loadbalancer.RandomRule #负载均衡规则
Ribbon饥饿加载
Ribbon默认采用懒加载,第一次访问时才会去创建LoadBalanceClient,请求的时间会很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时
懒加载 - 默认
第一次访问时才会去创建LoadBalanceClient,请求的时间会很长
饥饿加载 - 对指定的服务做饥饿加载
在项目启动的时候就去创建了,降低第一次访问的耗时
ribbon: eager-load: enablee: true #开启饥饿加载 clients: #并不是全局统一配置:对如下服务饥饿加载 - userservice - orderservice
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律