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只有默认两个实现类,也就意味着它默认只能通过两种方案来选择,一种是随机选择,一种是轮询选择。要做更多的选择需要我们自己编写对应的代码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端