微服务与 Spring Cloud 概述
导学
假设你是飞翔科技公司的新任架构师白歌,CTO 大翔刚刚交给你一个任务:将公司的单体电商系统拆分为微服务架构。摆在你面前的第一个问题是——微服务到底是什么?Spring Cloud 又能帮我们解决哪些问题?
在接下来的学习之前请确认你已经掌握:
- Spring Boot 自动配置、起步依赖与 Actuator 基础
- 能独立开发 RESTful 单体应用
- 了解 CAP 定理、分布式系统的基本挑战
本教程直接进入微服务主题,不再重复上述内容。
从单体到微服务:一个真实的故事
飞翔科技的困境
2018 年,飞翔科技用 Spring Boot 构建了一个单体电商系统 feixiang-mall,包含以下模块:
feixiang-mall (单体应用,WAR 包部署到 Tomcat)
├── user-module # 用户管理
├── product-module # 商品管理
├── order-module # 订单管理
├── inventory-module # 库存管理
├── payment-module # 支付管理
└── notification-module # 通知管理
随着业务增长,小崔(后端开发)和黄俪(前端开发)越来越痛苦:
| 痛点 | 具体表现 |
|---|---|
| 部署耦合 | 修改通知模块的一行文案需要重新部署整个应用,每次部署耗时 20 分钟 |
| 扩展困难 | 大促期间只有订单和支付模块压力大,却不得不整体扩容 10 台机器 |
| 技术锁定 | 团队想用 Go 重写高并发的库存模块,但整个应用绑死在 JVM 上 |
| 故障爆炸半径大 | 通知模块的 while(true) 死循环导致整个商城 502 |
2019 年双十一当天,订单模块 OOM 导致全站崩溃 3 小时。CTO 大翔痛定思痛,决定启动微服务化改造。
微服务的定义
微服务架构是一种将单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,通过轻量级通信机制(通常是 HTTP/消息队列)互相协作。每个服务围绕业务能力构建,可以独立部署、独立扩展。
关键特征:
- 组件化:每个微服务是一个独立可替换的组件
- 围绕业务能力组织:跨职能团队负责端到端的业务能力
- 去中心化治理:每个服务可以选择最合适的技术栈
- 基础设施自动化:CI/CD、自动化测试、容器化部署
Spring Cloud 定位与版本体系
Spring Cloud 是什么
Spring Cloud 是基于 Spring Boot 的微服务基础设施框架集,它为分布式系统中的常见模式提供了开箱即用的解决方案:
| 微服务挑战 | Spring Cloud 解决方案 |
|---|---|
| 服务如何发现彼此? | 服务注册与发现(Eureka / Consul / Nacos) |
| 消费者如何选择提供者实例? | 客户端负载均衡(Spring Cloud LoadBalancer / Ribbon) |
| 如何优雅地发起服务调用? | 声明式服务调用(OpenFeign) |
| 下游挂了怎么办? | 服务容错与熔断(Resilience4j / Sentinel) |
| 配置如何统一管理? | 配置中心(Spring Cloud Config / Nacos Config) |
| 外部流量如何进入? | API 网关(Spring Cloud Gateway) |
| 如何追踪跨服务请求? | 分布式追踪(Micrometer Tracing + Zipkin) |
| 异步事件如何传递? | 消息驱动(Spring Cloud Stream) |
Spring Cloud 与 Spring Boot 的关系
关键结论:Spring Cloud 不重复造轮子,而是在 Spring Boot 之上集成 Netflix OSS、阿里巴巴、HashiCorp 等生态的优秀组件,通过自动配置和 Starter 机制让开发者快速集成。
版本命名与选择
Spring Cloud 历史版本以伦敦地铁站名为代号,从 2020.0.x 起改为年份+序号:
| Release Train | Spring Boot | Java | 状态 |
|---|---|---|---|
| 2023.0.x (Leyton) | 3.2.x / 3.3.x | 17+ | 推荐 |
| 2021.0.x (Jubilee) | 2.6.x / 2.7.x | 8+ | 维护中 |
| Hoxton | 2.2.x / 2.3.x | 8+ | 已终止 |
本教程示例基于 Spring Cloud 2023.0.x + Spring Boot 3.2.x + Java 17。
Maven BOM 统一版本管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2023.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
引入 BOM 后,添加 Spring Cloud 组件时无需声明版本号,由 BOM 统一控制兼容性。
本教程学习路径
教程按微服务调用的真实链路组织,从底层到上层逐层展开:
每个章节包含:
- 定位与问题场景:该组件解决的痛点
- 核心原理 + Mermaid 交互图
- 完整示例:飞翔科技公司真实场景
- 易错场景 + 面试考点
小结
本章从飞翔科技单体架构的痛点出发,引出了微服务的核心价值——独立部署、独立扩展、技术异构。Spring Cloud 作为微服务基础设施框架集,通过服务注册、负载均衡、熔断、配置中心、网关等组件,解决了分布式系统中的共性挑战。下一章开始,我们进入第一个核心问题:微服务之间如何发现对方?