主题
Spring 微服务学习路线
适用版本:Spring Boot 3.2.x + Spring Cloud 2023.0.x(Leyton)+ Spring Cloud Alibaba 2023.0.x;Nacos 2.x、Sentinel 1.8.x、Seata 2.x。版本对应以官方 Release Notes 为准。
这套内容解决什么问题
单体拆成多个服务后,会依次遇到:实例地址会变、配置要热更新、入口要统一鉴权与限流、调用方要选实例并设超时、下游故障要止损、跨库写入要一致。本目录按这个顺序组织,不按组件清单组织。
前置条件
- Java 17、Maven 3.8+、Docker(跑 Nacos/Seata)。
- 知道 Spring Boot 自动装配与
@ConfigurationProperties;不熟先读 03-Spring-Boot自动装配。 - 知道 HTTP、DNS、数据库本地事务的基本概念。
环境自检:
bash
java -version && mvn -v && docker version阅读顺序
| 顺序 | 篇目 | 解决的问题 | 读完的验收动作 |
|---|---|---|---|
| 1 | 01-微服务架构概述 | 组件各自负责什么、请求怎么走 | 画出自己项目的调用链 |
| 2 | 02-服务注册与发现 | 实例地址变化后调用方怎么找到它 | 起一个 Nacos,用 API 查到实例 |
| 3 | 03-配置中心 | 改配置不重启 | 改一条配置并在日志看到刷新 |
| 4 | 04-远程调用与负载均衡 | 声明式调用、选实例、超时与重试 | 两个服务通过 Feign 调通 |
| 5 | 05-服务网关 | 统一入口、鉴权、路由 | 通过 Gateway 访问到后端 |
| 6 | 06-熔断降级与限流 | 下游慢时不拖死自己 | 触发一次限流并看到 block |
| 7 | 07-分布式事务 | 跨库写入的一致性 | 回滚一次并核对 undo_log |
| 8 | 08-微服务治理与架构决策 | 同步/异步、拆分、版本、选型 | 写一份 ADR |
| 9 | 09-Dubbo核心原理 | RPC 框架与 Spring Cloud 的边界 | 起一个 Dubbo 服务并用 QoS 查看 |
| 10 | 10-全链路灰度与智能路由 | 灰度标识怎么跨网关、线程池和 MQ 传递,按标签选实例 | 用 tag 调一次,确认整条链路都命中灰度实例 |
| 11 | 11-优雅上下线与启动检查 | 启动何时接流量、停机怎么排空在途请求 | 滚动发布时观察错误率与在途请求归零 |
| 12 | 12-全链路超时与自适应限流 | 超时预算怎么传、阈值怎么自动收放 | 构造下游变慢,确认上游按剩余预算快速失败 |
| 13 | 13-企业级可观测性与故障定位 | 日志、指标、追踪的分工与上下文透传 | 用 traceId 找到一条慢请求的慢 span |
| 14 | 14-框架定制与配置治理 | starter、自动配置、多配置源与版本治理 | 写一个最小 starter 并验证条件装配 |
| 15 | 15-认证、加密与端点安全 | 应用身份、签名、Actuator 保护与日志脱敏 | 用签名请求调通一次,并验证重放被拒 |
| 16 | 16-分布式ID | Snowflake 位结构、workerId 分配与时钟回拨 | 起两个实例,确认生成的 ID 不重复 |
| 17 | 17-流量切换平台:多入口拉入拉出与灰度编排 | 多类入口怎么按同一顺序摘流量、两阶段发布与状态机 | 用一个应用走完「查状态 → 拉出 → 对账」 |
原「微服务生产踩坑」已把独有内容并入 03/04/05/06/07,不再单独成篇;原 10-Dubbo 顺延为 09,编号保持连续。生产执行项见 99-生产检查清单。
怎么读
- 先读 01,建立调用链;再按 02→06 顺序读,每篇都跑一遍「最小上手」。
- 07 只在确实有跨库写入时读;能用本地事务或本地消息表解决的,不要引入 Seata。
- 08 是决策篇,建议在项目立项或架构评审时读,不要求背结论。
- 09 与 01–08 不是替代关系:Dubbo 解决服务间 RPC,Gateway/Nacos 仍可共存。
- 10–17 是企业落地篇:服务数量多、要统一治理时再读;只有一两个服务时,先把 01–06 用稳。
- 17 与 10 的分工:10 讲请求进来后按标签选实例,17 讲变更时怎么把某个实例或机房从所有入口摘干净。
学完的验收
不看笔记,能完成下面三件事,说明这一组内容已经掌握:
- 画出「客户端 → 网关 → 服务 A → 服务 B」的调用链,并标出每一跳的超时、重试、熔断配置在哪。
- 起 Nacos 和两个服务,改一条配置确认不重启生效;再停一个实例,确认调用方在缓存 TTL 内切换。
- 对一个跨库写入场景,说明为什么不用 Seata,或说明用 AT 时 undo_log 与全局锁各自解决什么。
与相邻目录的关系
- Spring 内核(IoC、事务、自动装配、MVC)在 26_Spring,本目录不重复讲。
- 网络底层与 Netty 在 23_Netty;Gateway 的 WebFlux 模型可对照阅读。
- 服务拆分与限界上下文在 28_DDD。
版本基线
| 组件 | 本目录示例版本 | 关键差异 |
|---|---|---|
| Spring Boot | 3.2.x | 3.x 要求 Java 17;配置导入用 spring.config.import |
| Spring Cloud | 2023.0.x | Ribbon 已在 2020.0 移除,统一用 Spring Cloud LoadBalancer |
| Spring Cloud Alibaba | 2023.0.x | 与 Boot 3.2/Cloud 2023.0 对应 |
| Nacos | 2.x | 客户端走 gRPC 长连接,需放通 9848/9849 |
| Sentinel | 1.8.x | 熔断规则用慢调用比例/异常比例/异常数 |
| Seata | 2.x | 配置前缀 seata.*,控制台 7091、TC 8091 |
具体小版本以官方兼容性矩阵为准;升级前先在测试环境验证注册、配置、序列化三件事。