返回文档库 页集
Software Architecture · 2026 Edition

决策到演进的软件架构全景

一份面向实战的中文学习手册:建立共同语言,量化质量目标,选择合适结构,驾驭分布式复杂度,并让架构在交付、运行与反馈中持续演进。

20 个学习主题 模板 + 检查清单 + 案例 资料核对:2026-07-30
能力进阶路径READ → APPLY
01
看见驱动业务、质量、约束、风险
02
做出决策边界、风格、数据、集成
03
验证结果测试、SLO、成本、安全
04
持续演进反馈、治理、团队、现代化
没有找到匹配章节 换一个关键词试试,例如“幂等”“零信任”“模块化单体”。
00

使用方法与全景地图

先建立架构师的思维模型,再学习工具与模式;模式是词汇,权衡才是能力。

软件架构不是“画一张漂亮的技术图”,而是在业务目标、质量要求和现实约束下,对系统结构与演进路径作出一组影响深远、需要解释且可以验证的决策。

核心心法

从问题和质量属性出发,不从技术名词出发。“用 Kafka / Kubernetes / 微服务”不是目标;“峰值订单不丢、团队可以独立交付、故障被限制在单域、恢复时间小于 15 分钟”才是目标。

架构的三个对象

Structure

结构

系统由哪些元素组成,边界在哪里,依赖如何指向,数据由谁拥有,运行时怎样协作。

Decision

决策

为什么选择 A 而不是 B;适用条件、放弃了什么、证据是什么、何时需要重审。

Evolution

演进

如何以小步、可逆、可观测的方式改变系统,并让团队边界与技术边界共同演化。

建议的三种学习模式

MODE A · 通读

先广后深

每天 1–2 章,先形成完整地图。第一次不追求记住所有模式,而要能说清每章解决什么问题。

MODE B · 项目驱动

边做边查

选一个真实系统,用第 18 章模板产出架构文档;遇到决策时回查对应章节,并写 ADR。

MODE C · 评审训练

用问题审架构

拿现有系统逐项问:目标可量化吗?边界合理吗?失败会怎样?证据在哪里?谁负责演进?

MODE D · 面试表达

结构化讲权衡

按“背景 → 驱动 → 选项 → 决策 → 代价 → 验证 → 演进”讲述,而不是堆叠组件名称。

架构能力地图

层次能回答的问题典型产物完成标准
业务与领域为什么建?价值流与关键风险是什么?目标、利益相关者、领域地图、约束技术选择能追溯到业务结果
应用与数据边界怎么切?状态归谁?如何协作?C4、上下文映射、数据流、API/事件契约职责与依赖清晰,无隐性共享
技术与运行怎样部署、扩展、恢复、保护和观测?部署视图、SLO、威胁模型、运行手册关键质量属性有指标和演练
组织与演进谁拥有?如何安全地改变?ADR、团队边界、路线图、适应度函数架构随证据更新而非随口号更新
自测:你是否已从“高级开发”转向“架构思维”?
  • 能把模糊的“高性能、高可用”改写成含场景、负载、分位数与时间窗口的指标。
  • 提出方案时至少给出两个可行备选,并说明收益、代价、风险与可逆性。
  • 会先识别边界和数据所有权,再讨论服务数量与技术栈。
  • 把部署、监控、安全、成本和故障恢复视为设计本身,而不是上线后的补充。
  • 知道架构文档服务于谁、解决什么疑问,以及何时会失效。
01

架构驱动与系统边界

架构设计的输入不是需求列表,而是经过优先级排序的驱动因素。

先找出真正会改变结构的少数因素:业务目标、关键质量属性、核心领域、硬约束与最大风险。没有优先级,就没有可执行的架构。

五类架构驱动

Why

业务目标

收入、转化、交付速度、法规准入、运营效率、市场窗口。要有负责人和成功指标。

Who

利益相关者

用户、产品、研发、运维、安全、法务、财务、合作方;他们的“关切”往往彼此冲突。

How well

质量属性

可用性、性能、安全、可修改性、成本等。必须通过场景和指标表达。

Must

约束

预算、期限、团队能力、遗留系统、数据驻留、许可证、既定平台。约束不等于偏好。

Unknown

风险与假设

最可能让方案失败的未知项。通过原型、压测、演练或调研尽快买到证据。

Core

领域边界

核心、支撑、通用子域;关键业务不变量;谁拥有语言、规则和数据。

从模糊愿望到可用驱动

模糊说法继续追问可用于设计的表达
系统要高可用哪些用户旅程?什么时间段?允许降级吗?结算链路月度可用性 ≥ 99.95%;推荐模块故障时结算仍可用。
要支持海量用户当前、峰值、增长率?读写比?请求形态?大促 10 分钟内 8 万 RPS,读写 20:1,入口 p99 < 500 ms。
要快速迭代谁需要独立发布?变更类型?当前瓶颈?四个业务域可独立交付;低风险变更从合并到生产中位数 < 2 小时。
必须上微服务它解决哪个已证实的问题?成熟度足够吗?订单与营销发布节奏冲突,需独立扩缩容和故障隔离;团队具备服务运维能力。

系统边界:先画“外面”,再设计“里面”

目标与用户业务结果、关键旅程
系统职责做什么 / 不做什么
外部依赖人、系统、设备、监管
信任与数据边界流入、流出、所有权
高价值问题

如果外部支付、身份服务、消息平台或模型服务变慢、重复、乱序、返回错误甚至完全不可用,系统应该怎样表现?外部依赖的失败语义,常常比“正常流程”更能决定架构。

架构驱动画布

ARCHITECTURE DRIVERS CANVAS
业务目标:目标 / 指标 / 负责人 / 截止时间
关键用户旅程:主路径 / 失败影响 / 业务优先级
Top 3–5 质量属性:场景 + 数值目标 + 测量窗口
核心领域:关键规则 / 不变量 / 领域负责人
硬约束:法规 / 数据驻留 / 预算 / 期限 / 技术或组织限制
外部依赖:契约 / 限额 / SLA / 失败模式 / 替代方案
最大风险:概率 × 影响 × 可探测性
关键假设:怎样验证 / 最晚验证日期 / 证据
不在范围:明确排除,防止边界持续膨胀
风险排序:不要只看“概率 × 影响”

建议同时考虑可探测性决策锁定成本。一个概率不高、但上线前难以发现且一旦选错就很难回退的问题,应尽早验证。例如数据库分区键、跨境数据流、第三方平台限额、模型在真实长尾问题上的质量。

风险处理只有四类:规避、降低、转移、接受。每个高风险项都要有所有者、触发条件、缓解措施和剩余风险。

02

质量属性与权衡

“好架构”没有统一答案;它只在明确的质量目标与代价边界内成立。

质量属性不是形容词,而是可观察的系统行为。把它写成具体场景,才能连接到架构策略、测试方法、运行指标和业务后果。

质量属性场景:六个字段

刺激源谁 / 什么产生
刺激发生了什么
环境正常 / 峰值 / 故障
制品哪部分受影响
响应 + 度量行为与数值
示例 · 性能与韧性

大促期间(环境),已登录用户(刺激源)提交订单(刺激)到结算 API(制品);系统在库存服务短暂抖动时(环境补充)返回明确的“处理中”状态且不重复扣款(响应),99% 请求在 800 ms 内确认受理,最终结果在 30 秒内可查询(度量)。

十类常见质量属性

属性先问什么常见策略证据 / 指标
可用性哪些能力必须可用?允许怎样降级?冗余、健康检查、故障转移、隔离、降级成功率、可用时间、错误预算
可靠性 / 韧性失败后是否正确?能否恢复?幂等、重试、熔断、舱壁、恢复演练数据差错率、MTTD、恢复时间、演练结果
性能哪条旅程、什么负载、哪个分位数?缓存、并发、批处理、索引、异步、近数据计算p50/p95/p99、吞吐、饱和度
可扩展 / 弹性增长维度是什么?扩容要多快?无状态化、分区、水平扩展、队列削峰最大负载、扩容时间、单位成本
安全 / 隐私保护什么、对抗谁、信任边界在哪?最小权限、分层防御、加密、审计、数据最小化控制覆盖、漏洞时效、越权测试、审计完整性
可修改 / 可维护哪类变化最常见?影响范围多大?模块化、信息隐藏、稳定接口、自动化重构变更前置时间、变更扩散、认知复杂度
可测试 / 可部署能否独立验证和发布?依赖替身、契约测试、特性开关、向后兼容反馈时长、发布频率、失败与返工率
可操作 / 可观测如何知道“对用户而言”是否健康?结构化遥测、关联 ID、运行手册、自动化处置检测时间、告警有效率、诊断时长
互操作 / 可移植要跨什么边界?迁移的真实概率?开放契约、适配层、数据导出、可替换边界兼容矩阵、迁移演练、替换成本
成本 / 可持续按什么单位创造价值?峰谷如何?预算、自动伸缩、存储分层、关停闲置、碳感知调度每用户/交易成本、利用率、能耗代理指标

权衡不是缺陷,而是架构的本体

一致性 ↔ 可用性/延迟

同步确认还是最终一致

强一致减少业务歧义,却可能增加跨区延迟与故障耦合;最终一致提高解耦,需要补偿、可见的中间状态和业务容忍。

安全 ↔ 易用性/速度

控制强度与摩擦

更严格的身份、审批和隔离会增加操作成本。用风险分层、自动化和短时凭据降低摩擦。

解耦 ↔ 复杂度

独立性不是免费的

服务化与异步能隔离变化,却引入网络、契约、数据一致性、观测和运维成本。

性能 ↔ 成本/新鲜度

缓存与预计算

更低延迟往往意味着更多副本、缓存或冗余计算;需要明确定义失效、陈旧窗口和单位经济性。

优先级:只保留真正决定结构的 Top 3–5

可使用 业务价值 × 风险暴露 × 区分度 排序。所有系统都希望“安全、稳定、快速”,但只有那些会导致不同结构决策的属性才是架构驱动。例如“结算绝不重复扣款”比泛化的“可靠”更有区分度。

QUALITY SCENARIO
属性名称:
刺激源:
刺激:
环境(正常 / 峰值 / 部分故障 / 攻击):
受影响的系统或组件:
期望响应:
度量(分位数 / 比例 / 时间窗口 / 数据量):
业务后果:
验证方式(测试、演练、监控、审计):
负责人及复审日期:
反模式:把质量属性写成“越高越好”

“无限扩展”“零停机”“绝对安全”会把成本推向无穷,并让团队无法判断何时足够。每个质量目标都应包含范围、阈值、时间窗口与预算。对于不关键的路径,明确较低目标或允许降级,反而能提升整体可靠性。

03

架构方法与决策闭环

好的方法不会消除不确定性,而会用更低成本、更早地暴露它。

架构不是瀑布阶段。它是一条反复循环的证据链:理解问题、提出假设、比较选项、记录决策、实现验证、观察结果,再修正模型。

十步轻量架构循环

定义结果与范围

业务指标、用户旅程、系统职责、不在范围;确认谁有决策权。

识别利益相关者与关切

产品、工程、运行、安全、数据、财务与合规需要看到不同视图。

提炼架构驱动

Top 质量场景、硬约束、关键领域、不变量、外部依赖。

建立系统上下文

边界、交互、数据与信任流;先确定外部契约,再拆内部结构。

生成至少两个可行选项

包括“保持简单 / 暂不拆分”。避免把工具偏好包装成唯一方案。

按场景分析权衡

比较质量收益、复杂度、成本、团队适配、锁定和可逆性。

先验证最高风险假设

原型、性能模型、威胁建模、故障演练、供应商限额测试。

记录决策与未决问题

用 ADR 保存背景、选项、决定、后果和重审触发器。

实现、测试并发布小切片

用架构适应度函数、契约测试、SLO 和成本指标验证。

运行反馈与演进

复盘真实行为,更新图、风险、ADR 状态与下一轮假设。

决策记录(ADR)的最小结构

Context

背景

当前问题、约束、驱动、证据和为什么现在必须决定。

