news 2026/11/6 5:16:55

Spring Cloud 到底解决了什么?单体、集群、分布式、微服务一次讲透

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Cloud 到底解决了什么?单体、集群、分布式、微服务一次讲透

  • 🏠博客主页:小谢同学的小破站
  • ✍️本文由小谢同学的小破站原创,首发于 CSDN 💻
  • ☕JavaSE专栏:JavaSE
  • 📗JavaEE初阶专栏:JavaEE初阶
  • 📘JavaEE进阶专栏:JavaEE进阶
  • 🧩数据结构专栏:数据结构
  • ⚙️算法专栏:算法
  • 📚MySQL初阶专栏:MySQL初阶
  • 🔐Spring Cloud:Spring Cloud
  • 🌐计算机网络专栏:计算机网络
  • 💻SpringAI:SpringAI从入门到应用
  • 👍欢迎点赞👍 收藏⭐ 留言📝,发现错误欢迎指正!
  • ✨脚踏实地,持续深耕,奔赴自己的目标✨
    ----- 📌分割线 📌-------

Spring Cloud 微服务开发

  • 1. 什么是微服务开发?
  • 2. 单体架构:一开始真挺好用
  • 3. 扛不住了,只有两条路
  • 4. 集群和分布式,到底差在哪
  • 5. 微服务:拆到不能再拆
  • 6. 这笔买卖,赚的和赔的
  • 7. Spring Cloud:微服务的大管家
  • 8. 版本号为什么是地铁站名
  • 9. 两代实现:Netflix 和 Alibaba
  • 10. 总结与速查
    • 10.1 三句话
    • 10.2 概念速查
    • 10.3 版本速查
    • 10.4 组件速查
  • 11. 小结

前言:
这里是 小谢同学 的微服务学习记录,微服务系列第一篇。

这篇代码不多,全在讲概念。但它挺关键——这一篇糊过去,后面学 Eureka、Nacos、Gateway 就全是背配置,学完也不知道自己在配啥。
本文使用一家宠物医院的四年来帮助讲解微服务。

1. 什么是微服务开发?

先给一个不那么教科书的答案:微服务开发,就是将一个大的系统拆分成一堆能各自独立运行的小服务,每一个只管理一件事情,再想办法让它们互相找得到、调得通、扛得住。

这句话里其实藏着三个问题:为什么要拆?拆到什么程度?拆完到底谁来收拾摊子?整篇就顺着这三个问题走。
我们先来看看结论:

微服务是用一堆独立服务换来灵活,同时欠下一笔运维和治理的债;Spring Cloud 就是帮你还这笔债的工具箱。

主角叫毛孩子动物医院,2021 年从小区门口的小诊所起步。下面这五段是我编的教学设定,并不是真实的数据,但踩的坑基本是中小项目的通用剧本:

时间技术状态遇到的事
2021一个 Spring Boot 项目,1 台服务器够用,改完就上线
2022同一台机器,加配置周末排队,中午打不开
2023同一套系统复制 3 份(集群)扛住了,但改一次发三次版
2024按科室拆 4 个子系统(分布式)拆开了,重复代码翻倍
2025十几个微服务 + 公共基础服务灵活了,运维快疯了

"运维快疯了"不是吐槽,这也恰恰是 Spring Cloud 存在的理由。

🔙 返回目录




2. 单体架构:一开始真挺好用

在2021 年,老板找了外包做个 Spring Boot 项目。预约、接诊、化验、开药、收银、会员卡、发短信……全都塞进一个工程,打成一个 jar 包,扔在一台服务器上跑。这就是单体架构:

单体架构:将一个应用中的所有功能实现,全部都打包在一个jar包或者war包中,统一部署,统一运行;

说白了就是一家只有一个屋子的小诊所:挂号在前台那张桌子,拿药在身后柜子,收钱还是那张桌子,一个人从前包到后。

开药,看病,以及收银都是在一个位置来进行;


现在一提单体,好多人一脸嫌弃,这不太公平。在它该待的规模里是真香:开发一个工程clone下来就能跑;部署一行java -jar,没什么启动顺序的讲究;调用就是本地方法调用,纳秒级,基本上不可能超时;事务一个@Transactional全包了,数据库替你保证要么全成要么全败。

