微服务全体系学习笔记(从入门到落地)

一、微服务核心认知(入门第一步,先懂底层逻辑,再碰技术)

1. 什么是微服务

微服务是一种分布式架构风格 ,核心是将一个大型单体应用,按业务领域边界 拆分成多个小型、自治、可独立部署的服务,每个服务聚焦单一业务职责,服务之间通过轻量级通信协议(HTTP/RPC/ 消息队列)协同,共同完成完整的业务功能。

与之对应的是传统单体架构,两者核心差异如下:

维度 单体架构 微服务架构
代码结构 所有业务模块打包在一个工程,部署在一个进程 按业务拆分为多个独立工程,每个服务独立部署在独立进程
数据库 共享一个数据库 每个服务独立数据库,数据自治
技术栈 统一技术栈,无法灵活替换 每个服务可按需选择不同技术栈
部署迭代 一处修改,全量打包部署,风险高 单个服务可独立开发、测试、部署,迭代效率高
扩展能力 整体扩容,无法针对高负载模块单独扩容 可针对高并发服务单独扩容,资源利用率高
故障影响 一处故障,整个应用崩溃 故障隔离,单个服务故障不影响整体核心链路
复杂度 开发简单,分布式复杂度低 引入分布式全链路复杂度,运维成本高

2. 微服务的核心特征

  • 单一职责:一个服务只负责一个明确的业务领域,做到 "高内聚、低耦合"
  • 服务自治:每个服务拥有独立的开发、测试、部署、运维生命周期,不依赖其他服务的部署
  • 数据自治:每个服务管理自己的数据库,禁止跨服务直接访问数据库,仅通过接口暴露数据
  • 轻量级通信:服务间采用与语言、平台无关的通信协议(RESTful HTTP、RPC、消息队列)
  • 去中心化治理:避免统一的技术标准强制约束,允许团队按需选择技术栈;同时避免集中式的服务管控节点,提升可用性
  • 故障隔离:具备完善的容错、熔断、降级能力,防止单个服务故障引发全链路雪崩

3. 微服务的优缺点 & 适用场景

核心优势
  1. 高可扩展性:可针对高频业务单独扩容,精准应对流量峰值
  2. 迭代效率高:多团队可并行开发不同服务,互不干扰,缩短交付周期
  3. 技术栈灵活:可针对不同服务的特性选择适配的技术(如大数据服务用 Python,核心交易用 Java)
  4. 故障隔离性强:单个服务故障不会导致整个系统瘫痪,提升系统可用性
  5. 可渐进式重构:老旧单体系统可逐步拆分迁移到微服务,无需一次性全量重构
核心劣势
  1. 分布式系统复杂度陡增:引入了网络延迟、数据一致性、服务依赖、链路追踪等一系列分布式问题
  2. 运维成本大幅提升:从管理 1 个单体应用,变成管理十几个甚至几十个服务,对运维、监控、容器化能力要求极高
  3. 排障难度大:一个业务请求可能跨多个服务,问题定位需要全链路追踪能力
  4. 分布式事务难题:跨多个服务 / 数据库的事务一致性,是微服务最棘手的问题之一
  5. 接口兼容与版本管理成本高:服务间依赖复杂,接口变更需要严格的版本管理,避免引发依赖服务故障
适用场景 & 不适用场景

适用场景

  • 中大型团队、业务复杂度高,需要多团队并行开发
  • 业务模块访问量差异大,需要针对性扩容
  • 对系统可用性、迭代效率有高要求,能接受对应的运维成本
  • 业务需要长期迭代,架构需要具备灵活的扩展能力

不适用场景

  • 初创团队、小项目,业务简单、流量小,硬上微服务只会降低开发效率
  • 团队缺乏分布式系统、容器化运维的技术积累
  • 业务逻辑强耦合,无法清晰拆分业务边界

4. 微服务核心理论基础

  • 康威定律:系统设计的边界,必然与组织沟通边界保持一致。简单说就是 "团队结构决定系统架构",微服务拆分必须匹配团队的组织架构,一个服务最好由一个完整的小团队负责。
  • CAP 定理:分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)三者不可兼得,最多只能满足两项。微服务架构中,网络分区是必然存在的,因此只能在 CP 和 AP 之间做取舍:核心交易场景优先 CP,非核心查询场景优先 AP。
  • BASE 理论 :CAP 定理的落地实践,核心是基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventually Consistent)。微服务中,绝大多数场景不需要强一致性,只需要保证数据最终一致即可,以此换取系统的高可用性。