Options

选项

至少两个真实可行方案,以及“不改变”的基线。

Decision

决定

选择、理由、适用范围、负责人和日期。

Consequences

后果

得到什么、牺牲什么、风险、行动与重审条件。

可逆性决定决策速度

双向门(容易回退)应快速试验,例如内部库或可替换 UI;单向门(高锁定、高迁移成本)需要更多证据,例如核心数据模型、跨域协议、租户隔离策略和全局身份体系。不要让所有决策都走同样重的流程。

选项比较:定量辅助,定性负责

维度建议问题证据
业务适配是否直接支持关键旅程与市场节奏?价值流、业务指标、情景演练
质量属性在具体场景下改善了什么、损害了什么?压测、故障演练、威胁模型、容量模型
复杂度新增多少运行时组件、契约和失败模式?依赖图、认知负荷、运维任务清单
组织适配团队能独立拥有、交付并值守吗?技能矩阵、所有权、值班能力
经济性总拥有成本与单位业务成本是多少?三年成本模型、容量与许可估算
可逆与锁定退出路径是什么?数据能否导出?迁移原型、开放格式、替代供应商验证

加权评分表适合让隐含偏好显性化,但分数不是“科学真相”。权重、证据置信度和否决项应与总分一起呈现。

风险驱动评审

大型系统可借鉴 ATAM 的思想:由不同利益相关者建立质量属性效用树,用具体场景评估方案,识别敏感点(某参数变化显著影响质量)、权衡点(同时影响多个属性)和风险主题。轻量团队可用 90 分钟工作坊完成简化版:

  1. 10 分钟:目标、范围和架构概览。
  2. 20 分钟:独立提出失败场景与变化场景。
  3. 15 分钟:按业务影响和发生可能排序。
  4. 30 分钟:逐个追踪到结构、策略、监控和证据。
  5. 15 分钟:确认风险所有者、验证动作与截止时间。
何时不该立即做架构决策?
  • 信息价值高且获取成本低:先做探针、原型或流量回放。
  • 决定可延迟且不会阻塞交付:记录为待决问题与最晚决策时间。
  • 需求本身仍在探索:优先保护可逆性、模块边界与数据导出能力。
  • 团队还没有观察到真实瓶颈:先测量,避免为想象中的规模付费。
04

文档、视图与图表

文档的单位不是“页数”,而是某类读者的某个问题被清楚回答。

ISO/IEC/IEEE 42010:2022 区分“架构”与表达它的“架构描述”,并以利益相关者、关切、视点、视图和模型组织描述。它规定应表达什么关系,但不强制某种格式或工具。[1]

先选读者和问题,再选图

读者 / 关切最有用的视图必须回答
业务与产品系统上下文、能力/领域图、关键旅程价值、范围、外部依赖、业务风险
开发团队容器、组件、领域模型、接口与决策边界、职责、依赖、数据所有权、约束
运维 / SRE部署、运行时、故障域、遥测与恢复怎样运行、怎样失败、怎样诊断和恢复
安全 / 合规数据流、信任边界、身份、控制与审计资产在哪里、谁能访问、如何证明
管理与财务路线图、成本模型、风险与依赖投入、锁定、里程碑、剩余风险

C4:按抽象层级缩放

C4 Static Structure · 从世界到代码
1 · Context系统、用户与外部系统;业务范围
2 · Container可运行应用与数据存储;技术和通信
3 · Component单个容器内部的主要职责单元
4 · Code类、接口、函数;只在确有价值时画

C4 还包含系统景观、动态和部署图。官方建议并非每次都画四层;对多数团队,上下文图与容器图已经能提供大部分价值。[2]

arc42:一份可裁剪的架构文档骨架

01–03

目标与边界

引言与目标、约束、上下文与范围。

04–07

核心结构

解决方案策略、构建块、运行时、部署。

08–10

横切与决策

横切概念、架构决策、质量要求。

11–12

已知问题

风险与技术债、术语表。

arc42 的 12 个部分是问题清单,不是要求全部写满的官样模板;按系统风险和读者需求裁剪。其官网在 2026 年提供 Version 9 及中文模板。[3]

最小可行架构文档(MVAD)

一页摘要

业务目标、范围、Top 质量目标、关键约束、负责人、文档状态。

上下文 + 容器

外部角色和系统、内部可运行单元、数据存储、协议、所有权。

关键运行时场景

主路径、失败路径、异步处理、数据一致性和恢复流程。

部署与运行

环境、区域/可用区、网络边界、扩缩容、遥测、备份和灾备。

ADR、风险和术语

重要决策可追溯;已知债务不隐藏;同一个词只有一个明确含义。

一张架构图的合格线

检查项合格标准
标题与范围说明图的类型、系统、版本/环境与读者。
抽象层级一张图只讲一个层级;不把“支付系统”和某个 Java 类并列。
元素每个元素有名称、类型、职责;必要时标明技术与所有者。
关系每条箭头有方向和意图;必要时标明协议、同步/异步、数据。
边界系统、部署、网络、信任、团队或事务边界的含义明确。
图例颜色、形状、线型、缩写均可解释;黑白打印仍能理解。
时间与状态负责人、最后更新日期、适用版本、草案/已批准/已废弃状态。
保持文档“活着”

把稳定的意图与边界写入文档,把易变化的事实尽量从代码、部署清单、API 规范和遥测自动生成;在变更评审中更新 ADR 与图。文档越接近代码和交付流程,越容易与现实同步。

4+1、C4、arc42、UML、ArchiMate 应如何选择?
  • C4:软件系统结构沟通的轻量共同语言,开发团队最容易采用。
  • arc42:完整架构文档的内容目录,可在内部使用 C4、UML 或文字。
  • 4+1:从逻辑、开发、进程、物理及场景组织视图,适合建立“多视图”意识。
  • UML:需要精确表达序列、状态、类或组件语义时使用,不必全套采用。
  • ArchiMate / TOGAF:跨业务、应用、数据和技术的企业级组合治理更合适。

它们不是互斥产品。常见组合是:arc42 作为目录,C4 表达软件结构,UML 序列图表达关键运行时场景,ADR 保存决策。

05

设计原则与领域边界

架构的首要任务不是拆得更小,而是让变化被限制在正确的边界内。

高内聚、低耦合不是口号。一个好边界应围绕同一业务能力共同变化,隐藏内部细节,拥有清晰契约,并允许团队在不理解整个系统的前提下安全工作。

十条可操作的架构原则

原则设计含义检查问题
关注点分离把变化原因不同的职责分开。业务规则是否被 UI、数据库或供应商 SDK 污染?
信息隐藏边界暴露稳定能力,隐藏易变实现。调用方是否依赖内部表、字段或执行顺序?
高内聚共同完成业务不变量的代码与数据放在一起。一次业务变更是否总在同一模块完成?
低耦合减少同步、语义、数据、部署与组织依赖。一个变化会迫使多少模块、服务和团队协调?
依赖倒置稳定业务策略不依赖易变技术细节。替换消息、存储或第三方服务是否触碰核心规则?
显式优于隐式契约、所有权、失败语义和副作用可见。是否存在靠约定、共享库魔法或数据库触发器隐藏的行为?
状态单一权威每项关键事实只有一个可判定的主记录。冲突时谁是 System of Record?如何传播与对账?
故障隔离限制资源、依赖和错误的爆炸半径。非关键能力失败是否拖垮核心旅程?
最小机制只引入被已知驱动证明必要的复杂度。删掉这一层、服务或中间件会具体损失什么?
为变化留证据可观测、可测试、可迁移,而非抽象一切。怎样知道边界仍有效?退出路径是否演练过?

耦合不止是“是否调用”

Temporal

时间耦合

双方是否必须同时在线?同步链越长,联合可用性越低。

Semantic

语义耦合

对字段含义、业务规则或事件顺序的共同假设有多少?

Data

数据耦合

是否共享表、跨边界联表、共同修改同一事实?

Deployment

部署耦合

一个变化是否要求多个单元同时发布或回滚?

Operational

运行耦合

是否共享容量、故障域、证书、队列或限额?

Organizational

组织耦合

完成一次变更需要跨多少团队排期、审批和协调?

DDD:让业务语言成为边界工具

业务能力与价值流用户为什么付费
子域分类核心 / 支撑 / 通用
限界上下文模型与语言边界
上下文映射关系与集成策略
团队与数据所有权端到端负责

战略 DDD决定“哪里应该不同”:子域、限界上下文、通用语言、上下文关系;战术 DDD帮助“内部如何表达”:实体、值对象、聚合、领域服务、仓储和领域事件。不要在没有战略边界时机械堆叠战术模式。

概念正确理解常见误区
限界上下文一套模型与语言在其中一致的语义边界。等同于微服务、数据库或组织部门。
聚合在一次事务中维护业务不变量的一致性边界。把整张对象图一次加载并强一致更新。
领域事件领域中已经发生、对其他能力有意义的事实。把内部 CRUD 细节全部广播成事件。
防腐层翻译外部模型,保护本域语言与规则。只做字段映射,不隔离语义差异。
上下文映射描述上下文间权力、依赖和翻译关系。只画调用箭头,不讨论所有权和演进策略。

六边形、洋葱与 Clean Architecture

三者名称与分层细节不同,但共享一个目标:业务规则位于内侧,外部世界通过端口/接口接入,源代码依赖指向更稳定的内层。它们是单个部署单元内部的组织方式,不自动等于微服务。

Inside

领域与应用用例

业务不变量、流程编排、端口定义。可以在不启动数据库、Web 框架和消息系统时进行快速测试。

Boundary

端口与契约

输入端口表达系统可做什么;输出端口表达核心需要什么。契约属于稳定一侧。

Outside

适配器与基础设施

HTTP、CLI、数据库、消息、供应商 API。实现端口并处理技术细节。

Rule

依赖方向

外层依赖内层,内层不知道具体框架。运行时控制流可以双向,源码依赖仍向内。

边界测试

如果某个模块能用一句领域语言说明职责,拥有自己的规则与状态,公开很少且稳定的契约,依赖方向明确,并能被单独测试,那么它具备成为好边界的条件。是否把它部署成服务,是下一层决策。

康威定律与“逆康威机动”

系统的通信结构往往映射组织的沟通结构。想获得清晰、可独立演进的边界,需要让团队对相应业务能力端到端负责,并减少长期跨团队排队。反过来,不能只画目标架构而保持与之冲突的所有权结构;技术边界、认知负荷、值班职责和产品边界要一起设计。

06

架构风格选择

风格是一组约束及其带来的性质,不是技术品牌,也不是成熟度等级。

先选能满足驱动因素的最简单结构,再让真实的团队协作、扩缩容和故障数据推动拆分。多数系统会组合多种风格,但每种风格都要有明确适用范围。

常见风格与真实代价

风格适合主要收益主要代价 / 风险
分层 / N-tier传统业务系统、职责稳定、低频变更易理解、关注点分离、迁移友好横向分层导致一项业务变更多层扩散;容易形成贫血领域模型
模块化单体新产品、中小团队、领域仍在探索事务与调试简单、部署低成本、可保持清晰边界需强制模块规则;单一部署和资源隔离能力有限
六边形 / Clean业务规则长寿、外部技术易变核心可测试、依赖可替换、技术污染少端口过度设计、简单 CRUD 被复杂化
微服务复杂领域、多自治团队、独立发布与扩缩容有高价值独立交付、故障和技术隔离、按域扩展网络、数据一致性、契约、平台、观测和组织成本高
SOA企业级能力复用、异构遗留集成服务契约、业务能力复用、跨系统编排中心化治理或 ESB 可能成为瓶颈;边界过粗
事件驱动多消费者、实时反应、高吞吐、时间解耦扩展性、解耦、缓冲、审计/重放潜力顺序、重复、最终一致、调试与模式演进复杂
CQRS读写模型差异显著、复杂写规则、读侧多样分别优化读写、清晰命令语义、读模型弹性同步与一致性成本;对普通 CRUD 收益很低
事件溯源完整历史是业务资产、需要时态查询或可重建状态不可变历史、审计、重放和新投影事件不可轻改、删除/隐私困难、投影与版本治理重
Serverless / FaaS突发或间歇负载、事件处理、快速实验按用量、自动弹性、少管基础设施冷启动、限额、状态与本地调试、供应商约束
Pipe & Filter编译、ETL、媒体处理、AI 数据管道阶段可组合、并行、独立测试与替换中间格式、错误恢复、端到端延迟与背压
微前端大型前端、多自治团队需独立交付前端所有权与发布解耦体验不一致、重复依赖、运行时集成与性能成本

