Files
my-vault/02_Areas/Personal Development/System Architecture/Decision-Methods.md
T

373 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 决策方法
created: 2025-12-30
updated: 2025-12-30
tags: []
---
tags: [architecture, decision, ATAM, ADR, tradeoff, risk, wsjf]
created: "<% tp.file.creation_date('YYYY-MM-DD') %>"
updated: "<% tp.file.last_modified_date('YYYY-MM-DD HH:mm') %>"
> 目标:让架构决策 **可解释 / 可量化 / 可追溯 / 可回滚**。
## 1) 方法家族(知道用什么)
- **ATAM**:以“质量属性场景”驱动的架构权衡;产出风险/敏感点/权衡点、Utility Tree。
- **ADR**:单条架构决策记录;背景→选项→量化权衡→决策→回滚→验证。
- **Trade-off Matrix**:把可用性/成本/复杂度/交付周期等维度量化对比。
- **Utility Tree**:质量属性(可用/性能/安全…)→ 场景化 → 重要度×难度评分。
- **WSJF / CoD**:对一篮子能力排序(价值/时效/风险降低 ÷ 规模)。
- **风险分析**:风险登记(概率×影响)、敏感性(Tornado)、决策树(期望值)。
- **实验驱动**:金丝雀/灰度/A-B;以 **SLO & Error Budget** 作为放量门禁。
## 2) 统一流程(Playbook
1. 对齐业务目标与 **NFR/SLO**
2. 列出 ≥ 2 个候选(含“不做/延后”)
3. **Utility Tree** 场景化:重要度 (BI) × 难度 (TR)
4. **Trade-off** 量化:可用/性能/成本 (TCO)/复杂度/交付
5. 风险登记:概率×影响 + 缓解/触发器/应对
6. 做出决策并写 **ADR**(含回滚条件与验证指标)
7. 金丝雀验证 → 复盘(按月/季度迭代)
## 3) 最小公式(随手可用)
- Error Budget(同窗) = `1 - SLO`;例:99.95%/月 ≈ **22 分钟**
- Burn Rate = `实际消耗 / 线性应消耗`> 1 表示过快)
- 串行可用性近似:`A_total ≈ ∏ A_i`;并联冗余:`A = 1 - ∏(1 - A_i)`
- WSJF = `(业务价值 + 时效性 + 风险降低) / 规模`
- 风险评分 = `概率(15) × 影响(15)`> 12 需强缓解)
- 停机成本 ≈ `分钟 × 单位损失 × 影响用户占比`
- 年度 TCO ≈ `计算+存储+网络+日志+监控 + 人力×系数 + 预留 10%`
## 4) 权衡维度(打分建议)
- **可用性**(预期 SLO / RTO / RPO
- **性能**P95 / P99 目标可达性)
- **成本**(一次性 vs 年度 TCO
- **复杂度**(开发/运维/组织)
- **交付周期**(从 PoC 到可用上线)
- **风险**(技术/合规/运营)
> 建议:评分用 1(优)~ 5(差);或直接用定量值(SLO%、$TCO、周数)对比。
## 5) 模板速用
### 5.1 Trade-off Matrix(权衡矩阵)
|方案|SLO/可用性|年 TCO|复杂度|交付周期|关键风险|结论|
|---|--:|--:|--:|--:|---|---|
|A|99.9%|$X|3|1|区域单点|过渡|
|B|99.95%|$X+30%|4|2|跨区复制/切换|✅|
|C|99.99%|$X+80%|5|4|一致性冲突|暂缓|
### 5.2 Utility Tree(简版)
```yaml
availability:
- scenario: "Region 故障 30m 内恢复"
BI: 5 # Business Importance
TR: 4 # Technical Risk
performance:
- scenario: "峰值 5k QPS P95≤250ms"
BI: 5
TR: 3
security:
- scenario: "密钥自动轮换/静态加密"
BI: 4
TR: 2
```
### 5.3 ADRArchitecture Decision Record
```markdown
# ADR-XXXX: <标题>
## 背景
目标 / SLO / 约束(预算/期限/团队)
## 选项
A / B / C(含“不做”)
## 量化权衡
权衡矩阵 + TCO + 停机成本 + 风险表
## 决策
选择 X(理由与 SLO/成本对齐)
## 回滚计划
触发条件(p95>阈、burn_rate>2x…)与一键脚本
## 验证
金丝雀步骤、成功判据、观测指标(RED/USE)
## 后续
里程碑、技术债、风险缓解任务
```
### 5.4 风险登记(Risk Register
|ID|风险|概率|影响|分数|缓解|触发器|应对|
|---|---|--:|--:|--:|---|---|---|
|R1|复制延迟超阈|3|4|12|增带宽/压测|lag>15s|降级读主库|
|R2|切流脚本失败|2|5|10|预演|回滚>5m|手动 Runbook|
### 5.5 WSJF / CoD(优先级)
|能力/改造|价值|时效|风险降|规模|WSJF|
|---|--:|--:|--:|--:|--:|
|自动回滚|7|9|8|4|6.0|
|观测统一|6|8|7|5|4.2|
|跨区主备|8|7|6|8|2.6|
## 6) 验证要点(决策“落地就绪”)
-**回滚条件与脚本**(已演练)
- 金丝雀/灰度 **与 SLO/预算** 绑定(stop_if 明确)
- 成本/停机损失 **有计算来源**(表/链接可追溯)
- 风险登记 **有触发器与应对动作**
- **ADR 已归档**,并在 PR / 变更单中引用
## 7) 常见反模式(避免)
- 只有口头结论、无 ADR / 无量化
- 只看一次性成本,不看年度 **TCO****停机成本**
- 无回滚/未演练;金丝雀只是“形式”
- 风险登记没有触发器,告警不连 Runbook
- 用平均延迟代替 P95/P99,掩盖体验尾部
## 8) 记忆卡(60 秒回顾)
- **工具箱**ATAM / ADR / Trade-off / Utility Tree / WSJF / 风险登记
- **关键四问**:值不值?做得成?能按时?出事能回?
- **落地三件套**:SLO & 预算门禁、回滚脚本、ADR 可追溯
下面给你一份“**按实际操作最常用**”的架构决策方法清单——偏**工程落地**,少理论。每条都写**什么时候用、产出、优缺点**,最后给一套“80/20 标配组合”。
---
## 现在最常用的决策方法(工程实践版)
### 1) RFC / 设计提案评审(Design Doc / RFC Review
- **场景**:中大型改造、跨团队影响、有外部依赖的变更。
- **怎么做**:一页或多页设计文档(问题→方案A/B/C→权衡→风险→回滚),线上异步评审+同步评审会。
- **产出**:评审结论、改动清单、遗留问题、后续指标。
- **优点**:共识快、成本低、适配组织协作;易留档。
- **缺点**:如果不强制“量化对比”,容易拍脑袋。
- **要点**:文档内嵌**Trade-off 表**与**回滚计划**,引用 SLO&预算。
---
### 2) 权衡矩阵(Trade-off Matrix
- **场景**:在 2–3 个候选架构/云上拓扑/中间件里做选择。
- **怎么做**:对**可用性/性能/成本(TCO)/复杂度/交付周期/风险**打分或填入实数(推荐实数)。
- **产出**:1 张表 + 结论 + 假设与数据来源。
- **优点**:直观、团队对齐快;适合管理沟通。
- **缺点**:维度权重主观;需配真实数据支撑。
- **要点**:把**SLO、停机成本、年度 TCO**放进表里,避免空话。
---
### 3) ADRArchitecture Decision Record
- **场景**:任何会影响系统边界/接口/成本的决定(无论大小)。
- **怎么做**:每个决定 1 条 ADR(背景→选项→量化权衡→决策→回滚→验证)。
- **产出**:可追溯的决策档案;PR/变更单引用。
- **优点**:治理性强、可回溯;适合审计与人员更替。
- **缺点**:只记录、**不替代**分析;若无模板易变成流水账。
- **要点**:强制包含**回滚触发条件**与**验证指标**(如 burn rate、P95)。
---
### 4) 轻量 ATAM(场景化权衡)
- **场景**:质量属性冲突明显(可用性↔成本、性能↔一致性)。
- **怎么做**:把 NFR 拆成**场景**(如“Region 挂 30 分钟仍对外 99.95%”),对**重要度×难度**打分,找**敏感点/风险点**。
- **产出**:简化版 Utility Tree、风险/敏感点列表。
- **优点**:能把“质量属性”落到可验证场景。
- **缺点**:完整 ATAM 成本高;建议做**轻量版**(半天内搞定)。
- **要点**:每个场景都要有**验证口径**(数据源+SLO/阈值)。
---
### 5) 实验/金丝雀 + 守护指标(Experiment / Canary with SLO Gates
- **场景**:对性能、稳定性有不确定性的变更或新中间件上线。
- **怎么做**5%→25%→100% 放量,**stop_if**`P95>阈``错误率>阈``burn_rate>2x` 自动回滚。
- **产出**:放量对比截图/链接、是否推广的结论。
- **优点**:用事实说话;能避免“大爆炸上线”。
- **缺点**:需要可观测性底座与自动回滚脚本。
- **要点**:把**SLO & Error Budget**作为发布门禁,而不是“建议”。
---
### 6) WSJF / RICE(优先级排序)
- **场景**:多项能力/改造同时竞争资源(平台建设、韧性改造、性能优化)。
- **怎么做**:WSJF =(价值+时效+风险降低)/ 规模;或 RICE = Reach × Impact × Confidence ÷ Effort。
- **产出**:有理有据的 Roadmap 排期。
- **优点**:跨团队对齐投资顺序很有效。
- **缺点**:打分主观;需定期复盘更新分值。
- **要点**:把**停机成本/合规风险**折算进“价值/时效”。
---
### 7) 风险登记+触发器(Risk Register with Triggers
- **场景**:跨区复制、数据一致性、迁移/割接、重大高风险变更。
- **怎么做**:列出风险,**概率×影响**评分;为每条风险设**触发器**(如 `lag>15s/10m`)与**应对动作**。
- **产出**:风险台账、演练计划、应对 Runbook。
- **优点**:让风险可运营、可预案,不是“备忘录”。
- **缺点**:没有触发器就会沦为形式。
- **要点**:触发器必须对接**告警**并链接**Runbook**。
---
### 8) 成本模型 / TCO 评估(含停机成本)
- **场景**:云上选型、多活/主备、日志与追踪留存策略、CDN 与边缘。
- **怎么做**:测算**年度 TCO** + **停机成本**(分钟损失×影响用户),放入权衡矩阵。
- **产出**:成本对比表与单位经济性(Cost/Txn、Cost/1k req)。
- **优点**:管理层买单的通用语言。
- **缺点**:参数需持续校准;早期估算误差较大。
- **要点**:与 SLO 联动:**SLO 提升→停机成本下降**可抵消一部分 TCO 增量。
---
## 80/20 标配组合(推荐你实际落地就用这套)
> 小团队/中型组织都适用,投入小、收益高。
1. **RFC + Trade-off 表**(所有非小改都走)
2. **ADR**(每个决定 1 条,PR 必须引用)
3. **金丝雀 + SLO 门禁**stop_if 自动回滚)
4. **轻量 ATAM**(半天工作坊:列场景→标敏感点)
5. **WSJF**(季度 Roadmap 排序)
6. **风险登记(带触发器)**(迁移/跨区/数据一致性类必配)
7. **成本模型**(年度复盘,纳入权衡矩阵)
---
## 一页式对照表(可贴墙)
|方法|典型时机|输入|产出|用时|负责人|
|---|---|---|---|---|---|
|RFC/设计提案|中大型变更|问题/约束/选项|评审结论 & TODO|0.52 天|方案 Owner|
|Trade-off|多选其一|SLO、TCO、性能/复杂度|权衡矩阵 & 选择|1–3 小时|架构师|
|ADR|任意决定|RFC/评审结论|可追溯记录|3060 分钟|Owner|
|轻量 ATAM|质量冲突|NFR 场景|Utility Tree & 风险点|半天|架构+SRE|
|金丝雀+门禁|上线放量|SLO & Budget|对比证据/回滚与否|持续|Dev+SRE|
|WSJF/RICE|排期取舍|候选能力列表|排序表 & Roadmap|24 小时|PM/架构|
|风险登记|高风险变更|风险清单|触发器 & Runbook|12 小时|Owner|
|成本模型|选型/复盘|账单/流量/人力|年度 TCO & Unit Cost|13 天|FinOps|
---
## 可复制的最小模板片段
**Trade-off(行内版)**
`A: 99.9% / $X / 复杂度3 / 1周 | B: 99.95% / $X+30% / 复杂度4 / 2周 -> 选 B(停机成本年省≈$91k)`
**ADR 抬头**
`ADR-2025-10-XX 多Region主备:选 B;回滚触发=burn_rate>2x 或 P95>+20%;验证=金丝雀 5%→25%→100%`
**金丝雀 stop_if**
`["p95_ms>阈","error_rate>阈","burn_rate_any>2x"] 触发自动回滚 + 切流`
**风险登记一条**
`R1 跨区复制延迟:概率3 影响4=12;触发=lag>15s/10m;应对=降级读主库 + 补偿队列;季度演练`
---
想让我把这套“标配组合”打成一份 Obsidian 模板(带 Front-matter 和 Templater 变量)吗?我可以直接给你可粘贴的文件结构和占位内容。