二、微服务学习前置知识(必须先打牢,否则寸步难行)

微服务不是独立的技术,而是架构体系,必须先掌握以下基础,否则直接学习会举步维艰。

核心前置(必须熟练掌握)

  1. 编程语言 & 基础框架
    • Java 8+ 核心语法、Lambda、Stream、并发编程基础
    • Maven/Gradle 依赖管理、多模块项目搭建
    • Spring Boot 2.x/3.x:微服务的基石,必须熟练掌握自动配置、Starter、AOP、拦截器、全局异常处理、整合 MyBatis/MyBatis-Plus、Redis 等
  2. 计算机网络基础
    • HTTP/HTTPS 协议、TCP/IP 四层模型、RESTful API 设计规范
    • RPC 基本原理、Socket 网络编程基础
  3. 数据存储基础
    • MySQL 核心原理、索引、事务、锁机制、分库分表基础
    • Redis 核心数据结构、缓存策略、分布式锁、缓存雪崩 / 击穿 / 穿透解决方案
  4. 容器化基础
    • Docker 核心操作、镜像 / 容器管理、Dockerfile 编写、镜像仓库使用
    • 微服务目前几乎 100% 采用容器化部署,Docker 是必备基础

可选前置(建议掌握,提升学习效率)

  • Linux 常用命令、服务部署、Shell 脚本基础
  • 消息中间件基础(RabbitMQ/RocketMQ/Kafka)
  • Nginx 反向代理、负载均衡配置
  • Git 版本控制、分支管理规范

三、微服务核心组件 & 核心原理(重中之重)

微服务的本质,是用一系列组件解决分布式架构带来的各类问题。每个组件都要搞懂解决什么问题→核心原理→主流选型三个核心问题。

1. 服务拆分原则(微服务的第一步,拆不好全是坑)

服务拆分是微服务最核心的前提,拆分不合理,后续所有技术都无法弥补架构缺陷。

  • 核心拆分原则:高内聚低耦合、单一职责、数据自治、避免过度拆分、优先规避分布式事务
  • 拆分方法论
    1. 业务领域边界拆分(核心):不是按技术层(Controller/Service/Dao)拆分,而是按业务领域(如用户、商品、订单、支付)拆分
    2. 基于 DDD(领域驱动设计)的限界上下文拆分:限界上下文就是业务边界,一个限界上下文对应一个微服务
    3. 遵循康威定律:拆分结果匹配团队组织架构,避免一个服务由多个团队维护,也避免一个团队维护过多服务
  • 新手避坑:初期优先粗粒度拆分,后续再逐步细化,不要一上来就拆十几个服务,导致复杂度爆炸。

2. 服务注册与发现

  • 解决的问题:微服务实例动态上下线、服务地址动态管理、服务调用的自动寻址问题。如果没有注册中心,需要手动维护所有服务的地址,无法应对容器化环境下实例 IP 动态变化的场景。
  • 核心原理
    1. 服务注册:服务启动时,将自己的 IP、端口、服务名等信息上报到注册中心
    2. 服务续约:服务定期向注册中心发送心跳,证明自己存活
    3. 服务下线:服务停止时主动注销,注册中心也会剔除长时间未发送心跳的实例
    4. 服务拉取:服务消费者从注册中心拉取对应服务的实例列表,本地缓存
  • 主流选型
    • Nacos(国内首选):阿里开源,同时支持注册中心 + 配置中心,AP/CP 模式可切换,国内文档完善,社区活跃
    • 其他选型:Eureka(Netflix 开源,已停更)、Consul、Etcd

3. 配置中心

  • 解决的问题:微服务实例多、环境多,配置分散管理难度大;配置修改需要重启服务;配置无版本管理、无权限控制、无环境隔离。
  • 核心原理:配置统一存储在配置中心,服务启动时拉取对应配置,配置变更时,配置中心主动推送给服务,实现配置动态刷新,无需重启服务。
  • 主流选型
    • Nacos(国内首选):和注册中心共用一套集群,降低部署成本,支持动态刷新、环境隔离、权限控制
    • 其他选型:Apollo(携程开源,功能强大)、Spring Cloud Config(原生组件,功能较弱)