微软的架构风格指南同样强调:风格通过约束产生性质,每种风格都有权衡;选择应从业务驱动和质量属性开始,而不是追求“纯度”。[4]

同一原则在不同场景中的特化

场景最重要的额外驱动典型架构关注
多租户 SaaS隔离等级、噪声邻居、租户生命周期、计量计费控制面/数据面、分层隔离、配额、租户级 SLO 与迁移
移动 / 离线优先断网、电量、设备存储、版本碎片、隐私本地优先状态、增量同步、冲突合并、Schema 迁移、后台限制
IoT / 边缘间歇连接、海量设备、物理安全、远程升级设备身份、边缘缓冲、遥测背压、命令确认、签名 OTA 与回滚
流处理 / 实时分析事件时间、迟到、顺序、吞吐与端到端延迟分区、水位、窗口、检查点、重放、状态存储和 Exactly-once 边界
HPC / 批计算吞吐、数据局部性、作业排队、昂贵计算并行分解、检查点/恢复、调度、制品与结果可重现
嵌入式 / 安全关键确定性期限、资源上限、危害与认证证据故障安全、冗余、静态分析、硬实时、端到端追溯与独立验证
大型前端体验一致、状态复杂度、包体、团队独立发布设计系统、状态边界、BFF、性能预算;微前端只在自治收益明确时使用

微服务是否值得:四个前置条件

Domain

边界可识别

限界上下文和数据所有权有业务依据,不是按技术层拆服务。

Team

团队可自治

能对构建、发布、运行、值班和成本端到端负责。

Platform

平台已就绪

自动交付、身份、遥测、配置、故障处理和开发者自助。

Benefit

独立性有价值

发布、扩缩容、合规或故障隔离的收益能覆盖分布式成本。

实用默认值 · 本手册的建议

对于领域尚在发现、团队不多、运维能力一般的新系统,优先考虑模块化单体 + 清晰领域边界 + 异步工作队列。它不是“以后一定拆”的临时品,而是可长期成立的结构;只有当独立交付、故障隔离或差异化扩展被数据证明时再提取服务。

启发式风格顾问

这是用于学习的启发式提示,不替代质量场景、成本模型和架构评审。

拆分服务的顺序

  1. 先在代码内建立模块、依赖规则和数据所有权。
  2. 用遥测识别真实的变更冲突、热点、故障耦合或合规边界。
  3. 为候选边界建立明确 API/事件契约和独立测试。
  4. 使用绞杀者模式逐条迁移能力,保留回退路径。
  5. 最后才独立部署与存储,并补齐 SLO、值班、成本与安全所有权。
常见反模式
  • 分布式单体:服务很多,但共享数据库、必须一起发布、同步调用成链。
  • 纳米服务:边界按实体或 CRUD 切分,业务事务跨大量网络调用。
  • 事件化一切:为了“解耦”隐藏业务流程,没有所有者、契约和对账。
  • 微前端复制后端问题:技术栈各异、用户体验破碎、公共能力无治理。
  • Serverless 幻觉:“无服务器”不等于无运行责任;限额、权限、成本和观测仍需设计。
07

分布式系统:把失败当作常态

跨越进程边界后,延迟、部分失败、重复、乱序和不确定状态都会进入业务模型。

分布式设计的目标不是假装网络可靠,而是让不确定性有边界:每个远程调用有时间预算,每个重复操作安全,每个异步流程可追踪、可对账、可补偿。

八个必须默认成立的事实

  • 网络会失败
  • 延迟不为零且会抖动
  • 存在部分失败
  • 时钟并不完全同步
  • 消息可能重复或乱序
  • 容量与队列有限
  • 拓扑与版本会变化
  • 遥测也可能缺失或延迟

远程调用的韧性工具箱

模式解决什么关键约束 / 常见坑
超时限制等待和资源占用从端到端预算向下分配;连接与读取分开;不能无限默认值
重试 + 退避 + 抖动处理短暂故障仅对可重试且幂等操作;尊重总预算;防止重试风暴
熔断失败依赖下快速失败并探测恢复不是万能开关;阈值、半开探测和观测需按依赖调优
舱壁隔离线程、连接、队列或租户资源池过多浪费资源,过少无法隔离;明确爆炸半径
限流 / 配额保护容量与公平性入口、租户、用户和下游分别控制;返回可重试信息
背压 / 负载卸除过载时保持核心能力队列必须有界;按优先级拒绝、降级或延迟非关键工作
幂等 / 去重让重复请求不产生重复业务效果幂等键有作用域、保留期和原子写;响应也应可重放
降级 / 回退依赖失败时保留核心旅程回退数据的新鲜度和安全边界要明确;避免静默错误
死信 / 隔离队列隔离无法处理的消息不是墓地;必须有告警、诊断、修复、重放和保留策略
端到端时间预算 · 示例
入口预算 800 ms含排队与序列化
订单 500 ms最多 1 次短重试
库存 220 ms超时即转处理中
异步确认30 s 最终状态 SLO

CAP 与 PACELC:讨论业务语义,而不是背字母

CAP关注发生网络分区时,系统无法同时保证线性一致与每个请求都成功响应;必须按操作选择倾向。PACELC进一步提醒:即使没有分区,也常在延迟(L)与一致性(C)间权衡。真正要问的是:

  • 哪个业务不变量必须同步守住?例如“同一座位只能售出一次”。
  • 哪些读允许陈旧,陈旧多久,用户能否看见“处理中”?
  • 冲突如何检测、谁有权合并、能否补偿、是否需要人工介入?
  • 分区期间是拒绝、排队、只读、有限降级,还是接受暂时分歧?

跨服务事务的选择

方法适用代价与注意
本地 ACID同一数据所有者内的不变量首选;不要为了形式上的服务独立把一个聚合事务拆散
两阶段提交少数受控环境、参与者支持、强原子性价值极高协调器、锁与可用性成本;跨组织和大规模系统通常不合适
Saga · 编排流程清晰、需要中心状态和可视化编排器可能变成业务耦合中心;补偿不是“数据库回滚”
Saga · 协同上下文自治、事件自然驱动后续动作全局流程难看见;避免事件环和无人拥有的流程
Transactional Outbox + CDC原子写业务状态与待发布事件仍会重复,消费者必须幂等;监控发布延迟与积压
对账 / 修复外部系统和长流程不可避免的不一致定义权威记录、差异阈值、修复权限和审计;不是事后补丁

消息语义:Exactly-once 是端到端性质

At-most-once

最多一次

可能丢,但不会由传输重发。适合可丢遥测或可重新获取的数据。

At-least-once

至少一次

不轻易丢,但可能重复。配合幂等消费者、去重与可重放设计最常见。

Effectively once

业务上一次

传输、处理、状态写入、幂等键与外部副作用共同保证可观察效果仅一次。

全局有序代价高且通常不必要。优先定义按聚合/实体键有序;事件含业务键、版本或序列号,消费者检测缺口、陈旧与重复。用事件时间处理迟到数据,用水位线或窗口明确完整性。

缓存是一个数据系统

模式适用必须设计
Cache-aside通用读缓存TTL、穿透、击穿、雪崩、陈旧容忍和失效
Read-through / Write-through希望缓存层统一数据访问写延迟、故障语义、源数据一致性
Write-behind高写吞吐且允许延迟持久化丢失窗口、顺序、重放、持久队列
CDN / Edge静态或可缓存公开内容Cache-Control、主动失效、个性化和隐私泄漏
分布式设计评审的一句话

对每条跨边界交互逐项写清:超时、重试、幂等、顺序、一致性、容量、授权、可观测、降级、补偿、对账。任何空白都会在生产环境里变成隐式默认值。

08

数据架构:所有权、流动与可信

数据架构的核心不是选数据库,而是定义事实由谁拥有、怎样变化、如何被安全地复用和证明。

把操作主记录与派生副本分开:前者守住业务不变量,后者服务搜索、分析、推荐或 AI。每个副本同样需要所有者、血缘、新鲜度、删除传播与恢复策略。

数据生命周期控制面

采集 / 接入用途、同意、契约
验证 / 分类质量、敏感级别
处理 / 存储血缘、加密、分区
服务 / 共享授权、SLO、审计
归档 / 删除保留、传播、证明

按访问模式选择存储

类型优势场景关键问题
关系型事务、约束、灵活查询、核心业务记录索引与锁、垂直/水平扩展、分区键、迁移
文档聚合式数据、模式变化、按文档读写跨文档事务、冗余、一致性、文档增长
键值 / 缓存低延迟查找、会话、计数、热点数据内存成本、持久性、淘汰、热键
宽列大规模稀疏数据、按主键与列族访问查询需预设计、分区热点、最终一致
多跳关系、欺诈、知识图谱、网络分析遍历边界、模型治理、分布式图成本
搜索引擎全文、倒排、聚合与相关性通常是派生索引;同步、重建、删除传播
时序指标、传感器、按时间窗口聚合基数、降采样、保留、迟到数据
对象存储低成本大对象、数据湖、备份与制品元数据、小文件、生命周期、不可变与版本
仓库 / 湖仓跨域分析、历史、批流统一、BI/ML数据契约、质量、血缘、计算成本与治理
向量索引语义检索、相似度、RAG 召回ACL、租户隔离、新鲜度、评估、重嵌入与删除

先写访问模式、数据量、增长、读写比、一致性、延迟、保留、合规和恢复目标,再选产品。“多模型数据库”也不会消除数据建模。

OLTP 与 OLAP:一份事实,两类优化目标

Operational

OLTP · 运行当前业务

小而频繁的读写、强约束、低延迟、当前状态。围绕业务事务和聚合设计。

Analytical

OLAP · 理解历史与整体

大范围扫描、聚合、历史快照、跨域分析。围绕维度、事实、列式存储与计算设计。

Movement

CDC / 事件 / 批处理

选择更新时效、顺序、重放、删除与模式兼容策略;不能依赖无审计的手工导出。

Reconcile

对账与可重建

源记录、偏移、水位、校验和与补数流程让派生系统可验证,而非“看起来差不多”。

数据产品卡片

DATA PRODUCT / DATASET CARD
名称与业务用途:
Owner / Steward / Producer / Consumer:
System of Record 与来源:
数据分类、合法依据、驻留与租户:
Schema / Data Contract / 版本与兼容策略:
血缘与 Provenance:
质量 SLO(准确、完整、一致、有效、及时、唯一、可追溯):
访问控制、脱敏、加密与审计:
新鲜度、保留、归档、删除及下游传播:
RPO / RTO、备份恢复、重处理与对账:
成本归属、消费者清单、废弃流程:

Data Mesh:组织模型,不是买一套平台

Ownership

领域所有权

最理解数据的领域团队对生产与共享质量端到端负责。

Product

数据即产品

可发现、可理解、可信、可访问、可互操作,并有 SLO。

Platform

自助数据平台

把接入、质量、血缘、安全和运行能力产品化,降低认知负荷。

Governance

联合计算治理

全局规则与领域自主结合,策略尽可能自动执行。

当组织规模、领域自治和跨域数据需求不足时,Data Mesh 的协调成本可能大于收益。小团队先建立明确所有权、契约、目录与质量指标,通常比组织重构更有效。

多租户数据隔离

