SpringBoot3.1.5对应新版本SpringCloud开发(2)-Eureka的负载均衡

Eureka的负载均衡

负载均衡原理

  • 负载均衡流程

老版本流程介绍

当order-servic发起的请求进入Ribbon后会被LoadBalancerInterceptor负载均衡拦截器拦截,拦截器获取到请求中的服务名称,交给RibbonLoadBanlancerCient,然后RibbonLoadBanlancerCient会将服务名称当作服务id交给DynamicServerListLoadBanlancer,此时DynamicServerListLoadBanlancer就回去通过eureka-server获取到对应的服务列表,eureka-server会返回真实的服务地址给DynamicServerListLoadBanlancer,然后DynamicServerListLoadBanlancer会通过IRule的实现接口来基于规则选择一种方式获取到返回的真实地址列表中的一个服务返回给RibbonLoadBanlancerCient,然后RibbonLoadBanlancerCient就会通过获取到的真实ip和端口取替换掉原来的服务名称,去发起这个请求获取到对应的数据返回给order-servic

新版本流程介绍

新版本eureka对于netflix包只保留eureka本身,其它组件全部移除,并给出了推荐的替代品。

Netflix 推荐替代品 说明
Hystrix Resilience4j Hystrix自己也推荐你使用它代替自己
Hystrix Dashboard / Turbine Micrometer + Monitoring System 说白了,监控这件事交给更专业的组件去做
Ribbon Spring Cloud Loadbalancer 忍不住了,Spring终究亲自出手
Zuul 1 Spring Cloud Gateway 忍不住了,Spring终究亲自出手
Archaius 1 Spring Boot外部化配置 + Spring Cloud配置 比Netflix实现的更好、更强大

其中,Ribbon被Spring Cloud Loadbalancer替代了,所以新版本的流程将不再通过IRule来选择地址了。

当order-servic发起的请求进入Loadbalancer后会被LoadBalancerInterceptor负载均衡拦截器拦截,拦截器获取到请求中的服务名称,交给LoadBalancerClient,LoadBalancerClient就去通过eureka-server获取到对应的服务列表,并且通过ReactiveLoadBalancer来选择一个并且返回对应的真实地址,然后LoadBalancerClient就会通过获取到的真实ip和端口取替换掉原来的服务名称,去发起这个请求获取到对应的数据返回给order-servic。

需要注意的是,默认ReactiveLoadBalancer只有默认两个实现类,也就意味着它默认只能通过两种方案来选择,一种是随机选择,一种是轮询选择。要做更多的选择需要我们自己编写对应的代码。

相关推荐
怎么比啊都是大神14 分钟前
关于==null、isEmpty()和StrUtil.isBlank()
java
唐青枫17 分钟前
Java Neo4j 实战指南:从图模型、Cypher 到 Spring Boot 关系查询
java
观远数据22 分钟前
从离线开发到实时同步:DataFlow如何支撑企业级数据治理闭环
java·windows·microsoft·excel
今天AI了吗1 小时前
Hermes Agent 搭建全流程:从本机试跑到可持续运行的个人 AI Agent
java·人工智能·python·学习·embedding
春卷同学2 小时前
032-关系型数据库在记账应用中的建模与查询优化
java·jvm·数据库
不平衡的叉叉树2 小时前
Springboot+Mockito简单使用单元测试
java·spring boot·单元测试
空中湖2 小时前
Spring AI 多模型接入实战:OpenAI、Ollama、通义千问切换只需改配置
java·人工智能·spring
tianyatest2 小时前
表格分类统计及排序
java·excel·暖通
万亿少女的梦1682 小时前
基于Spring Boot与MySQL的乡镇群众服务系统设计与实现
java·spring boot·mysql·权限管理·前后端分离
thefool1122663 小时前
Java 面向对象
java