微服务-Ribbon负载均衡

文章目录

负载均衡原理

流程

原理

@LoadBalanced

标记RestTemplate发起的http请求要被Ribbon进行拦截和处理

源码分析
  1. ctrl+shift+N搜索LoadBalancerInterceptor,进入。发现实现了ClientHttpRequestInterceptor(客户端Http请求拦截器)的intercept方法

    拦截方法
  2. 打一个断点,启动order-application,浏览器发送请求http://localhost:8080/order/104
  3. 在该方法中对http请求进行拦截,获取到了服务名serviceName = "userservice",然后进入到了RibbonLoadBalancerClient的excute方法中。
  4. 进入到excute方法,发现调用了该类的一个重载方法excute
  5. step into到这个excute方法
    发现serviceId = "userservice",通过serviceId获取到ILoadBalancer,点开ILoadBalancer,发现里面存储了两个userservice,即成功拉取了2个userservice。获取的loadBalancer对象的名称为DynamicServerListLoadBalancer,动态服务列表负载均衡器。
  6. 进入到getServer方法,下一步从loadBalancer的2个userservice中选择1个
    再进入到chooseServer方法里,最终调用了父类的chooseServer方法

    进入,最终调用了rule.choose方法
    查看这个rule,发现是一个IRule类型,这是一个接口,ctrl+h查看实现该接口的类有哪些
    发现有好几种规则,RoundRobin,Random等,正是通过这几种规则从多个userservice中选择出一个合适的userservice。
负载均衡流程

负载均衡策略

通过定义IRule的实现可以修改负载均衡的策略

  1. 方式一,直接在配置类中定义。针对所有微服务而言。
java 复制代码
@Bean
public IRule randomRule(){    
	return new RandomRule();
}
  1. 方式二,在application.yml中定义。针对某个微服务。
yml 复制代码
userservice:  
  ribbon:    
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 

饥饿加载

Ribbon默认采用的是懒加载,即第一次访问Ribbon服务的时候才会加载LoadBalanceClient,请求时间会很长;

而饥饿加载在项目启动时加载

yml 复制代码
ribbon:  
  eager-load:    
    enabled: true # 开启饥饿加载     
    clients: userservice # 指定对userservice这个服务饥饿加载
  1. 懒加载,第一次访问是409ms,后续10ms
  2. 饥饿加载,第一次访问是236ms,后续10ms

总结

相关推荐
fanly111 天前
Surging AI Agent 完整产品介绍
微服务·microservice
蝎子莱莱爱打怪8 天前
XZLL-IM干货系列 04|Netty 长连接实战:Pipeline 怎么排、心跳怎么跳、连接怎么管
后端·微服务·面试
SamDeepThinking9 天前
Java微服务练习方式
java·后端·微服务
米丘12 天前
微前端之 Web Components 完全指南
微服务·html
霸道流氓气质14 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
霸道流氓气质15 天前
Spring Boot 微服务性能优化完全指南
spring boot·微服务·性能优化
地瓜伯伯15 天前
从MESI缓存一致性协议讲透synchronized的底层
java·spring boot·spring·spring cloud·微服务·springcloud
Devin~Y15 天前
大厂 Java 面试实录:从音视频内容社区到 AI RAG 的全链路技术设计
java·spring boot·redis·spring cloud·微服务·kafka·音视频
递归尽头是星辰15 天前
AI 访问数据仓库:从直连到微服务化
数据仓库·人工智能·微服务·dataagent·ai数据治理
就改了15 天前
Windows 环境 SkyWalking 完整实操教程
windows·微服务·skywalking