模型优点代价 / 适用
共享库共享表 + Tenant ID成本低、运营简单必须在每层强制租户过滤;爆炸半径大,适合低隔离等级
共享库独立 Schema隔离与成本折中迁移、连接池与 schema 数量治理复杂
每租户独立数据库隔离、备份、迁移和定制更强运营对象多;适合高价值或合规租户
分层混合按租户等级分配隔离需要明确放置策略、迁移路径和统一控制面
恢复能力的真相

“已开启备份”不等于可恢复。要定期在隔离环境完成还原,验证加密密钥、依赖配置、日志重放、数据一致性、恢复时长和业务验收,并记录证据。

09

API、集成与事件契约

集成边界的目标是保护自治,而不是让所有系统互相看见内部细节。

协议选择只是表层;真正决定长期成本的是语义、所有权、兼容性、失败行为、身份边界和变更流程。契约必须同时描述正常返回与失败、限额、幂等和废弃。

交互风格对比

方式最适合优势主要风险
REST / HTTP资源型公开 API、通用集成生态成熟、可缓存、可观察、易穿越边界语义不严谨、过多往返、版本与错误模型不一致
gRPC / RPC内部低延迟、强类型、流式通信高效、代码生成、明确契约时间耦合、浏览器/公网兼容、调用链膨胀
GraphQL多样客户端、聚合图、字段选择避免过取/少取,单一类型图N+1、复杂度/成本滥用、授权到字段级、缓存困难
事件 / Pub-Sub多消费者、异步反应、状态传播时间解耦、扩展、缓冲与重放最终一致、重复、顺序、发现和调试困难
Webhook跨组织轻量事件通知实现简单、接收方无需轮询签名、重试、去重、出站 SSRF 与投递可见性
批文件 / 对象大体量、低频、遗留或监管交换吞吐高、边界清楚、可审计时效、部分失败、文件契约与重跑

契约设计的最低要求

Semantics

业务语义

命令还是查询、资源还是动作;不变量、授权主体、幂等范围。

Failure

失败语义

错误分类、可否重试、超时、限额、部分成功、处理中状态。

Evolution

演进规则

兼容变更、版本、废弃期、消费者清单和迁移证据。

Security

信任与数据

身份、对象/字段级授权、数据分类、输入输出校验和审计。

Operations

运行约定

SLO、容量、配额、关联 ID、所有者、支持和事件响应。

Specification

机器可读

OpenAPI、AsyncAPI、Protobuf/IDL、JSON Schema 与契约测试。

兼容性规则

Request

输入要保守演进

新增可选字段通常兼容;重命名、改变含义、缩小允许范围通常破坏消费者。服务端拒绝未知字段还是忽略,要明确。

Response

消费者要宽容但不失控

新增响应字段通常兼容;删除、类型变化、枚举新增对某些生成客户端仍可能破坏,需契约测试。

Event

事件是长期公共事实

事件一旦发布很难收回。Schema ID、业务版本、时间、来源、键与追踪字段应标准化。

Retirement

废弃是一个产品流程

发现消费者、公告、双写/适配、使用遥测、截止日期和最终阻断;不能只把文档标成 deprecated。

命令、事件与通知

类型语言所有权与期望
命令“请做某事”——动词、可拒绝发送者知道目标能力;接收者决定是否执行并返回结果
领域事件“某事已发生”——过去式、不可撤回发布者拥有事实;不知道或不控制消费者
事件通知只含事实 ID 与最少信息消费者需回查源系统,耦合到其可用性但减少复制
携带状态事件包含消费者所需快照消费自治更强,但隐私、大小、演进和删除传播成本更高
EVENT ENVELOPE · 概念模板
event_id: 全局唯一,用于去重
event_type: 领域事实名称
schema_version: 契约版本
occurred_at / recorded_at: 事件时间与记录时间
source: 发布上下文与所有者
subject_id / partition_key: 业务主体与局部顺序键
correlation_id / causation_id / trace_id: 流程、因果与追踪
tenant / classification: 租户与数据分类(不放不必要敏感数据)
payload: 业务事实;只承诺契约内字段
注意:代理生成的文本、用户输入和外部数据永远不应成为可信指令。

API Gateway 与 BFF 的边界

网关适合终止 TLS、身份验证、路由、配额、协议转换和统一遥测;BFF适合为特定客户端聚合与裁剪体验。两者都不应吞下领域规则、跨域事务和所有业务编排,否则会形成“聪明管道、贫血服务”的新中心。

第三方 API 也不可信

验证响应 schema 与业务范围,设置出站允许清单、TLS、超时、熔断、速率和成本上限;敏感操作要幂等、可对账。OWASP API Security Top 10 2023 特别强调对象/属性/功能级授权、资源消耗、敏感业务流、SSRF、资产清单和不安全消费第三方 API。[5]

10

云原生与平台工程

云原生的价值是更快、更安全地适应变化;不是把所有应用都塞进 Kubernetes。

从托管服务、自动化和声明式基础设施获得弹性与反馈,再按业务价值决定需要多少控制。平台应成为内部产品,为团队提供安全默认值和自助“黄金路径”,而不是新的工单中心。

2026 生态提示

CNCF 当前《云原生定义》为 v1.1,强调系统应可编程、可重复部署、松耦合、安全、有韧性、可管理、可持续且可观测;容器和微服务只是常见手段。Kubernetes v1.36 于 2026-04 发布。ingress-nginx 已在 2026-03 退休,新项目应评估 Gateway API 或其他持续维护的实现,并始终核对供应商支持周期。[26][27][28]

三大云架构框架的共同视角

框架核心支柱(截至资料核对日)阅读方式
AWS Well-Architected运营卓越、安全、可靠性、性能效率、成本优化、可持续性用问题驱动定期评审,不把评审当审计[6]
Azure Well-Architected可靠性、安全、成本优化、运营卓越、性能效率围绕工作负载权衡,持续优化而非一次达标[7]
Google Cloud Well-Architected运营卓越、安全/隐私/合规、可靠性、成本、性能、可持续性;另有 AI/ML 等跨支柱视角强调为变化设计、文档、简化、解耦与无状态[8]

三者名称略有差异,但都要求把安全、可靠、性能、运营和成本一起权衡。可持续性不只是环境议题:减少空闲、过度配置和无价值数据,也通常同时降低成本与复杂度。

Kubernetes:何时是平台,何时是负担

Good fit

适合

许多容器化工作负载、需要一致调度/网络/策略、自托管或混合环境、团队有平台能力,且控制价值高。

Poor fit

不一定适合

少量简单应用、无平台团队、数据库和消息均可托管、业务更看重速度而非底层可控。

Provides

它提供

声明式配置、调度、服务发现、滚动发布、自愈与扩缩容的基础抽象。[9]

Does not provide

它不自动提供

正确的服务边界、业务韧性、数据一致性、安全架构、低成本和良好开发体验。

平台工程:平台即产品

Discover

从用户需求开始

产品团队的高频、无差异化痛点决定路线图;不从工具清单开始。

Self-service

自助与可组合

通过门户、API、CLI、模板和文档按需获得能力,减少人工等待。

Golden path

安全默认路径

项目模板内建构建、测试、身份、遥测、成本标签与策略。

Measure

用结果衡量

首次生产时间、交付表现、任务成功率、采用/留存和开发者满意度。

CNCF 将内部平台定义为按用户需要整合与呈现能力的横切层,并强调“平台即产品”、一致体验、自助、降低认知负荷、可选可组合及默认安全;“最薄可行平台”往往优于自建所有底层能力。[10]

云基础与交付控制面

Landing Zone账号、网络、身份、日志
IaC + Policy as Code可审查、可重建、护栏
交付 / GitOps声明、审批、漂移与回滚
运行平台计算、数据、消息、身份
遥测与 FinOpsSLO、成本、容量、碳
  • 基础设施即代码:版本化、评审、自动计划与应用;检测漂移,秘密不进入代码库。
  • 策略即代码:阻止公开存储、未加密、无所有者/成本标签、超权限与不可信制品等违规。
  • GitOps:声明的期望状态与自动协调有助于审计和回退,但紧急流程、秘密、数据库变更仍需专门设计。
  • 可观测默认:新服务无需工单即可获得统一指标、追踪、日志、告警模板和成本归属。

单区、多区与多地域

拓扑获得付出 / 关键决策
单区最低成本与复杂度区级故障中断;适合可恢复、非关键或开发环境
同地域多可用区抵御单区故障,延迟较低跨区成本、状态复制、仲裁与真实故障域验证
多地域主备区域灾难恢复与数据驻留选项RPO/RTO、故障转移、DNS、数据复制、回切和演练
多地域双活全球低延迟与更高连续性一致性、冲突、容量、运营和成本显著增加;只用于被业务证明的路径

多云与可移植性的现实

“未来可能迁移”不足以支撑同时运营多云。先定义要保护的对象:数据可导出、应用可重建、身份不锁死、核心契约开放、退出时间和成本可接受。真正的多云还要支付双平台技能、联网、可观测、安全、数据一致性和故障演练成本;常见更务实做法是主云 + 可恢复数据 + 可替换边界。

成本架构(FinOps 思维)

Unit economics

单位经济性

每订单、租户、活跃用户、GB 或模型任务成本,而非只看总账单。

Allocation

归属与透明

所有资源有产品、环境、所有者与成本标签;共享成本有分摊规则。

Guardrails

预算护栏

预算、异常检测、配额、生命周期与高成本动作审批。

Optimize

持续优化

先消除闲置,再调整规格、存储层级、承诺折扣和架构。

Value

成本对应价值

便宜但拖慢业务不一定更优;用业务产出和 SLO 共同评估。

Sustainability

少做无价值工作

提高利用率、减少数据搬运和重算,按需求选择地域与计算规模。

建设还是购买

差异化业务能力值得自建;数据库、消息、身份、可观测等无差异基础能力通常优先托管。比较的不只是许可证,而是三年总拥有成本、技能稀缺、可靠性责任、退出能力和机会成本。

11

可靠性与 SRE

可靠性不是“永不失败”,而是在可接受成本下持续兑现最重要的用户承诺。

从关键用户旅程定义 SLI 和 SLO,再用错误预算平衡交付速度与可靠性投资。高可用、备份和灾难恢复解决的是不同问题,必须分别设计、验证和演练。

SLI、SLO、SLA 与错误预算

Indicator

SLI

用户可感知行为的测量,例如成功请求比例、在阈值内完成的订单比例。

Objective

SLO

SLI 在某时间窗口内的内部目标,例如 30 天滚动成功率 ≥ 99.95%。

Agreement

SLA

对外承诺及未达标后果,通常应比内部工程目标更宽松。

Budget

错误预算

1 − SLO,把可接受失败转化为共同的变更与投资信号。

Google SRE 将 SLO、消除琐事、监控、发布、事故响应与复盘放在同一套可靠性实践中;100% SLO 通常意味着无法承担持续变更的成本。[11]

“几个九”在 30 天窗口意味着什么

目标允许失败时间(约)设计含义
99%7 小时 12 分适合非关键或有人工替代的能力
99.5%3 小时 36 分需要基本冗余、监控与恢复流程
99.9%43 分 12 秒发布、依赖、容量和故障恢复都需工程化
99.95%21 分 36 秒单点、变更失败和第三方依赖会迅速吃完预算
99.99%4 分 19 秒通常需要自动恢复、强隔离、严格变更和高成本冗余

数字按 30 天计算,仅用于直觉。实际应使用成功事件比例、业务窗口或用户旅程 SLI;“不可用分钟”并非所有系统的最佳度量。

好的 SLI 从用户结果出发

旅程候选 SLI不要只用
登录正确凭据下成功建立会话且 < 1 s 的请求比例身份服务器进程在线率
下单未重复扣款且 30 s 内得到最终状态的订单比例入口 HTTP 200 比例
搜索有结果、数据新鲜且 p95 < 300 ms 的查询比例平均延迟或 CPU
数据管道截止时间前完整、准确到达的分区比例作业“成功”状态
AI 助手在延迟/成本预算内被评估为可接受且有依据的任务比例模型 API 可用率

可靠性分层

