发布时间:2026/8/25 14:11:42
从单体到微服务:架构演进与SpringCloud全景图 【SpringCloud系列01】从单体到微服务架构演进与SpringCloud全景图个人主页夏天拐跑了西瓜专栏传送门《大模型应用开发》、《Spring 生态全家桶体系化实战》学习方向Java 后端AI‑Agent 大模型应用开发爱好者⭐人生格言路虽远行则将至本文是SpringCloud系列第一篇带你搞懂微服务是什么、为什么要用微服务以及SpringCloud全家桶都有哪些组件。文末附高频面试题。一、为什么需要微服务作为Java开发者相信你或多或少都遇到过这样的场景项目刚上线时功能简单一个war包打天下部署快、改起来爽业务迭代半年后模块越来越多代码几十万行改一行代码心惊胆战团队从3个人扩到10个人大家都在同一个工程里提交代码冲突不断大促期间想给订单模块加机器结果只能整个应用一起扩容浪费资源某个边缘功能出了OOM整个系统跟着挂如果你也遇到过以上任何一个问题说明项目已经到了该考虑微服务的时候。这篇文章不着急写代码先从架构演进的历史聊起搞清楚微服务的来龙去脉。二、架构演进的三个阶段软件架构不是银弹而是随着业务规模逐步演化的。从互联网发展至今后端架构大致经历了三个阶段2.1 单体架构Monolithic什么是单体架构所有功能模块打包在一个工程里最终生成一个jar或war包部署运行。比如一个电商项目用户、商品、订单、支付、后台管理全写在一个项目里。我早年参与过一个网约车项目最开始乘客端、司机端、订单、消息、地图全在一个工程里启动一次要3分钟改个小功能也要全量部署。单体架构的优点开发简单IDE跑起来就完事测试方便本地启动就能调部署容易一个包扔到Tomcat就行适合项目初期快速试错、MVP验证单体架构的痛点重点面试常问痛点具体表现复杂性高代码量从几万涨到几十万行模块边界模糊新人上手要几周技术债务“不坏不修”老代码没人敢动人员流动后更是雪上加霜部署困难改一行文案也要全量打包部署上线窗口越缩越长形成恶性循环可靠性差一个小功能OOM整个进程挂掉所有功能都不能用扩展受限订单模块需要扩容但只能整个应用一起加机器资源浪费阻碍创新想把Spring MVC换成WebFlux几十万行代码改不起想试试Go写某个高性能模块门都没有一句话总结小项目用单体真香大项目用单体要命。2.2 面向服务架构SOA为了解决单体的问题业界提出了SOAService-Oriented Architecture面向服务架构。SOA的核心思想是把系统拆分成多个服务服务之间通过网络调用用服务编排来实现业务流程。SOA通常会引入ESB企业服务总线来做服务之间的通信和转换常见的ESB有WebService、Dubbo早期版本等。但SOA有个问题它更多是传统企业级的架构思路ESB本身很重服务拆分粒度也比较粗很多时候拆完发现还是个大单体。可以说SOA提出了很好的理念但落地成本高没有在互联网公司大规模流行开来。2.3 微服务架构Microservices微服务是SOA思想的一种更轻量、更彻底的实践。微服务架构 80%的SOA服务思想 100%的组件化架构思想Martin Fowler在2014年发表的《Microservices》一文中给微服务下了这样的定义大意微服务是一种架构风格将单个应用程序开发为一组小型、独立的服务每个服务运行在自己的进程中服务间通过轻量级机制通常是HTTP REST API通信。这些服务围绕业务能力构建通过自动化部署机制独立部署可以用不同的编程语言编写使用不同的数据存储技术。打个通俗的比方单体架构像一个大锅饭所有人吃一锅菜咸淡没法调微服务像自助餐每个菜独立盛盘想吃啥拿啥凉了单独换网上还有个很形象的分封制类比服从天子命令 → 接受注册中心统一管理镇守疆土 → 各自负责一块业务随从作战 → 服务之间相互调用交纳贡献 → 共同分担系统流量三、微服务的核心特性一个真正的微服务架构应该具备以下特点服务独立进程每个服务跑在自己的JVM/容器里互不影响围绕业务拆分按领域模型或业务能力拆分不是按技术层拆分轻量级通信服务间用HTTP/REST、gRPC、消息队列等通信不绑定语言独立部署每个服务可以单独上线不依赖其他服务发布节奏技术栈自由Java写业务、Go写网关、Python写数据分析各取所长数据去中心化每个服务管理自己的数据库不共享数据库自动化运维服务多了必须靠自动化CI/CD、容器化是标配四、微服务的优缺点4.1 优点独立部署低耦合改订单服务不影响用户服务上线风险小易于开发维护每个服务代码量少业务聚焦新人上手快启动速度快一个服务可能就几千行代码启动几秒钟按需伸缩大促时只给订单、商品服务加实例省成本技术栈灵活可以根据场景选最合适的技术比如用AI推荐服务用Python容错性好一个服务挂了不会拖垮整个系统配合熔断降级团队分工明确两个披萨团队6-10人负责一个服务职责清晰代码复用基础服务可以通过接口被多个上层服务复用4.2 缺点没有银弹微服务不是免费的午餐它解决了单体的问题但也引入了新的复杂度分布式系统复杂性网络是不可靠的延迟、丢包、分区服务调用链变长排查问题困难需要处理超时、重试、幂等等问题分布式事务难题每个服务有自己的数据库跨服务事务不能用本地事务解决方案2PC、TCC、本地消息表、Saga、最大努力通知业界主流是柔性事务 最终一致性BASE理论面试题什么是BASE理论Basically Available基本可用故障时允许部分功能不可用保证核心功能Soft state软状态允许数据存在中间状态Eventually consistent最终一致性一段时间后数据达到一致不需要实时一致接口调整成本高改一个服务的接口所有调用方都要跟着改需要做好API版本管理推荐用Swagger/YApi管理文档测试难度陡增单元测试不够了还要写集成测试、契约测试测一个功能可能要启动好几个服务运维复杂度指数级上升几十个服务配置管理、监控、告警、日志收集全是挑战需要一整套微服务治理平台重复劳动每个服务都要有类似的工具类、配置多语言场景下Java的common-jar没法给Go用所以不要为了微服务而微服务。团队小、业务简单的时候单体可能是更好的选择。五、微服务设计四原则单一职责原则一个服务只做一件事把它做好。服务边界要清晰不要把不相关的功能塞进来。服务自治原则每个服务可以独立开发、测试、构建、部署、运行对其他服务最小化依赖。轻量级通信原则服务间调用要跨语言、跨平台REST、gRPC、AMQP都是好选择不要用太重的协议。粒度适中原则没有标准答案根据团队和业务情况调整。拆太细了调用链太长拆太粗了又回到单体。随着业务演进逐步拆分不要上来就追求完美。我的经验一开始宁粗勿细粗了后面好拆拆细了再合就麻烦了。六、微服务生态全景微服务不只是把代码拆开就完事了它需要一整套基础设施支撑┌─────────────────────────────────────────────────────────┐ │ 客户端/前端 │ └─────────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────┐ │ 服务网关 Gateway │ │ 路由转发、鉴权、限流、灰度发布、A/B测试 │ └─────────────────────────────────────────────────────────┘ │ ┌──────────┬──────────┬──────────┬──────────┬──────────┐ │ 用户服务 │ 商品服务 │ 订单服务 │ 支付服务 │ 搜索服务 │ └──────────┴──────────┴──────────┴──────────┴──────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ 注册中心 │ 配置中心 │ 熔断限流 │ 链路追踪 │ 监控告警 │ └─────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ 消息队列 │ 分布式事务 │ CI/CD │ 容器编排 │ └─────────────────────────────────────────────────────────┘核心组件清单组件作用常见选型服务注册发现服务地址登记与查询Nacos、Eureka、Consul、Zookeeper负载均衡请求分发到多个实例Ribbon、LoadBalancer、Nginx服务网关统一入口、鉴权、路由SpringCloud Gateway、Zuul、Kong配置中心集中管理配置、热更新Nacos、Apollo、Spring Cloud Config熔断限流防止服务雪崩、保护系统Sentinel、Hystrix、Resilience4j远程调用服务间HTTP/RPC调用OpenFeign、Dubbo、RestTemplate链路追踪排查分布式调用问题SleuthZipkin、SkyWalking、Jaeger消息队列异步解耦、削峰填谷RocketMQ、Kafka、RabbitMQ分布式事务跨服务数据一致性Seata、本地消息表、Saga监控告警指标监控、日志聚合PrometheusGrafana、Admin、ELK七、SpringCloud是什么聊完了微服务概念我们终于可以进入正题了。SpringCloud是Spring官方推出的微服务治理框架集合它不是一个具体的框架而是一系列框架的有机组合利用Spring Boot的开发便利性简化了分布式系统基础设施的开发。简单说SpringBoot帮你快速构建单个服务SpringCloud帮你治理一堆服务。7.1 SpringCloud vs Dubbo这是面试经典题直接给对比表对比维度SpringCloudDubbo背景Netflix/Alibaba/Spring社区阿里开源后捐给Apache通信方式HTTP RESTFeign/RestTemplate自有RPC协议TCP长连接性能略低HTTPJSON较高二进制序列化长连接功能完整度全家桶覆盖微服务各方面主要专注服务调用和治理生态丰富与Spring无缝集成相对独立需要自己整合其他组件学习成本稍高组件多较低适用场景快速迭代的互联网业务、多语言高性能、对延迟敏感的内部系统现在更多是两者结合用SpringCloud Alibaba生态里面包含Dubbo作为RPC选项。7.2 SpringCloud版本说明SpringCloud的版本命名比较有意思它不用数字版本号而是用伦敦地铁站名按字母顺序命名Angel最早版本BrixtonCamdenDalstonEdgwareFinchleyGreenwichHoxtonSpringBoot 2.2.x/2.3.x我们这个系列用这个版本Ilford后来改名为2020.0.x开始日历化版本从2020年开始SpringCloud改用了日历版本号格式为YYYY.RELEASE比如2020.0.xIlford2021.0.xJubilee2022.0.xKilburn2023.0.xLeyton2024.0.x 及更新版本版本对应关系很重要乱配版本会出各种奇奇怪怪的问题SpringCloud版本SpringBoot版本备注Hoxton.SR32.2.x本系列使用Netflix组件还在2020.0.x2.4.x移除大部分Netflix组件2021.0.x2.6.x-2022.0.x3.0.x支持SpringBoot 3JDK17最低2023.0.x3.2.x- 新手建议不要上来就追最新版本先从Hoxton SpringBoot 2.2.x把组件原理搞懂再升级新版本也不迟。7.3 SpringCloud的朝代更替SpringCloud发展到现在经历了几个阶段第一代SpringCloud Netflix2015-2020核心组件Eureka、Ribbon、Hystrix、Zuul 1.x、Feign、Archaius问题Netflix在2018年底宣布这些项目进入维护模式不再开发新功能Hystrix更早就停止了开发Zuul 2.x一直跳票第二代SpringCloud Alibaba2018至今国内主流核心组件Nacos注册配置、Sentinel熔断限流、Seata分布式事务额外组件RocketMQ、Dubbo、OSS等优点国内社区活跃、中文文档好、功能更强、经过阿里大流量验证现在国内互联网公司Java微服务基本都是SpringCloud Alibaba那一套第三代SpringCloud官方原生2020至今用SpringCloud LoadBalancer替代Ribbon用SpringCloud Gateway替代Zuul用Spring Cloud Circuit Breaker统一熔断抽象支持Resilience4J等配置中心可以用Spring Cloud Consul或第三方八、SpringCloud Alibaba核心组件既然国内主流是Alibaba这套我们有必要先了解下它的核心组件后续会有专门文章详细讲组件作用替代Netflix的谁Nacos服务注册发现 配置中心Eureka ConfigSentinel流量控制、熔断降级、系统保护HystrixSeata分布式事务解决方案无对应RocketMQ分布式消息队列无对应Dubbo高性能RPC通信Feign可选替代SpringCloud Stream消息驱动抽象层-另外还有一些阿里云商业组件ACM、OSS、SchedulerX、SMS等个人学习可以不用管。九、本系列学习路线这个系列我们会从Netflix经典组件讲起再过渡到Alibaba主流方案最后做面试题汇总。打好基础再学新东西才稳。学习顺序建议1. 微服务基础概念这篇 2. Eureka 注册中心 → 理解服务注册发现原理 3. RestTemplate Ribbon → 服务调用与负载均衡 4. OpenFeign → 声明式调用 5. Hystrix → 熔断降级理解原理现在多用Sentinel 6. Zuul/Gateway → 微服务网关 7. Config → 配置中心理解思路现在多用Nacos 8. Sleuth Zipkin → 链路追踪 9. SpringBoot Admin → 监控 10. Nacos、Sentinel、Seata重点面试高频 11. 面试题汇总十、高频面试题1. 什么是微服务优缺点是什么参考答案见上文第四部分重点答出独立部署、低耦合、技术栈自由以及分布式复杂性、事务、运维等缺点。2. 微服务架构有哪些核心组件注册中心、配置中心、网关、负载均衡、熔断限流、远程调用、链路追踪、消息队列、监控等结合表格回答。3. SpringCloud和Dubbo有什么区别从通信协议HTTP vs RPC、性能、功能完整度、生态等角度对比现在可以说两者不是替代关系Dubbo可以整合到SpringCloud中使用。4. SpringCloud和SpringBoot是什么关系SpringBoot专注快速构建单个应用SpringCloud专注治理分布式服务SpringCloud基于SpringBoot构建。5. 什么是CAP定理什么是BASE理论CAP一致性、可用性、分区容错性分布式系统只能同时满足两个BASE是对AP的扩展基本可用、软状态、最终一致性微服务分布式事务常用。6. 蓝绿部署和灰度发布有什么区别蓝绿部署准备两套相同环境新版本部署在绿环境测试OK后流量一次性切过去蓝环境留作回滚灰度发布金丝雀发布先切一小部分流量到新版本观察没问题再逐步放大直到全量核心区别蓝绿是一次性切换灰度是渐进式迁移7. 服务拆分会遇到什么问题怎么解决分布式事务Seata/最终一致性、服务发现Nacos、网关Gateway、链路追踪Sleuth/SkyWalking、运维复杂度Docker/K8s/CI/CD。总结这篇文章我们讲了架构从单体→SOA→微服务的演进过程微服务的特性、优缺点和设计原则微服务生态的核心组件SpringCloud是什么、版本怎么选Netflix和Alibaba两朝换代本系列学习路线微服务不是银弹不要为了拆而拆。但作为Java后端工程师掌握SpringCloud生态是必备技能无论是日常开发还是跳槽面试都用得上。下一篇我们开始动手搭建第一个Eureka注册中心并把服务注册上去。本系列代码会同步更新到GitHub欢迎Star关注。如果文章对你有帮助点个赞和关注就是对我最大的鼓励下一篇【SpringCloud系列02】Eureka注册中心单机与高可用集群搭建实战

