《后端架构设计》是一套四卷本:卷一《架构基础与边界》、卷二《高性能与高可用》、卷三《分布式与数据一致性》、卷四《演进与治理》。本页是卷一的完整目录,共 45 篇。
卷一不追求把所有架构模式讲一遍。它围绕一个用 Go 写的订单系统 arch-lab,回答一组更基础的问题:边界怎么划、决策怎么记、契约怎么守、数据归谁、异步什么时候值得、系统怎样在组织变化中继续演进。每篇至少包含一个可运行的 arch-lab 产物、一次真实测量、一份带备选方案的 ADR,或一组 Go/Java 21 对照。
全书概览
| 项目 | 内容 |
|---|---|
| 书稿 | 《后端架构设计·架构基础与边界》 |
| 篇数 | 45 篇(13 章 × 3 节 + 序、前言、目录、附录 A–C) |
| 主线项目 | arch-lab:Go 1.26 订单交易系统 |
| 技术栈 | Go 1.26.0 主线;Java 21 对照 |
| 运行级别 | L1 默认;订单 API 与边界至少 L2;PostgreSQL 场景按 L3 标注 |
| 阅读方式 | 从目录与学习路径 进入顺序通读,或按下方路径跳读 |
| 上级专题 | 书稿专题 |
| 相关专题 | 架构设计 · 分布式系统 |
三条阅读路径
路径 A:从零建立架构判断(约 20 小时)
按章节顺序读。先读第 1–2 章建立问题、质量属性与表达方式,再读第 3–4 章划边界、拆模块,第 5–7 章处理契约、数据与异步,第 8–9 章讨论演进与组织,第 10–11 章补安全与部署,最后用第 12–13 章收口。每章至少跑通一节代码。
路径 B:带着现有系统来(约 8 小时)
先读 1.2、2.2、2.3,判断当前系统的质量属性和决策记录缺什么;再按痛点跳读:边界不清读第 3–4 章,接口混乱读第 5 章,数据打架读第 6 章,异步失控读第 7 章,拆不动读第 8 章。附录 C 可直接当评审清单用。
路径 C:只关心可执行检查(约 4 小时)
读 1.3、2.1、4.1、4.2、8.3,配合附录 B 与附录 C。重点是 tools/deplint、internal/archmodel、依赖测试与适应度函数四类检查,不追求读完全部叙事。
全书目录
前置与附录
| 篇 | 文章 | 核心内容 |
|---|---|---|
| 序 | 序 | 为什么写这套书、市面书缺的那一层、四个立场、四卷分工与三类读者 |
| 前言 | 前言 | arch-lab 范围、目录结构、版本环境、L1–L4 验收、代码标记与数字口径 |
| 目录 | 目录与学习路径 | 13 章依赖图、三条路径、症状表、章节速览与读完标准 |
| 附 A | 附录 A 术语表 | 六组约 90 个术语、十组易混概念与章节对照 |
| 附 B | 附录 B Go/Java 对照速查 | 同一订单场景的两种实现、真实运行输出与双向迁移检查表 |
| 附 C | 附录 C 架构评审清单 | 九部分检查项、按变更类型裁剪、评审记录模板与十条失败模式 |
第一部分:问题、质量与表达(第 1–2 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 1.1 | 后端架构到底在解决什么问题 | 朴素 handler 的六类代价、订单状态机、allowed 迁移表与 6×6 穷举测试 |
| 1.2 | 质量属性与无法回避的取舍 | 六个质量属性场景、状态机不变式、幂等重放测试与 ADR-002 |
| 1.3 | 架构风格谱系与 arch-lab 选型矩阵 | 五风格七维矩阵、ADR-001 模块化单体、tools/deplint 依赖检查器 |
| 2.1 | arch-lab 的四级视图(C4) | 上下文、容器、组件、代码四级 ASCII 视图与 internal/archmodel 校验器 |
| 2.2 | 订单系统的五个 ADR | ADR-003 至 ADR-007、备选方案与否决理由、internal/adr 登记表校验 |
| 2.3 | 一次真实评审记录与风险台账 | 评审演练记录、九条风险台账、tools/riskreg 校验器与关闭条件 |
第二部分:边界、聚合与模块(第 3–4 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 3.1 | 子域、限界上下文与团队边界 | 七个上下文的职责、数据、上下游与集成模式,internal/contextmap 校验 |
| 3.2 | 订单域事件风暴工作坊 | 11 条命令、13 个事件、9 条策略、6 个热点与 internal/eventstorm 校验 |
| 3.3 | 聚合、事务边界与一致性边界 | Order、InventoryReservation、Payment 三个聚合与跨聚合补偿测试 |
| 4.1 | 模块化单体:先拿到边界再谈拆分 | 模块描述符、私有包越界、依赖成环检查与拆分预演 |
| 4.2 | 端口与适配器在 arch-lab 的落地 | 三个端口、契约测试、故障适配器与 go list -deps 依赖断言 |
| 4.3 | 防腐层与外部系统隔离 | 支付渠道 DTO 翻译、状态/错误映射、验签、重放保护与表驱动测试 |
第三部分:契约、数据、异步与演进(第 5–9 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 5.1 | 订单 API 的资源边界与命令语义 | 五个端点、命令语义表、幂等头与参数校验 |
| 5.2 | 契约优先与 OpenAPI 工作流 | 契约唯一源、最小 spec 与 Go 侧契约测试 |
| 5.3 | 错误模型、版本演进与兼容性 | 错误码稳定性、字段兼容窗口与表驱动测试 |
| 6.1 | 订单数据该放什么存储 | 唯一写 owner、四类读写模式、PostgreSQL ADR 与仓储契约 |
| 6.2 | 事务边界:本地事务、出站表与最终一致 | 状态与 outbox 同事务、至少一次投递与消费去重 |
| 6.3 | 订单读模型:CQRS 的引入判据与退出条件 | 投影幂等、重建、引入判据与五条退出条件 |
| 7.1 | 同步调用链的隐性耦合 | 超时预算、失败传播与不可同步的调用边界 |
| 7.2 | 事件、命令与消息的语义差异 | 三者语义、误用后果与消息类型定义 |
| 7.3 | 幂等责任归属 | API、领域、消息层的责任划分与重复请求测试 |
| 8.1 | 绞杀者模式与增量迁移 | 路由、开关、双跑与退出判据 |
| 8.2 | 分支抽象与双写/双读 | 双写顺序、双读比对、差异处理与退出条件 |
| 8.3 | 架构适应度函数 | 依赖、契约、命名与性能预算的自动化检查,tools/fitfunc |
| 9.1 | 康威定律与团队拓扑 | 团队-模块映射、无主模块与沟通路径校验 |
| 9.2 | 架构决策权与团队契约 | 决策权矩阵、平台与业务团队契约、评审记录检查 |
| 9.3 | 架构治理的最小流程 | ADR、例外、复审、指标与可检查的治理规则 |
第四部分:安全、运行与收口(第 10–13 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 10.1 | 认证、授权与服务间身份 | 用户与服务身份分离、归属校验、最小权限与越权测试 |
| 10.2 | 输入边界与数据分级 | 未知字段拒绝、金额/长度边界、PII 分级与日志脱敏 |
| 10.3 | 第三方支付渠道的信任边界与密钥管理 | 回调验签、防重放、金额核对与密钥版本轮换 |
| 11.1 | 部署单元与故障域:订单系统怎么切 | 同进程/独立部署判据、单点、故障域与发布影响面 |
| 11.2 | 配置、密钥与环境差异 | 配置分层、启动校验、密钥管理与危险默认值 |
| 11.3 | 有状态服务的边界 | 状态清单、可替换/可恢复设计与迁移检查 |
| 12.1 | 需求、约束与非功能目标 | 基线表、实测/目标/待验证三分与完整性校验 |
| 12.2 | 初始架构与模块划分 | 模块、部署、数据 owner 三者一致的基线快照 |
| 12.3 | 质量属性场景与架构风险清单 | 刺激-响应-度量场景、风险台账与关闭条件 |
| 13.1 | 从需求到架构决策记录 | 需求→约束→决策→后果串联与 ADR 索引校验 |
| 13.2 | 评审一次真实架构方案 | 候选方案评审演练、证据、反对意见与附条件结论 |
| 13.3 | 进入卷二:性能与可用性 | 卷一基线交接、卷二新问题与未决清单 |
与现有专题的关系
卷一与站内两个专题是互补关系,不是替代关系:
- 架构设计 的 47 篇文章偏重概念、模式与决策背景。书稿在需要定义时用一段话概括并给出链接,不重复教程。
- 分布式系统 的 46 篇文章偏重分布式协议、缓存、消息与高可用。卷一偶尔引用,系统推导留给卷二、卷三。
- 书稿新增的是 arch-lab 的可运行产物:状态机、模块校验器、契约测试、outbox、幂等中间件、适应度函数。这些代码按
// file:标记抽取后可独立编译。
读完卷一的标准
如果下面六件事都能独立完成,卷一的目标就达到了:
- 拿到一个业务系统,能说清它的核心域、支撑域和通用域,并给出至少两个限界上下文。
- 能画出订单系统的四级视图,并指出图中每条依赖的方向与所有权。
- 能写出一个带备选方案、后果和重新评估条件的 ADR。
- 能把一条架构约束写成自动化检查,而不是只写在文档里。
- 能判断一次同步调用、一次异步消息、一次双写分别把复杂度放在了哪里。
- 能在评审会上分清“有材料”“口头说过”“完全没提”,并把后者转成行动项。
卷一结束时,arch-lab 是一个可构建、可测试、边界可检查的模块化单体基线。卷二会在这个基线上追问:它到底能扛多少流量、延迟花在哪里、故障时会发生什么。
版本与反馈
| 组件 | 版本 |
|---|---|
| Go | 1.26.0 |
| Java | Temurin 21.0.13(LTS) |
| PostgreSQL | 18.4(L3 场景) |
| Docker | 29.7.2 |
| Hugo | 0.163.3+extended |
代码块中的“实测”均来自本机 darwin/arm64 运行;未实际运行的数据库或多节点结论会标为“预期/需 L3/L4 验证”。发现错误时,请附完整命令、环境版本与原始输出,便于判断是代码、环境还是结论问题。