预防简化、容量、自动化
检测SLI、症状告警、审计
限制舱壁、单元化、降级
恢复故障转移、回滚、还原
学习无责复盘、适应度函数

RTO、RPO 与灾备策略

RTO 是业务可接受的恢复时间,RPO 是可接受的数据丢失窗口。两者应按业务能力分级,包含依赖和人员,不应只写数据库参数。

策略典型恢复速度成本必须验证
备份与还原小时到天备份完整性、密钥、基础设施重建、日志追赶、业务验收
Pilot Light数十分钟到小时中低最小核心常驻,扩容、依赖与数据同步能否及时完成
Warm Standby分钟级中高缩小容量是否承载切换期负载,DNS/路由与回切
多地域双活秒到分钟写冲突、一致性、容量、依赖相关性、自动/人工切换边界
串联系统的可用性会相乘

若一次请求必须顺序依赖三个各 99.9% 可用的独立服务,粗略联合可用性约为 99.7%,还未计网络与应用本身。冗余只有在故障相互独立、容量足够、切换路径被验证时才改善结果。

监控四个黄金信号

Latency

延迟

区分成功与失败请求,关注阈值分布和尾延迟。

Traffic

流量

请求、任务、事件、字节或并发,映射实际需求。

Errors

错误

显式失败、错误结果、超时、降级和违反策略。

Saturation

饱和度

最受限资源接近上限的程度与排队增长。

叫醒人的告警应同时满足:紧急、用户可感知、需要立即行动。原因型指标适合诊断;症状型 SLO 燃烧率更适合寻呼。为快故障与慢消耗使用多窗口、多燃烧率策略。

事故与复盘

  1. 指挥与沟通:设事故指挥、操作、沟通和记录角色;先稳定影响再找根因。
  2. 时间线与影响:基于证据记录用户、业务、数据和合规影响,避免记忆重构。
  3. 促成因素:设计、流程、组织、容量、依赖、变更和检测如何共同作用。
  4. 无责学习:区分直接触发与系统性条件,不把“操作失误”当最终答案。
  5. 行动闭环:每项行动有负责人、截止、优先级和验证;跟踪到完成并更新运行手册。

混沌与 Game Day

先写稳态假设、保护指标、实验范围、停止条件和回滚路径,再从非生产和小爆炸半径开始。测试的不只是实例重启,还应包括:依赖变慢、限额耗尽、证书过期、控制面不可用、区域隔离、消息积压、错误配置和人工接管。

错误预算策略示例
  • 预算健康:保持正常发布节奏,继续小批量交付。
  • 预算快速燃烧:冻结高风险变更,增加审查与自动回滚,优先修复可靠性。
  • 预算耗尽:产品与工程共同决定仅发布修复、是否降低功能目标或调整 SLO。
  • 长期几乎不消耗:目标可能过宽或投入过度,应重新评估业务价值和成本。

错误预算是跨职能决策工具,不是绩效排名或追责机制。

12

性能、容量与可扩展性

性能是特定负载下的行为;可扩展性是负载变化时保持目标的能力。

不要从“加缓存、加机器”开始。先建立负载模型和延迟预算,识别排队与饱和点,再用最小改动验证瓶颈。平均值会隐藏真正伤害用户的尾延迟。

性能模型的六个量

Latency

延迟分布

p50 看典型体验,p95/p99 看长尾;区分服务时间与排队时间。

Throughput

吞吐

每秒请求、事件、订单、字节或 token;明确成功口径。

Concurrency

并发

同时在系统内的工作量;连接、线程、任务和锁都可能受限。

Utilization

利用率

资源忙碌比例。接近 100% 时排队通常非线性增长。

Saturation

饱和

排队、拒绝、池等待、限流或 GC 表示需求超过即时能力。

Errors

错误与超时

压测时吞吐提高可能只是快速失败;必须与正确性一起看。

Little’s Law

稳定系统中,平均在途量 L = λ × W。若到达率为 1,000 请求/秒、平均响应时间为 0.2 秒,则平均约 200 个请求在系统内。它能帮助估算连接池和并发,但前提是系统稳定、窗口定义一致。

端到端延迟预算

阶段预算示例观测点优化方向
网络 / CDN / 网关80 ms区域、握手、缓存命中就近、连接复用、压缩、缓存
应用排队与业务100 ms队列时间、线程/事件循环减小临界区、并发、隔离、负载卸除
数据访问70 ms慢查询、锁、缓存、扫描量索引、查询重写、批量、读模型
下游依赖100 ms每个依赖分位数与超时并行、减少调用、异步、回退
序列化与余量50 ms载荷大小、CPU、GC、抖动裁剪字段、流式、协议、预留安全边际

扩展的基本手段

Scale up

纵向扩展

更强单机,简单且低协调,但有上限和更大单点。适合数据库早期阶段或内存密集工作负载。

Scale out

水平扩展

增加副本,要求状态外置或可分区;带来负载均衡、协调和一致性问题。

Partition

分片 / 单元化

按租户、地区、业务键拆容量与爆炸半径。分区键决定热点、查询和迁移成本。

Async

异步与批量

削峰、提高吞吐、合并 I/O;牺牲即时结果并需要积压、重试和幂等治理。

缓存优化的顺序

  1. 先证明慢在哪里,避免缓存错误或低频路径。
  2. 定义可接受陈旧窗口和失效责任。
  3. 选择缓存位置:浏览器、CDN、网关、应用、本地或数据层。
  4. 设计命中率、键空间、容量、TTL、预热、穿透与击穿。
  5. 故障时决定绕过、使用陈旧值还是拒绝;监控源系统回源压力。
  6. 保护隐私:认证响应、租户数据和含敏感字段的缓存键不能串用。

性能测试类型

测试回答的问题关键做法
基准测试版本或实现的相对变化?环境可重复,隔离噪声,关注统计分布
负载测试目标负载下是否满足 SLO?真实请求混合、数据量、缓存状态和思考时间
压力测试极限在哪里、怎样失败?逐步加压,观察饱和、拒绝、恢复与数据正确性
尖峰测试突发到来时弹性是否及时?测试冷启动、扩容滞后、队列和限流
浸泡测试长时间是否泄漏或退化?持续数小时/天,观察内存、句柄、碎片、存储增长
故障负载测试故障与高负载叠加会怎样?减少实例、依赖变慢、区域退出,验证剩余容量

容量计划简表

CAPACITY MODEL
当前基线:峰值需求 / 请求混合 / 数据量 / 区域 / 读写比
增长模型:业务增长 + 季节/活动系数 + 安全余量
单实例实测能力:满足目标分位数与错误率时的吞吐
故障容量:失去一个节点/区/地域后,剩余容量仍满足哪一级目标
扩容滞后:指标采集 + 决策 + 启动 + 预热总时间
有界资源:连接、线程、队列、文件、内存、磁盘、配额、下游限额
单位成本:每 1,000 请求 / 订单 / GB / AI 任务
触发点:何时扩容、分片、归档、重构或改变产品策略
常见性能反模式
  • 只看平均延迟;没有请求量、分位数和错误率。
  • 无限队列“防止丢请求”,最终把延迟和内存推到不可恢复。
  • 把数据库连接池开得很大,实际只把拥塞推到数据库。
  • 过早分片,导致跨分片事务、查询与迁移复杂度远超收益。
  • 负载生成器先饱和,或测试数据与生产基数完全不同。
  • 自动扩缩容只看 CPU,而瓶颈其实是队列、连接、令牌或下游配额。
13

安全架构与软件供应链

安全是贯穿设计、构建、发布、运行和退役的质量属性,不是边界上的一个防火墙。

从资产、威胁、信任边界和业务影响开始,用最小权限、分层防御和可验证控制降低风险。安全架构要同时保护运行系统与“生产软件的系统”——源代码、依赖、构建、制品和发布渠道。

NIST CSF 2.0:六个持续职能

Govern治理、风险偏好、责任
Identify资产、风险、供应链
Protect身份、数据、平台
Detect监控、分析、异常
Respond / Recover遏制、沟通、恢复、改进

CSF 2.0 于 2024 年正式发布,新增 Govern 并强化供应链治理;可用 Current/Target Profile 表达当前与目标状态,而不是把 Tier 当成认证分数。[12]

威胁建模:围绕数据流和信任边界

明确范围与资产

关键业务动作、数据、身份、秘密、模型、制品和可用性资源。

画数据流与信任边界

进程、存储、外部实体、协议、身份变化、跨租户/区域/组织流动。

系统化枚举威胁

可用 STRIDE:伪装、篡改、抵赖、信息泄露、拒绝服务、权限提升。

按业务风险排序

影响、可能性、暴露、可探测性与监管后果;避免平均用力。

选择控制并验证剩余风险

预防、检测、响应、恢复;明确所有者、测试、证据与接受人。

零信任不是“买一套产品”

Policy Engine

策略引擎(PE)

基于身份、设备/工作负载态势、资源、风险与环境作授权决定。

Policy Administrator

策略管理(PA)

执行决定,建立或终止通信路径、下发短期凭据。

Enforcement

策略执行点(PEP)

尽量靠近资源,拦截请求、默认拒绝并记录每次关键决定。

NIST SP 800-207 的核心是保护资源而非隐式信任网络位置;用户、设备和工作负载持续认证与授权。云原生补充 SP 800-207A 强调应用/服务身份与细粒度策略。[13]

  • 默认拒绝;最小权限、短时凭据、MFA、工作负载身份与 mTLS。
  • 高风险动作重新评估上下文并 step-up;授权不能只在登录时发生一次。
  • 单独保护策略系统、身份源与遥测;验证其故障时是 fail-safe 还是有限降级。
  • 微分段限制横向移动,但不能替代应用内对象、字段和业务动作授权。

NIST SP 1800-35 已于 2025 年正式发布,给出 19 个基于商用技术的零信任参考实现与经验,可用于从原则进入实施验证。[29]

身份、授权与秘密

主题架构要求常见失败
认证集中身份、强验证、会话生命周期、恢复与撤销把认证等同授权;长期令牌无法撤销
授权服务端对租户、对象、字段、功能和业务上下文逐项判断只在 UI 隐藏按钮;仅凭对象 ID;管理员角色无限扩大
工作负载身份每服务独立身份、自动轮换、调用范围最小共享静态 API Key;凭网络位置互信
秘密专用秘密存储、短时注入、轮换、泄漏检测与紧急吊销进入代码、镜像、日志、事件或 AI 上下文
加密传输、静态及高风险字段;密钥与数据分权、生命周期一致“已加密”但密钥同库、无轮换、备份未覆盖

应用安全基线:Top 10 不是验收标准

OWASP Top 10:2025 是风险意识文档;ASVS 5.0.0(2025 年发布)才提供可测试的 Web 应用安全控制基线。引用 ASVS 要带完整版本化控制 ID,例如 v5.0.0-x.y.z[14][15]

Input

不信任输入

Schema、允许清单、规范化、参数化查询与上下文输出编码。

Abuse

防业务滥用

限流、配额、反自动化、风控、成本上限和异常行为检测。

Inventory

资产可发现

API、版本、域名、证书、数据流与所有者清单,含废弃机制。

Evidence

证据化验证

SAST、DAST、依赖/容器/IaC 扫描、渗透测试与运行审计相互补充。

软件供应链:三个问题、三类证据

Contents

SBOM · 包含什么

组件、版本、唯一标识、哈希、许可证和依赖关系;使用 SPDX 或 CycloneDX 等机器可读格式。

Process

Provenance · 怎样构建

源、构建器、步骤、输入与产物摘要;SLSA 提供逐步提高来源与构建保证的框架。

Integrity

签名 / 证明 · 是否被改

签名绑定摘要并验证受信身份;发布入口和部署策略必须真正检查。

Response

VEX / 情报 · 如何处置

漏洞、可利用性、已知被利用清单、责任人、到期复核、修复与吊销闭环。