这四条记一下。因为往后你会发现:微服务牺牲的,正好就是这四条。

2022 年,事儿来了。周六上午 CPU 打满,请求排队超时,整站打不开;改个"药房打印小票"的文案,也要整个项目重新打包发布,全院停三分钟;化验单模块内存泄漏把 JVM 撑爆,结果不是化验单打不开,而是挂号、收银、开药全部 502——它们本来就住在一个进程里。

于是只剩一个朴素的问题:这台机器、这坨代码,怎么扛住下一年?答案就两条路。

🔙 返回目录




3. 扛不住了,只有两条路

第一条路: 横向,加机器: 代码中的逻辑一个字都不改,直接去买3台服务器,每一台服务器都跑一模一样的jar包,前面的Nginx分流, 这个就叫做集群;

集群是把一个系统完整部署到多台服务器上,每台都能提供系统的全部服务,通过负载均衡调度共同完成任务。集群里的每一台机器,叫做一个节点(node)。

用医院来举例子: 一间问诊室忙不过来,就在隔壁再开两间问诊室,请两个一模一样的医生,什么病都能够看,病人来了先去问诊台,去问哪一间空着就往哪送。

这里有个细节第一次都想不到:集群必须有个"分诊台"。病人首先得知道去哪排队,医生之间也得知道"隔壁今天请假没有"。这个"分诊台 + 排班表",落到技术上就是负载均衡 + 服务注册发现。

但集群只治了"扛不住",没治"太乱"——三台机器跑的还是同一坨代码。

第二条:纵向,拆业务。把一个大系统按业务切成几个独立小系统,各自部署。课件里管这叫垂直架构:

以单体规模的项目为单位进行垂直划分,把大项目拆成一个个单体结构的小项目,项目之间相对独立,接口多为数据同步功能。

放到医院,就是把"一个人干所有事"改成流水线:前台只管挂号分诊,门诊只管接诊开单,检验只管化验出报告,药房只管配药发药,收银只管结算开票。药房半夜升级,挂号照样接客, 各自管理好各自的功能。

清爽了。但新麻烦立刻跟上:一次就诊就要跨五个系统,以前一个事务搞定的事,现在得操心"挂号成功、收银失败怎么回滚";服务之间怎么找对方,换机器了配置改不改;调用失败了又怎么办,跨网络了,检验慢三秒,门诊是干等、报错还是重试?

发现问题没有——这三件事,全都不是"写业务代码"能解决的,它们是"基础设施"问题。而这,正是 Spring Cloud 要卖的货。

🔙 返回目录




4. 集群和分布式,到底差在哪

分布式和集群到底有什么区别?到底差哪里了?

从概念上分:集群是多个机器做同样的事,分布式是多个机器做不同的事。一句话就完了——三个都看全科病的医生是集群,前台、检验、药房、收银各管一摊是分布式。

从功能上分:集群每个节点功能相同、能互相替代,医生 A 请假,去 B 那儿照样能看;分布式每个节点业务不同,一个节点出问题,这块业务就直接不可访问——药房关门了,你不可能跑去检验科拿药。所以高可用的做法也不同:集群挂一个,请求自动转走;分布式挂一个,只能靠给它也做集群或者做降级兜底。

从关系上看,课件这段总结得挺准,我直接写下来:

分布式和集群在实践中,很多时候是互相配合使用的。比如分布式的某一个节点,可能由一个集群来代替。分布式架构大多是建立在集群上的。所以实际的分布式架构设计中,并不会把分布式和集群单独区分,而是统称:分布式架构。

翻译一下:这俩不是二选一,是套娃。所以你说"我们项目是分布式架构"其实更专业,因为这句话默认包含了"每个服务都是多实例"。

对比维度集群 Cluster分布式 Distributed
干的事多个节点做同样的事多个节点做不同的事
拆分方式复制,不改代码拆分,按业务切
节点可否替代可以,随时互换不可以,各管一摊
单点故障业务不受影响该业务直接不可用
主要解决扛不住(压力分散)太乱(职责分离)
配套需求负载均衡注册发现、远程调用、网关

