Skip to content

系统设计(架构与设计方法论) ​

从架构原则、领域建模到微服务与高并发,面向后端面试与实战的"判断框架优先、具体模式其次"的系统设计方法论合集。


一、系列定位 ​

1.1 与既有笔记的边界 ​

本系列定位为方法论与决策层,刻意与既有的组件用法类笔记互补、不重复:

既有笔记讲什么本系列的补充
SpringCloud微服务Nacos / Gateway / Sentinel / Seata 等组件的安装、配置、API 用法为什么要拆、何时不该拆、通信与一致性模式的取舍逻辑
消息队列MQ 产品特性与使用MQ 在削峰、异步化、最终一致性中的系统级定位
Redis、MySQL深入中间件能力与调优缓存体系决策、读写分离与分库分表决策树

阅读约定:凡是"如何配置某个组件"都指向上述组件笔记,本系列只回答"选哪个、为什么、边界在哪、如何判断"。

1.2 阅读顺序建议 ​

  1. 先读《设计原则与架构演进》建立全局观;
  2. 再读《DDD领域驱动设计》理解领域建模与边界;
  3. 然后读《微服务架构与拆分》把边界落成服务;
  4. 《高并发系统设计》与《经典系统设计案例》解决性能与容量问题,两者可对照阅读;
  5. 面试前用本篇尾部的题单自测。

二、系列覆盖表 ​

文件一句话定位关键交付物
设计原则与架构演进架构层如何理解设计原则,单体到平台化的演进逻辑与代价演进决策对照表、过度设计信号清单
DDD领域驱动设计用战略设计与战术设计把复杂业务建模成可落地的代码边界电商订单模块包结构与充血模型示例代码
微服务架构与拆分拆分方法论、通信/注册中心/网关选型与分布式事务模式取舍拆分决策树、一致性模式对比表
高并发系统设计容量评估与分层防护的完整方法论通用 8 步设计法、四保护策略指标表
经典系统设计案例短链、秒杀、Feed、IM 四个端到端案例4 张架构图、分布式 ID 与限流算法附表
容量估算与压测日活怎么换 QPS、存储带宽怎么估、压测怎么找拐点容量规划表、单机能力参考表
缓存架构设计多级缓存的层次、四种缓存模式、三 Problem 解法、一致性取舍一致性方案对比、热点/大 key 治理清单
异步与消息架构何时该异步、四种模型、选型、事务消息与本地消息表、延迟消息可靠性三件事、积压处理决策表
API 设计与网关REST 契约、版本化、幂等键、鉴权对比、网关五职责、灰度幂等实现模板、接口十条检查
分布式一致性与事务六种分布式事务方案对比与选型决策树决策树、对账兜底设计

三、文章导航 ​

  • 设计原则与架构演进:单一职责、开闭、依赖倒置在架构层的投影,以及单体到中台化的演进驱动与代价。
  • DDD领域驱动设计:限界上下文与聚合建模,贫血 vs 充血模型,附电商订单 DDD 落地代码骨架。
  • 微服务架构与拆分:从四个视角拆服务,服务间通信与基础设施选型,分布式事务模式取舍与"何时不该上微服务"。
  • 高并发系统设计:容量评估、分层防护、缓存与异步化决策,隔离/熔断/降级/限流选型,附通用 8 步设计法。
  • 经典系统设计案例:短链、秒杀、Feed、IM 四案例端到端拆解,附分布式 ID 与限流算法对比表。
  • 容量估算与压测:从日活推峰值 QPS、存储与带宽估算、阶梯加压找拐点,附可直接套用的容量规划表。
  • 缓存架构设计:缓存放哪一层、四种模式怎么选、穿透/击穿/雪崩与一致性方案、热点与大 key 治理。
  • 异步与消息架构:该不该异步、四种消息模型、中间件选型、事务消息与本地消息表、延迟消息与积压处理。
  • API 设计与网关:接口契约与错误体、版本化、幂等键实现、鉴权方式对比、网关的五项职责与灰度。
  • 分布式一致性与事务:2PC/TCC/Saga/本地消息表/事务消息/最大努力通知六种方案对比与选型决策树。

四、学完可回答的系统设计面试题 ​

  1. 说说架构演进通常经历哪几个阶段?每一步的驱动因素和代价是什么?如何判断自己该不该走到微服务?
  2. 单一职责原则在模块/服务层面怎么落地?拆服务和拆类有什么不同的判断标准?
  3. 什么是限界上下文?它和微服务边界是什么关系?如何用 DDD 指导一次服务拆分?
  4. 贫血模型和充血模型有什么区别?为什么实际项目里贫血模型这么多?如何渐进改进?
  5. 拆分微服务有哪些方法(按业务能力 / 子域 / 团队 / 变更频率)?如何评估拆分的粒度是否合适?
  6. 服务间通信选同步还是异步?什么时候必须用 MQ?消息带来的重复、乱序、丢消息怎么兜底?
  7. 对比 2PC、TCC、SAGA、本地消息表、事务消息的适用场景,电商下单一般怎么选?如何尽量避免分布式事务?
  8. 如何估算一个系统的 QPS 并推导容量?压测目标怎么定?
  9. 缓存穿透、击穿、雪崩分别怎么防?缓存与数据库的一致性如何取舍?
  10. 熔断、降级、限流、隔离各自的适用场景与关键指标是什么?秒杀场景为什么要"本地标记 + MQ 削峰 + 库存预扣"?
  11. 短链系统用哈希还是发号器?跳转链路和过期清理如何设计?
  12. 设计一个高可用 IM 或 Feed 流系统,消息可靠性(不丢不重不乱序)如何保证?
  13. 分布式 ID 有哪些生成方案?为什么很多系统选雪花算法,它的时钟回拨问题怎么处理?