供应链工程基线

  • 受保护分支、MFA、最小权限;关键变更双人评审,仓库与 CI 审计可追踪。
  • 依赖、工具和基础镜像按 digest/hash 固定,禁止仅依赖可变标签。
  • 构建使用短生命周期隔离环境,CI 秘密最小化;制品不可变、可吊销、可回滚。
  • 每次发布生成并绑定 SBOM、签名 provenance;部署入口验证受信构建器和策略。
  • 自动关联资产、漏洞情报与 VEX;第三方组件有准入、升级、淘汰和应急替换计划。

NIST SSDF 1.1 是安全软件开发实践基线;SLSA 当前批准版为 v1.2。CycloneDX 当前规范 1.7 可表达组件、服务、依赖、漏洞、构建、ML 模型等供应链信息。[16][17][18]

隐私工程

  • 明确用途和合法依据;只采集完成用途所需的最少数据。
  • 数据分类驱动访问、加密、脱敏、保留、驻留和审计。
  • 将删除传播到缓存、搜索、分析、副本、备份策略与向量索引;记录例外。
  • 尽量使用匿名化、假名化、令牌化和聚合;评估重识别风险。
  • 为访问、更正、导出、删除和申诉设计可操作流程,不靠临时脚本。
SECURITY REQUIREMENT
资产 / 业务动作:
威胁主体与场景:
信任边界与数据分类:
预防控制:
检测与审计证据:
响应、遏制与恢复:
控制失败时的安全行为:
验证方法(测试、演练、审计、监控):
剩余风险、接受人、复审日期:

本章用于架构学习,不替代适用地区、行业和组织的法律、合规或专业安全评估。

14

交付、测试与可观测性

架构只有在可构建、可验证、可发布、可观察和可回退时才真正存在。

把反馈做快,把批量做小,把证据自动化。持续交付不是“每天上线”,而是系统始终处于可部署状态,任何变更都能以低风险按需发布。

一条可信的交付供应链

提交评审、签名、秘密扫描
构建隔离、可重复、SBOM
验证多层测试、策略、证据
发布不可变制品、渐进流量
观察与回退SLO、业务、成本、安全

发布策略

策略优点代价 / 前提
Recreate简单、无多版本兼容有停机;适合非关键内部系统或计划窗口
Rolling资源增量小、平台普遍支持新旧版本共存;需向后兼容、就绪探针和失败回滚
Blue–Green切换快、回退直观、环境完整双份容量、数据迁移与外部副作用不能只靠切流回退
Canary小爆炸半径、用真实流量验证需要分群、足够样本、自动判定与停止条件
Feature Flag部署与功能发布解耦、可按用户控制组合爆炸、旧旗标清理、服务端授权不能由旗标替代
Shadow复制真实输入验证新系统,不影响响应隐私、成本、外部副作用隔离、结果比较

测试组合:按风险建立证据

Fast

单元 / 领域

快速验证业务规则、不变量和边界内行为,数量最多。

Boundary

组件 / 端口

以真实组件验证数据库、消息、序列化和适配器契约。

Contract

消费者驱动契约

验证服务可独立演进;不能代替业务端到端流程。

Integrated

集成 / E2E

覆盖少量关键旅程、身份、部署与真实依赖;稳定性比数量重要。

Qualities

质量属性

性能、韧性、灾备、安全、可访问性、兼容性和成本测试。

Architecture

适应度函数

自动检查依赖方向、循环、契约、SLO、策略和技术债趋势。

可观测性:从未知问题推断内部状态

信号擅长回答设计注意
Metrics趋势、聚合、SLO、容量、告警控制标签基数;业务与技术指标同图;保留与降采样
Traces请求跨边界去了哪里、耗时和错误在哪上下文传播、采样、异步链接、敏感属性
Logs离散事件、上下文、审计与详细诊断结构化、级别、脱敏、关联 ID、成本和不可篡改需求
Profiles持续 CPU/内存热点与代码路径生产开销、符号、采样与隐私
Events / Changes部署、配置、特性开关、事故与业务变化把变化叠加到遥测,避免只看结果不看触发

OpenTelemetry 提供厂商中立的追踪、指标、日志和上下文传播模型;它解决采集与语义互操作,不替你决定什么值得测、如何告警和保留多久。[19]

DORA 已从“四项”演进为五项指标

Throughput

变更前置时间

从代码提交到成功运行在生产的时间。

Throughput

部署频率

在一段时间内发布到用户的频率。

Throughput

失败部署恢复时间

由生产变更导致故障后恢复所需时间。

Instability

变更失败率

需要立即修复、回滚或热修的部署比例。

Instability

部署返工率

为解决生产用户问题而进行的非计划部署比例。

Use well

按同一应用看趋势

用于团队改进,不跨异质系统排名,更不能衡量个人。

DORA 当前明确使用“吞吐 + 不稳定性”的五指标模型,并指出速度与稳定性通常不是对立面。[20]

架构适应度函数示例

意图自动验证人工 / 运行验证
模块边界禁止循环与越层依赖;包/模块可见性测试领域语言与所有权评审
API 兼容Schema diff、契约测试、废弃使用遥测消费者迁移与业务语义确认
可靠性SLO、燃烧率、超时/重试配置检查Game Day、恢复和容量演练
安全策略、依赖、制品、IaC 与秘密扫描威胁建模、渗透测试、风险接受
成本预算、标签、单位成本、异常与闲置检测价值、可靠性与锁定权衡
部署完成 ≠ 发布成功

渐进式发布要同时检查技术 SLI、业务转化、数据正确性、安全拒绝、成本和长尾分群;自动回滚规则必须避免在数据迁移或外部副作用后制造更大损失。

15

治理、团队与系统现代化

好的治理让多数正确选择更容易,让高风险例外可见,而不是让所有变化排队审批。

架构治理的最小闭环是:原则与安全默认值 → 轻量决策记录 → 自动护栏 → 风险分级评审 → 运行反馈 → 例外到期。它服务交付与风险,而不是服务文档数量。

从“关卡”到“护栏”

Low risk

标准路径自动通过

团队使用批准模板、托管能力和默认策略,自助交付;通过流水线保存证据。

Medium risk

同行评审 + ADR

新数据流、跨域契约、重要依赖或显著成本,进行时限明确的异步/工作坊评审。

High risk

专项证据评审

监管、单向门、重大安全、跨地域数据、核心身份或不可逆迁移,需要原型、威胁和恢复证据。

Exception

例外有期限

记录理由、风险接受人、补偿控制、到期日和退出计划;到期自动提醒而非永久豁免。

团队是架构的一部分

Stream-aligned

价值流团队

围绕业务结果端到端交付和运行,边界应控制在可承受认知负荷内。

Platform

平台团队

把共同能力产品化,降低其他团队认知负荷,不成为代运维工单池。

Enabling

赋能团队

短期帮助团队跨越新能力缺口,以知识转移而非永久依赖为目标。

Complicated subsystem

复杂子系统团队

拥有算法、编解码、模型或特殊硬件等高专门化能力,提供清晰接口。

  • 一个运行单元必须有明确团队所有者、SLO、值班和成本责任。
  • 共享库、数据库和平台能力也需要产品式所有权与弃用机制。
  • 依赖图应能映射到团队;频繁跨团队协调是边界或平台问题的信号。
  • 避免“架构师决定、团队接单”;决策者应与实现和运行后果保持接近。

架构治理资产

资产用途健康信号
原则少量稳定的决策方向有冲突解决作用,不是无人记得的口号
参考架构 / 黄金路径把成熟选择和控制产品化采用率、任务成功、例外原因、用户满意度
ADR保存背景、取舍和演进触发器能追溯现状;状态、替代关系与实现一致
技术雷达试验、采用、保留、避免的共同语言有证据和复审日期,不追热点、不封死探索
风险 / 技术债台账让已知问题有所有者和经济后果按风险排序、有触发器和偿还动作
服务 / 数据目录发现所有者、契约、依赖、SLO 和生命周期自动同步,废弃和孤儿资产可见

企业架构与解决方案架构如何衔接

企业架构关注跨组织的业务、数据、应用与技术组合及迁移路线;解决方案/软件架构关注具体系统和工作负载。TOGAF 10th Edition 可用于组织企业架构能力与 ADM 迭代,但不应把项目文档变成全量 TOGAF 制品。[21]

业务战略能力、价值流、风险偏好
组合与原则目标状态、标准、平台
解决方案驱动质量、范围、约束
ADR 与实现结构、契约、部署
运行证据SLO、成本、交付、风险

技术债:描述后果,不只描述“代码不好”

TECH DEBT / RISK ITEM
ID / 标题 / 所有者:
产生背景与当时决策:
当前症状与证据:
受影响的业务、质量场景、团队和数据:
利息:每次变更延迟 / 事故 / 额外成本 / 安全暴露
触发器:达到什么条件必须处理
选项:偿还 / 降低 / 隔离 / 接受 / 淘汰
预估成本、优先级、目标日期:
完成与验证标准:

遗留系统现代化:按能力和风险切片

策略何时用提醒
Retain稳定、低成本、变化少、风险可接受保留不等于无人维护;要有所有者、恢复和生命周期
Retire无使用、重复或不再创造价值先用遥测确认消费者,处理数据保留与审计
Rehost数据中心退出、时间紧、先搬后改技术债与运营模型不会自动改善
Replatform用托管运行时/数据库降低运维验证兼容、锁定、性能和迁移回退
Refactor / Rearchitect结构严重阻碍业务变化、可靠性或成本围绕业务能力逐步演进,避免大爆炸重写
Replace / Repurchase能力通用、购买比自建更有价值数据迁移、流程适配、供应商退出和集成总成本

绞杀者式演进

建立可观测边界

测出功能使用、依赖、数据流、错误与成本,先知道真实系统。

在入口建立路由缝

网关、代理、消息、数据库变更捕获或抽象层,保留回退。

选择高价值低耦合切片

按业务能力和用户旅程,不按技术层或表逐步迁移。

迁移数据所有权

定义主记录、双写/同步窗口、校验、切换和删除旧路径。

关闭旧能力

使用遥测证明无人调用,归档数据,撤销权限和基础设施,回收成本。

治理的反指标

评审数量、文档页数、统一技术栈比例和“无例外”不代表好治理。更有意义的是:决策前置时间、标准路径采用与任务成功、例外到期、风险关闭、交付表现、事故和单位成本趋势。

16

AI / LLM 系统架构

把 AI 当作概率组件嵌入确定性系统:输出可评估,权限有边界,失败能降级,成本可控制。

AI 应用不是“模型 API + Prompt”。它包含数据、检索、策略、编排、工具、输出验证、人工监督、评估和运行控制;模型输入与输出都应视为不可信数据。

生产级 AI 应用参考结构

AI SYSTEM · 确定性控制包围概率核心
入口 / 身份租户、配额、用途
策略与输入处理PII、注入、分类
编排与检索上下文、记忆、路由
模型 / Agent概率推理与计划
验证 / 工具 / 人审Schema、权限、审批

横切:版本、追踪、离线/在线评估、成本、审计、反馈、回退、Kill Switch。

AI 系统的质量属性

属性候选指标架构手段
正确 / 有依据任务成功、faithfulness、引用精度/覆盖、正确拒答RAG、结构化数据、验证器、来源引用、人工升级
安全 / 合规有害输出、注入成功、数据泄露、越权工具调用模型外策略、最小权限、沙箱、输出校验、红队
可靠 / 可恢复可接受响应率、降级成功、漂移、依赖失败影响模型路由、确定性回退、超时、幂等、Kill Switch
性能 / 成本各阶段 p95/p99、token/任务、被接受任务成本小模型优先、缓存、批量、上下文预算、级联路由
新鲜 / 可追溯知识年龄、索引延迟、答案可重建率数据契约、版本、血缘、删除传播、检索日志
公平 / 人因语言/群体差异、自动化偏差、人工覆盖与申诉分层评估、明确不确定性、人工确认、反馈渠道
可维护变更回归、回滚时间、供应商切换成本模型/Prompt/索引版本化、评估门禁、适配层

RAG 的离线与在线两条管道

Offline · Indexing

知识入库