4. 服务通信

服务间通信是微服务协同的核心,分为同步调用异步调用两大类,适用于不同的业务场景。

同步通信
  • 适用场景:需要实时获取返回结果的业务,比如下单前查询商品库存
  • 主流实现方式:
    1. RESTful HTTP :基于 HTTP 协议,JSON 格式传输,跨语言、跨平台,简单易用,主流实现为OpenFeign(Spring Cloud 原生组件,可快速实现 HTTP 调用,集成负载均衡)
    2. RPC :远程过程调用,基于 TCP 协议,二进制传输,性能更高,主流实现为Dubbo(阿里开源)、gRPC(Google 开源)
  • 选型建议:对内服务间调用,追求性能选 RPC;对外暴露接口、跨语言场景,选 HTTP RESTful。
异步通信
  • 适用场景:不需要实时结果、解耦服务、流量削峰、异步化处理的场景,比如订单支付成功后,异步发送短信通知、更新用户积分
  • 核心实现:基于消息队列(MQ)实现,主流选型为 RocketMQ(阿里开源,国内主流)、RabbitMQ、Kafka
  • 核心优势:服务解耦、流量削峰、异步提升吞吐量、故障隔离(下游服务故障不影响上游核心流程)

5. 负载均衡

  • 解决的问题:将请求均匀分发到多个服务实例,提升系统吞吐量和可用性,避免单个实例压力过大
  • 两大类型
    1. 客户端负载均衡 (微服务主流):负载均衡逻辑在服务消费者端执行,消费者本地缓存服务实例列表,根据负载均衡策略选择实例发起调用,主流实现为Spring Cloud LoadBalancer
    2. 服务端负载均衡:集中式负载均衡,请求先经过负载均衡节点,再转发到服务实例,主流实现为 Nginx、F5
  • 核心负载策略:轮询、权重轮询、随机、一致性哈希、最小连接数

6. 服务容错:熔断、降级、限流

  • 解决的核心问题 :分布式系统的雪崩效应------ 单个服务故障,导致上游调用服务线程阻塞,故障逐级向上扩散,最终导致整个集群瘫痪。
  • 核心概念
    1. 熔断:当下游服务故障比例达到阈值(比如 50% 请求超时),熔断器直接打开,后续请求不再调用故障服务,直接返回降级结果,避免故障扩散;一段时间后,熔断器进入半开状态,尝试放行少量请求,验证服务是否恢复
    2. 降级:高峰期或系统故障时,主动关闭非核心功能(比如商品详情页的推荐功能),释放服务器资源,保障核心功能(下单、支付)的可用
    3. 限流:限制请求的并发数 / QPS,超过阈值的请求直接拒绝,防止系统被突发流量打垮
  • 主流选型
    • Sentinel(国内首选):阿里开源,轻量级,支持熔断、降级、限流、热点参数防护,国内文档完善,适配 Spring Cloud Alibaba
    • 其他选型:Resilience4j、Hystrix(Netflix 开源,已停更)

7. API 网关

  • 解决的问题:微服务有多个服务实例,对外暴露的地址分散,无法统一管理认证授权、流量控制、路由规则;客户端需要对接多个服务地址,对接成本高。
  • 核心定位 :微服务集群的唯一入口,所有外部请求先经过网关,再转发到对应服务,类似 "小区大门"。
  • 核心功能:路由转发、统一认证授权、流量控制、熔断降级、日志监控、协议转换、跨域处理、IP 黑白名单
  • 主流选型
    • Spring Cloud Gateway(首选):Spring Cloud 官方原生网关,基于 WebFlux 非阻塞响应式编程,性能高,完美适配 Spring Cloud 生态
    • 其他选型:APISIX、Kong、Zuul(Netflix 开源,已停更,性能差)

