微服务架构演进与特征

microservice ✅ mastered microservice-architecture · microservice · architecture · ddd · conway-law · monolith · decomposition

TL;DR(30 秒扫完)

  • 演进脉络:单体 → 单机上限 → 横向扩容 → 独立扩缩容需求 → 微服务
  • 7 大特征(Martin Fowler):围绕业务组织、去中心化治理、去中心化数据、轻量通信、基础设施自动化、设计失败、组合而非继承
  • 5 大优势:独立部署、故障隔离、按需扩展、多团队并行、技术栈灵活
  • 5 大代价:分布式一致性、跨服务调用损耗、治理复杂度、可观测性、调试排障
  • 原则:Monolith First, Microservices Second;团队小于 8 人先做单体

关键结论

结论 A微服务的核心动机是独立扩缩容和团队并行,不是性能更好
结论 BMartin Fowler 7 大特征里"去中心化数据"最关键——每个服务自己 DB,不共享
结论 C拆分边界按 DDD 限界上下文(Bounded Context),而非按技术层(web/service/dao)
结论 D康威定律(Conway's Law)——系统架构最终反映组织的沟通结构

完整讲解(费曼四步)

STEP 1 · 概念

微服务是一种架构风格,把一个大型应用拆成一组独立部署、轻量通信、围绕业务的小服务,每个服务有自己的数据库。

STEP 2 · 大白话

单体演进类比:一家小店从夫妻店(单体)→ 开到分店(横向扩容)→ 发现每间分店都要同时开门(浪费)→ 变成不同品牌的专业店(微服务),每店独立经营。

STEP 3 · 底层

演进脉络:
单体应用(Simple)
  ↓ 单机瓶颈
多实例横向扩容(无状态前提)
  ↓ 无法按需扩缩容(用户服务要 20 副本,支付只需 2)
按功能垂直拆分
  ↓ SOA(企业服务总线)
微服务(轻量通信 + DevOps)
Martin Fowler 7 大核心特征:
  • 围绕业务能力构建服务(如"用户服务""支付服务")
  • 去中心化治理(技术选型自治)
  • 去中心化数据管理(每个服务自己 DB)
  • 智能端点 + 轻量通信(HTTP/gRPC/消息)
  • 基础设施自动化(CI/CD 是必需的)
  • 设计失败(服务可以独立失败演进)
  • 组合而非继承
5 大优势:
  • 独立部署:支付改了只发支付,不影响用户
  • 故障隔离:一个服务挂了不拖垮整个系统
  • 按需扩展:按业务量给服务单独扩缩容
  • 多团队并行:一个团队一个服务,符合康威定律
  • 技术栈灵活:支付用 Go、用户用 Java
5 大代价:
  • 分布式一致性:数据不在一起,2PC/TCC/SAGA/本地消息表各种方案
  • 跨服务调用损耗:RPC 网络调用比内调用慢
  • 服务治理复杂度:注册中心、网关、熔断、限流、链路追踪都要搭
  • 可观测性挑战:一个请求跨 5 个服务,出问题很难定位
  • 分布式事务:需要专门的事务框架
康威定律:系统架构最终会反映组织的沟通结构。所以微服务的拆分必须匹配团队边界——一个团队负责一个服务,避免跨团队调用。 拆分原则:
  • 高内聚低耦合、单一职责
  • 按业务限界上下文(DDD),不按技术层
  • 避免共享数据库
  • 避免循环依赖
  • 控制爆炸半径
什么时候不该用微服务:
  • 团队小于 8 人
  • 业务还没跑通
  • 迭代频繁还未稳定
  • 性能敏感场景
  • Amazon 原则:Monolith First, Microservices Second

STEP 4 · 简化

口诀:微服务不是新技术,是新治理方式;核心动机独立扩缩容+团队并行,主要代价是分布式复杂性;团队小先做单体。

常见误区

"微服务性能更好"
微服务间是 RPC 网络调用,通常比单体内调用慢。微服务赢在可扩展性、隔离性、团队敏捷,不赢单机性能
把多语言当主要优势
90% 微服务体系都是 Java/Go 单栈为主,多语言是次要好处
按技术层(web/service/dao)拆
按业务限界上下文拆(DDD),一个服务管一个业务域

延伸追问

什么时候不该用微服务?
要点:团队小于 8 人、业务没跑通、迭代频繁还未稳定、性能敏感场景。Monolith First, Microservices Second。
拆分微服务有哪些原则?
要点:高内聚低耦合、单一职责、避免共享状态和数据库、避免循环依赖、按业务能力而非技术层拆、控制爆炸半径。
微服务如何通信?同步 vs 异步怎么选?
要点:强一致、需要同步返回 → REST/gRPC;解耦、削峰、最终一致 → MQ。远程调用要超时+重试+熔断+幂等。
康威定律是什么?为什么对微服务重要?
要点:系统架构最终会反映组织的沟通结构。所以微服务的拆分必须匹配团队边界,一个团队负责一个服务,避免跨团队调用。

速查表

演进:单体 → 横向扩容 → 独立扩缩容需求 → 微服务
7 特征(Fowler):业务组织/去中心化治理/去中心化数据/轻量通信/自动化/设计失败/组合
5 优势:独立部署/故障隔离/按需扩展/多团队并行/技术栈灵活
5 代价:分布式一致性/跨服务损耗/治理复杂度/可观测性/分布式事务
拆分边界:DDD 限界上下文,非技术层
原则:Monolith First, Microservices Second
康威定律:架构反映组织沟通结构

Anki 候选卡片

Q: 微服务 7 大核心特征(Martin Fowler)?
A: 围绕业务组织/去中心化治理/去中心化数据/智能端点+轻量通信/基础设施自动化/设计失败/组合而非继承
Q: 微服务的核心动机是什么?
A: 独立扩缩容 + 团队并行;不是性能更好
Q: 微服务的 5 大代价?
A: 分布式一致性/跨服务调用损耗/服务治理复杂度/可观测性挑战/分布式事务
Q: 拆分微服务按什么边界?
A: DDD 限界上下文(Bounded Context),而非技术层(web/service/dao)
Q: 康威定律?
A: 系统架构最终会反映组织的沟通结构;微服务拆分必须匹配团队边界
Q: 什么时候不该用微服务?
A: 团队小于 8 人、业务未跑通、迭代频繁、性能敏感——Monolith First, Microservices Second

关联题目

  • [x] 《什么是微服务架构?优势?特点?》—— 2026-09-27 Round 1 Q3, 评分 ⭐⭐⭐
  • 关联知识

    7 大特征(Fowler)+ 5 优势 + 5 代价;核心动机是独立扩缩容+团队并行
    ✦ 记 忆 口 诀 ✦
    Fowler 7 特征 / 独立扩缩容+团队并行 / Monolith First
    关键可视化
    暂无可视化
    知识关系

    ⬆️ 前置(Prerequisite)

    暂无

    🔄 延伸(Extends)

    暂无

    ⚡ 对比(Contrast)

    暂无
    🎯 概念 📏 规则 ⚠️ 误区 🔍 追问 ✨ 口诀 共 0 张卡,点击翻面