来源准入 → 解析/规范化 → 分类与 ACL → 分块 → 嵌入 → 索引 → 质量与血缘。必须保留来源、版本、哈希、租户、保留和删除元数据。

Online · Answering

检索回答

身份/策略 → 查询理解 → ACL 前置检索 → 重排 → 上下文构造 → 生成 → 引用/Schema/安全验证 → 响应或拒答。

Freshness

新鲜度与删除

定义接入延迟 SLO、tombstone、重建/回填、版本切换与对账;删除必须传播到 chunk、向量和缓存。

Evaluation

分层评估

分别评估解析、召回、重排、生成、引用、策略和端到端任务,避免只看最终“感觉不错”。

评估体系(Evals)

按用例定义可接受结果

正确、完整、有依据、无害、延迟和成本;包含明确拒答条件。

建立版本化黄金集

真实分布、长尾、空结果、冲突、过期、多语言、权限和对抗样本。

离线回归门禁

模型、Prompt、工具、chunker、embedding、索引或数据变更都要跑。

小流量 Canary / A-B

检查线上任务成功、人工纠正、安全、延迟、成本与分群差异。

生产抽样与反馈闭环

人工审查高风险样本,监测漂移、投诉与失败簇,回补测试集。

可重建一次回答需要记录:模型和参数、Prompt 模板、策略版本、embedding/index/data 版本、检索 chunk ID/score/ACL、工具请求/响应、验证决定和 trace;同时对敏感内容脱敏并限制访问。

RAG / Agent 威胁与控制

威胁架构控制
直接 / 间接 Prompt Injection区分指令与数据通道;检索文本始终不可信;模型外授权;对抗评估与安全拒答
来源投毒 / 隐藏文本 / 解析混淆来源允许清单、签名/哈希、审批、恶意文件扫描、规范化、可追溯入库
跨租户检索 / ACL 丢失ACL 与分类绑定到每个 chunk;服务端检索前过滤;高敏索引隔离与越权测试
敏感信息泄露数据最小化、PII/secret 过滤、脱敏日志、输出策略、供应商数据处理约束
不安全输出处理结构化 Schema + 语义验证;参数化 API;输出不直接进入 SQL、Shell、HTML 或浏览器动作
过度代理权 / 工具滥用工具允许清单、短时最小权限、每动作 scope/预算、高影响操作人审与可撤销设计
资源消耗无界token/检索 fan-out/工具次数/时间/费用预算,速率与并发限制,递归深度和 Kill Switch
模型/数据/依赖供应链来源、许可证、版本、评估、签名/SBOM、提供商变更监测和退出路径

OWASP LLM/GenAI Top 10 2025 覆盖 Prompt Injection、敏感信息、供应链、投毒、输出处理、过度代理权、系统提示泄露、向量/嵌入弱点、错误信息与无界消耗;它是威胁意识基线,不替代完整威胁模型。[22]

Agentic AI 的确定性护栏

Identity

每个代理有身份

短时凭据、最小工具范围、租户上下文,不共享万能账号。

Approval

高影响动作人审

付款、发送、删除、发布、改权限等在执行前展示明确摘要。

Sandbox

隔离执行

限制网络、文件、代码、CPU、时间和费用;输出再验证。

Control

可停止与可追责

幂等、审计、预算、异常告警、人工接管、Kill Switch 和回滚。

任何 Prompt、系统提示或模型 guardrail 都不是授权机制。即使模型“承诺不做”,高影响控制也必须由模型外的身份、策略、参数验证和执行层强制。

NIST AI RMF:治理贯穿全生命周期

Govern责任、政策、文化、文档
Map场景、主体、影响、风险
Measure测试、评估、监控、证据
Manage排序、处置、沟通、改进

NIST AI RMF 1.0 当前仍是正式基线但正在修订;NIST AI 600-1 是生成式 AI 的正式配套 Profile,强调风险治理、内容来源、上线前测试与事件披露。[23][24]

AI 项目应记录的 ADR

  • 为什么此用例适合 AI;哪些结果不能交给概率系统。
  • 模型/供应商选择、路由与退出路径;数据是否被用于训练。
  • RAG、微调或纯提示的选择;知识源、ACL、刷新与删除。
  • 质量、安全、公平、延迟和成本门槛;评估集与批准人。
  • 工具权限、人工确认、失败降级、审计、事故与 Kill Switch。
  • Prompt、模型、数据、索引和评估版本如何关联与回滚。
最重要的 AI 架构边界

让模型提出建议、计划或结构化候选;让确定性代码验证事实、权限、格式、预算和业务不变量;让人对不可逆、高影响和高不确定动作保留最终决定。

17

演进式案例:多租户订单平台

用同一个案例串起驱动、边界、数据、可靠性、安全、交付和演进,而不是展示“终极架构”。

场景:为多个零售品牌提供商品浏览、购物车、促销、库存预占、订单和支付编排。团队从 12 人增长到 4 个价值流团队;先在单地域多可用区运行,并保留区域灾备路径。

架构驱动(假设数据)

Scale

规模

20k RPS

大促入口峰值;订单写峰值 2,000/s,读写比约 12:1。

Reliability

结算 SLO

99.95%

30 天滚动;不允许重复扣款,明确处理中状态。

Performance

受理延迟

p95 < 600ms

峰值时确认已受理;最终状态 30 秒内可查。

Recovery

订单恢复

RTO 30m

订单 RPO ≤ 5 分钟;支付对账记录 RPO 接近 0。

  • 核心不变量:同一幂等键只创建一个订单;支付结果可对账;库存预占有过期和补偿。
  • 降级:推荐、评价、个性化失败不影响浏览和结算;促销故障可使用已验证快照或关闭新优惠。
  • 约束:团队初期没有 7×24 平台能力;支付由外部机构完成;租户数据必须逻辑隔离并审计。
  • 最大风险:大促热点、第三方支付不确定结果、优惠规则复杂度、库存与订单最终一致。

阶段 A:先做清晰的模块化单体

STAGE A · 单地域多可用区 / 模块化单体
Web / App / PartnerCDN · WAF · API Gateway · 身份 · 租户与配额
商品目录、价格视图
购物车 / 促销规则与快照
订单状态机、幂等、Outbox
库存 / 支付适配预占、外部防腐层
关系数据库同一实例,按模块独立 Schema、禁止跨模块直接写
Redis商品/会话/幂等热点
消息 + Worker异步确认、通知、索引
横切运行能力OpenTelemetry · SLO · 审计 · 秘密 · CI/CD · 备份恢复 · 成本标签

为什么不直接微服务:领域边界和促销规则仍在探索,四个团队尚未形成,跨服务一致性与平台成本会延缓市场验证。模块通过代码可见性、架构测试、独立 Schema 和端口隔离,避免退化成“大泥球”。

阶段 B:先扩读路径和异步工作

压力 / 问题演进动作不做什么验证
商品读远多于写CDN + 应用缓存 + 搜索派生索引;变更事件驱动刷新不把订单也放入最终一致缓存命中率、陈旧窗口、回源峰值、删除传播
订单峰值冲击下游受理与执行分离,有界队列、背压、幂等 Worker不使用无限队列,不承诺同步完成积压年龄、30 秒最终状态 SLO、重复副作用
支付超时结果未知外部幂等键、状态机、Webhook 验签、主动查询与对账不盲目重试扣款账实差异、对账时长、未决交易数量
分析拖慢交易库Outbox + CDC 到分析/读模型,按水位对账不让 BI 直连主库跑大查询同步延迟、数据质量、可重建与主从差异

阶段 C:用触发器决定是否提取服务

候选边界提取触发器提取前准备仍保持模块的理由
支付编排独立合规、故障隔离和值班;不同发布节奏稳定状态机、幂等、对账、API/事件契约与独立数据若只是少量适配器且同团队拥有,网络化收益有限
库存写热点、仓网算法专门团队、独立容量与可用性目标预占语义、过期、补偿、版本与分区键库存与订单强事务仍频繁变化时,过早拆会放大一致性成本
商品搜索查询/索引技术与容量完全不同,已是派生模型索引事件、重建、ACL、陈旧 SLO 和回退查询小规模时托管搜索 + 模块适配器即可
促销多团队独立规则、发布冲突和计算热点被证实价格快照、规则版本、可解释结果与失败降级与购物车共同变化且规则未稳定时,保持同边界更内聚

关键 ADR 示例

ID决定主要理由后果 / 重审触发器
ADR-001以模块化单体起步领域探索与团队规模,优先低运维成本当独立发布/容量/合规收益被量化时重审
ADR-004订单使用客户端幂等键网络超时后客户端必然重试,需避免重复订单键作用域与 48 小时保留;监控冲突率和存储成本
ADR-007业务状态与 Outbox 同事务写入避免数据库 + Broker 双写裂缝至少一次投递,消费者幂等;监控发布延迟
ADR-011单地域多区 + 异地温备当前业务 RTO/RPO 与成本的平衡季度恢复演练;区域收入或监管变化时评估双活
ADR-015租户 ID 强制贯穿身份与数据共享表成本可接受,但必须防跨租户访问数据库行策略 + 服务端授权 + 越权测试;高价值租户可迁独立库

上线前故障场景

Dependency

支付 10 秒无响应

入口在预算内返回“处理中”;不重复扣款;后台查询与 Webhook 最终收敛。

Overload

流量 3 倍突增

非关键能力先降级;有界队列和限流保护结算;剩余容量满足目标。

Data

搜索索引落后 15 分钟

展示新鲜度或回退数据库查询;告警水位,索引可重建且不影响订单。

Zone

一个可用区退出

剩余区承载峰值;连接、队列、缓存与数据库切换均在演练范围。

Security

租户 ID 被篡改

身份上下文覆盖客户端字段;对象级授权拒绝并审计;无跨租户数据返回。

Recovery

主库逻辑误删

停止传播、时间点恢复、重放 Outbox、对账并满足 RTO/RPO。

案例结论

系统的成熟不是组件越来越多,而是每次新增复杂度都有明确驱动、可验证收益、清晰所有权和退出路径。先建立模块、幂等、契约、遥测和恢复,再讨论服务数量。

18

可复用模板与检查清单

模板用于触发高质量对话;删掉不适用部分,并用链接和自动生成证据避免重复维护。

完整软件架构文档骨架

SOFTWARE ARCHITECTURE DOCUMENT · arc42 / ISO 42010 / C4 组合
# 0. 文档控制与阅读指南
- 文档 ID、版本、状态、日期、作者、评审人、责任团队
- 适用系统/版本/环境、变更记录、源仓库与自动生成入口
- 目标读者、各角色阅读路径、图例与术语约定

# 1. 关注实体、目标与范围
- 业务使命、成功指标、关键用户旅程
- 系统职责 / 非目标 / 范围边界 / 假设
- 利益相关者、关切、影响力、期望和验收责任

# 2. 架构驱动与约束
- Top 3–5 质量目标及场景
- 核心领域、不变量、关键数据与信任边界
- 法规、组织、预算、期限、遗留、技术、驻留约束
- 风险、假设、验证动作与最晚决策时间

# 3. 系统上下文
- C4 System Context / Landscape
- 外部用户、系统、设备、组织及所有权
- 业务与技术接口、数据流、SLA、限额、失败行为

# 4. 解决方案策略
- 顶层架构风格、领域分解、数据与集成策略
- 质量属性策略、部署拓扑、关键技术与组织策略
- 选择理由、主要取舍及 ADR 链接

# 5. 静态结构 / 构建块
- C4 Container(必选)与必要的 Component
- 每块的职责、技术、API/事件、数据所有权、团队所有权
- 依赖方向、允许/禁止关系、版本与生命周期

# 6. 运行时视图
- 关键正常路径、异常路径、过载、恢复和管理场景
- 同步/异步、事务、幂等、顺序、超时、重试、降级、补偿、对账
- 序列图或动态 C4;每个场景关联 SLI/SLO

# 7. 部署与运行视图
- 环境、账号/项目、区域/可用区、网络/信任边界
- 软件到运行节点映射、扩缩容、故障域、容量和成本归属
- 配置、秘密、证书、备份、RTO/RPO、灾备与恢复演练