8. 分布式事务

  • 解决的问题:跨多个服务 / 多个数据库的事务一致性问题。单体架构中,一个事务内的多个操作都在一个数据库中,本地事务即可保证一致性;微服务中,下单扣库存、扣余额分属不同服务的不同数据库,本地事务无法生效。

  • 核心解决方案 & 适用场景

    方案 核心原理 一致性 性能 适用场景
    AT 模式(Seata) 两阶段提交,自动生成反向回滚 SQL,无侵入 强一致性 绝大多数非高并发的核心交易场景,首选方案
    TCC 手动实现 Try-Confirm-Cancel 三个阶段,代码侵入性强 强一致性 高并发、短事务的核心交易场景
    SAGA 长事务拆分多个本地事务,失败时执行补偿事务 最终一致性 长事务、流程复杂的业务场景
    事务消息 基于 MQ 的半消息机制,保证本地事务和消息发送的原子性 最终一致性 异步化、可接受最终一致性的场景
  • 主流选型Seata(阿里开源,国内主流),支持 AT/TCC/SAGA 等多种模式,适配 Spring Cloud Alibaba,学习成本低。

  • 新手避坑:优先通过业务设计避免分布式事务,而不是一上来就用分布式事务方案。

9. 分布式链路追踪

  • 解决的问题:一个业务请求可能跨多个服务,出现超时、报错时,无法快速定位是哪个服务出了问题;无法排查全链路的性能瓶颈。
  • 核心原理 :为每个请求生成唯一的TraceID ,请求每经过一个服务,生成对应的SpanID,通过 TraceID 串联整个调用链路,记录每个服务的调用耗时、状态、异常信息,最终实现全链路可视化。
  • 主流选型
    • SkyWalking(国内首选):Apache 顶级项目,无侵入式埋点,支持链路追踪、性能监控、告警,功能全面,国内社区活跃
    • 其他选型:Zipkin、Jaeger、Pinpoint

10. 配套基础设施

  • 日志中心:解决服务实例多、日志分散的问题,主流方案为 ELK 栈(Elasticsearch+Logstash+Kibana)、EFK 栈
  • 监控告警体系 :实时监控服务的 CPU、内存、接口响应时间、错误率等指标,故障提前预警,主流方案为Prometheus + Grafana(行业标准)
  • 容器编排 :大规模微服务集群的部署、调度、运维,主流方案为Kubernetes(K8s)

四、主流微服务技术栈选型指南

目前国内企业主流的微服务技术栈分为三大体系,新手优先选择 Spring Cloud Alibaba,避免走弯路。

1. 首选体系:Spring Cloud Alibaba(新手入门首选,国内企业主流)

  • 优势:组件全、国内文档丰富、社区活跃、长期维护、完美适配国内云环境,学习资料多,踩坑容易找到解决方案

  • 版本建议(稳定版,资料最多):Spring Boot 2.7.x + Spring Cloud 2021.0.x + Spring Cloud Alibaba 2021.0.1.0

  • 核心组件对应关系:

    微服务核心能力 对应组件
    服务注册与发现 Nacos
    配置中心 Nacos
    服务远程调用 OpenFeign / Dubbo
    负载均衡 Spring Cloud LoadBalancer
    熔断降级限流 Sentinel
    API 网关 Spring Cloud Gateway
    分布式事务 Seata
    分布式链路追踪 SkyWalking
    监控告警 Prometheus + Grafana
    日志中心 ELK/EFK

2. 原生 Spring Cloud(Netflix 体系,不推荐新手入门)

  • 现状:Netflix 开源的核心组件(Eureka、Ribbon、Hystrix、Zuul)大多已停止维护,国内企业使用占比持续下降
  • 仅适合:了解微服务发展历史,维护老旧项目

3. 云原生体系:Service Mesh(服务网格,进阶学习)

  • 核心思想:将业务逻辑和网络通信解耦,微服务的流量管控、熔断、限流、链路追踪等能力,全部下沉到基础设施层,通过 Sidecar 代理实现,业务代码无侵入
  • 主流选型:Istio + Envoy
  • 适用场景:大规模微服务集群、多语言技术栈、云原生环境
  • 学习建议:新手不建议直接上手,先把 Spring Cloud 体系搞懂,理解微服务的核心问题和解决方案后,再学习 Service Mesh

五、循序渐进的学习路径 & 实操计划