面试问到无非两种问法。问:你们项目是集群还是分布式?答:架构上是分布式的,按业务拆成 N 个服务;每个服务又部署多实例,所以也含集群,两者配合用。问:我多买两台服务器算分布式吗?答:不算,那只是从单机变集群,代码没变、职责没分。

🔙 返回目录




5. 微服务:拆到不能再拆

2024 年拆成五个系统,舒服了半年。然后发现一件更烦的事:每个系统里都写了一遍"会员积分"。

挂号加积分、开药加积分、收银加积分、上门服务也加积分。四份代码,逻辑还不完全一样。运营说"改成消费 1 元积 2 分",开发一看:改四个项目、发四次版、协调四个上线窗口。

按照业务进行拆分后,会有一些重复的功能开发,比如订单系统,电商平台和支付系统都会涉及。在分布式架构下,当部署的服务越来越多,重复的代码就会越来越多,服务的调用关系也会越来越复杂。

解法也比较简单:把通用、会被多个上层服务调用的共享业务,抽成独立的基础服务。

把一些通用的、会被多个上层服务调用的共享业务,提取成独立的基础服务,组成一个个微小的服务。这就是微服务。

于是就有了会员积分服务、消息通知服务、在线支付服务——它们不属于任何一个科室,但所有科室都要用。

上面一层是业务,下面一层是能力。上面怎么变,下面都能接着复用。

但是"微服务"这个名字挺误导人,重点不是"小",而是独立。很小的服务,小到一个服务只对应一个单一的功能,只做一件事,这个服务可以单独部署运行。三条标准比"多少行代码"靠谱多了:

标准什么意思反例
只做一件事职责单一,一个服务对应一个能力"综合业务服务"塞了挂号、药房、收银
能单独部署有自己的启动类和端口只能跟着主工程一起打包
独立进程挂了不影响别人,能单独重启扩容和别的模块跑在同一个 JVM

所以“拆成 6 个服务"≠"微服务”。要是这 6 个还共用一个库、必须一起启动,那只是"逻辑上分了包",它骨子里还是单体。

另外,服务之间用REST 或 RPC通信,理解成"接口的约定"就行,区别只在怎么喊:REST 像寄快递填单子(GET /pets/1,JSON,好调试),RPC 像打内线电话(getById(1),二进制,快)。

最后纠个常见误解:分布式和微服务不是程度差别。

分布式:服务拆分,拆了就行。微服务:更细粒度的垂直拆分,通常指不能再拆的服务。分布式侧重压力的分散,微服务侧重能力的分散,更强调专业化和精细分工。

还有句更狠的:微服务架构通常是分布式架构,反之未必成立。所以选择微服务,通常意味着需要解决分布式架构的各种难题。潜台词就是:你选了微服务,等于主动把所有分布式的坑都领了一遍。

这几个观点都是错误的一个观点~

🔙 返回目录




6. 这笔买卖,赚的和赔的


左边四样是你换来的,右边四样是你付出去的。注意右边,一样都不少。

就像一个刚开始创业,经济压力比较大的公司,一个员工什么都会干的时候,由于公司比较小,管理起来就相对于比较简单;但是如果公司的规模越来越大,就必须区分部分,效率是提高了,但是维护的成本也跟着涨价了,人越多,管理就越复杂,服务和人是同一个道理;

所以别被"先进"两个字带着走。团队不到 5 个人、产品还在找方向、日活几千、没有自动化运维,这几种情况就老老实实写单体。判断标准其实特别朴素:当你因为"发个版会牵连别的模块"和"扩容不能按模块来"而真的开始痛苦了,那才是拆的时候。不是因为面试要问。

🔙 返回目录



7. Spring Cloud:微服务的大管家

官方说到: spring cloud提供了一些可以让开发人员快熟构建分布式服务的工具,就好像配置管理,服务发现,熔断,智能路由等等,他们可以在任何分布式环境中很好的工作;

简单来说,Spring Cloud 就是分布式微服务架构的一站式解决方案,是微服务架构落地的多种技术的集合。

用我们现在的话来说就是:微服务那一堆的基础设施的破事,它都替你把成熟方案打包好了,引入依赖,我们只需要写几行配置就能使用.