# 8. 数据架构
- System of Record、派生数据、Schema、血缘与数据契约
- 分类、授权、加密、保留、驻留、删除传播、质量 SLO
- 批/流、CDC、重放、对账、分区、主数据与多租户策略

# 9. API / 事件与集成
- OpenAPI / AsyncAPI / IDL、错误与幂等语义
- 身份、授权、配额、版本、兼容、废弃和消费者清单
- 外部依赖防腐层、失败隔离与退出路径

# 10. 横切质量概念
- 安全、可靠性、性能、可观测、测试、交付、可访问性
- 缓存、时间、错误处理、国际化、审计、供应链和 FinOps
- 每项:目标 → 策略 → 证据 → 所有者

# 11. AI / ML(如适用)
- 用例适配、数据/模型/Prompt/索引/工具架构
- Evals、风险、权限、人审、漂移、成本、回退与 Kill Switch

# 12. 架构决策
- ADR 索引:Proposed / Accepted / Deprecated / Superseded
- 重要、昂贵、难逆、跨边界和高风险决定的完整理由

# 13. 质量要求与验证
- 质量树、场景、优先级、验收和生产指标
- 架构适应度函数、性能/安全/恢复/混沌测试

# 14. 风险、技术债和开放问题
- 概率、影响、证据、缓解、剩余风险、接受人、截止与触发器

# 15. 演进路线与治理
- 当前 → 过渡 → 目标状态;里程碑、依赖、回退和成功指标
- 团队边界、评审级别、例外、标准路径、弃用和现代化策略

# 16. 跨视图追溯
利益相关者关切 → 质量场景 → 视图/元素 → ADR
→ 测试/监控证据 → 风险/行动项

# 17. 词汇表与权威参考

ADR 模板

ADR-XXXX · ARCHITECTURE DECISION RECORD
标题:用主动语态写清决定
状态:Proposed / Accepted / Deprecated / Superseded by ADR-…
日期 / 作者 / 决策者 / 参与者:

## 背景
什么问题要求现在决定?业务目标、质量场景、约束和证据是什么?
保持中立,不在背景中偷放结论。

## 决策驱动与评价标准
- 必须满足:
- 希望优化:
- 不在范围:

## 可行选项
0. 不改变 / 延迟决定
1. 方案 A:收益、代价、风险、证据、可逆性
2. 方案 B:收益、代价、风险、证据、可逆性

## 决定
我们将……(范围、负责人、生效日期)
选择理由;未选方案的主要理由。

## 后果
- 正面:
- 负面:
- 中性 / 新责任:
- 受影响系统、数据、契约、团队、成本与运行:

## 验证与跟进
原型 / 测试 / SLO / 成本 / 安全证据:
行动项、负责人、截止:
重审触发器与最晚复审日期:
相关 / 替代 ADR 与文档链接:

架构评审清单

目标与边界
结构与数据
分布式与可靠性
安全、交付与运行
经济性与演进

生产就绪检查清单

领域最低就绪证据
所有权产品/工程 Owner、值班、支持渠道、服务/数据目录、升级路径
部署不可变制品、环境一致、兼容迁移、渐进发布、停止条件、回退/修复前进
可靠性用户旅程 SLO、症状告警、容量余量、依赖降级、故障演练、错误预算策略
数据分类、所有权、质量、新鲜度、备份还原、RPO/RTO、保留/删除、对账
安全威胁模型、最小权限、秘密轮换、漏洞时效、审计、事件响应、供应链验证
可观测指标/追踪/日志关联,业务与技术看板,基数/采样/保留,变更标记
运行Runbook、常见诊断、手动安全模式、配额/证书/依赖到期、事故角色
经济性资源归属、预算、单位成本、异常告警、扩容成本和高成本操作护栏
合规适用义务、证据位置、数据驻留、第三方责任和风险接受

C4 图审查速查

Scope

看得出范围吗?

图类型、系统、环境、版本、读者、边界与图例清楚。

Elements

元素能自解释吗?

名称、类型、职责、技术、所有者和抽象层级一致。

Relations

箭头有意义吗?

方向、意图、数据、协议和同步/异步明确,无装饰线。

Risk

关键风险可见吗?

信任、数据、故障、部署和团队边界按图目的表达。

Trace

能追溯吗?

图元素与 ADR、契约、代码/部署、SLO 和风险项关联。

Fresh

仍然是真的吗?

最后更新时间、负责人和源模型明确;过期图被标记或删除。

C4 官方提供更完整的架构图评审清单,可作为团队标准的起点。[25]

90 分钟架构评审议程

10 分钟 · 决策请求

要决定什么、最晚时间、范围与谁承担后果。

15 分钟 · 驱动与上下文

业务、质量、约束、边界、当前证据,不先讲产品清单。

20 分钟 · 方案与取舍

至少两个选项、保持现状、可逆性、成本和团队适配。

25 分钟 · 风险风暴

正常、故障、过载、安全、恢复和变化场景;独立提出再排序。

15 分钟 · 结论

接受、需证据、延迟或拒绝;记录 ADR、风险、所有者和期限。

5 分钟 · 复盘评审

是否回答了决策问题,哪些材料可以下次自动化或删减。

19

12 周学习路线与权威资源

每周都产出可评审的制品;阅读只是输入,做出并验证决策才是学习闭环。

12 周实践路线

主题学习重点必须产出
01架构思维业务目标、利益相关者、架构驱动、范围一页驱动画布 + 系统上下文
02质量属性场景六要素、量化、权衡和效用树8 个质量场景,排序 Top 3–5
03文档与决策ISO 42010、C4、arc42、ADR上下文/容器图 + 3 个 ADR
04模块与领域DDD、耦合维度、六边形、团队边界领域地图 + 模块依赖规则
05架构风格模块化单体、微服务、事件、Serverless三方案权衡表 + 推荐与反对理由
06分布式系统时间预算、幂等、一致性、Saga、Outbox一条失败运行时序列 + 重放实验
07数据与集成主记录、契约、质量、血缘、API/事件演进数据产品卡 + API/事件契约
08云与平台Well-Architected、Kubernetes 取舍、IaC、FinOps部署视图 + 三年成本/单位成本模型
09可靠性与性能SLI/SLO、RTO/RPO、容量、压测、故障隔离SLO + 容量表 + 恢复 Game Day
10安全与供应链威胁建模、零信任、ASVS、SSDF/SLSA/SBOM数据流威胁模型 + 控制验证清单
11交付与治理渐进发布、可观测、DORA、适应度函数、现代化交付闭环 + 5 个适应度函数
12AI 与综合答辩RAG/Agent 风险、Evals、全景权衡完整架构文档 + 30 分钟评审答辩

毕业项目评分表

20%

问题理解

目标、边界、利益相关者、质量场景和约束是否具体且排序。

20%

结构与数据

领域、模块、依赖、所有权、契约和一致性是否有业务依据。

20%

运行质量

故障、过载、恢复、安全、性能、成本和可观测是否可验证。

15%

决策质量

有真实备选、证据、正负后果、可逆性和重审触发器。

15%

演进与团队

路线图小步可回退,所有权与认知负荷匹配,治理不过重。

10%

沟通

不同读者能快速找到答案,图表自解释,术语一致,无技术堆砌。

Gate

否决项

关键安全/数据风险无人接受,恢复无证据,或方案无法追溯到业务目标。

Pass

通过线

总分 ≥ 75%,且没有否决项;能回答“失败时怎样”和“何时重审”。

建议书目:按问题读,不按厚度读

方向书 / 资源重点
基础与权衡Software Architecture in PracticeFundamentals of Software Architecture质量属性、架构风格、分析与架构师能力
演进Building Evolutionary Architectures适应度函数、增量变化与可演进性
数据与分布式Designing Data-Intensive Applications复制、分区、事务、批流与一致性思维
生产与韧性Release It!;Google Site Reliability Engineering稳定性模式、SLO、事故、容量与运营
领域设计Domain-Driven DesignLearning Domain-Driven Design领域建模、限界上下文和系统边界
组织Team Topologies认知负荷、团队类型、交互模式与平台
安全与可靠Building Secure & Reliable Systems;NIST / OWASP 官方资料安全与可靠性的共同设计原则及可验证基线

图书可能已有新版本或中文译本,购买/借阅时以出版社最新目录为准。本手册优先引用可在线核对的一手标准和项目文档。

版本锚点(资料核对日:2026-07-30)

主题当前锚点状态提示
架构描述ISO/IEC/IEEE 42010:2022,第 2 版2011 版已撤销
产品质量ISO/IEC 25010:2023包含 9 个顶层产品质量特性
arc42Version 9官网提供中文模板
云原生 / KubernetesCNCF Definition v1.1;Kubernetes v1.36版本支持周期变化快;ingress-nginx 已于 2026-03 退休
应用安全OWASP Top 10:2025;ASVS 5.0.0Top 10 用于意识,ASVS 用于可测试要求
软件供应链SLSA v1.2;CycloneDX 1.7与 SBOM、签名、VEX 和处置流程组合
交付表现DORA 五项指标已从早期“四项指标”演进
AI 风险NIST AI RMF 1.0 + GenAI Profile AI 600-1AI RMF 1.0 正在修订,1.0 仍为正式基线
LLM 安全OWASP LLM / GenAI Top 10 2025Agentic Applications Top 10 2026 可作补充

权威参考资料

以下链接均为标准组织、项目官方站或原始方法来源。技术与标准会继续演进,实际项目采用前请再次确认版本和适用范围。

核心术语表

ADR
架构决策记录,保存背景、决定、状态与后果。
架构驱动
会显著改变结构的业务、质量、约束和风险因素。
视点 / 视图
视点是构建某类表达的约定;视图是针对具体系统的实例。
限界上下文
一套领域模型和通用语言保持一致的语义边界。
聚合
维护业务不变量的事务一致性边界。
模块化单体
单一部署单元,但内部模块有强边界和隐藏实现。
最终一致性
在没有新更新时,副本经过一段时间收敛;业务需容忍中间状态。
幂等
同一逻辑操作重复执行不会产生额外业务效果。
Saga
用一系列本地事务和业务补偿实现长事务。
Outbox
业务状态与待发布消息在同一本地事务中写入的模式。
CDC
捕获数据库变更并传播到下游的机制。
背压
消费者把容量信号反馈给生产者,以限制过载。
熔断
依赖连续失败时暂时快速失败,并周期探测恢复。
舱壁
隔离资源和故障,限制爆炸半径。
SLI / SLO / SLA
指标 / 目标 / 带后果的服务协议。
错误预算
由 SLO 允许的失败空间,用于平衡变化与可靠性。
RTO / RPO
可接受恢复时间 / 可接受数据丢失窗口。
可观测性
从系统输出推断内部状态、包括未知问题的能力。
适应度函数
持续验证架构特性是否仍满足意图的自动或人工检查。
平台工程
把共享能力作为内部产品,以自助和安全默认值降低认知负荷。
GitOps
以版本化声明状态和自动协调管理运行环境的方式。
零信任
不因网络位置隐式信任,每次访问按身份、资源和上下文评估。
SBOM
软件物料清单,描述制品包含的组件和依赖。
Provenance
制品来源与构建过程的可验证元数据。
System of Record
对某项事实具有最终判定权的主记录系统。
数据产品
有所有者、契约、质量、可发现性和生命周期的数据能力。
RAG
检索增强生成,用外部证据构造模型上下文。
Eval
用于度量 AI 组件或端到端任务质量、安全、延迟和成本的评估。
Prompt Injection
不可信输入操纵模型偏离预期指令或泄露/执行未授权行为。
技术债
过去决策在未来变更、风险和运行中持续产生的额外成本。
最后的学习检查

面对任何新技术,先问五件事:它解决哪个已量化问题?替代方案是什么?新增哪些失败模式和组织成本?如何验证收益?退出路径是什么?能持续回答这五问,你学到的就不再只是架构名词。