相关新闻

2026/8/25 14:11:42

《随机森林》知识点总结

一、基本定义随机森林是Bagging(自助聚合)框架下的集成监督学习算法,可完成分类、回归任务,结构化/图像、文本等非结构化数据集都适用。核心思路:不依赖单个模型,训练大量决策树(基学习器/弱模型…

2026/8/25 14:11:42

隐匿中的生长:当代青年 “偷感” 现象解读

青年"偷感"现象:心态表征、生成机理与深层解读 一、现象:当"偷感"成为一种集体标签 “偷感"是近年来在青年群体中迅速蔓延的一个网络热词。微博话题 #偷感很重是什么梗# 的阅读量超过 7800 万,抖音 #偷感# 的播放…

2026/8/25 14:11:42

算一笔账:看似免费的破解安全软件,隐性成本有多高

很多 IT 选型的时候第一眼看成本:破解版不用花钱,正版需要采购授权。但放到企业真实业务场景中,破解软件带来的隐性成本往往被严重低估。1、业务中断成本破解后的程序没有经过完整兼容性测试。系统更新、应用升级之后,经常出现加密…

2026/8/25 19:08:08

华为秋招动态规划与贪心算法实战:打怪升级题目解析

1. 华为留学生秋招技术题解析:打怪升级题目详解华为2025年留学生秋招非AI方向的技术笔试题目"打怪升级"是一道典型的动态规划与贪心算法结合的题目。这道300分的压轴题主要考察应聘者对算法思想的理解和代码实现能力。题目描述通常为:玩家初始…

2026/8/25 19:08:08

基于LLM与Playbook的Word合同智能审核Agent构建指南

在企业法务工作中,合同审核是一项高频、高要求且责任重大的任务。传统的人工审核方式不仅耗时耗力,还容易因疲劳或经验差异导致关键条款的遗漏。随着大语言模型(LLM)和智能体(Agent)技术的发展,…

2026/8/25 19:08:08

三数之和算法:双指针技巧与面试优化策略

1. 三数之和问题解析三数之和(3Sum)是算法面试中最经典的问题之一,也是LeetCode上被标记为"中等"难度的热门题目。这道题看似简单,却蕴含着许多算法设计的精妙之处,能够很好地考察面试者对双指针技巧、边界条…

2026/8/25 19:08:08

Docker部署宝塔面板:实现环境隔离与一键迁移的云服务器运维方案

如果你是一名开发者,正在寻找一种既能享受宝塔面板的便捷可视化操作,又能保持云服务器环境纯净、可移植且易于管理的部署方案,那么这篇文章就是为你准备的。 传统的宝塔面板安装方式会直接在服务器系统上安装大量依赖和组件,虽然…

2026/8/25 19:08:08

电商巨头科研实习生计划:量子计算与AI前沿实战

1. 项目背景与行业价值这个夏天,全球电商巨头悄悄启动了一项足以改变科技人才培养格局的计划。当我第一次在内部邮件里看到这个实习生项目的规模时,着实被那些数字震撼到了——这可能是商业公司历史上最大规模的纯科研人才培养计划。不同于常规的"大…

2026/8/25 19:03:07

Linux命令-xz(高压缩比压缩工具)

Linux命令-xz(高压缩比压缩工具)🔰 命令简介📖 语法格式⚙️ 常用选项💡 实战示例1. 基本压缩与解压2. 不同压缩级别3. 配合 tar 使用(.tar.xz 格式)4. 标准输入输出(管道操作&#…

2026/8/25 1:04:19

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 0:04:14

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

2026/8/25 0:04:14

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…