官方能力解决什么麻烦后面学的组件
Distributed versioned configuration配置散在 12 个服务,改一个改 12 遍Nacos / Config
Service registration and discovery服务在哪台机器?挂了怎么知道Eureka / Nacos
Routing(智能路由)前端不该记住 12 个服务的地址Gateway
Service-to-service calls怎么像调本地方法一样调远程OpenFeign
Load balancing一个服务 5 个实例,这次调哪个LoadBalancer
Circuit Breakers下游挂了,别把我一起拖死Resilience4j / Sentinel
Distributed messaging异步解耦,下单后发通知不用干等RabbitMQ
链路追踪(补充)一个请求跨 8 个服务,卡在哪环Micrometer / SkyWalking

看懂这张表就明白了:后面几讲的内容全在里面。这也是为啥这篇必须先讲——不然学 Eureka 时,你压根不知道它在整个体系里站哪。

💡Spring Cloud 并不是 Spring 团队研发的框架,它只是把一些比较优秀的开源框架基于 Spring Cloud 规范进行了整合,并基于 Spring Boot 的风格对这些组件进行了封装,屏蔽掉了复杂的配置和实现原理,为开发者提供了开箱即用的微服务开发体验。这些开源技术的框架是由各个公司来维护的。Spring Cloud 就是这些微服务的大管家。

拆开是三层:组件不是 Spring 写的(Eureka 是 Netflix 的,Nacos 是阿里的),它干的是选品、定规范、做适配;它定了一套规范,所以注册中心从 Eureka 换 Nacos,业务代码几乎不用动;它用 Spring Boot 风格封装,本来配 Eureka 要写一坨 XML,现在一行eureka.client.service-url.defaultZone=...搞定。

所以别问"Spring Cloud 和 Spring Boot 啥关系"了:Boot 是盖房子的脚手架,Spring Cloud 是往房里装家电的。家电不是它造的,但它保证插头能插上。

🔙 返回目录




8. 版本号为什么是地铁站名

Java 生态版本号一般长1.2.3这样,Spring Cloud 偏要用伦敦地铁站名。课件原话:

Spring Cloud 是一个由很多子项目组成的庞大项目,这些子项目由各个公司来维护,所以发布阶段也是不同的。为了管理主项目和子项目的依赖关系,以及避免和子项目版本的冲突,主项目版本命名并没有采用和子项目一样的数字版本化形式,而是采用了英文名称。

说人话:子项目各走各的,主项目没法拿数字排序,干脆另起一套,拿地铁站名按 A 到 Z 往下排:

Angel → Brixton → Camden → Dalston → Edgware → Finchley → Greenwich → Hoxton

正好 A 到 H。用了八年,问题也来了:字母会背混。面试官问用哪个版本,你说"C 开头的那个"——谁知道是 Camden 还是 Greenwich?

所以 Hoxton 之后改成了日期版本号,格式年份.第几个版本.补丁号:2020.0.x(Ilford)、2021.0.x(Jubilee)、2022.0.x(Kilburn)、2023.0.x(Leyton)。代号没取消,只是退到aka后面了——官方写2023.0.x aka Leyton,意思是"这一班列车花名还叫 Leyton"。

下面这段请务必看完,可以帮助你节省不少的时间:

Spring Cloud 中的所有子项目都依赖 Spring Boot,所以两者版本之间存在一定的对应关系。比如 Spring Boot 3.2.X 对应的 Spring Cloud 版本是 2023.0.X。

对不上会怎样?轻则启动报类找不到,重则半死不活地跑着,查半天查不出来。原因就三个:BOM 锁死了,spring-cloud-dependencies里写死了它期望的 Boot 范围,Maven 不拦你,运行时才翻脸;自动配置类是照着版本写的,换个大的就加载不了;还有javax到jakarta那次大迁移,Boot 3 起包名全变,拿 2.x 的组件去配 3.x 基本必挂。

所以我们需要记住一句:Spring Cloud 的版本,必须和 Spring Boot 对上。写法上就是引spring-cloud-dependencies这个 BOM,自己只声明spring-cloud.version,具体组件一律不写版本号。

