微服务-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

总结

相关推荐
草莓熊Lotso5 小时前
【C++ 基于微服务的即时通讯系统】基建三件套:gflags + gtest + spdlog 源码编译安装与实战入门
linux·网络·数据库·c++·微服务·log4j
叶总没有会5 小时前
Gateway--网关
spring cloud·微服务·gateway
骇客野人15 小时前
微服务多级缓存架构设计
缓存·微服务·架构
骑着蜗牛撵大象32716 小时前
服务下线不再炸:分层关闭、TCP 存活探测与负载均衡排水的落地套路
android·tcp/ip·负载均衡·tcp·高可用·健康检查·优雅关闭
我不是阵雨17 小时前
微服务幂等性深度解剖
微服务·云原生·架构
code_slave(码畜)19 小时前
微服务架构落地:消息队列架构设计(上篇)——异步解耦、削峰填谷,看懂业务事件流转本质
spring boot·spring cloud·微服务·云原生·架构
code_slave(码畜)1 天前
微服务架构落地:消息队列架构设计(下篇)——消息堆积、死信治理与集群监控告警实战
spring boot·spring cloud·微服务·云原生·中间件·架构
Joy T2 天前
从 Nginx 到 Gateway 再到微服务:一次 AI 请求的完整链路
nginx·微服务·gateway·controller·路由转发·ai service·接口错误排查
螺蛳粉 螺蛳粉2 天前
第五篇:Keepalived + LVS 四层负载均衡高可用实战:DR 模式全流程
运维·负载均衡·lvs·keepalived·高可用
数据狐(Datafox)3 天前
淘宝图片搜索 API 落地实战:基于以图搜货搭建跨境电商选品系统
java·大数据·微服务