新手严格按照以下阶段学习,避免盲目看视频、堆技术栈,做到学一个、会一个、用一个。

阶段一:筑基阶段(2-3 周,必须打牢,禁止跳步)

  • 核心目标:熟练掌握 Spring Boot,搞定所有前置知识
  • 学习内容:
    1. Java 8+ 新特性(Lambda、Stream、Optional、线程池)
    2. Maven 多模块项目搭建、依赖管理
    3. Spring Boot 核心:自动配置原理、Starter 开发、AOP、全局异常处理、参数校验、整合 MyBatis-Plus、Redis、Swagger/Knife4j
    4. Docker 核心操作、Dockerfile 编写、镜像打包与推送
  • 实操任务:
    1. 用 Spring Boot 开发一个单体 CRUD 项目(如商品管理系统),包含完整的接口规范、异常处理、数据库操作、缓存功能
    2. 为项目编写 Dockerfile,打成镜像并在本地运行

阶段二:核心组件入门阶段(3-4 周,逐个攻破)

  • 核心目标:掌握每个核心组件的作用、原理、基础使用,理解每个组件解决的问题
  • 学习顺序(按依赖关系,不要乱序):
    1. 微服务基础理论:康威定律、CAP/BASE 理论、服务拆分原则
    2. Nacos:搭建 Nacos 服务,实现 2 个服务的注册发现,配置集中管理与动态刷新
    3. OpenFeign + LoadBalancer:实现 2 个服务的远程调用,验证负载均衡效果
    4. Sentinel:实现熔断、降级、限流,模拟服务故障,验证容错效果
    5. Spring Cloud Gateway:实现路由转发、断言、过滤器、集成 Sentinel 限流
    6. Seata:搭建 Seata 服务,实现 AT 模式的分布式事务,模拟下单扣库存的跨服务事务场景
    7. SkyWalking:搭建 SkyWalking 服务,实现微服务全链路追踪,查看调用链路与性能指标
  • 实操要求:每个组件学完,必须写对应的 Demo,最终整合所有组件,搭建一个包含 3-4 个服务的微服务 Demo,跑通完整的调用链路

阶段三:项目实战阶段(4-6 周,知识体系化的核心)

  • 核心目标:从零到一搭建一个完整的、可落地的微服务项目,把所有知识点串联起来,形成完整的体系
  • 推荐实战项目:电商微服务系统(业务场景经典,覆盖所有微服务核心能力)
  • 项目拆分示例:
    1. 公共模块:common(通用工具类、全局异常、通用实体、枚举)
    2. 用户服务:user-service(用户注册登录、信息管理、权限认证)
    3. 商品服务:goods-service(商品管理、库存管理)
    4. 订单服务:order-service(订单创建、订单状态管理)
    5. 支付服务:pay-service(支付对接、支付状态同步)
  • 项目必须包含的核心能力:
    • 基于 Nacos 的服务注册发现与配置管理
    • 基于 OpenFeign 的服务间远程调用
    • 基于 Gateway 的统一网关入口与认证授权
    • 基于 Sentinel 的熔断降级限流
    • 基于 Seata 的分布式事务(下单扣库存)
    • 基于 SkyWalking 的全链路追踪
    • 基于 Redis 的缓存与分布式锁
    • 基于 RocketMQ 的异步解耦(支付成功异步通知)
  • 实操要求:
    1. 规范的多模块 Maven 结构,清晰的代码分层
    2. 每个服务独立数据库,禁止跨服务访问数据库
    3. 编写完整的接口文档、单元测试
    4. 为每个服务编写 Dockerfile,实现容器化部署
    5. 本地完整运行,模拟真实业务场景,完成全流程测试

阶段四:进阶 & 优化阶段(持续学习)

  • 核心目标:解决微服务高阶问题,提升系统的高可用、高并发、高性能
  • 学习内容:
    1. DDD 领域驱动设计:深入学习 DDD,用 DDD 指导服务拆分与代码设计
    2. 高可用架构设计:集群部署、异地多活、故障演练、容灾备份
    3. 高并发优化:缓存优化、分布式锁、异步化、池化技术、数据库分库分表
    4. 云原生进阶:Kubernetes(K8s)、微服务 K8s 编排、CICD 流水线(Jenkins/GitLab CI)
    5. Service Mesh:Istio 核心原理与落地实践
    6. 微服务安全:OAuth2.0/OIDC 统一认证、数据加密、接口防刷、API 安全
    7. 性能压测:JMeter 压测、性能瓶颈定位与优化