完整对照表放在10.3 节了,这里只给结论:新项目上2025.1.x+ Boot4.0.x;存量 Boot 3.5 项目守住2025.0.x,别为了"新"硬升 4.0;跟着课件练用哪套都行,但 BOM 和 Boot 一定要对齐。

💡 顺手教个查版本的技巧:浏览器打开https://start.spring.io/actuator/info,搜spring-cloud,每个发布列车对应哪个 Boot 版本,比翻文档快。

🔙 返回目录




9. 两代实现:Netflix 和 Alibaba

Spring Cloud 定的是规范,规范得有实现。最有名的俩:Spring Cloud Netflix和Spring Cloud Alibaba。

第一代 Netflix,全家桶是 Eureka(注册发现)、Zuul(网关)、Ribbon(负载均衡)、Feign(服务调用)、Hystrix(断路器)、Hystrix Dashboard(监控面板)、Turbine(聚合监控)、Archaius(配置管理)。很长一段时间里,"Spring Cloud"这三个字就是"Spring Cloud Netflix"的代称。

然后 2018 年前后,Netflix 宣布Hystrix、Ribbon、Zuul 这些核心组件进入维护状态,Spring Cloud 只能把对应模块移出主线。

💡 提一句:spring-cloud-netflix并没被完全删掉,只是从 2020.0 版本起,它只管 Eureka 了。所以今天用最新版还能写 Eureka 客户端,只是里面没有 Hystrix 了。

这套东西不少公司都在大规模用,停更短期没事,长期肯定不行,所以官方给了替换清单:

停更的组件官方推荐替代说明
HystrixResilience4jHystrix 自己也推荐用它
Hystrix Dashboard / TurbineMicrometer + Monitoring System监控交给更专业的组件
RibbonSpring Cloud LoadBalancerSpring 团队亲自出手
Zuul 1Spring Cloud Gateway同上,而且异步非阻塞
Archaius 1Boot 外部化配置 + Spring Cloud Config比 Netflix 实现更好用

第二代是 Alibaba。

虽然 Spring Cloud Alibaba 目前并不是 Spring Cloud 官方推荐的默认方案,但它是阿里中间件团队主导的一个新生项目,正处于高速迭代中。甚至在 Alibaba 的开源组件还没有织入 Spring Cloud 生态之前,就已经在各大公司广泛使用了。

它主要靠Nacos(注册中心 + 配置中心,一个顶俩)、Sentinel(流控熔断)、Seata(分布式事务)撑场面,外加 Dubbo(RPC)和 RocketMQ(消息)。课件的判断是:Alibaba 吸收了 Netflix 的核心架构思想并做了高性能改进,自 Netflix 停更后逐渐代替它成了主流。

这事儿在国内尤其明显。你翻招聘 JD 就懂了:“熟悉 Spring Cloud Alibaba / Nacos"出现的频率,远高于"Eureka”。原因也简单——Nacos 一个组件同时干注册中心和配置中心两件事,部署一套就够,对小团队太友好。

🔙 返回目录




10. 总结与速查

10.1 三句话

① 单体的问题不是"小",是"绑在一起"——绑在一起扩容、绑在一起发布、绑在一起故障。所以优化只有两条路:横向加机器,纵向拆业务。

② 集群和分布式不是二选一,是套娃——集群是"同样的事多个人干",分布式是"不同的事分给人干"。实际项目里,分布式架构的每个节点通常自己又是一个集群,所以统称分布式架构。

③ 微服务 = 分布式 + 更细拆分 + 公共能力下沉,换来灵活,欠下治理的债;Spring Cloud 是还债的工具箱,它不造轮子,只负责整合、封装、开箱即用。

🔙 返回目录




10.2 概念速查
名词一句话定义关键词
单体架构所有功能打成一个包,统一部署运行一个 jar,一起生一起死
集群同一系统完整复制到多台机器,靠负载均衡调度同功能,可替代
分布式一个系统拆成多个子系统,部署在多台机器协同不同功能,缺一不可
垂直架构按业务把大项目切成多个单体小项目纵向拆分,接口多为数据同步
微服务只做一件事、可单独部署运行的最小服务单元单一职责,独立进程
服务治理服务多了之后的一整套管理问题依赖、运维、监控、限流
Spring Cloud微服务架构的一站式解决方案整合 + 封装,不造轮子
🔙 返回目录




