Spring Cloud的前世今生

张开发
2026/4/16 14:19:42 15 分钟阅读

分享文章

Spring Cloud的前世今生
从用户请求开始Spring Cloud 全组件详解含演进历程、方案对比、替换原因本文严格按照用户请求的完整流转链路拆解组件完整覆盖「请求入口→寻址→配置→调用→负载均衡→流量防护→事务保障→链路追踪→日志监控」全流程同时讲清每一个组件的核心作用、前世方案、今生主流、替换根因、核心特点。一、Spring Cloud 整体演进背景Spring Cloud 不是单一框架而是一套微服务规范的组件合集整体分为两大时代所有组件的迭代替换都围绕这个核心背景展开初代 Netflix 时代2014-2019以 Netflix 开源的一整套组件为核心是早期微服务的事实标准2018年起 Netflix 陆续宣布旗下核心组件进入停更维护模式不再迭代新功能仅修复致命bug。现代主流时代2019-至今形成「Spring 官方原生迭代 Spring Cloud Alibaba 开源补位」的双主线格局国内生产环境90%以上采用 Spring Cloud Alibaba 生态核心解决了初代组件停更、性能不足、功能单一、运维复杂的痛点。二、用户请求全链路组件详解按请求流转顺序链路第一步用户请求入口 → 网关层核心作用所有用户请求的唯一入口微服务的「大门」负责路由转发、鉴权、限流、跨域、日志、协议转换等统一前置处理。前世初代方案 ZuulNetflix版本迭代Zuul 1.x → Zuul 2.x核心特点Zuul 1.x 基于 Servlet 同步阻塞IO模型开发简单完美适配 Spring MVC 早期生态支持前置/后置/路由/错误4类过滤器可自定义扩展被淘汰的核心原因同步阻塞模型存在致命性能瓶颈高并发下线程池极易打满吞吐量极低线程在等 IO等待服务响应时什么都不干CPU 空闲但线程被占着。. 不支持长连接、流式、WebSocket 等高阶场景、Servlet 3.1 之前对异步支持很差、WebSocket、推送、SSE 几乎没法玩、无法满足现代网关需求Netflix 想救 Zuul于是重写 Zuul 2.x基于 Netty 异步非阻塞性能。目标是 Zuul 1.x 的几倍结果开源一拖再拖、发布后与 Spring Cloud 生态几乎不兼容、配置复杂、文档极少、社区没人跟进、公司不敢上生产官方停止迭代无新功能更新bug修复停滞今生当前主流方案 Spring Cloud GatewaySpring Cloud Gateway 由 Route、Predicate、Filter 三大核心组件构成底层基于 WebFlux Netty 实现异步非阻塞主要功能包括路由转发、负载均衡、统一鉴权、限流熔断、灰度发布、日志监控、跨域、长连接支持等是微服务架构的统一流量入口。核心特点基于 Spring WebFlux Netty 异步非阻塞响应式模型同等资源下吞吐量是 Zuul 1.x 的3-5倍性能碾压功能全面内置「路由断言Predicate 过滤器Filter」双核心机制原生支持动态路由、限流熔断、权重路由、黑白名单、SSL、WebSocket生态无缝适配与 Nacos、Sentinel、LoadBalancer 等全家桶组件完美整合开发成本极低持续迭代Spring 官方主力维护版本更新快适配最新 Spring Boot/Spring Cloud 版本客户端请求 ↓Netty接收连接Reactor异步非阻塞 ↓DispatcherHandlerWebFlux核心分发器 ↓RoutePredicateHandlerMapping↓ ┌─────────────────────────────────────┐ │ 遍历所有Route│ │ 对每个Route执行Predicate断言 │ → 不匹配 → 跳过 └─────────────────────────────────────┘ ↓ 匹配成功 确定目标Route拿到URI过滤器链 ↓ 构建Filter执行链 【GlobalFilter全局过滤器】【GatewayFilter路由过滤器】 按Order排序 ↓ 执行 前置过滤Pre逻辑 如鉴权、限流、请求头修改、日志 ↓Netty路由转发 ↓ 若 lb://则走LoadBalancer选取服务实例 ↓ 发送请求到微服务 ↓ 微服务返回响应 ↓ 执行 后置过滤Post逻辑 如修改响应头、统一返回格式、耗时统计 ↓ 返回响应给客户端Netty 是什么Netty 是一个基于 NIO 的、高性能、异步非阻塞的网络通信框架。 写高性能网络服务的神器专门用来做服务器、网关、通信中间件。BIO同步阻塞 IO一个连接占一个线程连接一多线程爆炸服务器直接卡死。Netty 是一个基于 Java NIO 的高性能异步非阻塞网络通信框架封装了复杂的 NIO 操作提供高效、稳定的网络编程能力。具有高吞吐、低延迟、可靠性强等特点广泛用于网关、RPC、消息队列等中间件底层。Spring Cloud Gateway 就是基于 Netty 实现的高性能网关Dubbo、RocketMQ、Elasticsearch、gRPC、Gateway 底层全是它。传统MVC与Spring WebFlux传统 MVCServlet 模型一个请求 → 占用一个线程线程全程阻塞等数据库、等远程接口、等响应线程不干活也占着高并发 → 线程不够用 → 服务卡死特点线程是稀缺资源阻塞就是浪费。响应式 WebFlux一个线程能同时 handle 成千上万个请求请求来了 → 注册回调 → 线程去干别的等数据回来了 → 再找个线程继续处理全程不阻塞、不等待特点CPU 一直在干活不浪费资源。响应式的核心思想3 个关键点异步非阻塞不阻塞线程IO 等待时线程可以处理别的请求。事件驱动像 “消息通知” 一样数据准备好了 → 通知处理而不是傻傻等着。背压Backpressure消费者处理不过来时可以告诉生产者别发太快我扛不住链路第二步路由寻址 → 服务注册与发现中心核心作用微服务的「通讯录」网关转发请求、服务间调用时通过注册中心获取目标服务的IP、端口、健康状态核心能力是服务注册、服务发现、健康检查、元数据管理。前世初代方案 EurekaNetflix推出背景Netflix 开源的服务注册发现组件初代 Spring Cloud 核心标配核心特点纯AP架构CAP定理优先保证可用性和分区容错性牺牲强一致性网络抖动时不会误删服务实例自带自我保护机制15分钟内超过85%的实例心跳异常时保留所有实例防止网络分区导致的服务误剔除去中心化集群节点平等无主从任意节点宕机不影响集群运行被替代的核心原因致命问题Eureka 2.0 开发计划流产官方宣布1.x进入停更维护模式不再更新新功能功能极度单一仅支持服务注册发现不支持配置中心、权重路由、灰度发布等生产必备能力需额外搭配多个组件架构复杂度高性能瓶颈单节点支撑的服务实例数有限大规模集群下性能衰减明显运维门槛高无中文控制台不符合国内企业使用习惯今生当前主流方案 NacosSpring Cloud Alibaba阿里开源推出背景阿里2018年开源2019年正式纳入 Spring Cloud Alibaba 生态完美补位 Eureka 停更空白是国内微服务生态的绝对主流注册中心核心特点双模式灵活切换同时支持AP高可用普通服务调用和CP强一致性分布式锁/配置推送模式而 Eureka 仅支持AP一站式能力既是注册中心也是配置中心一套集群搞定服务治理配置管理大幅降低架构复杂度和运维成本生产级功能全覆盖原生支持权重路由、灰度发布、健康检查、流量控制、元数据管理、集群同步完全覆盖生产场景性能强悍单节点可支撑10万服务实例集群水平扩展能力远超 Eureka易用性拉满自带中文可视化控制台运维门槛极低与 Spring Cloud 全生态无缝集成持续迭代阿里主力维护社区活跃经过双11万亿级流量考验稳定性极强CAP 理论一、CAP 是什么分布式系统三大核心指标三者不可同时满足最多三选二C 一致性所有节点数据时刻一致读写均为最新值A 可用性服务持续可用每次请求都正常响应P 分区容忍性节点间网络中断时系统仍可正常运行二、核心结论只能选择 CP 或 APCA 架构在分布式场景中不存在。三、为什么必须选 P因为网络不可靠网络分区必然发生机房光纤断了、交换机故障、防火墙策略异常、跨区域网络抖动、云厂商网络波动。若放弃 P一旦网络异常系统直接瘫痪无法满足分布式基本要求因此P 为必选项只能在 C 和 A 之间取舍。链路第三步服务启动运行时配置 → 配置中心核心作用微服务的「配置管家」统一管理所有服务的配置文件解决分布式环境下配置分散、修改配置需重启服务的痛点支持多环境隔离、动态刷新、版本管理、灰度发布。前世初代方案 Spring Cloud Config Spring Cloud Bus推出背景Spring 官方原生配置中心方案需配合 Git/SVN 存储配置配合 Spring Cloud Bus基于 RabbitMQ/Kafka实现配置动态刷新核心特点基于 Git 存储配置天然支持版本管理、审计追溯与 Spring 生态原生适配被替代的核心原因架构复杂、依赖过多必须依赖 Git 存储必须配合 Bus MQ 才能实现动态刷新一套配置中心需要至少3个组件部署运维成本极高动态刷新能力弱原生不支持配置实时推送需手动触发或配合 Bus 广播延迟高、体验差功能缺失不支持灰度发布、权限控制、配置加密、多租户等生产必备能力需大量二次开发无原生可视化控制台配置管理需基于 Git 操作运维门槛高今生当前主流方案 Nacos ConfigSpring Cloud Alibaba推出背景Nacos 内置的配置中心模块与 Nacos 注册中心共用一套集群一套部署搞定两大核心能力核心特点架构极简与注册中心共用集群无需额外部署组件运维成本极低原生实时动态刷新配置修改后毫秒级推送到所有服务实例无需重启服务无需额外配合消息总线生产级功能全覆盖内置多环境隔离、版本管理、灰度发布、配置加密、权限控制、一键回滚、监听查询易用性拉满自带中文管理界面配置修改、查询、回滚一键操作无缝迁移注解与 Spring Cloud Config 几乎完全兼容老项目迁移成本极低链路第四步服务间远程调用 → 服务调用组件核心作用网关转发到上游服务后服务之间的跨节点调用比如订单服务调用用户/商品服务让开发者像调用本地方法一样调用远程 HTTP 服务无需手动封装请求代码。前世初代方案 FeignNetflix推出背景Netflix 开源的声明式 HTTP 客户端初代 Spring Cloud 标配服务调用组件核心特点基于注解定义接口无需手动封装 HTTP 请求原生整合 Ribbon 负载均衡、Hystrix 熔断降级开箱即用被替代的核心原因Netflix 宣布 Feign 进入停更维护模式不再更新新功能原生不支持 Spring MVC 注解需使用 Feign 自带注解与 Spring 生态开发体验割裂功能单一不支持响应式编程、异步调用无法适配 Spring WebFlux 新生态今生当前主流方案 OpenFeignSpring 官方推出背景Spring 官方在 Netflix Feign 基础上二次开发的组件完全兼容 Spring 生态是目前官方唯一推荐的服务调用组件核心特点完美适配 Spring MVC 注解可直接使用 GetMapping、PostMapping 等常用注解定义接口零学习成本与 Spring Boot 开发体验完全一致全生态适配原生整合 LoadBalancer 负载均衡、Sentinel 熔断降级、Nacos 服务发现开箱即用功能全面增强支持超时配置、重试机制、请求/响应拦截器、日志打印、异步调用、响应式编程完全覆盖生产场景持续迭代Spring 官方主力维护适配最新 Spring Boot/Spring Cloud 版本链路第五步流量分发 → 客户端负载均衡组件核心作用当一个服务有多个实例时决定请求分发到哪个实例实现流量均匀分发提升系统可用性和吞吐量。Spring Cloud 体系内均为客户端负载均衡负载逻辑在消费者本地执行无需经过中间代理节点。前世初代方案 RibbonNetflix推出背景Netflix 开源的客户端负载均衡组件初代 Spring Cloud 标配与 Feign、Eureka 无缝整合核心特点内置轮询、随机、权重、响应时间加权、最小连接数等多种策略自带重试容错机制客户端负载均衡的经典实现被替代的核心原因Netflix 宣布 Ribbon 进入停更维护模式不再更新新功能不支持响应式编程无法适配 Spring WebFlux、Spring Cloud Gateway 等新一代响应式组件代码老旧、架构臃肿Spring 官方推出了更轻量、更适配新生态的替代方案今生当前主流方案 Spring Cloud LoadBalancerSpring 官方推出背景Spring 官方自研的新一代客户端负载均衡组件专门替代 RibbonSpring Cloud 2020版本之后的默认负载均衡组件核心特点轻量极简代码量远小于 Ribbon无冗余依赖启动更快、资源占用更低全生态适配完美适配 OpenFeign、Gateway、Nacos 等全生态组件原生支持响应式编程适配 Spring WebFlux 响应式生态完美兼容 Gateway 等新一代组件这是 Ribbon 完全不具备的能力扩展灵活内置轮询、随机两种基础策略支持自定义负载均衡策略可与 Nacos 权重路由无缝整合链路第六步流量防护 → 熔断限流降级组件核心作用微服务的「保险丝」防止服务故障引发级联雪崩核心能力是流量控制、熔断降级、系统保护保障高并发下系统的稳定性。前世初代方案 HystrixNetflix推出背景Netflix 开源的熔断器组件「断路器模式」的经典实现初代 Spring Cloud 流量防护标配核心特点经典断路器机制失败率达标自动熔断支持线程池/信号量隔离、降级、超时控制从根源上防止故障扩散被淘汰的核心原因致命问题Netflix 2018年正式宣布 Hystrix 停止开发进入维护模式不再更新新功能功能极度单一仅支持熔断降级不支持限流、热点参数限流、系统负载保护、集群限流等生产必备能力需额外搭配多个组件性能损耗大线程池隔离模式开销大高并发下性能衰减明显运维成本高无原生监控界面需配合 Hystrix Dashboard Turbine 实现集群监控架构复杂今生当前主流方案 SentinelSpring Cloud Alibaba阿里开源推出背景阿里2018年开源2019年纳入 Spring Cloud Alibaba 生态国内微服务流量防护的绝对主流完美补位 Hystrix 停更空白核心特点全场景流量防护不仅支持熔断降级还原生支持流量控制、热点参数限流、系统负载保护、黑白名单、集群限流一套组件搞定所有流量防护需求轻量高性能核心无冗余依赖单节点QPS可达10万性能损耗极低远超 Hystrix易用性极强注解与 Hystrix 高度兼容老项目迁移成本极低运维门槛低自带中文实时监控控制台支持流量实时查看、规则动态配置无需额外部署组件生态全适配与 Gateway、OpenFeign、Nacos、Dubbo 无缝集成经过双11万亿级流量考验稳定性极强链路第七步跨服务数据一致性 → 分布式事务组件核心作用解决跨服务、跨数据库的事务一致性问题比如下单流程订单服务创建订单、库存服务扣减库存、支付服务扣减余额需保证所有操作要么全成功、要么全回滚。前世初代无标准化方案早期 Spring Cloud 原生没有官方分布式事务组件行业内只能手动实现 2PCJTA/XA、TCC、SAGA、本地消息表、最大努力通知等方案核心痛点无标准化框架开发成本极高、代码侵入性强、运维难度大、无法与 Spring Cloud 生态无缝整合今生当前主流方案 SeataSpring Cloud Alibaba阿里开源推出背景阿里2019年开源纳入 Spring Cloud Alibaba 生态国内微服务分布式事务的事实标准一站式解决分布式事务问题核心特点全场景多模式支持原生支持AT模式无侵入自动模式、TCC模式、SAGA模式、XA模式四大模式覆盖所有分布式事务场景可根据业务灵活选择零侵入低门槛王牌AT模式基于本地JDBC数据源自动实现事务提交/回滚对业务代码零侵入彻底解决传统分布式事务开发难度大的痛点高性能经过双11万亿级流量考验性能远超传统2PC方案单集群可支撑上万分布式事务并发生态全适配与 Nacos、Sentinel、OpenFeign、Mybatis 等全生态无缝集成适配所有主流数据库运维友好自带中文管理界面支持事务状态查看、异常事务回滚、集群监控链路第八步故障定位 → 分布式链路追踪组件核心作用一个请求会经过多个微服务当出现报错、超时时通过链路追踪组件还原请求的完整流转路径快速定位故障点和性能瓶颈。前世今生主流方案 Spring Cloud Sleuth Zipkin演进说明该方案是 Spring 官方原生方案一直持续迭代至今仍是中小厂首选无大规模替代仅存在功能更全面的补充方案组件分工Spring Cloud Sleuth链路埋点组件请求进入服务时自动生成 TraceId整条请求的唯一ID和 SpanId每个服务节点的ID服务间调用时自动传递对业务代码零侵入Zipkin链路收集、存储、可视化组件接收 Sleuth 上报的链路数据提供可视化界面通过 TraceId 可查询整条请求的流转路径、耗时、异常信息核心特点零侵入开箱即用全生态适配支持网关、OpenFeign、MQ、数据库等全场景链路追踪可视化能力强演进补充新兴替代方案SkyWalking华为开源、PinpointNaver开源属于APM全链路监控工具不仅支持链路追踪还覆盖服务监控、性能分析、告警等能力功能更全面国内大厂广泛使用未来趋势Spring Cloud 2023版本之后Sleuth 停止迭代官方推荐使用 Micrometer Tracing 替代适配 Zipkin、OpenTelemetry 等标准链路第九步日志排查 → 日志聚合组件核心作用解决微服务日志分散存储、排查问题需登录多台服务器的痛点实现全服务日志的集中采集、存储、检索。前世今生主流方案 ELK StackElasticsearch Logstash Kibana Filebeat演进说明ELK 一直是日志聚合的行业标准持续迭代至今无大规模替代仅存在轻量化变体方案EFKElasticsearch Fluentd Kibana组件分工Filebeat轻量日志采集组件部署在服务实例所在服务器负责采集日志文件并上报Logstash日志处理组件负责日志的过滤、格式化、转换写入 ElasticsearchElasticsearch分布式搜索引擎负责存储日志数据提供毫秒级全文检索能力Kibana可视化控制台负责日志的查询、检索、可视化、告警可通过 TraceId 一键查询整条请求的全链路日志核心特点覆盖日志采集-过滤-存储-检索-告警全流程全文检索能力极强生态成熟是行业标准方案链路第十步稳定性保障 → 监控告警组件核心作用实时监控微服务的运行状态、CPU、内存、GC、接口响应时间、错误率等指标异常时及时告警保障系统稳定运行。前世初代方案 Spring Boot Admin推出背景Spring 社区开源的轻量监控组件专门针对 Spring Boot/Spring Cloud 服务核心特点开箱即用与 Spring Boot 生态完美适配支持服务健康检查、内存/线程/GC监控、配置查看、日志级别调整轻量极简局限性仅支持 Spring 生态服务无法监控数据库、MQ、服务器等组件监控指标有限无法自定义复杂告警规则不支持大规模集群监控今生当前主流方案 Prometheus Grafana推出背景Prometheus 是 CNCF 毕业的开源监控系统Grafana 是可视化工具目前是云原生、微服务监控的行业标准组件分工Prometheus时序数据库通过 Exporter 采集服务、服务器、数据库、MQ 等全栈组件的监控指标存储并执行告警规则Grafana可视化控制台对接 Prometheus 制作监控大盘实现指标可视化展示、多渠道告警通知核心特点全栈监控覆盖服务器、数据库、MQ、微服务、网关等所有组件一套系统搞定全栈监控自定义能力极强支持 PromQL 自定义查询可实现任意复杂的监控规则和告警策略扩展性极强支持集群部署水平扩展能力拉满可支撑超大规模集群监控生态成熟云原生标准方案社区活跃文档丰富持续迭代三、Spring Cloud 全链路演进核心逻辑所有组件的替换都遵循4个不可逆转的核心原因停更风险Netflix 旗下核心组件陆续停止开发无新功能更新无法满足生产环境的持续迭代需求性能升级初代组件大多为同步阻塞模型高并发下性能不足新一代组件普遍采用异步非阻塞模型性能有质的提升架构简化初代组件大多只解决单一问题需多个组件配合才能满足生产需求新一代组件多为一站式解决方案大幅降低架构复杂度和运维成本生态适配新一代组件完美适配 Spring Boot/Spring Cloud 最新版本支持响应式编程、云原生等新趋势而初代组件架构老旧无法适配新生态四、国内生产环境主流 Spring Cloud 技术栈组件职责当前主流方案已淘汰/非主流方案网关Spring Cloud GatewayZuul 1.x/2.x注册中心NacosEureka、Consul、Zookeeper配置中心Nacos ConfigSpring Cloud Config Bus服务调用OpenFeignNetflix Feign负载均衡Spring Cloud LoadBalancerNetflix Ribbon熔断限流降级SentinelNetflix Hystrix分布式事务Seata手动实现TCC/SAGA/2PC链路追踪Spring Cloud Sleuth Zipkin / SkyWalking无标准化方案日志聚合ELK StackElasticsearchLogstashKibanaFilebeat分散日志存储监控告警Prometheus GrafanaSpring Boot Admin仅轻量场景消息驱动Spring Cloud Stream原生MQ API开发

更多文章