阶段五:面试 & 落地经验沉淀

  • 核心目标:应对面试,掌握企业级落地最佳实践
  • 核心动作:
    1. 整理微服务常见面试题,深入理解底层原理,而不是只停留在使用层面
    2. 学习大厂微服务落地最佳实践,总结避坑经验
    3. 持续优化自己的实战项目,沉淀到 GitHub,形成自己的作品集

六、新手常见坑 & 避坑指南

  1. 过度拆分:新手最容易犯的错误,把服务拆得太细,导致分布式复杂度指数级上升,运维成本爆炸。建议:初期粗粒度拆分,后续逐步迭代,不要一上来就拆十几个服务。
  2. 为了微服务而微服务:小团队、小项目、流量小,硬上微服务,反而降低开发效率。建议:先单体,后微服务,当单体遇到性能、迭代瓶颈时,再逐步拆分。
  3. 数据不自治:多个服务共享一个数据库,等于白拆微服务。服务之间通过数据库耦合,后续无法独立扩展和迭代。建议:每个服务独立数据库,服务之间只能通过接口通信。
  4. 忽略分布式事务:跨服务调用不处理事务一致性,导致数据错乱。建议:优先通过业务设计避免分布式事务,必须使用时,选择合适的方案,不要自己手写。
  5. 没有容错机制:服务调用不做熔断降级,一个服务故障导致整个集群雪崩。建议:所有跨服务调用,必须配置容错规则。
  6. 缺失监控与链路追踪:服务出问题找不到原因,排障全靠猜。建议:微服务搭建初期,就必须把监控、链路追踪、日志中心搭起来。
  7. 服务依赖混乱:服务之间循环依赖,调用链路像蜘蛛网。建议:梳理清晰的服务依赖拓扑,禁止循环依赖,核心服务不依赖非核心服务。

七、优质学习资源推荐

官方文档(首选,最权威)

书籍推荐

  • 《微服务设计》:马丁・福勒著作,微服务领域圣经,入门必看,理解微服务的核心思想
  • 《Spring Cloud Alibaba 微服务原理与实战》:国内实战类书籍,贴合国内技术栈,适合新手
  • 《DDD 领域驱动设计精粹》:薄而精,快速掌握 DDD 核心思想,指导服务拆分
  • 《凤凰架构》:周志明著作,深入讲解分布式系统核心原理,提升架构深度

开源项目参考

最后给新手的忠告

微服务不是银弹,它解决了高可用、高扩展的问题,同时也带来了分布式系统的巨大复杂度。学习微服务,一定要先搞懂 "为什么要这么做",再去学 "怎么实现",不要上来就堆技术栈。

微服务是实战性极强的技术,光看视频和文档永远学不会,必须自己从零到一搭建项目,踩坑、解决问题,才能真正掌握。

相关推荐
鄭郑2 小时前
Figma学习笔记---03
笔记·学习·figma
Heartache boy2 小时前
野火STM32_HAL库版课程笔记-空气、烟雾传感器公式换算
笔记·stm32·嵌入式硬件
智慧化智能化数字化方案2 小时前
架构进阶——解读数据中台与业务中台架构设计方案【附全文阅读】
大数据·微服务·架构·数据中台·业务中台架构设计
重学一遍3 小时前
模拟面试-微服务专题
微服务·面试·职场和发展
m0_651562523 小时前
2026/3/26 学习笔记——终端复用工具screen
笔记·学习
wellc3 小时前
SpringCloud系列教程:微服务的未来(十四)网关登录校验、自定义过滤器GlobalFilter、GatawayFilter
java·spring cloud·微服务
sinat_255487813 小时前
JSON·学习笔记
java·开发语言·笔记·算法
掘根3 小时前
【微服务即时通讯】消息存储子服务2
微服务·云原生·架构
Roselind_Yi3 小时前
从线性回归实战到Python依赖安装踩坑:我的机器学习入门排雷记
笔记·python·算法·机器学习·回归·线性回归·学习方法