10.3 版本速查

**截图存相册吧,这张最实用。后面的按 2026 年 10 月的情况补齐:

Spring Cloud代号适配 Spring BootJDK状态
2026.0.xPaddington4.2.x17+里程碑阶段,还没 GA
2025.1.xOakwood4.0.x17+当前主线,新项目首选
2025.0.xNorthfields3.5.x17+存量项目主力
2024.0.xMoorgate3.4.x17+已过开源支持期
2023.0.xLeyton3.2.x / 3.3.x17+已过开源支持期(课件版本)
2022.0.xKilburn3.0.x / 3.1.x17+官方已停止支持
2021.0.xJubilee2.6.x / 2.7.x8+官方已停止支持
2020.0.xIlford2.4.x / 2.5.x8+官方已停止支持
Hoxton—2.2.x / 2.3.x8已停止支持
Greenwich—2.1.x8已停止支持
Finchley—2.0.x8已停止支持
Edgware / Dalston—1.5.x8已停止支持
Camden—1.4.x8已停止支持
Brixton—1.3.x / 1.4.x6 / 8已停止支持
Angel—1.2.x6已停止支持

📌 上表核对于2026-10-31。这类信息变得快,真要动手选版本时,以spring.io/projects/spring-cloud官方矩阵为准。

🔙 返回目录




10.4 组件速查
能力官方NetflixAlibaba到底解决什么
服务注册 / 发现EurekaEurekaNacos服务在哪台机器,挂了怎么办
服务调用OpenFeignFeignDubbo怎么像调本地方法一样调远程
配置中心Spring Cloud ConfigArchaiusNacos配置改了不用重新打包
服务网关GatewayZuulGateway前端只认一个入口
负载均衡LoadBalancerRibbonDubbo(内置)5 个实例这次调哪个
熔断降级Resilience4jHystrixSentinel下游挂了别拖死我
分布式事务——Seata跨库操作怎么保证一致
分布式消息Spring Cloud Stream—RocketMQ异步解耦、削峰

小技巧:面试问"你们用什么注册中心",答"Nacos,它同时是配置中心",比干巴巴答个 Eureka 有信息量得多。

🔙 返回目录




11. 小结

这篇没几行代码,但它是整个系列的地图。看到这儿,你应该能在脑子里画出这条线:

单体扛不住 → 加机器(集群)→ 还是乱 → 拆业务(分布式)→ 还是重复 → 拆细 + 抽公共能力(微服务)→ 拆完没人管 → Spring Cloud 出场。

如果这篇帮你理清了一个概念,点个赞再走;有不同意见评论区见,我基本都会回。我们下期见~

🔙 返回目录




版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/6 5:14:29

1.24 亿播放的内容做对了什么:三条可复用的规律

1.24 亿播放的内容做对了什么:三条可复用的规律 做技术的人看内容爆款,容易归因成"运气"或者"审美"。但一支成本几千块、没明星没特效的国风 MV,全网播到 1.24 亿(抖音 7500 万、视频号 4500 万、小红书 300 …

作者头像 李华
网站建设 2026/11/6 5:11:48

Weylus 完全上手指南:免费把平板变成电脑数位板与触摸屏

Weylus 完全上手指南:免费把平板变成电脑数位板与触摸屏 【免费下载链接】Weylus Use your tablet as graphic tablet/touch screen on your computer. 项目地址: https://gitcode.com/gh_mirrors/we/Weylus Weylus 是一个免费开源的工具,能把你的…

作者头像 李华
网站建设 2026/11/6 5:09:51

别再和 AI 瞎聊了:一套通用的“结构化提示词”编写框架(附模板)

嗨, 你好。我是正雄, 想要和你一起来聊一聊关于ai行业的那些思考和想法。你是不是存在这样一种感觉: 在某些时刻人工智能表现得聪明得令人惊讶, 可是在另一些时刻人工智能又笨拙得让人觉得离谱? 针对同一个问题, 如果在今天提出并且去询问, 和如果在明天提出并且去询问, 所得到…

作者头像 李华