从 0 开始学微服务:系统学习路线与完整规划
一、最终要掌握的能力图谱
1. 微服务架构设计能力
你要能回答:
- 什么时候该从单体拆微服务?什么时候不该拆?
- 服务怎么拆?按业务拆还是按功能拆?拆多细算合适?
- 一个电商系统拆成用户服务、商品服务、订单服务、支付服务、库存服务,边界怎么划?
- DDD(领域驱动设计)和微服务拆分是什么关系?
- 服务之间怎么通信?同步还是异步?HTTP 还是 RPC?
- 共享数据库还是每个服务独立数据库?
- 微服务的"分布式单体"陷阱是什么?怎么避免?
这部分决定了你微服务架构的"下限"。拆错了,后面所有治理都是在还债。
2. 服务通信与 RPC 框架能力
你要能做到:
- 理解 HTTP REST、gRPC、Dubbo 三种通信方式的区别和适用场景
- 知道 RPC 调用的完整流程:序列化、网络传输、反序列化、代理
- 能说清 Dubbo 的架构:Provider、Consumer、Registry、Monitor
- 知道 gRPC 基于 HTTP/2 + Protobuf 的优势
- 理解 IDL(接口定义语言)的作用
- 知道同步调用和异步调用各自的问题
- 能根据团队技术栈和业务场景做 RPC 框架选型
这部分是微服务最基础、最常用、最实战的能力。
3. 服务注册与发现能力
你要掌握:
- 为什么微服务需要注册中心?
- 注册中心的核心功能:注册、发现、健康检查、变更通知
- Zookeeper、Eureka、Nacos、Consul 各自的特点和选型
- CP 和 AP 的区别,注册中心选 CP 还是 AP?
- 服务注册的流程:启动注册、心跳续约、下线注销
- 服务发现的方式:客户端发现 vs 服务端发现
- 注册中心挂了怎么办?本地缓存兜底机制
- 多机房场景下注册中心怎么部署?
这部分决定了你的服务能不能找到彼此。
4. 服务治理能力
你要掌握:
- 负载均衡:随机、轮询、加权、一致性哈希各自适用场景
- 服务路由:按版本路由、按标签路由、灰度路由
- 服务限流:令牌桶、漏桶、滑动窗口
- 服务熔断:什么是熔断?Hystrix / Sentinel / Resilience4j 怎么选?
- 服务降级:核心链路保护,非核心功能降级
- 超时与重试:为什么重试不能乱加?幂等性怎么保证?
- 服务鉴权:服务间调用怎么做认证?
- 流量染色与灰度发布
这部分决定了你的微服务系统能不能扛住线上压力。
5. API 网关能力
你要掌握:
- 为什么需要 API 网关?
- 网关的核心功能:路由、鉴权、限流、协议转换、日志
- Kong、Spring Cloud Gateway、APISIX、Envoy 的选型
- 网关和 BFF(Backend For Frontend)的区别
- 网关的部署架构:单网关 vs 多级网关
- 网关怎么做灰度?怎么做 AB 测试?
- 网关的性能瓶颈和优化
这部分是微服务的统一入口,也是安全和流量控制的第一道防线。
6. 配置中心与服务配置管理能力
你要掌握:
- 为什么微服务需要配置中心?
- 本地配置 vs 远程配置 vs 环境变量
- Nacos Config、Apollo、Spring Cloud Config 的选型
- 配置的分类:环境配置、业务配置、开关配置
- 动态配置热更新机制
- 配置版本管理与灰度发布
- 敏感配置(数据库密码、密钥)怎么管理?
这部分决定了你能不能灵活管理几十上百个服务的配置。
7. 分布式数据一致性能力
你要掌握:
- CAP 定理到底在说什么?
- BASE 理论:最终一致性
- 分布式事务的几种方案:2PC、TCC、Saga、本地消息表、事务消息
- Seata 框架的 AT/TCC/Saga 模式
- 为什么大多数场景推荐最终一致性而不是强一致?
- 跨服务数据一致性的实战方案
- 幂等性设计:为什么这是分布式系统的基石?
- 补偿机制和对账机制
这部分是微服务最难、最容易出问题的地方。
8. 可观测性能力(监控、日志、链路追踪)
你要掌握:
- 可观测性三大支柱:Metrics(指标)、Logging(日志)、Tracing(链路追踪)
- 全链路追踪原理:TraceID、SpanID 怎么传递?
- Pinpoint、Zipkin、Jaeger、SkyWalking 的选型
- 日志采集:ELK(Elasticsearch + Logstash + Kibana)
- 指标监控:Prometheus + Grafana
- 告警怎么设计?告警疲劳怎么避免?
- 怎么从一个请求追踪到整个调用链?
- 怎么定位"某个服务偶尔超时"的根因?
这部分决定了你线上出问题时能不能快速定位和解决。
9. 容器化与 DevOps 能力
你要掌握:
- Docker 基础:镜像、容器、Dockerfile、docker-compose
- Kubernetes 核心概念:Pod、Service、Deployment、Ingress、ConfigMap、Secret
- 微服务怎么打包成容器镜像?
- K8s 怎么部署微服务?怎么做滚动更新?
- 怎么做服务的弹性伸缩(HPA)?
- CI/CD 流水线:代码提交 -> 构建 -> 测试 -> 部署自动化
- Jenkins / GitLab CI / GitHub Actions 基本使用
- 容器编排和服务治理的关系
这部分决定了你的微服务能不能高效交付和运维。
10. Service Mesh(服务网格)能力
你要掌握:
- 什么是 Service Mesh?为什么需要它?
- Sidecar 模式是什么?
- Istio 的架构:数据面(Envoy)+ 控制面
- Service Mesh 和传统 SDK 治理的区别
- Service Mesh 的优势:语言无关、治理下沉、统一管控
- Service Mesh 的代价:性能损耗、运维复杂度
- 什么团队适合上 Mesh?什么团队暂时不需要?
这部分是微服务架构的进阶方向。
二、学习路线:从基础到高阶
第一阶段:微服务基础认知与架构设计
目标:先搞清楚"为什么要微服务,怎么拆"。
要学的内容:
- 单体架构的优势和痛点
- 微服务架构的核心特征
- 微服务的优势与代价
- 什么时候该拆微服务?什么时候不该拆?
- 服务拆分原则:高内聚、低耦合
- DDD 领域驱动设计基础:限界上下文、聚合根
- 服务拆分实战:电商系统怎么拆?
- 微服务的数据库策略:每个服务独立数据库
- 微服务的常见反模式:分布式单体、过度拆分、共享数据库
重点认知:
不是所有系统都需要微服务。3 个人的团队硬上微服务,可能比单体更痛苦。拆服务的核心不是"拆代码",而是"拆业务边界和数据边界"。如果两个服务离了对方都没法工作,那就不应该拆开。
实战建议: 自己设计一套电商系统的服务拆分方案,画出服务边界图。
第二阶段:服务通信与 RPC 框架
目标:进入微服务的核心通信层。
必学内容:
- HTTP REST 通信
- RPC 通信原理:代理、序列化、传输、反序列化
- Dubbo 核心架构与使用
- gRPC 核心架构与使用
- Protobuf(Protocol Buffers)序列化
- 同步调用 vs 异步消息(MQ)
- Dubbo vs gRPC vs Spring Cloud Feign 选型
- 服务契约管理与接口版本化
实战建议: 搭建两个服务,通过 Dubbo/gRPC 调用,体验完整流程。
第三阶段:服务注册发现与配置中心
目标:让服务能自动找到彼此,配置能统一管理。
必学内容:
- 注册中心原理:注册、发现、心跳、通知
- Zookeeper 基础与特点(CP)
- Nacos 注册中心与配置中心(AP/CP 可切换)
- Consul、Eureka 了解即可
- 客户端发现 vs 服务端发现
- 配置中心的核心功能:动态推送、版本管理、环境隔离
- Nacos Config / Apollo 选型
必须搞懂的问题:
| 问题 | 要点 |
|---|---|
| 注册中心选 CP 还是 AP? | 大多数场景选 AP,可用性优先 |
| 注册中心挂了会怎样? | 已有调用靠本地缓存继续,新服务发现不了 |
| 配置和本地文件冲突了? | 远程配置优先级更高 |
| 敏感配置怎么管? | 加密存储 + 权限控制 |
实战建议: 本地搭建 Nacos,实现 3 个服务的注册与发现,模拟宕机场景。
第四阶段:服务治理(限流、熔断、降级、负载均衡)
目标:让微服务系统具备生产级的容错和弹性能力。
必学内容:
- 负载均衡策略:随机、轮询、加权轮询、一致性哈希
- 服务限流:令牌桶算法、漏桶算法、滑动窗口
- 服务熔断:熔断器状态机(关闭 -> 打开 -> 半开)
- 服务降级:返回默认值、返回缓存、关闭非核心功能
- Sentinel 核心使用(推荐)
- 超时控制与重试机制
- 灰度发布、蓝绿发布、金丝雀发布
重点场景:
| 场景 | 解决方案 |
|---|---|
| 下游服务变慢 | 熔断 + 超时控制,防止拖垮上游 |
| 秒杀场景 | 限流,超出容量直接拒绝 |
| 服务出问题 | 降级返回兜底数据,不全站崩溃 |
| 重试风暴 | 先保证幂等,再加重试 |
| 灰度发布 | 只放 5% 流量到新版本 |
实战建议: 基于 Sentinel 配置限流、熔断、降级,设计灰度发布方案。
第五阶段:API 网关
目标:统一微服务的流量入口。
必学内容:
- 网关核心职责:路由转发、鉴权认证、限流熔断、协议转换、日志
- Spring Cloud Gateway 核心使用
- Kong / APISIX 了解
- 网关层 JWT 鉴权
- 网关高可用部署
实战建议: 搭建 Spring Cloud Gateway,配置路由、鉴权、限流。
第六阶段:分布式数据一致性
目标:解决微服务最难的问题。
必学内容:
- CAP 定理 / BASE 理论
- 分布式事务方案对比:
| 方案 | 一致性 | 性能 | 复杂度 | 适用场景 |
|---|---|---|---|---|
| 2PC | 强一致 | 差 | 中 | 传统数据库,少用 |
| TCC | 强一致 | 中 | 高 | 资金类强一致场景 |
| Saga | 最终一致 | 好 | 高 | 长流程业务编排 |
| 本地消息表 | 最终一致 | 好 | 低 | 大多数业务场景 |
| 事务消息 | 最终一致 | 好 | 中 | 有 MQ 的场景 |
- Seata 框架使用
- 幂等性设计:token 机制、唯一索引、状态机
- 补偿机制与对账机制
实战建议: 设计"下单 -> 扣库存 -> 扣余额"场景,用本地消息表实现最终一致性。
第七阶段:可观测性
目标:让微服务系统"可视、可查、可追踪"。
必学内容:
- 全链路追踪原理:TraceID、SpanID
- SkyWalking / Zipkin 选型
- ELK 日志采集
- Prometheus + Grafana 指标监控
- 核心监控指标:QPS、RT、错误率、CPU、内存
- 告警设计与分级
实战建议: 接入 SkyWalking + ELK + Prometheus,注入 TraceID 实现跨服务日志关联。
第八阶段:容器化与 CI/CD
目标:让微服务具备自动化交付和弹性运维能力。
必学内容:
- Docker 基础
- Kubernetes 核心概念:Pod、Deployment、Service、Ingress、ConfigMap、HPA
- 微服务 K8s 部署方案
- 滚动更新与回滚
- CI/CD 流水线
实战建议: 将微服务容器化,部署到本地 K8s,搭建 CI/CD 流水线。
第九阶段:Service Mesh
目标:了解微服务架构的演进方向。
必学内容:
- Sidecar 代理模式
- Istio 架构:Envoy + Istiod
- Service Mesh vs SDK 治理
- 流量管理、安全、可观测性
第十阶段:面试题 + 项目实战复盘
- 按专题刷面试题
- 画完整的微服务架构图
- 复盘实验
- 模拟面试
三、大厂常见坑点
1. 过度拆分服务
3 个人的团队拆了 20 个服务,联调成本比开发成本还高。
先做好模块化,再考虑拆服务。拆分粒度跟团队规模匹配。
2. 分布式事务到处用
每个跨服务操作都上 Seata,性能急剧下降。
大多数场景用最终一致性,优先考虑本地消息表 + 异步补偿。
3. 同步调用链路过长
A -> B -> C -> D -> E任何一个环节慢/挂,整条链路都受影响。
同步链路不超过 3~4 层,能异步的用消息队列解耦。
4. 没有做幂等就加重试
重试导致重复下单、重复扣款。
先做幂等,再加重试。 幂等手段:唯一请求 ID、数据库唯一索引、状态机。
5. 注册中心当配置中心用
在 Zookeeper 里存大量业务配置,负载过高。
注册中心只管服务注册与发现,配置走专门的配置中心。
6. 日志和监控形同虚设
没有 TraceID,跨服务查日志靠猜。告警太多全部忽略。
日志必须包含 TraceID。告警要分级,P0 必须响应。
7. 全部流量走同步
下单后同步发短信、发邮件、推通知,一个环节慢用户下单就慢。
核心链路同步,非核心链路异步,消息队列做解耦。
8. 不做灰度直接全量发布
新版本有 bug,全量用户受影响。
先灰度 1%~5% 流量,观察监控正常后逐步放量。
9. 微服务共享数据库
多个服务直连同一个数据库,表结构耦合,本质还是"分布式单体"。
每个服务有自己的数据库,通过 API 交换数据。
四、12~16 周学习计划
| 周数 | 阶段 | 重点内容 |
|---|---|---|
| 1-2 | 架构设计 | 单体 vs 微服务、拆分原则、DDD 基础 |
| 3-4 | RPC 通信 | Dubbo、gRPC、Protobuf、框架选型 |
| 5 | 注册发现 | Nacos、配置中心、动态配置 |
| 6-7 | 服务治理 | 限流、熔断、降级、Sentinel、灰度 |
| 8 | API 网关 | Spring Cloud Gateway、鉴权、限流 |
| 9-10 | 数据一致性 | 分布式事务、Seata、幂等、补偿 |
| 11 | 可观测性 | SkyWalking、ELK、Prometheus |
| 12-13 | 容器化 | Docker、K8s、CI/CD |
| 14 | Service Mesh | Istio、Sidecar |
| 15-16 | 面试复盘 | 按专题刷题、画架构图、模拟面试 |
五、优先级建议
必须精通
- 微服务拆分原则与方法
- RPC 通信(至少精通 Dubbo 或 gRPC 之一)
- 服务注册与发现(Nacos)
- 服务治理(限流、熔断、降级)
- 分布式数据一致性方案
- 全链路追踪
- Docker + K8s 基础
- 幂等性设计
可以先掌握到"会讲"
- Service Mesh 原理
- Istio 深入
- 多机房流量调度
- 异地多活
- DDD 深入
- 分布式事务高阶(Saga 编排模式)
六、推荐学习方式
微服务最怕"看架构图觉得都懂了,自己搭就废了"。
- 每个知识点都动手搭环境 -- 学注册中心就自己搭 Nacos,停掉看变化
- 每学完一个模块就输出一篇总结 -- 输出极大提升掌握度
- 建自己的面试题库 + 实验库 -- 每道题写标准答案 + 原理 + 案例
- 用电商微服务项目贯穿 -- 覆盖所有微服务问题
七、面试高频问题清单
架构设计类
- 什么是微服务?和单体架构有什么区别?
- 微服务的优缺点各是什么?
- 你怎么判断一个系统该不该拆微服务?
- 微服务怎么拆分?有什么原则?
- 什么是分布式单体?怎么避免?
通信类
- RPC 和 HTTP 有什么区别?
- Dubbo 的架构是什么?
- gRPC 为什么快?
- 同步调用和异步消息各自适合什么场景?
注册发现类
- 注册中心的作用是什么?
- Nacos 和 Zookeeper 有什么区别?
- 注册中心选 CP 还是 AP?为什么?
- 注册中心挂了会怎样?
服务治理类
- 限流算法有哪些?各自优缺点?
- 什么是服务熔断?熔断器的状态机?
- 重试有什么风险?怎么避免?
- 灰度发布怎么做?
数据一致性类
- CAP 定理是什么?
- 分布式事务有哪些方案?
- TCC 和 Saga 的区别?
- 什么是幂等?怎么设计?
可观测性类
- 全链路追踪原理是什么?
- TraceID 怎么跨服务传递?
- 怎么定位"某个服务偶尔超时"的问题?
容器化与部署类
- Docker 和虚拟机的区别?
- K8s 核心概念?
- 微服务怎么做滚动更新?
Service Mesh 类
- 什么是 Service Mesh?
- Sidecar 模式是什么?
- Service Mesh 和传统 SDK 治理的区别?
实战项目: 本路线核心知识点已在 Ecommerce Microservices 项目中落地 -- 6 服务独立部署、API 网关路由 + 认证 + 限流 + 熔断、Kafka 异步通信、TraceID 全链路追踪、Docker Compose 一键启动。