面试知识

ADR(架构决策记录)、架构评审、决策可逆性与技术债

50-架构师思维与架构设计 面试知识整理。

ADR(架构决策记录)、架构评审、决策可逆性与技术债

本册把架构选择从“谁声音大听谁的”改造成可追溯、可质疑、可验证、可撤销的决策闭环。项目事实严格区分 E1(源码与可复现证据)、E2(已有材料映射)、E3(演练证据)与 E0(待核对);没有生产证据的量级、效果和事故只作为演练,不反推真实上线事实。

1. 决策记录不是会议纪要

1.1 ADR(架构决策记录)合同、边界与相邻文档

ADR(架构决策记录)回答“在什么约束和证据下,为何选择这个可验证承诺”。一份可执行记录至少包含背景、目标、非目标、约束、候选、证据、权衡、决策、后果、撤销条件、复审日期和所有者。目标定义成功,非目标限制本次范围;约束区分不可违反的硬边界与可交换的偏好;候选必须包括维持现状;证据要能回到来源、时间窗口和适用范围;后果同时写收益、代价、剩余风险和新增运维动作;撤销条件必须可观测,复审日期与所有者保证记录不会成为无人维护的历史文本。

它与相邻文档的区别在于责任不同:需求记录说明“为什么做和验收什么”,方案说明说明“有哪些组件与数据流”,ADR(架构决策记录)说明“为何在候选中作此选择”,实施记录说明“实际发布了什么版本”,会议纪要只说明“谁在何时讨论了什么”。同一次工作可以产生五类文档,但会议纪要里一句“大家同意”不能替代候选、证据、异议、后果与撤销条件。

文档核心问题必含证据不应冒充
需求记录为什么做、验收什么角色、场景、不变量、量级技术选择
方案说明系统怎样协作边界、数据流、失败路径选择理由
ADR(架构决策记录)为何选它而非其他候选约束、证据、权衡、后果实施完成证明
实施记录实际变更了什么版本、配置、发布与回退原始决策理由
会议纪要讨论和行动项是什么参会人、异议、待办正式批准结论
sequenceDiagram
    participant 需 as 需求责任人
    participant 作 as 决策所有者
    participant 评 as 评审组
    participant 实 as 实施团队
    participant 运 as 运行责任人
    需->>作: 提交目标、非目标与硬约束
    作->>评: 提交候选、证据、权衡与撤销条件
    alt 证据和批准条件完整
        评-->>作: 记录异议后条件批准
        作->>实: 发布已批准决策版本
        实->>运: 交付实施版本与运行信号
        运-->>作: 越界、复审或继续有效证据
    else 证据不足或违反硬约束
        评-->>作: 拒绝并列出补证项
    end

图解读:节点区分需求、决策、评审、实施和运行责任;箭头说明批准的是带版本的决策,不是口头共识。前提是硬约束和撤销信号可验证;失败分支返回补证,不以会后沉默当批准;业务结论是从需求到运行必须保留同一条责任链。

数据演绎 1:完整度不是字数

E3(演练证据):用 13 个必填字段验收一份记录,背景、目标、非目标、约束、候选、证据、权衡、决策、后果、撤销条件、复审日期、所有者、状态各记 1 分。某纪要只有背景、决策、所有者和日期,完整度为 4÷13≈30.8%;补到 11 项后为 11÷13≈84.6%,但若缺撤销条件和证据,仍不得批准。分数只暴露缺项,不能抵消关键字段。

热门面试题

  1. 问题:ADR(架构决策记录)最少要写哪些内容?
    • 考点:决策合同完整性。
    • 回答思路:按输入、比较、承诺、运行四段回答。
    • 详细答案:输入包括背景、目标、非目标和约束;比较包括候选、证据与权衡;承诺包括决策、后果和所有者;运行包括撤销条件、复审日期与状态。任何量级都要标证据等级,任何剩余风险都要有人接受。
    • 进阶追问:为什么非目标不能省?
    • 进阶回答:非目标阻止评审范围无限扩张,也避免上线后把未承诺能力追责给本次决策。
  2. 问题:决策记录与方案说明有什么区别?
    • 考点:文档职责。
    • 回答思路:用“为何选择”和“怎样实现”区分。
    • 详细答案:方案说明展开组件、接口、数据流与实施步骤;决策记录保存候选为何被保留或淘汰、证据适用范围、后果和退出条件。方案可以随实现迭代,决策变化则要新增版本并说明旧结论为何失效。
    • 进阶追问:能否合并在一个文件?
    • 进阶回答:可以物理合并,但必须保留独立字段、状态和版本边界,不能让实现细节淹没决策理由。
  3. 问题:为什么会议纪要不能冒充 ADR(架构决策记录)?
    • 考点:可追溯批准。
    • 回答思路:比较“讨论发生”与“决策有效”的证据。
    • 详细答案:纪要通常缺候选、反例、证据等级、剩余风险、撤销条件和所有者,也无法说明批准针对哪个版本。正式记录必须让未参会者复算当时判断,并能在条件变化时知道何时停止执行。
    • 进阶追问:纪要还有价值吗?
    • 进阶回答:有;它保存讨论上下文、异议和行动项,但应链接到正式决策版本,不能代替它。

2. 决策可逆性与延迟窗口

2.1 可逆门、单向门、延迟决策与期权价值

可逆决策可以用有限成本回到旧状态,例如内部查询库的索引参数;单向门决策一旦扩面,数据、合同、外部接口或组织依赖会让退出成本陡增,例如不可兼容的公共协议和长期供应商锁定。分类不是看技术名,而是看数据可恢复性、外部依赖、迁移窗口、合同承诺和回滚验证。高可逆选择适合小步试验;单向门必须提高证据门槛、缩小首次范围并预先支付退出成本。

延迟决策不是拖延,而是在“等待新增信息的价值”大于“延迟造成的机会损失”时保留选择。期权价值来自低成本保留多条路径:抽象稳定业务接口、保存可回放事实、避免过早使用供应商专有格式。若等待不会新增证据,或错过合规、容量、合同窗口会造成更大损失,就应到截止日按当前证据决策。记录必须写最后负责时刻、等待期间要获得的证据和逾期默认动作。

类型识别信号决策策略退出准备
高可逆内部、无数据迁移、分钟级回退小范围试验、快速复审自动回退与对照基线
中可逆需要双写、回放或兼容窗口分阶段批准校验器、迁移脚本、冻结窗口
单向门外部合同、公共协议、不可逆数据语义高门槛证据和责任升级合同退出条款、数据可携带方案
可延迟等待能获得区分候选的新证据写最后负责时刻保留接口与事实数据
不可延迟容量、合规或合同窗口逼近按当前证据决策明确剩余风险与止损线
flowchart TD
    A["识别外部承诺与数据迁移"] --> B{"退出成本是否随扩面陡增"}
    B -->|"否"| C["按可逆决策小步试验"]
    B -->|"是"| D["按单向门提高证据门槛"]
    C --> E{"等待能否获得区分性证据"}
    D --> E
    E -->|"能且未过最后负责时刻"| F["保留期权并限时补证"]
    E -->|"不能或已到截止日"| G["决策并登记退出条件"]

图解读:节点从退出成本而非技术复杂度判断可逆性;箭头把延迟与证据增量绑定。前提是最后负责时刻可识别;失败路径是无证据增量仍反复延期;业务结论是延迟必须购买信息,而不是购买情绪上的安全感。

数据演绎 2:是否值得等待

E3(演练证据):某搜索方案立即决策的错误选择概率演练为 30%,选错迁移损失 80 万元,期望错误损失为 0.30×80=24 万元。等待两周做回放验证可把错误概率降到 10%,等待造成机会损失 5 万元,则等待后的期望总损失为 0.10×80+5=13 万元,期权价值为 24-13=11 万元。若验证不能改变概率,等待只增加 5 万元损失。

热门面试题

  1. 问题:怎样判断一个架构决策是否可逆?
    • 考点:退出成本识别。
    • 回答思路:从数据、接口、合同、组织和验证回答。
    • 详细答案:检查能否恢复旧数据语义、外部调用方是否可同步回退、合同是否允许退出、团队是否仍具备旧路径能力,以及回滚后能否验证业务事实。只说“代码可回滚”远远不够。
    • 进阶追问:数据库表结构变更一定是单向门吗?
    • 进阶回答:不一定;兼容扩展、双读校验和可重放备份可提高可逆性,破坏性重写且无原始事实才接近单向门。
  2. 问题:延迟决策和拖延有什么区别?
    • 考点:最后负责时刻。
    • 回答思路:看等待是否有证据计划和截止日。
    • 详细答案:有效延迟写明缺什么证据、怎样获得、何时必须决定及逾期默认项;拖延只有“再看看”,没有信息增量和责任人。到截止日即使证据不完美,也要公开剩余风险后作出选择。
    • 进阶追问:什么时候不能再等?
    • 进阶回答:当容量、安全、合规、合同或迁移窗口即将越界,等待损失高于新增信息价值时不能再等。
  3. 问题:如何用工程手段提高期权价值?
    • 考点:可替换性。
    • 回答思路:围绕稳定边界、原始事实和退出演练。
    • 详细答案:保持业务接口独立于供应商特性,保存可回放的权威事件或变更日志,限制专有格式扩散,并提前验证导出、重建和回切。期权不是多写一层抽象,而是以可验证成本保留替代路径。
    • 进阶追问:抽象越多期权越高吗?
    • 进阶回答:不是;无真实替代需求的抽象会增加本金和维护利息,反而降低未来变化速度。

3. 候选比较不等于打分裁决

3.1 硬约束淘汰、加权比较、敏感性与人为判断

候选决策先做硬约束淘汰,再对可交换偏好加权。违反资金不变量、数据驻留、安全控制、恢复上限或团队无法运营的候选,不得靠性能和成本高分抵消。剩余候选可按延迟、吞吐、恢复、维护、成本和退出能力比较,但权重、评分与数据来源必须公开。加权矩阵的价值是暴露判断,不是把主观偏好伪装成客观算法。

评审至少做一次敏感性分析:改变关键权重、评分误差或量级假设,看排序是否翻转。若轻微变化就换冠军,说明不是“方案明显更优”,而是决策依赖脆弱假设,应补证据、缩小承诺或选择更可逆路径。反例必须具体描述在哪个工作负载、故障或组织条件下推荐项会失败。

步骤输入输出失真防线
候选生成目标、非目标、维持现状至少两个可行项不围绕预设产品凑选项
硬约束淘汰不变量、合规、恢复、团队能力淘汰清单每条有证据和责任人
加权比较可交换偏好可复算排序公开权重与评分来源
敏感性分析权重区间、误差、增长翻转条件不只展示单一分数
反例审查极端流量、故障、人员变化不适用边界推荐项也必须被质疑
sequenceDiagram
    participant 所 as 决策所有者
    participant 业 as 业务责任人
    participant 安 as 安全与合规
    participant 运 as 运行团队
    participant 评 as 独立评审人
    所->>业: 确认目标与失败损失
    所->>安: 确认不可抵消硬约束
    所->>运: 确认运行和退出能力
    所->>评: 提交剩余候选与可复算矩阵
    评->>评: 改变权重与关键假设
    alt 排序稳定且反例可控制
        评-->>所: 给出条件批准
    else 排序翻转或证据脆弱
        评-->>所: 要求补证或选择更可逆项
    end

图解读:节点让业务、安全、运行与独立评审分别提供不可互相替代的判断;箭头先淘汰再比较。前提是评分来源可复算;失败分支处理排序脆弱;业务结论是矩阵帮助人承担判断,不替人承担责任。

数据演绎 3:权重一变,冠军就变

E3(演练证据):候选甲在正确性、成本、退出能力上得分 9、5、8,候选乙为 8、9、6。权重 50%、20%、30% 时,甲为 9×0.5+5×0.2+8×0.3=7.9,乙为 8×0.5+9×0.2+6×0.3=7.6;成本权重升到 30%、退出降到 20% 后,甲为 7.6,乙为 7.9。0.3 分差不能称为客观最优,必须解释权重为何改变。

热门面试题

  1. 问题:为什么硬约束不能进入加权矩阵?
    • 考点:不可补偿条件。
    • 回答思路:说明高分不能抵消不变量破坏。
    • 详细答案:资金唯一、越权防护、数据驻留和明确恢复上限属于准入条件。若允许其他维度加分抵消,就可能选择总分高但依法、依约或业务上不可接受的方案,因此必须先淘汰。
    • 进阶追问:硬约束很多导致无候选怎么办?
    • 进阶回答:暴露约束冲突并升级给约束所有者,调整目标、范围或期限,不能暗中把硬约束降成偏好。
  2. 问题:加权矩阵最大的价值是什么?
    • 考点:判断透明化。
    • 回答思路:强调暴露权重、证据和翻转点。
    • 详细答案:它让参与者看到为什么某个代价被重视、每个分数来自何处,以及改变假设后结论是否稳定。矩阵不是事实本身,最终批准仍需所有者解释剩余风险与反例。
    • 进阶追问:分数精确到小数有意义吗?
    • 进阶回答:证据粗糙时过多小数是假精确,应使用区间、置信边界和敏感性分析。
  3. 问题:如何避免为既定方案倒推评分?
    • 考点:确认偏误。
    • 回答思路:固定约束、独立评分、强制反例。
    • 详细答案:候选揭晓前先确认权重和硬约束,评分需附证据来源,关键维度由不同角色独立估计,再由非方案作者提出失败反例。任何会翻转排序的后改权重都要留痕和批准。
    • 进阶追问:专家经验还能用吗?
    • 进阶回答:可以,但要标为判断性证据,写适用条件并通过试验或运行信号逐步校准。

4. 假设和证据必须有保质期

4.1 假设账本、E1(源码与可复现证据)/E2(已有材料映射)/E3(演练证据)/E0(待核对)与失效触发

假设账本把“我们以为”变成待验证资产。每条至少记录假设、影响决策、当前等级、来源、适用范围、验证方法、失效日期、阈值、所有者和失效动作。E1(源码与可复现证据)支持本地代码、配置、锁文件、可复现运行或已渲染资产事实;E2(已有材料映射)只支持“可作为项目面试方案或候选设计”;E3(演练证据)支持标准机制、公式和明确假设;E0(待核对)必须写缺什么以及怎样核对。证据等级不是高低荣誉,而是陈述边界。

证据还要审查新鲜度、代表性和可重复性。一次低流量试验不能证明高峰稳定,供应商宣传不能证明本团队可运营,三年前的流量分布不能支撑现在的容量。关键假设一旦越过失效日期、量级阈值、组织能力变化或发生相关事故,就触发复审;不允许只改正文结论却留下旧证据链接。

账本字段示例失效信号失效动作
假设搜索投影可在 5 分钟内收敛高峰年龄超过阈值停止扩面并补容量证据
等级E3(演练证据)获得可复现回放升级为 E1(源码与可复现证据)并保留原记录
范围单仓、两周样本仓数或写入模型变化重新采样
所有者搜索读模型负责人转岗或职责变更重新指派
失效日期2026-08-15日期到达自动进入复审队列
stateDiagram-v2
    [*] --> 待核对
    待核对 --> 演练支持: 明确公式与假设
    演练支持 --> 材料映射: 找到已有项目材料
    材料映射 --> 可复现: 源码、配置或运行可复现
    可复现 --> 过期: 日期、范围或版本变化
    材料映射 --> 过期: 业务边界变化
    演练支持 --> 失效: 反例推翻关键假设
    过期 --> 待核对: 重新界定缺口
    失效 --> 待核对: 撤销结论并补证

图解读:状态表示陈述可被什么证据支持,不表示方案质量;箭头允许升级也允许过期和失效。前提是范围与日期明确;失败分支撤销结论而不是静默改字;业务结论是证据必须能随环境变化降级。

数据演绎 4:过期假设的风险敞口

E3(演练证据):某方案有 12 条关键假设,其中 4 条已过期,2 条没有所有者,1 条同时过期且无所有者。按集合并集,未受控假设数为 4+2-1=5,未受控比例 5÷12≈41.7%。即使其余字段完整,也应暂停扩大单向门承诺,先补这 5 条的验证和责任。

热门面试题

  1. 问题:假设账本和风险登记册有什么区别?
    • 考点:不确定性类型。
    • 回答思路:假设是对世界的判断,风险是可能损失。
    • 详细答案:假设记录“某条件被认为成立”及验证方式;风险记录条件失效或事件发生后的概率、影响、控制和责任。一个关键假设可能关联多个风险,验证失败后要同步更新相关决策和风险。
    • 进阶追问:所有假设都要验证吗?
    • 进阶回答:按对决策翻转和损失的影响排序,优先验证高敏感、高不可逆和低可检测项。
  2. 问题:E2(已有材料映射)能否证明方案已在线上运行?
    • 考点:事实边界。
    • 回答思路:明确只能支持候选映射。
    • 详细答案:不能。E2(已有材料映射)只能说明现有项目材料与该机制有关,可作为面试方案或设计映射;是否真实上线、效果多少仍需源码、配置、发布和运行记录等 E1(源码与可复现证据)。
    • 进阶追问:没有 E1(源码与可复现证据)怎么讲项目?
    • 进阶回答:诚实说设计方法、候选与验证计划,量级标 E3(演练证据),缺口标 E0(待核对)。
  3. 问题:证据为什么需要失效日期?
    • 考点:证据新鲜度。
    • 回答思路:说明流量、版本和组织会变化。
    • 详细答案:过去样本只在原时间、范围和版本内有效。流量结构、依赖、团队能力或法规变化后,旧证据可能不再代表当前环境;失效日期迫使所有者重新验证,而不是永久引用一次成功。
    • 进阶追问:日期到了就一定推翻决策吗?
    • 进阶回答:不一定,但决策应转为待复审,禁止继续扩大承诺,直到重新获得适用证据。

5. 架构评审是结构化质疑

5.1 角色、准入、议程、反例、异议与条件批准

评审不是展示会。决策所有者对材料和结论负责;主持人守住议程与冲突规则;业务责任人确认目标和失败损失;安全、数据、运行、成本代表分别审查不可替代的控制;独立质疑者专门寻找反例;记录人保存版本、异议、行动项与批准条件;风险接受人对剩余风险签名。方案作者可以解释,但不能同时替所有角色批准。

准入条件包括:目标和非目标明确、硬约束有所有者、至少两个候选含维持现状、证据带等级与范围、失败路径和撤销条件可执行、材料在会前送达。议程依次为重述问题、确认硬约束、核验证据、攻击推荐项、审查退出、处理异议、决定批准/条件批准/拒绝。异议必须记录“反对什么、基于什么证据、何种条件可解除”;没有解决的关键异议不能被“多数人没意见”覆盖。条件批准要有补证项、责任人、截止日和未完成时自动失效的规则。

角色必须回答不得代替输出
决策所有者为什么现在决定风险接受人带版本决策草案
业务责任人哪种失败更不能接受技术实施人失败成本与优先级
独立质疑者推荐项在哪些条件下失败方案作者反例与证据缺口
运行责任人怎样发现、止损、恢复业务批准人运行和退出条件
风险接受人为何暂时承担剩余风险记录人有期限的接受结论
记录人决定针对哪个版本主持人异议、条件与状态
sequenceDiagram
    participant 作 as 方案作者
    participant 主 as 主持人
    participant 质 as 独立质疑者
    participant 风 as 风险接受人
    participant 记 as 记录人
    作->>主: 会前提交准入材料与版本
    alt 准入不完整
        主-->>作: 退回并列缺失项
    else 准入通过
        主->>质: 指定推荐项反例与证据攻击
        质-->>作: 提出失败条件和关键异议
        作->>作: 修改方案或承认剩余风险
        风->>风: 核对影响、期限和止损能力
        alt 批准条件可执行
            风-->>记: 条件批准并签署接受
        else 风险无人承担
            风-->>记: 拒绝批准
        end
    end

图解读:节点把作者、主持、质疑、风险和记录职责分开;箭头显示反例攻击发生在批准前。前提是会前准入生效;失败分支既包括材料不足,也包括风险无人承担;业务结论是异议不是阻力,而是缩短错误暴露时间的输入。

数据演绎 5:条件批准不能无限延期

E3(演练证据):一次评审有 6 个批准条件,截止日完成 4 个,1 个延期获风险接受人批准,1 个既未完成也未延期。有效完成率为 (4+1)÷6≈83.3%,但最后 1 个条件使批准自动失效。若仍发布,相当于绕过 1÷6≈16.7% 的显式控制,不能用整体完成率掩盖。

热门面试题

  1. 问题:架构评审为什么需要独立质疑者?
    • 考点:反确认偏误。
    • 回答思路:说明作者天然偏向证明推荐项。
    • 详细答案:独立质疑者不背负方案投入,更容易检查反例、证据外推、共同失效和退出缺口。其职责不是否定一切,而是找出在什么条件下结论会翻转,并要求把这些条件写入撤销与复审。
    • 进阶追问:质疑导致会议变慢怎么办?
    • 进阶回答:用会前材料、限时议程和风险排序聚焦高影响异议;省略质疑只会把时间转移到事故和返工。
  2. 问题:什么是有效的条件批准?
    • 考点:批准可执行性。
    • 回答思路:列补证、责任、期限、范围和失效规则。
    • 详细答案:条件批准必须说明缺口、补证方法、所有者、截止日、允许扩面的范围及逾期自动暂停或撤销动作。只有“后续优化”没有期限和阻断效果,不是条件批准。
    • 进阶追问:条件未完成但业务催上线怎么办?
    • 进阶回答:重新评审并由有权限者接受新增风险,缩小范围或延期;不能让项目经理口头覆盖原批准边界。
  3. 问题:如何处理评审中的强烈异议?
    • 考点:异议治理。
    • 回答思路:从观点转为证据、反例和解除条件。
    • 详细答案:记录异议针对的决策版本、证据、潜在损失和可解除条件;能试验的先试验,涉及硬约束或重大单向门的升级给责任人。最终无论采纳与否,都要保存理由和风险接受者。
    • 进阶追问:多数票能结束争议吗?
    • 进阶回答:不能自动结束;技术事实可用证据校验,业务取舍由承担后果的人决定,硬约束更不能投票抵消。

6. 批准之后仍要持续证明

6.1 风险接受、责任所有权与架构适应度函数

风险接受不是“知道有风险”,而是有权限的人在理解概率、影响、控制缺口和退出能力后,书面承担一段时间内的剩余风险。记录至少包含风险场景、影响对象、现有控制、残余暴露、接受理由、接受人、到期日、监测信号和超限动作。执行团队不能替业务接受资金损失,业务负责人也不能替安全负责人豁免法定控制;无人有权承担时,结论只能是拒绝或升级。

架构适应度函数把决策后果转成持续检查。它可以是自动测试、发布门禁、运行查询或定期演练,例如“库存可用量不得为负”“搜索投影年龄的高分位不得持续越界”“消息积压在故障后必须于批准窗口内清空”“公共响应不得出现敏感字段”。每个函数要绑定决策版本、阈值、采样范围、执行频率、告警接收人和失败动作。只告警不阻断的函数适合趋势风险;违反硬约束的函数应阻断扩面或触发降级。

控制对象适应度函数频率越界动作
库存不变量可用量小于零的记录数等于零每次发布与持续巡检阻断扩面、冻结热点品
MQ(消息队列)恢复最老消息年龄低于批准阈值每分钟限制生产、扩有效消费能力
搜索读模型抽样版本差和投影年龄每五分钟标记陈旧、回源或重建
敏感数据响应字段与审计策略匹配每次构建阻断发布
决策新鲜度到期未复审记录数等于零每日通知所有者并冻结新增范围
sequenceDiagram
    participant 决 as 决策版本
    participant 门 as 发布门禁
    participant 现 as 运行环境
    participant 函 as 适应度函数
    participant 人 as 风险接受人
    决->>门: 下发阈值、范围和失败动作
    门->>现: 允许小范围变更
    现-->>函: 业务事实、版本、积压和成本信号
    alt 信号在批准边界内
        函-->>门: 允许继续扩面
    else 硬约束或撤销阈值越界
        函-->>门: 自动阻断或降级
        函->>人: 请求复审剩余风险
    end

图解读:节点把决策文本、发布控制、运行事实、函数和风险接受人连成闭环;箭头表示阈值来自具体决策版本。前提是信号能代表业务事实;失败分支不仅告警,还执行预先批准动作;业务结论是批准必须转成持续可证伪的控制。

数据演绎 6:适应度函数覆盖率

E3(演练证据):某决策有 8 条可验证后果,5 条已自动检查,2 条定期人工演练,1 条无检查,则控制覆盖率为 (5+2)÷8=87.5%,自动化率为 5÷8=62.5%。若无检查项对应资金不变量,即使覆盖率高也不得扩面;覆盖率用于找空白,不用于抵消后果严重度。

热门面试题

  1. 问题:谁应该接受架构剩余风险?
    • 考点:责任与权限匹配。
    • 回答思路:按风险类型回答有损失权限的人。
    • 详细答案:业务损失由业务责任人接受,安全合规风险由具备相应授权者接受,运行风险由服务所有者确认可执行控制。架构师负责解释和建议,不能代替所有领域签字。
    • 进阶追问:负责人拒绝签字怎么办?
    • 进阶回答:决策保持未批准,缩小范围、补控制或升级;不能用会议出席代表接受。
  2. 问题:什么是架构适应度函数?
    • 考点:持续架构验证。
    • 回答思路:用可执行检查连接决策后果。
    • 详细答案:它把不变量、质量阈值、依赖规则和退出条件写成自动测试、门禁、查询或演练,让架构在每次变更和运行中被持续验证,而不是只在设计评审时正确。
    • 进阶追问:所有函数都必须自动化吗?
    • 进阶回答:不必;灾备、人工授权等低频能力可定期演练,但执行证据、责任人和失败动作仍要明确。
  3. 问题:适应度函数越多越好吗?
    • 考点:信号质量与维护成本。
    • 回答思路:强调决策关联、可操作和误报成本。
    • 详细答案:无关联、不可操作或长期误报的检查会制造噪声。应优先覆盖硬约束、撤销条件和高风险假设,并定期删除不再对应有效决策的函数。
    • 进阶追问:阈值由谁修改?
    • 进阶回答:按决策变更流程修改,保留理由、证据和版本;不能为消除告警临时抬高阈值。

7. 决策也有版本和退役期

7.1 变更控制、版本化、废弃、替代与复审

决策记录应采用“追加替代”而不是静默覆盖。草拟、评审中、已接受、已拒绝、已废弃、已替代是不同状态;已接受记录发生重大变化时创建新版本或新记录,旧记录保留原证据和适用时间,并通过“替代者/被替代者”双向链接。措辞纠错可原地修改,但候选、约束、结论、风险、阈值或所有者变化必须留下版本事件。

变更控制先判断触发器:需求与不变量变化、流量跨阈值、依赖版本或合同变化、适应度函数越界、事故反例、技术债利息升高、责任人变化或到达复审日期。废弃表示旧决策不再适用于任何有效范围;替代表示新决策接管指定范围。退役还必须确认实施版本停止、数据迁移完成、旧开关与监控下线、使用方收到通知、剩余数据可追溯。只把文档状态改成废弃,不等于系统已经退出。

状态能否实施必须动作转移条件
草拟补候选、证据与所有者准入通过
评审中仅批准试验范围记录异议和条件接受、拒绝或退回
已接受是,限批准范围运行适应度函数并复审被替代、废弃或撤销
已拒绝保存拒绝理由新证据形成新版本
已替代否,除迁移窗口链接新记录并执行迁移旧实现完全退出
已废弃下线实现和无主控制审计确认关闭
sequenceDiagram
    participant 触 as 变化触发器
    participant 旧 as 旧决策所有者
    participant 新 as 新决策版本
    participant 使 as 使用方
    participant 审 as 退役审计
    触->>旧: 流量、事故、期限或依赖变化
    旧->>新: 复制上下文并补充新证据
    新->>使: 发布兼容、迁移和撤销计划
    alt 新版本验证通过
        使-->>新: 完成迁移与业务校验
        新->>旧: 标记替代关系
        旧->>审: 申请关闭实现、开关和监控
    else 新版本失败
        使-->>旧: 保持或回到原批准范围
        新->>新: 记录拒绝或重新评审
    end

图解读:节点区分文本版本、实际使用方和退役审计;箭头要求先迁移验证再替代旧记录。前提是旧实现仍可识别;失败分支保留原批准范围;业务结论是文档状态和运行状态必须同时收口。

数据演绎 7:决策陈旧度

E3(演练证据):某团队有 40 份已接受记录,8 份超过复审日,3 份所有者已离开,其中 2 份同时过期且无主。需处理记录为 8+3-2=9,陈旧比例 9÷40=22.5%。若每周处理 3 份且无新增,需 9÷3=3 周 清空;期间这些记录不得扩大适用范围。

热门面试题

  1. 问题:为什么不能直接覆盖旧 ADR(架构决策记录)?
    • 考点:历史可追溯性。
    • 回答思路:说明过去实施需要原上下文解释。
    • 详细答案:旧版本解释了当时为何合理,也支撑事故复盘和迁移。直接覆盖会让人误以为当前条件一直存在,无法判断哪次变化使结论失效,也无法复原旧实现的批准边界。
    • 进阶追问:错别字也要新版本吗?
    • 进阶回答:不需要;不改变语义的编辑可原地修正,最好留普通变更历史。
  2. 问题:废弃和替代有什么区别?
    • 考点:生命周期语义。
    • 回答思路:一个是终止,一个是新决策接管。
    • 详细答案:废弃表示原问题或实现不再适用;替代表示另一记录接管指定范围。两者都要求清理运行实现、开关、告警和责任,不只是改文档标签。
    • 进阶追问:迁移期间旧记录是什么状态?
    • 进阶回答:可标已替代但保留迁移例外,明确允许旧路径存在的范围、截止日和回退条件。
  3. 问题:哪些变化必须触发复审?
    • 考点:决策失效信号。
    • 回答思路:从目标、约束、证据、运行和责任回答。
    • 详细答案:需求不变量、量级、依赖、合同、安全规则、成本、事故反例、适应度阈值、技术债利息或所有者发生实质变化,都可能翻转原权衡,必须复审。
    • 进阶追问:定期复审还是事件复审更好?
    • 进阶回答:两者并用;事件触发及时,定期复审覆盖未被监测到的缓慢漂移。

8. 技术债要进入资产负债表

8.1 本金、利息、风险敞口与偿还触发

技术债不是“代码不优雅”的同义词。债务本金是恢复到目标状态所需的一次性改造、迁移、验证和培训成本;利息是每个周期因为这项选择增加的开发、测试、发布、排障、人工对账和资源费用;风险敞口是低概率高影响损失,不能只折算成平均工时;偿还触发是利息、风险、机会窗口或依赖退役跨过阈值时必须行动。刻意借债还要写获得了什么时间价值、最迟偿还日和不能继续展期的条件。

债务清单应关联具体决策版本,避免“以后重构”成为无主愿望。偿还有四种方式:一次性清偿、随业务改动分期偿还、隔离并限制新增、用替代方案重置。若本金很大但利息低且风险可控,立即偿还可能不经济;若本金不高但每次发布都产生高利息,或风险接近单向门,应提前清偿。已接受债务也要用适应度函数观察,不能因“已知问题”而停止告警。

债务维度计算口径常见遗漏触发示例
本金改造、迁移、验证、培训一次性成本只估编码两个版本兼容窗口即将关闭
利息每周期额外工时、资源和等待忽略跨团队协调月利息超过本金的十分之一
风险概率、影响、可检测性、暴露时间把尾部损失写成零发生相关事故或控制失效
机会损失因债务无法交付的业务价值只看维护成本新渠道接入被阻塞
偿还触发阈值、日期、事件、责任人写“有空再做”复审日或依赖停止支持
flowchart LR
    A["记录债务对应的决策版本"] --> B["估算本金、周期利息与风险"]
    B --> C{"偿还触发是否越界"}
    C -->|"否"| D["限制新增并持续计息"]
    C -->|"是"| E{"能否分期且保持可逆"}
    E -->|"能"| F["按业务变更分期偿还"]
    E -->|"不能"| G["冻结扩面并安排一次性清偿"]
    D --> C
    F --> H["校验利息和风险是否下降"]
    G --> H

图解读:节点从债务登记进入可复算触发器;箭头允许有意持有,但要求持续计息。前提是本金和利息采用同一时间口径;失败分支是无限展期却不限制新增;业务结论是偿还时机由总损失和机会窗口决定,而不是由代码洁癖决定。

数据演绎 8:何时偿还更划算

E3(演练证据):一项兼容债本金 60 人日,每月利息 8 人日,预计还需运行 12 个月,另有演练风险期望损失折合 24 人日。继续持有总成本为 8×12+24=120 人日,高于立即清偿本金 60 人日;若只能运行 3 个月且风险为 5 人日,则持有成本 8×3+5=29 人日,可以限期持有。真实决策还需考虑迁移窗口和业务机会。

热门面试题

  1. 问题:怎样区分技术债本金和利息?
    • 考点:债务成本模型。
    • 回答思路:一次性恢复成本对比周期附加成本。
    • 详细答案:本金是把现状改到目标状态的一次性工作,包含迁移和验证;利息是继续持有现状每个周期多付的开发、发布、运行和人工成本。两者必须使用明确时间窗口比较。
    • 进阶追问:事故损失算利息吗?
    • 进阶回答:可作为风险敞口单列,避免低概率高影响被平均工时掩盖。
  2. 问题:技术债一定要尽快还吗?
    • 考点:偿还时机。
    • 回答思路:比较本金、累计利息、风险和机会窗口。
    • 详细答案:不一定。低利息、低风险且即将退役的债可限期持有;高频阻塞、风险越界或迁移窗口将关闭的债应优先偿还。关键是有阈值、期限和所有者。
    • 进阶追问:怎样防止刻意借债变成永久债?
    • 进阶回答:决策时写最迟偿还日、禁止新增范围、适应度信号和逾期升级规则。
  3. 问题:重构任务为什么常年排不上?
    • 考点:价值表达。
    • 回答思路:把技术语言翻译成业务损失与机会。
    • 详细答案:只说代码复杂无法与业务需求比较。应量化每月利息、变更失败、恢复时间、被阻塞收入和退出窗口,并把偿还拆成可验收阶段,才能进入同一优先级讨论。
    • 进阶追问:量化不了怎么办?
    • 进阶回答:用区间和 E3(演练证据)表达,标出 E0(待核对)输入,并优先补最影响排序的数据。

9. 错误决策的能力是及时退出

9.1 止损、回滚、双运行、校验与退出完成

错误决策首先要停止扩大损失,而不是立即证明谁错了。止损顺序通常是冻结扩面、限制高风险动作、保护权威事实、保存诊断证据,再选择配置回退、版本回滚、流量切回、数据补偿或替代路径。代码回滚不能撤销已经发生的外部通知、资金动作、库存承诺和数据变换,因此撤销条件必须同时定义控制面、数据面和业务面的恢复。

双运行适合中高风险迁移:旧路径继续承担权威结果,新路径影子执行或承接小比例流量,按业务键比较结果、延迟、成本和失败语义。双运行不是永久双系统;它会产生双份资源、状态分叉和运维认知成本,必须有进入条件、差异预算、切换门槛、最长窗口和旧路径退役清单。退出完成需要证明新路径稳定、积压和差异清零、旧数据可追溯、调用方迁移、开关与告警下线、责任转移完成。

阶段核心动作业务校验禁止误判
止损冻结扩面、限高风险请求不变量未继续恶化告警消失不等于恢复
回滚恢复旧版本、配置或路由关键用例可完成进程启动不等于数据正确
双运行同键比较两条路径差异分类与可解释平均一致掩盖高价值差异
补偿对账、重放、人工审批权威事实与外部结果一致重试不等于补偿
退出下线旧实现和控制无流量、无差异、责任已转文档关闭不等于系统关闭
sequenceDiagram
    participant 信 as 撤销信号
    participant 控 as 流量与发布控制
    participant 旧 as 旧路径
    participant 新 as 新路径
    participant 校 as 业务校验器
    participant 账 as 对账与补偿
    信->>控: 阈值越界并冻结扩面
    控->>旧: 恢复权威流量
    控->>新: 降为影子或停止写入
    旧-->>校: 输出权威结果
    新-->>校: 输出对照结果与版本
    alt 差异在预算内且可解释
        校-->>控: 继续小范围双运行
    else 不变量或高价值差异
        校-->>控: 完全切回旧路径
        校->>账: 对账、重放或人工补偿
    end

图解读:节点区分控制、两条路径、校验和补偿;箭头先冻结再比较,避免边查边扩。前提是旧路径和权威事实仍可用;失败分支切回并处理外部副作用;业务结论是退出以业务事实恢复为终点,不以部署动作完成为终点。

数据演绎 9:双运行窗口是否足够

E3(演练证据):新旧路径每天处理 20 万个可比业务键,抽样 10%,运行 7 天,可比较 200000×10%×7=140000 个键。发现 28 个差异,差异率 28÷140000=0.02%;其中 2 个涉及高价值库存承诺,则高价值差异率 2÷140000≈0.00143%。即使总体很低,只要批准条件要求高价值差异为零,就不得切全量。

热门面试题

  1. 问题:发现架构决策错误时第一步做什么?
    • 考点:事故止损。
    • 回答思路:先限制新增损失,再调查原因。
    • 详细答案:触发预案、冻结扩面、保护权威事实和高价值动作,并保存版本、流量和差异证据。责任分析与根因讨论在损失停止后进行,不能边争论边继续放量。
    • 进阶追问:是否应该立刻全量回滚?
    • 进阶回答:取决于旧路径容量、兼容和数据副作用;先按预案选择最小风险动作,避免回滚触发第二次事故。
  2. 问题:双运行最容易遗漏什么?
    • 考点:迁移验证。
    • 回答思路:从同键、同时间、业务语义和退出成本回答。
    • 详细答案:常遗漏请求分流后样本不可比、只比状态不比金额和版本、异步结果观察窗口不足,以及长期保留两套系统的运维成本。应按业务键对齐并分类高价值差异。
    • 进阶追问:影子流量能验证写副作用吗?
    • 进阶回答:不能直接写真实外部系统,应使用隔离环境、可撤销副作用或只验证到提交前,剩余风险另行评估。
  3. 问题:怎样证明旧方案已经退出?
    • 考点:退役闭环。
    • 回答思路:检查流量、数据、调用方、控制和责任。
    • 详细答案:确认无生产流量、差异与积压清零、调用方完成迁移、旧数据按策略保留、开关和告警下线、权限撤销、运行手册与所有者转移。只合并代码或关闭文档不算退出。
    • 进阶追问:旧路径要保留多久?
    • 进阶回答:由可逆性、数据追溯、故障窗口和维护成本决定,并在新决策中写明确截止日。

10. 完整演练一:缓存预扣

10.1 ADR(架构决策记录)演练:缓存闸门加权威库存条件扣减

E2(已有材料映射):WMS(仓储管理系统)库存防超卖是简历项目关联点;以下结构是可用于该项目的候选设计,不声称已经按此上线。背景:热点商品在短时高并发下可能把全部请求直接压向权威库存,响应变慢后重试继续放大。目标:减少明显无库存请求进入核心写路径,同时保证最终承诺量不超过权威可用量。非目标:不把缓存余额当财务或库存最终事实,不承诺列表展示实时一致,也不解决跨仓调拨。

约束:权威库存条件更新必须守住 可用量>=申请量;重复请求按业务键幂等;缓存故障不得产生错误成功;缓存和权威差异必须可检测、可重建。候选:甲为全部请求直写权威库存;乙为缓存原子预扣后直接成功;丙为缓存快速闸门、权威库存条件扣减、失败后返还缓存额度;丁为排队串行化热点请求。证据:E2(已有材料映射)支持库存防超卖场景;吞吐、热点比例和延迟均为 E0(待核对),需用请求日志、业务键分布和可复现并发测试补证;下方算例仅是 E3(演练证据)。

权衡与决策:乙违反“缓存故障不得错误成功”硬约束,淘汰;丁增加排队和恢复复杂度,保留为极端热点替代项;选择丙,小范围使用缓存作为拒绝闸门,最终确认仍由权威库存完成。后果:收益是过滤明显不足请求并隔离热点;代价是新增预扣令牌、返还、过期、重建和差异巡检;剩余风险是进程在预扣后崩溃导致缓存额度短暂偏少,表现为错拒绝而非超卖。撤销条件:权威库存出现负数、缓存差异持续超过批准阈值、返还失败无法在窗口内收敛、源库压力未改善或运维复杂度超过收益。复审日期:演练设为首次扩面后 14 天及每季度。所有者:库存服务负责人;业务风险由库存业务负责人接受,运行恢复由值班负责人确认。

字段本次决定失败保护
权威事实数据库库存与唯一流水缓存不得返回最终成功
缓存职责快速预扣令牌与错拒绝保护超时即回到权威路径或受控拒绝
幂等边界业务请求键绑定预扣与确认重复返回原结果
差异恢复按权威事实重建缓存重建期间限流
退出关闭预扣入口并清理令牌保留权威写路径容量
sequenceDiagram
    participant 请 as 库存确认请求
    participant 缓 as 缓存预扣闸门
    participant 权 as 权威库存
    participant 流 as 库存流水
    participant 对 as 差异巡检
    请->>缓: 按业务键申请预扣令牌
    alt 缓存判断额度可能充足
        缓->>权: 执行可用量条件扣减
        alt 权威扣减成功
            权->>流: 写入唯一确认事实
            流-->>请: 返回确定成功
        else 权威拒绝或重复
            权-->>缓: 返还或绑定既有结果
            权-->>请: 返回确定拒绝或既有结果
        end
    else 缓存不足或不可用
        缓-->>请: 错拒绝、回源或受控重试
    end
    对->>权: 读取权威版本
    对->>缓: 校验并按权威事实重建

图解读:节点明确缓存不是权威事实,箭头把最终成功放在权威扣减和流水之后。前提是幂等键可关联预扣与确认;失败分支宁可错拒绝也不错误成功;业务结论是缓存优化只能位于不变量之外。

数据演绎 10:缓存预扣差异窗口

E3(演练证据):热点商品初始权威可用量 1000,1 分钟进入 1600 个唯一请求。缓存预扣放行 1050 个,权威条件扣减成功 1000 个、拒绝 50 个;其中 10 个返还暂时失败,则缓存显示剩余量比权威少 10。差异率按初始量为 10÷1000=1%,造成最多 10 次错拒绝,但权威成功仍为 1000,不会因缓存多放行而超卖。若差异阈值批准为 0.5%,应停止扩面并重建。

热门面试题

  1. 问题:缓存预扣为什么不能直接代表库存成功?
    • 考点:权威事实与派生状态。
    • 回答思路:说明过期、崩溃、重建和跨路径差异。
    • 详细答案:缓存可能丢失、延迟返还或与绕过缓存的写路径分叉,无法单独守住库存不变量。它适合过滤和限流,最终承诺必须由权威库存条件更新与唯一流水确认。
    • 进阶追问:这样还会超卖吗?
    • 进阶回答:只要所有最终确认都经过同一权威条件扣减,缓存多放行只增加拒绝和压力,不应突破可用量。
  2. 问题:预扣后服务崩溃如何恢复?
    • 考点:悬挂令牌治理。
    • 回答思路:用幂等绑定、过期、流水核对和重建回答。
    • 详细答案:预扣令牌绑定业务键和期限,恢复任务按权威流水判断已确认、已拒绝或未知;只对确定未确认的令牌返还,无法判断时先冻结并人工核对,避免重复释放。
    • 进阶追问:直接靠过期可以吗?
    • 进阶回答:只能作为兜底;过早过期可能重复放行,过晚过期扩大错拒绝,仍需权威核对。
  3. 问题:缓存预扣的撤销条件怎么写?
    • 考点:可观测退出。
    • 回答思路:覆盖不变量、差异、性能、恢复与运维成本。
    • 详细答案:出现权威负库存立即撤销;差异、返还年龄、源库压力、错拒绝和恢复时长持续越界时暂停扩面;若收益小于新增维护与事故风险,也应回到权威直写或排队替代项。
    • 进阶追问:撤销时怎样避免流量打爆源库?
    • 进阶回答:先限流和分批切回,确认权威路径容量,再关闭预扣;不能直接全量旁路缓存。

11. 完整演练二:MQ(消息队列)异步化

11.1 ADR(架构决策记录)演练:核心事实同步、可恢复副作用异步

E2(已有材料映射):异步任务、跨境物流和 IoT(物联网)报警治理可映射到 MQ(消息队列)候选设计;以下不声称具体产品或生产量级。背景:订单确认后同步执行通知、搜索投影、报表和外部物流调用,会让慢依赖占用核心请求预算,并把局部故障扩散到主交易。目标:缩短核心事实确认路径,隔离可重试副作用,并保留可恢复证据。非目标:不把资金入账、库存最终确认等不可错误成功动作改成“先成功后补”;不承诺恰好一次。

约束:核心事实与待发送事件必须具备可核对的一致边界;消费者至少一次投递下保持幂等;分区内需要的顺序由业务键和版本守住;积压必须可观测、可限流、可回放;敏感数据最小化。候选:甲为全同步;乙为核心事务提交后直接发送,失败靠日志;丙为本地事实与事件待办同边界提交,再由转发器投递 MQ(消息队列);丁为定时扫描业务表。证据:机制可由 MQ(消息队列)可靠性章节 提供 E2(已有材料映射)支撑;生产到达率、处理率和故障窗口为 E0(待核对)。

权衡与决策:乙存在提交后发送失败的证据缺口,淘汰;甲仅保留不可补偿核心动作;选择丙处理通知、搜索、报表等可恢复副作用,丁作为低量级和修复补扫。后果:收益是故障隔离与回放;代价是最终一致、重复、乱序、积压、死信和监控;剩余风险是队列可用但消费者净处理能力不足。撤销条件:最终完成时间持续越界、关键差异无法对账、积压在恢复窗口内无法清空、事件待办与核心事实不一致或单位成本失控。复审日期:演练设为每次业务类型接入后 7 天及季度容量复审。所有者:事件平台负责人,业务消费者各自承担幂等和恢复责任。

字段本次决定验证信号
同步边界核心事实与事件待办同边界落地待办缺失数为零
投递语义至少一次重复率与幂等冲突
顺序业务键内版本单调状态倒退数
恢复重试、死信、回放、补扫最老年龄与净清理速度
退出暂停生产、排空、切同步或替代通道差异与外部副作用校验
sequenceDiagram
    participant 请 as 核心业务请求
    participant 事 as 核心事实与事件待办
    participant 转 as 可靠转发器
    participant 队 as MQ(消息队列)
    participant 消 as 幂等消费者
    participant 对 as 对账与回放
    请->>事: 同一边界提交事实和待办
    事-->>请: 仅确认核心事实成功
    转->>事: 拉取未投递待办
    转->>队: 按业务键和事件标识投递
    队->>消: 至少一次交付
    alt 首次或可继续版本
        消->>消: 执行副作用并记录结果
    else 重复、乱序或失败
        消->>消: 返回既有结果、延迟或入死信
    end
    对->>事: 核对事实、待办和最终结果
    对->>队: 按范围回放缺失事件

图解读:节点把核心事实、事件待办、MQ(消息队列)和消费者结果分开;箭头只在核心边界完成后向用户确认。前提是事件标识和业务版本稳定;失败分支显式处理重复、乱序与死信;业务结论是异步化转移的是时间,不是责任。

数据演绎 11:积压能否在窗口内恢复

E3(演练证据):故障 20 分钟,生产速率 800 条/秒,消费停摆,积压为 20×60×800=960000 条。恢复后生产仍为 800 条/秒,消费者提升到 1400 条/秒,净清理速度 1400-800=600 条/秒,清空需 960000÷600=1600 秒≈26.7 分钟。若业务批准恢复窗口为 20 分钟,此方案容量不足,不能只看消费总速率高于生产。

热门面试题

  1. 问题:哪些动作不适合直接 MQ(消息队列)异步化?
    • 考点:核心事实边界。
    • 回答思路:区分不可错误成功与可恢复副作用。
    • 详细答案:资金入账、库存最终承诺等若无法确认就不能先返回最终成功;通知、搜索投影、统计等有权威事实可重放的副作用更适合异步。关键取决于失败语义和恢复证据,不取决于耗时长短。
    • 进阶追问:支付请求能否进入队列?
    • 进阶回答:可返回明确“已受理、处理中”,但不能把受理当支付成功,且必须有状态查询、幂等和查单闭环。
  2. 问题:为什么异步化后接口快了,用户仍可能更慢?
    • 考点:端到端完成时间。
    • 回答思路:从排队、重试和最终可见性回答。
    • 详细答案:接口只完成受理,队列年龄、消费者能力、外部依赖和重试决定最终完成。应同时观测受理延迟、最老消息年龄、最终完成分位和差异,不能用入口成功率替代业务完成。
    • 进阶追问:如何设积压告警?
    • 进阶回答:用消息年龄和净清理时间绑定业务窗口,消息条数只作辅助,因为不同流量下同一条数含义不同。
  3. 问题:至少一次投递如何保证业务正确?
    • 考点:幂等与版本。
    • 回答思路:稳定业务键、结果记录、状态机和对账。
    • 详细答案:消费者以事件标识和业务键识别重复,状态转换校验版本,外部副作用使用可查询的请求键,处理结果可重放可对账。所谓正确来自业务幂等,而不是假设队列绝不重复。
    • 进阶追问:去重记录过期后怎么办?
    • 进阶回答:过期窗口要覆盖最大重放期;超窗重放需读取权威状态或走人工批准,不能盲目再次执行。

12. 完整演练三:搜索读模型

12.1 ADR(架构决策记录)演练:权威交易源与可重建搜索投影

E2(已有材料映射):跨境物流轨迹与 WMS(仓储管理系统)订单检索可以映射到搜索读模型;以下不声称生产采用。背景:在权威交易库上叠加多字段模糊检索、聚合和高并发分页,会干扰核心写并受限于交易模型。目标:提供可扩展检索并隔离查询负载,明确数据新鲜度和重建路径。非目标:搜索投影不承担交易写入、不作为资金与库存最终事实、不保证跨所有字段瞬时一致。

约束:权威交易源唯一;投影记录带业务标识、源版本和更新时间;乱序更新不得使状态倒退;删除与权限变化必须传播;索引可从权威事实重建;故障时可降级为精确查询、陈旧标记或有限回源。候选:甲为交易库直接查询;乙为交易库只读副本;丙为异步搜索投影;丁为离线报表。证据:搜索机制可参考 搜索工程章节 的 E2(已有材料映射);真实查询分布、索引大小和新鲜度为 E0(待核对)。

权衡与决策:交易库保留精确主键查询;选择丙承担模糊检索和聚合,乙作为受限回源候选,丁不满足在线目标。后果:收益是读写隔离与检索能力;代价是最终一致、映射演进、重建、迟到删除和权限同步;剩余风险是用户命中陈旧结果后执行错误动作,因此详情与写操作必须回权威源校验。撤销条件:高分位投影年龄越界、删除或权限传播超窗、重建超出恢复窗口、交易库未减压或单位查询成本失控。复审日期:演练设为映射变更、数据翻倍或每季度。所有者:搜索读模型负责人,数据所有权仍归交易域。

关注点决策边界失败处理
权威源交易库保存最终事实搜索结果不可直接驱动关键写
新鲜度记录源版本与投影年龄越界展示陈旧、回源或限功能
乱序仅接受更高业务版本旧事件记录并丢弃
删除权限高优先级传播并巡检超窗时下线相关检索
重建双索引构建、校验、切换保留旧索引至新索引验收
sequenceDiagram
    participant 写 as 交易写模型
    participant 变 as 变更事实流
    participant 投 as 搜索投影器
    participant 索 as 搜索读模型
    participant 查 as 查询服务
    participant 校 as 差异校验器
    写->>变: 发布带业务版本的变更
    变->>投: 至少一次传递
    alt 版本更新且权限允许
        投->>索: 更新或删除投影
    else 重复或旧版本
        投->>投: 记录并忽略倒退更新
    end
    查->>索: 模糊检索与聚合
    索-->>查: 返回源版本和更新时间
    查->>写: 关键详情和写前权威校验
    校->>写: 抽取权威样本
    校->>索: 比较并触发修复或重建

图解读:节点把权威写、变更流、投影和查询校验分开;箭头让版本与更新时间随结果返回。前提是业务版本单调且删除可传播;失败分支丢弃倒退更新并触发差异修复;业务结论是读模型提高查询能力,但不继承交易权威。

数据演绎 12:搜索投影年龄与重建窗口

E3(演练证据):权威源每秒产生 1200 次变更,投影稳定处理 1500 次/秒。故障 30 分钟形成积压 1200×1800=2160000 条;恢复后净清理速度 1500-1200=300 条/秒,需 2160000÷300=7200 秒=120 分钟。若批准的高分位新鲜度恢复窗口是 60 分钟,应提高有效处理能力、限制入口或缩短故障窗口,不能把队列恢复称为即时一致。

热门面试题

  1. 问题:为什么搜索读模型不能作为交易权威源?
    • 考点:数据责任边界。
    • 回答思路:说明异步、乱序、分词和重建语义。
    • 详细答案:搜索投影为查询优化,可能陈旧、重复、乱序或在重建切换中暂时差异,且字段映射未必保留完整交易语义。关键详情和写操作必须回权威交易源校验。
    • 进阶追问:用户看到旧状态怎么办?
    • 进阶回答:返回更新时间和版本,超窗时标陈旧、限制关键动作或回源,并把新鲜度纳入撤销条件。
  2. 问题:搜索索引怎样安全重建?
    • 考点:双索引迁移。
    • 回答思路:快照、增量追平、差异校验、切换和回退。
    • 详细答案:从确定版本构建新索引,同时保存其后的增量;追平后比较数量、抽样业务字段、删除和权限,再小比例切读,保留旧索引直到新索引跨过观察窗口。
    • 进阶追问:只比文档数量够吗?
    • 进阶回答:不够;数量相同仍可能字段错、权限漏、版本倒退,需要按业务键和语义抽样。
  3. 问题:如何确定搜索读模型的撤销条件?
    • 考点:可观测质量边界。
    • 回答思路:覆盖新鲜度、正确性、恢复、成本和源库收益。
    • 详细答案:监测投影年龄、差异、删除权限传播、重建时间、查询质量、单位成本和交易库减压;任一硬边界持续越界时限制功能、回源或回切,不因查询吞吐高就继续扩面。
    • 进阶追问:查询相关性下降是否算架构问题?
    • 进阶回答:若影响核心业务目标且由映射、分词或数据边界造成,就应进入适应度函数和复审。

13. 反例、反权威与可复述表达

13.1 支付未知态反例、治理反模式与项目话术

E2(已有材料映射):支付渠道超时与回调未知态可映射到 支付主动查单章节。反例是:为提高“成功率”,调用渠道超时后直接把订单标成功并异步补单。该候选违反资金事实不可猜测的硬约束;正确决策是记录处理中或未知态,使用稳定请求键主动查单,回调与查单竞争时按状态机和渠道事实幂等收敛,长期未知进入对账和人工处理。表面可用性必须让位于资金正确与可追溯。

治理上还要防四类失真。第一,权威拍板:职位高的人提出偏好后,候选和评分围绕它倒推;应先冻结硬约束和权重,让独立质疑者攻击推荐项,最终由风险承担者批准。第二,会议纪要冒充决策:补齐正式字段、版本、异议和批准条件。第三,文档失真:实施、配置和适应度函数与决策版本建立关联,偏差必须回写。第四,决策永不复审:到期、阈值、事故、依赖与所有者变化都自动触发复审;过期记录不允许扩大承诺。

项目口述采用“背景与不变量、候选与证据、淘汰与权衡、决策与后果、失败与恢复、撤销与反思”六段。只把 E1(源码与可复现证据)说成真实事实;E2(已有材料映射)说成项目映射;E3(演练证据)说清公式和假设;E0(待核对)主动说明需要什么日志、配置或运行记录。高级表达不在于宣称方案完美,而在于能说出为何不选、何时认错、谁承担风险以及怎样退出。

反模式识别信号纠偏动作可验证结果
权威拍板先报结论后补候选冻结约束、独立反例、风险签署权重和异议有版本
纪要冒充决策只有“讨论后一致同意”补完整合同并正式批准13 字段可审计
文档失真实施与记录版本不一致发布关联决策版本,偏差回写运行配置可追溯
永不复审过期、无主、阈值被静默修改事件与定时复审、冻结扩面陈旧记录持续下降
支付猜结果超时后直接成功或失败未知态、查单、对账、人工闭环无重复入账与错误终态
flowchart TD
    A["支付渠道超时或回调缺失"] --> B{"是否有可验证渠道终态"}
    B -->|"有"| C["按请求键和状态机幂等收敛"]
    B -->|"无"| D["保持未知态并主动查单"]
    D --> E{"查单是否在窗口内得到终态"}
    E -->|"是"| C
    E -->|"否"| F["进入对账与人工处理,禁止猜测"]
    C --> G["记录账务、通知和审计证据"]
    F --> G

图解读:节点围绕“是否有证据”推进,而不是围绕接口成功率;箭头把长期未知交给对账与人工,不强造终态。前提是稳定请求键和状态机存在;失败分支仍保持可追溯;业务结论是支付未知态是一种正确状态,不是待掩盖的异常。

数据演绎 13:猜成功的期望损失

E3(演练证据):每天 10 万笔支付,演练假设渠道超时率 0.2%,即 100000×0.2%=200 笔。若其中 3% 实际失败却被猜成功,则错误成功 200×3%=6 笔;每笔平均资金与处置损失按 800 元演练,直接期望损失 6×800=4800 元/日,还未计合规和信任。未知态查单即使增加 30 秒,也不能用入口成功率抵消这类错误终态。

热门面试题

  1. 问题:支付未知态为什么不能直接判失败?
    • 考点:外部事实不可猜测。
    • 回答思路:说明超时只证明未收到响应。
    • 详细答案:渠道可能已经扣款但响应丢失,直接判失败会诱导用户重复支付;直接判成功又可能形成虚假入账。应保持未知态,以原请求键查单,结合回调、对账和人工处理收敛。
    • 进阶追问:未知态影响用户体验怎么办?
    • 进阶回答:明确展示处理中、禁止重复关键动作、提供查询与通知;正确的暂时不确定优于错误的即时确定。
  2. 问题:如何避免架构评审被权威拍板?
    • 考点:决策公平与责任。
    • 回答思路:先固定问题和约束,再分离质疑与批准角色。
    • 详细答案:会前确认目标、硬约束、权重和候选,评分附证据;指定独立质疑者提出反例,保存异议;最终由承担风险且有权限的人签署条件,而不是按职级或多数票替代事实。
    • 进阶追问:最高负责人坚持怎么办?
    • 进阶回答:记录其覆盖的证据、风险、范围和撤销条件,由其明确承担相应业务后果,硬性合规仍不能被覆盖。
  3. 问题:怎样讲出有架构深度的 ADR(架构决策记录)项目话术?
    • 考点:结构化复述与事实边界。
    • 回答思路:用六段法并主动讲反例和退出。
    • 详细答案:先讲背景、不变量和量级证据,再讲候选、硬约束淘汰、权衡与敏感假设;随后讲决策、代价、运行控制、错误路径、撤销和复审。最后说明证据等级、未解决风险及下一步补证,不虚构上线效果。
    • 进阶追问:面试官追问结果提升多少怎么办?
    • 进阶回答:有 E1(源码与可复现证据)就给口径和窗口;没有就给 E3(演练证据)计算并明确待核对数据,不能编百分比。

综合题库结构分隔

14. 综合面试题库

  1. 问题(综合题 01):请完整说明一份 ADR(架构决策记录)为什么可信。

    • 口述答案:我判断一份 ADR(架构决策记录)是否可信,不先看篇幅,而看它能否让未参会者复算当时的选择。第一层是问题边界:背景说明为什么现在必须决定,目标写可验证成功,非目标限制本次承诺,约束区分不可违反的不变量和可交换偏好。第二层是候选证据:至少包含维持现状与一个替代项,每项都写证据来源、时间、范围和等级;违反资金、安全、合规或恢复硬约束的候选先淘汰,剩余项才做权衡和敏感性分析。第三层是明确承诺:决策写适用范围与生效版本,后果同时承认收益、代价、新增运行工作和剩余风险,风险必须由有权限的人接受。第四层是运行闭环:撤销条件要对应可观测阈值,复审日期和事件触发器同时存在,所有者对补证、扩面和退出负责。最后我会检查它是否与需求、方案和实施版本相互链接,实施偏差是否回写,旧版本是否保留。只写“经讨论决定采用某技术”不可信,因为它无法解释为什么不选其他项、出了什么证据会认错、谁承担失败以及怎样退出。可信也不等于永远正确,而是结论在给定证据内成立,条件变化后能及时失效。项目数字若只有 E3(演练证据),就明确公式和假设;只有 E2(已有材料映射),就只说候选设计,不包装成生产成果。 审计时我还会随机抽取一条已接受记录,从运行信号反向追到实施版本、批准条件和原始证据;若链路中任一环无法定位,说明它虽然字段齐全,实际仍没有进入工程闭环,需要降级为待复审状态。
    • 追问一:记录写得很长是否说明更完整?
    • 直答一:不说明;按必填字段、证据可复算性和退出可执行性验收,重复背景不能抵消关键缺项。
    • 追问二:谁批准 ADR(架构决策记录)?
    • 直答二:决策所有者提交,业务、安全、运行等责任人分别确认边界,剩余风险由有权限者签署。
    • 追问三:记录何时失效?
    • 直答三:目标、约束、证据范围、依赖、阈值或所有者发生实质变化,以及到达复审日时进入复审。
    • 详细章节:ADR(架构决策记录)合同
  2. 问题(综合题 02):需求、方案、决策、实施记录和会议纪要怎样配合?

    • 口述答案:我会把五类文档看成同一条证据链,而不是互相替代。需求记录负责“为什么做、谁受影响、什么算成功”,核心是业务不变量、质量场景、量级和验收;方案说明负责“系统怎样协作”,展开边界、数据流、失败路径、容量、安全和迁移;ADR(架构决策记录)负责“为何在候选中选这一项”,保存硬约束淘汰、证据等级、权衡、后果、异议、撤销条件和所有者;实施记录负责“实际发布了什么”,包括版本、配置、开关、发布时间、回退和运行偏差;会议纪要只保存讨论经过、未决问题和行动项。正确协作方式是需求给决策提供目标与约束,决策给方案限定承诺,方案给实施提供可执行路径,实施与运行证据再触发决策复审,纪要链接到当次正式版本。常见错误是把方案图当决策理由、把代码上线当需求验收、把“参会人无异议”当风险接受,或会后直接改文档却不改版本。我会为每份文档设唯一所有者和状态,在发布记录中标明它实施的是哪个决策版本,在决策中标明验证哪些需求场景。事故时沿这条链定位:是需求漏了不变量、决策误判证据、方案漏了失败路径,还是实施偏离批准范围。这样不会把所有问题都推给“架构设计”,也能在变化时只重开受影响的环节。 在实际协作中,我还会为这条链设置变更传播规则:需求基线变化自动通知决策所有者,决策替代自动标记受影响方案,实施偏差自动进入复审队列,避免某一份文档更新后其余材料继续引用过期结论。
    • 追问一:能把五类内容写在同一个文件吗?
    • 直答一:可以,但章节、状态、所有者和版本必须独立,任何一类变化不能静默覆盖其他证据。
    • 追问二:会议纪要什么时候最有用?
    • 直答二:保存异议形成过程、待补证项和行动人,帮助解释正式决策上下文,但不承担批准语义。
    • 追问三:实施与方案不一致怎么办?
    • 直答三:评估偏差是否改变约束、风险或退出;重大偏差重新评审,小偏差也要回写实施记录和验证结果。
    • 详细章节:需求与验收
  3. 问题(综合题 03):怎样区分可逆决策和单向门决策?

    • 口述答案:我不会按技术复杂度给决策贴标签,而会问退出时需要恢复什么。第一看数据:是否保留权威原始事实,能否把新格式还原,回滚会不会丢失迁移期间写入;第二看接口:内部调用方能否同步切回,公共协议或合作方是否已经形成不可兼容承诺;第三看合同与供应商:数据是否可携带,最低期限、违约和专有能力是否造成锁定;第四看组织:旧路径人员、手册和运行能力是否仍在;第五看验证:回去后怎样证明资金、库存、权限和外部副作用正确。内部参数调整、可影子验证的查询投影通常较可逆,可以小步试错;公共协议破坏、不可恢复数据变换、长期合同和跨组织迁移接近单向门,需要更高证据、独立质疑、明确风险接受和首次范围限制。可逆性也不是固定属性,可以通过兼容扩展、双写校验、事实留存、分批切流和退出演练提高,但这些措施本身有成本。最后我会把可逆性写进 ADR(架构决策记录):退出步骤、预计时间、不可撤销副作用和最后负责时刻。若退出成本随扩面快速上升,早期看似容易回滚也应按单向门治理。核心判断不是“能不能把代码版本退回”,而是“能不能让业务事实、外部承诺和运行责任回到可信状态”。 评审结论还要写出可逆性随时间的变化曲线:首次试验也许可分钟级回切,外部调用方和历史数据增加后可能变成周级迁移,因此扩面前必须重新估算,而不能永久沿用最初的低风险标签。 我会把这条变化曲线纳入每次扩面检查,确保范围扩大同时退出预算也同步更新。
    • 追问一:微服务拆分是单向门吗?
    • 直答一:取决于数据、组织和接口是否已经独立;仅拆代码可逆,跨团队数据所有权和外部契约形成后退出成本会显著上升。
    • 追问二:怎样提高可逆性?
    • 直答二:保留原始事实、兼容读写、稳定业务接口、分批切换、差异校验,并定期真实演练回切。
    • 追问三:可逆方案一定优先吗?
    • 直答三:不一定;若可逆性带来的长期复杂度高于失败风险,且单向门证据充分,也可以承担单向门。
    • 详细章节:决策可逆性
  4. 问题(综合题 04):什么时候应该延迟架构决策,怎样计算期权价值?

    • 口述答案:延迟决策只有在等待能获得区分候选的新证据时才有价值。我先写当前不确定项,例如真实峰值、故障恢复能力、供应商退出成本或搜索投影新鲜度,再说明两周内通过什么回放、试验、合同澄清或代码核对降低不确定性。然后确定最后负责时刻:再晚会错过容量、安全、合规、合同、迁移或交付窗口。经济上可以把立即决策的期望错误损失写成“选错概率乘选错损失”,把等待后的总损失写成“新概率乘损失加等待机会损失和保留多路径成本”,前者减后者就是演练期权价值。所有概率和金额没有生产证据时只标 E3(演练证据),用途是暴露判断,不是伪精确裁决。等待期间还要做工程保留:稳定业务边界、保存可回放事实、限制供应商专有格式扩散,但不为了想象中的替代方案堆积无用抽象。若试验无法改变排序、关键证据不可获得,或等待损失已经超过潜在收益,就应到截止日用当前最佳证据决策并公开剩余风险。拖延的识别信号是没有待补证列表、没有责任人、没有截止日,只是反复说“再观察”。有效延迟则像一个限时实验,有输入、输出、成本和默认动作,时间到了无论证据是否完美都能收口。 每次延期结束时我都会产出明确状态:证据支持原方案、证据推翻原方案、证据仍不足但已到截止日,三种情况都要进入正式决策;如果实验做完仍只留下几张图而没有改变假设概率,就不能声称购买了期权价值。 延期成本也要持续记账,避免一开始值得等待,后续却因惯性跨过最后负责时刻。
    • 追问一:信息越多决策一定越好吗?
    • 直答一:不一定;只有会改变候选排序或风险边界的信息有决策价值,其他信息可能只是增加等待成本。
    • 追问二:最后负责时刻由谁定?
    • 直答二:由受容量、合规、合同、迁移和业务窗口影响的责任人共同确认,决策所有者记录并执行。
    • 追问三:怎样防止为保留期权过度设计?
    • 直答三:只为已识别且可能发生的替代路径支付成本,并给期权本身设复审和删除条件。
    • 详细章节:量级与期限
  5. 问题(综合题 05):如何使用硬约束淘汰和加权矩阵,又不伪装客观?

    • 口述答案:我的顺序是先准入、再比较、后做敏感性。准入阶段从需求和风险中提取不可抵消条件,例如资金唯一、库存不超卖、敏感数据驻留、明确恢复上限、团队必须具备的值守能力;候选只要违反其中一条就淘汰,不能靠成本低或性能高补分。比较阶段只处理可交换偏好,先在看到具体候选评分前确认维度与权重,再为每个分数附来源、时间、范围和置信区间。没有测量的分数标 E3(演练证据)或 E0(待核对),专家经验也明确写成判断,不伪装成事实。加权结果出来后,我至少改变一次关键权重、工作负载和评分误差,观察排名是否翻转;若轻微变化就换冠军,结论应写成“两个方案接近,取决于某假设”,然后补证、缩小范围或选择更可逆项。评审还要强制写推荐项反例,例如流量翻倍、关键人员离开、依赖跨区或恢复失败时会怎样。最终记录不是“甲得 8.2 分所以客观最好”,而是“在当前权重与证据下甲略优,成本权重超过某值时乙翻转,我们由某责任人承担退出代价选择甲”。矩阵最大的价值是让隐含偏好可见、可争论、可复算,批准仍是有责任主体的人类判断,不能把责任转交给小数点。 为防止矩阵成为装饰,我还会让一位非方案作者拿原始输入独立复算,并把最小翻转条件写入记录;上线后的真实信号一旦跨过该条件,就自动触发复审,而不是继续引用评审当天的单一得分。 任何会改变结论的临时调分都必须留下理由、批准人和前后结果,禁止只保留最终表格。
    • 追问一:硬约束冲突导致没有候选怎么办?
    • 直答一:把冲突升级给约束所有者,调整范围、目标或期限;不能私自把某条硬约束降级。
    • 追问二:权重应该由架构师定吗?
    • 直答二:架构师组织量化,业务、安全、运行和成本责任人分别确认其承担的维度,最终由决策所有者收口。
    • 追问三:为什么要包含维持现状?
    • 直答三:它提供迁移收益基线,防止所有新方案只互相比较而忽略“不改”可能更经济。
    • 详细章节:质量属性权衡
  6. 问题(综合题 06):如何建立假设账本并使用 E1(源码与可复现证据)/E2(已有材料映射)/E3(演练证据)/E0(待核对)证据等级?

    • 口述答案:我会把所有能翻转决策但尚未完全确定的判断登记为假设,而不是让它们藏在方案文字里。每条记录假设内容、影响的决策版本、当前证据等级、来源、适用时间和范围、验证方法、阈值、失效日期、所有者以及失效后动作。E1(源码与可复现证据)只支持本地源码、配置、锁文件、可重复运行或已渲染资产能够直接证明的事实;E2(已有材料映射)支持“这个机制可映射到现有项目或作为候选”,不能外推为已经上线和提升多少;E3(演练证据)用于公式、标准机制和明确假设的算例;E0(待核对)必须写缺少哪些日志、配置、合同或现场数据,以及由谁何时补。证据还要检查新鲜度和代表性:低峰样本不能证明高峰,单仓不能自动代表全部仓,供应商材料不能证明本团队会恢复。假设按不可逆性、损失和对排序的敏感度决定验证优先级;高风险单向门假设先验证。运行后用适应度函数持续校准,范围、版本、组织或依赖变化时证据可以从 E1(源码与可复现证据)降为过期,而不是只允许升级。这样做的价值是让面试表达和真实决策都诚实:我能清楚说哪些是事实、哪些是项目映射、哪些只是演练、哪些还不知道,并说明未知如何被关闭。 我还会每月抽查高敏感假设,确认链接仍可访问、样本版本没有漂移、验证脚本可重复执行、所有者仍在岗;任何一项失败都先降低证据可用性并冻结扩面,不能等事故发生才承认账本已经过期。 抽查结果本身也作为证据保存,供下一次复审比较。
    • 追问一:E1(源码与可复现证据)一定比 E3(演练证据)更正确吗?
    • 直答一:它对特定事实更可追溯,但范围可能很窄;E3(演练证据)可解释普遍机制,两者服务不同陈述。
    • 追问二:假设太多如何治理?
    • 直答二:按决策敏感度、失败影响和验证成本排序,低影响项合并,关键项必须有独立所有者和失效动作。
    • 追问三:证据过期是否立即回滚?
    • 直答三:先冻结新增承诺并复审;是否回滚取决于当前运行信号、风险和替代路径。
    • 详细章节:事实等级边界
  7. 问题(综合题 07):请设计一次有质量的架构评审会议。

    • 口述答案:我会把质量控制放在会前。准入材料必须包含目标、非目标、硬约束、至少两个候选和维持现状、证据等级、关键数据流、失败路径、撤销条件、复审日期和所有者,并提前发送;缺任何硬约束或退出路径就退回,不占用多人会议。参会角色包括决策所有者、主持人、业务责任人、安全或数据责任人、运行与成本代表、独立质疑者、风险接受人和记录人,各自只确认有权限的边界。会议先由主持人让业务重述问题和不能接受的失败,再确认候选是否违反硬约束;随后核对证据范围,不先展示漂亮总分。核心时间用于攻击推荐项:独立质疑者提出反例,运行团队演绎依赖超时、配置错误、数据差异和回滚,安全与业务检查爆炸半径。然后审查退出成本、技术债和适应度函数。异议按“反对对象、证据、潜在损失、解除条件”记录,不能用沉默或多数票覆盖。结论只有批准、条件批准、拒绝和退回补证;条件批准必须有补证项、负责人、截止日、允许范围和逾期自动失效。会后记录人发布针对明确版本的决定,实施记录关联该版本,未完成条件进入门禁。这样会议不是架构师讲解方案,而是一场结构化证伪和责任确认,时间集中在可能翻转决策的地方。 会后我会在约定时间内发布正式结论和异议清单,让每个行动人确认任务,并在下一次发布前由门禁核对条件;这一步能检验会议是否真正产生可执行控制,避免现场讨论热烈、会后一切仍按旧路径运行。 未确认的行动项继续保持未批准状态,不能默认已经有人接手。
    • 追问一:评审人数越多越好吗?
    • 直答一:不是;覆盖必要责任域即可,旁听者过多会降低质疑质量和责任清晰度。
    • 追问二:材料不完整但期限很紧怎么办?
    • 直答二:缩小为可逆试验并明确风险,或由有权限者接受缺口;不能把紧急当作永久豁免。
    • 追问三:方案作者能当主持人吗?
    • 直答三:小团队可以兼任流程组织,但独立质疑和风险批准必须由其他角色承担。
    • 详细章节:风险与评审场景
  8. 问题(综合题 08):评审出现异议时怎样处理,什么叫条件批准?

    • 口述答案:我先把异议从“我不同意”转换为可处理结构:它针对哪个决策版本和字段,依据是什么,担心哪类业务损失,在什么条件下可以解除。若异议指出违反资金、安全、合规或明确恢复硬约束,方案不能靠投票通过;要么修改方案,要么由约束所有者确认原约束被正式改变。若是证据不足或偏好冲突,优先设计最小试验、回放或数据核对,给出补证期限。无法在截止日前完全消除但风险可控时,可以条件批准:明确只允许哪些仓、租户、流量或功能,缺什么证据,由谁完成,何时到期,期间监测什么,越界如何止损,条件未完成是否自动暂停。风险接受人签的是剩余风险和有限期限,不是对方案永久背书。记录人必须保留未采纳异议及理由,后续事故或新证据出现时可以追溯,而不是会后删除反对意见。若风险无人有权接受,或退出路径不可执行,结论就是拒绝。多数票只适合表达偏好,不能决定技术事实或抵消硬约束。高质量处理让异议变成撤销条件、适应度函数或补证任务;低质量处理则把异议者视为阻碍,用“大家基本同意”制造伪共识。条件批准的本质是把不确定性包在可控范围和明确期限里,任何逾期继续扩面都属于新的未批准决策。 对反复出现的同类异议,我会追查是否是需求不清、证据工具缺失或责任边界冲突,把系统性问题转为模板、自动检查或组织治理;否则每次会议都会重新争论同一件事,条件批准也会变成永久例外。 这也让异议处理结果能够积累,而不是每次从个人记忆重新开始。
    • 追问一:异议者需要对延期负责吗?
    • 直答一:需要提供具体证据或可验证反例,但最终范围和进度取舍仍由决策与风险责任人承担。
    • 追问二:条件批准能多次延期吗?
    • 直答二:每次延期都要重新评估累计暴露并由风险接受人签署;反复延期说明原方案或优先级需要重审。
    • 追问三:未采纳异议为何还要保留?
    • 直答三:它记录当时已知反例,方便新证据出现时快速判断原权衡是否失效。
    • 详细章节:架构评审治理
  9. 问题(综合题 09):风险接受和架构适应度函数怎样形成闭环?

    • 口述答案:风险接受解决“谁在什么期限内承担剩余风险”,架构适应度函数解决“系统怎样持续证明仍在批准边界内”,两者缺一不可。我先把风险场景写成触发、影响对象、现有控制、残余概率与影响、接受理由、期限和退出能力,再找到真正有权限承担后果的人:业务接受业务损失,安全责任人确认安全边界,服务所有者确认恢复可执行;架构师不能一人代签。随后把决策的关键后果和撤销条件转成检查,例如库存可用量不能为负、MQ(消息队列)最老消息年龄不能持续超窗、搜索投影删除与权限传播必须及时、过期决策数量必须为零。每个函数绑定决策版本、采样范围、阈值、执行频率、接收人和失败动作。违反硬约束时门禁应阻断扩面或自动降级,趋势性风险可以告警并进入复审。函数本身也要治理:检查它是否真的代表业务事实、是否因误报被静默、阈值修改是否有版本、所有者离开后是否重新指派。到复审日,风险接受人依据函数历史决定继续、收紧、补控制或撤销;不能因为一直没出事故就把风险写成零。这个闭环把纸面签字变成运行责任,也防止适应度函数只产生无人处理的面板。最终要证明的不只是系统当前正常,而是越界时能在批准时间内被发现、止损和升级。 如果运行信号长期正常,我仍会安排一次故障或回退演练验证检测与止损路径,因为没有越界可能只是刺激从未发生;只有正常期数据和失败期演练都符合边界,风险接受人才有充分依据决定续期。
    • 追问一:风险接受能永久有效吗?
    • 直答一:不能;必须有到期日或事件触发器,环境和控制变化后重新评估。
    • 追问二:适应度函数只能是自动测试吗?
    • 直答二:不是;运行查询、发布门禁、差异巡检、灾备与人工授权演练都可以,只要证据可复核。
    • 追问三:阈值频繁告警怎么办?
    • 直答三:先判断系统越界还是函数失真;修改阈值也必须走决策变更,不能只为消除噪声。
    • 详细章节:质量属性治理
  10. 问题(综合题 10):ADR(架构决策记录)如何版本化、废弃和替代?

  • 口述答案:我的原则是语义变化追加版本,历史结论不静默覆盖。记录从草拟、评审中、已接受、已拒绝到已替代或已废弃,每个状态都有实施权限。错别字和不改变含义的排版可原地修正;目标、约束、候选、证据、决策、风险、阈值、所有者或适用范围变化时,应创建新版本或新记录。新记录复制必要背景,但明确新增证据和翻转原因,并与旧记录建立“替代者/被替代者”双向关系。替代不等于立即删除旧实现:迁移期要写兼容范围、双运行、差异预算、调用方清单、回退条件和截止日,旧记录可以保留“仅迁移例外”的运行边界。废弃表示旧问题或实现不再适用,也要确认流量归零、数据按策略保留、开关和告警清理、权限撤销、手册与责任转移;仅修改文档状态不算退役。复审触发既有固定日期,也有事件:不变量、流量、依赖、合同、安全、事故反例、成本、技术债或所有者变化。实施记录必须标明使用哪个决策版本,发布门禁加载对应阈值,运行偏差回写后判断是否需要新决策。旧版本保留是为了事故复盘和解释历史实现,不是鼓励永久兼容。最终审计同时看文档、代码配置、实际流量、数据差异和责任归属,五者一致才算版本切换完成。 为避免版本关系形成迷宫,我会维护当前有效记录索引,任何使用方都从索引进入唯一生效版本;历史记录只通过替代链追溯,禁止多个“已接受”版本同时声称覆盖同一范围,却没有优先级和迁移期限。 索引异常或出现重复有效范围时,应阻断新的实施申请。
  • 追问一:旧 ADR(架构决策记录)可以删除吗?
  • 直答一:通常不删除,标记状态并保留历史;涉及敏感信息时可按策略脱敏或受控归档。
  • 追问二:替代和废弃哪个先发生?
  • 直答二:有新决策接管时先替代并完成迁移,旧实现关闭后可保持已替代;没有接管者且不再需要时废弃。
  • 追问三:谁负责触发复审?
  • 直答三:决策所有者主责,适应度函数、依赖负责人和运行事件可自动触发,不能只靠个人记忆。
  • 详细章节:变更与兼容
  1. 问题(综合题 11):怎样计算和治理技术债?
  • 口述答案:我先把技术债关联到具体决策版本和获得的短期价值,而不是建立一个模糊的“以后重构”清单。债务本金包含恢复目标状态所需的设计、编码、数据迁移、兼容、验证、培训和下线成本;周期利息包含每月额外开发、测试、发布、排障、人工对账、资源和跨团队协调;风险敞口单列概率、影响、可检测性和暴露时间,避免低概率高影响被平均工时写成零;机会损失记录因债务无法接入的新业务或错过的迁移窗口。然后统一时间窗口,比较立即偿还本金与继续持有的累计利息、风险和机会损失。没有真实工时和事故数据时使用区间并标 E3(演练证据),把最影响排序的输入标 E0(待核对)并补证。偿还不是只有“大重构”:可以一次清偿、随业务改动分期偿还、通过边界隔离限制新增,或迁移到替代方案。每项都要有触发器,例如月利息超过本金一定比例、依赖即将停止支持、变更失败持续上升、相关事故发生、关键人员离开或合同窗口逼近。刻意借债必须写最迟偿还日、禁止继续扩散的范围和适应度函数。若本金高、利息低、风险可控且系统即将退役,限期持有可能更经济;若每次变更都付高利息或接近单向门,就应提前偿还。治理的核心是让债务能和业务优先级在同一张损失表上比较,并由所有者持续计息,而不是靠工程师情绪争取资源。 每次复审我还会比较预计利息与实际利息,解释偏差来自业务增长、估算错误还是控制改善;连续两个周期严重低估,就应调整模型和偿还优先级,不能用最初的乐观数字无限展期。
  • 追问一:代码重复一定是技术债吗?
  • 直答一:不一定;只有它产生可识别利息、风险或机会损失,且存在目标状态时才值得作为债务治理。
  • 追问二:风险怎样折算为成本?
  • 直答二:可用概率与影响区间辅助排序,但资金、安全等尾部风险应单列,不强行用平均值抵消。
  • 追问三:业务为什么要关心技术债?
  • 直答三:因为债务会表现为交付变慢、失败增多、恢复变长、成本上升和新机会受阻,而非仅是代码审美。
  • 详细章节:风险与失败成本
  1. 问题(综合题 12):错误架构决策怎样止损、回滚、双运行和退出?
  • 口述答案:我把错误决策处置分为止损、恢复可信路径、处理副作用、验证和退役五段。撤销信号触发后先冻结扩面,限制高风险请求,保护权威数据并保存版本、流量、差异和外部调用证据,不能先争论责任。然后评估旧路径是否有容量、兼容和完整数据,选择配置回退、版本回滚、流量切回或功能降级;代码回滚只恢复程序,已经发生的资金、库存、通知和数据变换需要对账、补偿或人工审批。中高风险迁移可使用双运行:旧路径保留权威,新路径影子执行或承接小流量,按同一业务键、同一观察窗口比较状态、金额、版本、延迟、成本与失败语义。差异要分普通与高价值,硬约束要求为零时不能用总体低差异率通过。双运行本身增加资源、状态分叉和认知成本,因此必须写最长窗口、净化条件和旧路径退役清单。验证阶段不只看健康检查,而是核对业务不变量、外部事实、积压、差异、权限和关键用例。退出完成要证明旧流量归零、调用方迁移、数据可追溯、开关告警权限清理、责任和手册转移。若回切会造成第二次容量事故,应先限流和分批。最终复盘把新反例写回假设、撤销阈值和适应度函数,让“认错能力”成为架构控制,而不是临场勇气。 为了证明预案可执行,我会在上线前记录回切所需权限、人员、脚本、预计容量和业务验收人,并至少完成一次受控演练;如果关键权限临时申请、旧路径无人维护或校验脚本未运行,所谓可回滚只是一句假设。
  • 追问一:什么时候不能直接回滚?
  • 直答一:旧路径容量不足、协议或数据已不兼容、外部副作用不可撤销时,要先隔离并设计补偿或迁移。
  • 追问二:双运行多久才够?
  • 直答二:覆盖峰谷、故障和数据生命周期,并达到批准样本与差异门槛;不是固定天数。
  • 追问三:谁宣布恢复完成?
  • 直答三:技术确认系统稳定,业务与数据责任人根据关键用例和事实校验共同确认。
  • 详细章节:故障与恢复边界
  1. 问题(综合题 13):请完整评审“缓存预扣库存”的 ADR(架构决策记录)。
  • 口述答案:我会先澄清缓存预扣解决的是热点过滤和源库保护,不是把库存权威搬到缓存。业务硬约束是最终承诺量不能超过权威可用量,重复请求按业务键幂等,缓存丢失或超时不得产生错误成功。候选至少包括全部直写权威库存、缓存预扣后直接成功、缓存闸门加权威条件扣减,以及热点排队。第二个候选因为缓存与绕行写、过期、崩溃和重建都可能分叉,违反权威事实约束,应淘汰。推荐项让缓存只发放预扣令牌,最终成功必须经过权威库存 可用量>=申请量 的条件更新和唯一流水;权威拒绝、重复或超时后,按业务键返还或绑定既有结果。预扣后进程崩溃会让缓存额度暂时偏少,主要表现为错拒绝,恢复任务通过令牌期限、权威流水和差异巡检重建,不能只靠过期盲目释放。评审证据要补真实热点分布、重试、源库容量、错拒绝损失和返还窗口,没有则标 E0(待核对);演练量级标 E3(演练证据)。运行适应度函数包括权威负库存为零、差异率、悬挂令牌年龄、源库压力和重建时间。撤销条件是任何负库存、差异或恢复持续越界、源库没有明显减压,或新增运维利息超过收益。退出不能直接旁路缓存把高峰打回源库,要先限流、确认容量、分批关闭预扣。这样评审的结论不是“缓存更快”,而是性能优化被放在库存不变量之外并具备可验证退出。 批准时还要限定预扣适用对象,普通商品或低并发仓没有热点收益就不引入额外状态;通过按商品和仓对照源库压力、错拒绝与恢复工时,可以防止一个局部优化被无差别复制成全局技术债。
  • 追问一:缓存多放了令牌会怎样?
  • 直答一:权威条件扣减仍会拒绝多余请求,增加的是源库压力和返还工作,不应形成超卖。
  • 追问二:缓存少了令牌会怎样?
  • 直答二:形成错拒绝,需要差异巡检和重建;它影响可用性,但比错误成功更可控。
  • 追问三:能否用分布式锁替代条件扣减?
  • 直答三:锁可串行化但不自动提供权威流水、幂等和恢复,仍要守住数据库不变量并评估锁故障。
  • 详细章节:库存不变量
  1. 问题(综合题 14):缓存预扣后出现大量差异,线上怎样排查和止损?
  • 口述答案:我先按错误成功和错拒绝分级,因为前者可能突破库存不变量,后者主要影响可用性。第一步冻结预扣扩面和相关配置发布,按商品、仓、租户、版本和时间界定范围,同时保留缓存令牌、权威库存、唯一流水、请求幂等键和应用版本证据。第二步核对权威事实:抽取差异业务键,重建“请求进入、缓存预扣、权威扣减、流水提交、返还或超时”的时间线,检查是否存在绕过权威条件更新的路径、重复释放、过期早于确认、主从读取陈旧或重建使用了旧快照。若发现权威负库存,立即受控拒绝热点确认、冻结受影响商品并按流水和业务单据人工对账;若仅缓存偏少,可把缓存降级为回源或限流,避免盲目增加令牌。第三步评估回切容量,不能关闭缓存后把全部流量打向已过载源库;先限制入口、分仓分品切换并观察尾延迟和锁等待。恢复时以权威库存和流水生成一致快照,记录重建基准版本,再追平增量,差异校验通过后小范围恢复预扣。随后检查悬挂令牌年龄、错拒绝、源库压力和业务投诉,跨过观察窗口再扩面。复盘要区分设计缺陷、实现偏差、配置错误和证据假设失效,更新 ADR(架构决策记录)的撤销条件与适应度函数。没有 E1(源码与可复现证据)时不声称根因,只列 E0(待核对)的日志和配置缺口。 处置过程中每次人工修改都必须记录操作者、原因、前后值、权威流水和审批人,并在恢复后由独立校验再次核对;否则救火动作本身会制造第二组无法解释的差异,让后续重建失去可信基线。
  • 追问一:为什么不能直接把缓存余额改成数据库余额?
  • 直答一:读取与写入之间仍有增量,直接覆盖会丢并发变化;要用基准版本加增量追平和校验。
  • 追问二:出现错拒绝是否必须下线?
  • 直答二:看比例、损失和恢复窗口;可先降级回源或限流,超过批准阈值则撤销扩面。
  • 追问三:最关键的关联键是什么?
  • 直答三:稳定业务请求键、库存对象键、权威流水标识和版本,缺一就难以还原完整路径。
  • 详细章节:线上排障方法
  1. 问题(综合题 15):请完整讲一个 MQ(消息队列)异步化 ADR(架构决策记录)。
  • 口述答案:我先划分核心事实和可恢复副作用。库存最终确认、资金入账等不能在事实未知时返回成功;通知、搜索投影、统计、部分物流调用有权威事实可重放,更适合 MQ(消息队列)异步化。背景是同步串联慢依赖会占用请求预算并扩大故障,目标是缩短核心确认、隔离副作用和保留恢复证据,非目标是不承诺恰好一次,也不把“已受理”包装成最终完成。候选包括全同步、核心提交后直接发送、核心事实与事件待办同一边界落地后可靠转发,以及定时扫描。直接发送存在提交成功但发送失败的缺口,通常淘汰;我会选择事实与待办同边界,转发器按事件标识投递,消费者在至少一次语义下用业务键、状态机和版本幂等,重复返回既有结果,乱序延迟或拒绝,失败进入重试、死信和人工闭环。证据要覆盖真实到达率、处理率、最大停摆、第三方限制、重放窗口和敏感字段,没有则标 E0(待核对)。后果是入口更短,但新增最终一致、积压、重复、乱序、死信、成本和运行责任。适应度函数看事件待办缺失、最老消息年龄、净清理时间、最终完成分位和业务差异。撤销条件是积压无法在批准窗口清空、核心事实与待办不一致、关键副作用无法幂等或单位成本失控。退出要暂停生产、排空或归档、校验外部副作用,再切回同步或替代通道,不能只删除消费者。 我还会在接入新消费者前做失败契约验收:重复同一事件、交换相邻版本、让外部依赖超时并从死信回放,检查消费者是否产生重复副作用;未通过者只能停留在试验环境,不能因为正常路径成功就接入主事件流。
  • 追问一:为什么不承诺恰好一次?
  • 直答一:跨网络、存储和外部副作用难以由单一队列保证,业务应按至少一次设计幂等和对账。
  • 追问二:定时扫描是否一定差?
  • 直答二:低量级和修复场景简单可靠,但时效、扫描压力和精确范围有限,可作为补偿而非一概淘汰。
  • 追问三:异步成功怎样对用户表达?
  • 直答三:返回“已受理、处理中”和查询标识,只有权威结果完成后才展示最终成功。
  • 详细章节:MQ(消息队列)项目案例
  1. 问题(综合题 16):MQ(消息队列)积压时如何计算恢复并决定扩容或限流?
  • 口述答案:我不会只看积压条数,而会先把业务恢复窗口转成净清理能力。先确认到达率、当前有效消费率、最老消息年龄、失败重试比例、每类消息平均成本和第三方限额;如果故障期间消费停摆,积压等于到达率乘停摆秒数。恢复后真正用于清积压的能力是消费率减持续到达率,清空时间等于积压除以净能力。若消费率只略高于生产,面板看似恢复,最老消息仍可能长时间增长或缓慢下降。然后检查扩容是否有效:瓶颈可能在分区、数据库写点、外部接口、锁、幂等表或重试风暴,单纯加消费者会把下游打垮。止损时按业务优先级限生产、暂停低价值任务、降低无意义重试并保护核心事实;对支付、库存等高风险消息不能任意丢弃或改顺序。扩容要同时观察下游容量、错误率、尾延迟和单位成本,必要时把恢复流量与实时流量分配独立预算。若死信增长,要先分类永久错误和瞬时错误,修复后按业务键和版本受控回放,避免把旧事件覆盖新状态。恢复完成不是积压为零,还要核对最终业务状态、外部副作用、差异和用户可见时间。最后把本次最大停摆、有效净能力和恢复时长写回容量假设与 ADR(架构决策记录)撤销条件;没有真实运行记录时只做 E3(演练证据)算例,不把公式结果说成生产能力。 容量调整后还要做一次反向验证:撤掉临时扩容,确认常态配置仍有批准余量,并核对扩容期间是否产生分区倾斜、重复处理和额外账单;否则一次应急扩容可能被永久保留,形成新的成本债务。
  • 追问一:积压条数和消息年龄哪个更重要?
  • 直答一:业务时限通常更直接对应年龄;条数用于容量计算,两者结合才能判断。
  • 追问二:消费率高于生产率就一定能恢复吗?
  • 直答二:数学上有净能力,但还要确认错误、重试、分区倾斜和下游限制不会让有效处理率下降。
  • 追问三:什么时候应该限生产?
  • 直答三:预计清空时间越过业务窗口、下游水位危险或重试形成正反馈时,应按优先级限流。
  • 详细章节:容量与积压排障
  1. 问题(综合题 17):请完整讲一个搜索读模型 ADR(架构决策记录)。
  • 口述答案:背景通常是权威交易库承担多字段模糊检索、聚合和高并发分页后干扰核心写,目标是隔离查询并提供可扩展搜索,非目标是让搜索投影承担交易权威或保证所有字段瞬时一致。硬约束包括权威源唯一、每条投影携带业务标识和源版本、乱序不能使状态倒退、删除与权限变化必须在批准窗口传播、索引可从权威事实重建、关键写前回权威源校验。候选包括交易库直接查、只读副本、异步搜索投影和离线报表;主键精确查询保留在交易库,模糊检索与聚合选择异步投影,只读副本作为受限回源,离线报表不满足在线目标。证据需要真实查询类型、读写比例、字段基数、索引大小、更新率、新鲜度和重建窗口,未知项标 E0(待核对);机制只能作为 E2(已有材料映射)。数据通过带版本的变更事实进入投影,重复和旧版本忽略,查询结果返回更新时间,详情和写操作回权威源。后果是读写隔离和查询能力提升,但新增最终一致、映射演进、重建、迟到删除、权限传播和成本。适应度函数看高分位投影年龄、业务键差异、删除权限超窗、重建时间、查询质量和交易库减压。撤销条件是任一硬边界越界、重建无法在窗口完成或成本大于收益;退出通过限制搜索功能、回源、双索引切换或回到受限查询,不能让陈旧结果驱动关键动作。 上线后我会抽取用户从搜索结果进入详情再执行操作的完整链路,确认详情确实回到权威源、陈旧结果没有绕过权限和状态校验;只测索引文档一致而不测用户动作,仍可能把读模型误当成交易事实。
  • 追问一:为什么结果要带更新时间?
  • 直答一:让调用方识别陈旧边界,并支持超窗降级、回源和用户解释。
  • 追问二:权限变化为何要单独关注?
  • 直答二:普通字段陈旧影响体验,权限陈旧可能造成数据泄露,通常应设更严格传播与下线规则。
  • 追问三:交易库减压不明显怎么办?
  • 直答三:核对查询路由、回源比例和新增流量;若收益不成立且复杂度上升,应缩小或撤销读模型。
  • 详细章节:存储搜索选型
  1. 问题(综合题 18):搜索读模型怎样重建、校验、切换和回退?
  • 口述答案:我会使用有基准版本的双索引流程。首先冻结本次映射和分析规则版本,从权威源取得一致的快照边界,记录快照后的增量位置;新索引在独立名称下全量构建,旧索引继续服务。全量期间增量不能丢,待构建完成后按业务版本追平,重复和旧版本忽略,删除与权限事件采用更高优先级。校验不能只比文档总数,要按业务键比较关键字段、状态、版本、删除、权限、分词结果和代表性查询,样本覆盖热点、长尾、边界字符和高价值对象;差异按硬约束与体验问题分级。通过后先让内部或少量租户读取新索引,观察查询正确性、投影年龄、错误、资源和回源,再逐步切换别名或路由。旧索引在批准观察窗口内保留,撤销信号触发时把读流量切回;但切回前要确认旧索引仍持续接收增量,否则它已不是安全回退点。新索引全量后还要做权威抽样对账,避免两套投影共享同一错误变更流而“彼此一致”。切换完成后清理旧索引前确认无调用、无回放依赖、数据保留合规和运行手册更新。若重建时间超过业务恢复目标,应分片并行、缩小字段、增加有效处理能力或保留受限回源,而不是直接宣布恢复。所有样本量和时长没有可复现记录时标 E3(演练证据),不把一次测试外推为生产承诺。 重建报告还要保存源快照位置、映射版本、增量终点、差异样本、切换时间和批准人,使下一次能复现同一过程;若只保留“重建成功”的截图,事故时无法判断缺失发生在全量、追平还是路由切换阶段。
  • 追问一:为什么旧索引也要持续追增量?
  • 直答一:否则切换观察期间它会变陈旧,触发回退时无法恢复可信查询。
  • 追问二:两套索引结果一致就够吗?
  • 直答二:不够;两者可能共享错误源,仍需与权威事实和业务用例独立校验。
  • 追问三:何时可以删除旧索引?
  • 直答三:新索引跨过观察和故障窗口,差异、回退演练、调用迁移与保留策略全部验收后。
  • 详细章节:复制备份与迁移
  1. 问题(综合题 19):支付调用超时进入未知态,你如何决策和恢复?
  • 口述答案:我的第一原则是超时只代表本方没有在时间预算内收到确定响应,不代表渠道一定成功或失败。背景是不可靠网络和外部渠道可能出现“渠道已扣款但响应丢失”,目标是保证同一外部交易至多形成一笔正确入账并最终可追溯,非目标不是追求所有请求即时终态。硬约束是金额、币种、商户、请求键和渠道交易必须唯一对应,未知时禁止猜成功或猜失败。处理时先以稳定请求键持久化支付单和处理中或未知态,再用原请求键主动查单;回调、查单和用户重试竞争时,都进入同一状态机,只有更高可信渠道事实和合法状态转换才能推进,重复结果返回既有记录。窗口内仍未知就进入延迟查单、对账和人工队列,限制退款、发货等依赖最终支付状态的动作,同时向用户明确展示处理中和查询入口。架构评审应淘汰“为提高成功率超时即成功”和“超时即失败允许重付”两个候选,因为入口指标不能抵消资金错误。适应度函数看重复入账、金额差异、未知态年龄、主动查单成功、对账差异和人工积压。撤销条件包括幂等键失效、状态机出现非法终态、未知态无法在批准窗口收敛或对账证据缺失。恢复完成要核对渠道流水、内部支付单、账务分录和后续履约,不以接口恢复为终点。真实比例必须有 E1(源码与可复现证据);没有就只给 E3(演练证据)计算和 E0(待核对)缺口。 对长期未知案例,我会按渠道、版本、网络区域和请求阶段聚类,判断是单笔偶发还是系统性证据缺口,并把查单成功率、最终收敛时间和人工成本带回下一次渠道评审,而不是把人工队列当作永久黑箱。
  • 追问一:未知态是否算支付失败?
  • 直答一:不算,它是尚无足够证据判定终态的正式状态,必须限制后续动作并持续收敛。
  • 追问二:用户重复点击怎么办?
  • 直答二:用稳定请求键返回原支付单状态,不创建新的渠道扣款意图;需要重试时按明确业务规则生成新意图。
  • 追问三:主动查单也超时怎么办?
  • 直答三:按退避和总预算继续查证,超窗进入对账与人工处理,仍不能猜测结果。
  • 详细章节:支付回调与查单
  1. 问题(综合题 20):如何避免权威拍板和会议纪要冒充决策?
  • 口述答案:我会从流程顺序和角色分离两方面控制。流程上,看到具体推荐产品前先由业务、安全、数据、运行和成本责任人确认目标、硬约束、失败损失、候选生成规则和评分维度,避免结论出来后倒推权重。所有候选包含维持现状,评分附证据等级和适用范围,独立质疑者专门提出推荐项反例和排序翻转条件。角色上,职位高的人可以提出业务优先级并承担相应风险,但不能替技术证据、安全硬约束和运行可恢复性发言;方案作者不同时担任唯一批准人,记录人保存异议和覆盖理由。会议纪要只写讨论、行动项和未决问题,正式 ADR(架构决策记录)另有背景、目标、非目标、约束、候选、证据、权衡、决策、后果、撤销条件、复审日期、所有者和状态,并针对明确版本签署。若负责人坚持某项选择,我会要求记录他覆盖了哪项建议、基于什么新证据、接受什么剩余风险、允许范围多大、何时撤销;资金、安全和合规硬约束仍不能因职级取消。会后沉默不算批准,条件未完成自动失效,实施记录必须关联正式版本。这样不是削弱负责人决断,而是让权力与后果匹配,让未来团队能区分“事实证明”“业务取舍”和“管理覆盖”。真正危险的不是有人拍板,而是拍板无版本、无证据、无责任、无退出,事故后所有人都说当时只是讨论。 我还会观察拍板后的实际行为:是否跳过小范围验证、是否压制坏消息、是否为保住结论修改阈值;这些运行迹象一旦出现,就由记录人和独立评审者触发复审,使治理不仅停留在会议礼仪层面。
  • 追问一:小团队角色无法完全分离怎么办?
  • 直答一:可以一人兼多职,但要明确每次以哪个角色签署,并至少保留独立反例审查和风险接受。
  • 追问二:最高负责人能改变权重吗?
  • 直答二:可以代表业务调整偏好,但要记录变化理由和排序影响,不能改动技术事实或违法硬约束。
  • 追问三:怎样证明不是走流程?
  • 直答三:看异议是否改变方案、条件是否进入门禁、越界是否真能暂停,而不是只看表格是否填满。
  • 详细章节:需求约束冲突
  1. 问题(综合题 21):如何避免 ADR(架构决策记录)文档失真和永不复审?
  • 口述答案:文档失真通常不是写作问题,而是决策、实施和运行没有版本关联。我会在每份 ADR(架构决策记录)中保存状态、适用范围、所有者、复审日和事件触发器,在实施记录、配置发布和适应度函数中写入对应决策版本。上线前门禁核对批准条件,运行中采集不变量、阈值、成本、差异和撤销信号;实际实现与批准方案发生偏差时,偏差必须进入实施记录,若改变风险、数据边界或退出路径就重开决策,不能只改正文让历史看起来一致。复审采用定时与事件双触发:到期、流量跨阈值、依赖或合同变化、安全规则变化、事故反例、技术债利息上升、适应度函数越界、所有者离开都进入复审队列。过期或无主记录不一定立刻回滚,但禁止扩大适用范围,并重新指派责任和补证。废弃或替代时同时核对实际流量、调用方、数据、开关、告警、权限和手册,避免文档已关闭而系统仍运行。治理指标不只看记录数量,还看过期比例、无主比例、条件逾期、实施偏差和撤销动作是否按时执行。对长期无变化的记录也要抽样攻击关键假设,因为“没有事故”可能只是低流量或低可检测。最终把 ADR(架构决策记录)当作运行控制的一部分:每次变更都可能证伪它,每次复审都要给出继续、收紧、替代或废弃结论,而不是点击“仍有效”完成任务。 定期审计还会抽取文档中承诺的撤销条件,确认对应查询、门禁和通知仍能执行;若条件写得清楚却没有任何运行入口,它只是不可触发的文字,需要补控制或降级为人工演练并指定明确频率。
  • 追问一:复审频率怎样定?
  • 直答一:按不可逆性、变化速度和失败影响分级,高风险决策更频繁,所有决策都有事件触发。
  • 追问二:没有变化是否可以自动续期?
  • 直答二:只能在关键信号、所有者和依赖均有效时简化复审,不能无人确认地永久续期。
  • 追问三:文档与代码谁是事实源?
  • 直答三:代码配置证明实际实施,决策记录证明批准理由和边界;两者不一致就是需要治理的偏差。
  • 详细章节:发布与观测
  1. 问题(综合题 22):怎样把 WMS(仓储管理系统)库存决策讲成项目话术?
  • 口述答案:我会先交代事实边界:E2(已有材料映射)表明 WMS(仓储管理系统)和库存防超卖与简历项目相关,但没有源码和运行记录时,不声称具体方案已经上线或提升百分比。背景是交班或促销热点可能让库存确认并发升高,核心不变量是最终确认量不能超过权威可用量,重复请求不能重复扣减。目标是守住正确性同时控制热点压力,非目标是不要求商品列表瞬时一致。候选包括权威库存条件扣减、缓存预扣直接成功、缓存闸门加权威扣减,以及热点排队;缓存直接成功因可能与权威事实分叉被淘汰。推荐方案中,列表和快速过滤可以陈旧,最终确认回到权威库存,用业务键幂等、条件更新、唯一流水和对账守住不变量;缓存若使用,只允许错拒绝保护,不能错误成功。评审证据要补仓数、热点分布、并发、重试、源库容量和可接受错拒绝,未知项标 E0(待核对),演练用 E3(演练证据)复算。失败路径包括预扣悬挂、返还失败、源库变慢、重复和配置共同失效;止损是冻结热点扩面、受控拒绝、保护权威流水,再按业务键对账和重建。适应度函数看负库存为零、重复确认、差异年龄、源库尾延迟和恢复时间。最后主动讲撤销:若不变量破坏、差异超窗、减压收益不成立或维护利息过高,就分批关闭预扣并回到权威路径。这样的项目话术展示的是业务不变量、证据和退出能力,不是堆缓存、锁和队列名词。 口述收尾时我会主动给出一个未解决风险,例如缓存悬挂令牌在极端故障下可能扩大错拒绝,并说明监测、责任和撤销阈值;这比把方案讲成零风险更可信,也给面试官留下可继续追问的技术边界。
  • 追问一:为什么查询可以陈旧,确认不能?
  • 直答一:查询是提示性读,确认会形成业务承诺;确认必须基于权威最新条件执行。
  • 追问二:高峰源库扛不住怎么办?
  • 直答二:先限流、热点隔离和缓存闸门,再用实测决定排队或扩容,不能放松不变量换吞吐。
  • 追问三:如何表达项目成果?
  • 直答三:有 E1(源码与可复现证据)给口径和窗口;没有就说形成了候选、验证和止损方案,不编线上提升。
  • 详细章节:WMS(仓储管理系统)项目映射
  1. 问题(综合题 23):跨境物流异步化怎样做 ADR(架构决策记录)评审?
  • 口述答案:跨境物流涉及承运商响应慢、限频、回调与轮询并存、轨迹乱序和外部状态不可控,我会先定义权威边界:内部履约单保存请求意图和状态机,承运商事实通过稳定请求键、面单号和轨迹版本关联;不能因本方超时猜测外部是否受理。目标是隔离承运商故障、提高主订单链路可恢复性,非目标不是让所有承运商统一成完全相同语义,也不承诺轨迹实时。候选包括订单线程同步调用、MQ(消息队列)异步任务、定时扫描和混合模式。关键下单动作若异步,用户只能得到“已受理”,最终面单或失败另行查询;事件待办与履约事实同边界落地,消费者按承运商和业务键幂等,超时主动查询,回调和轮询按状态机与版本收敛,乱序轨迹不允许状态倒退。定时扫描保留为漏单修复,不能用无界重试冲击承运商。评审要核对各承运商限额、超时、幂等能力、查询接口、最长未知窗口、数据驻留和人工升级,没有现场证据标 E0(待核对)。运行信号包括最老任务年龄、未知态、重复面单、轨迹倒退、死信、承运商错误和人工积压。止损时按承运商隔离,暂停低优先级轮询,保护新订单与查证能力;恢复后按版本重放并核对面单、费用和轨迹。撤销条件是重复外部副作用、未知态超窗、积压无法恢复或成本失控。这样异步化不是“加一个 MQ(消息队列)”,而是把外部不确定性变成可查询、可重放、可人工接管的状态。 若面试官继续追问结果,我会区分已证事实和设计收益:有发布与运行记录才讲真实恢复时间,没有则给积压和净处理速度的演练公式,并明确需要承运商日志、任务状态和人工工单才能复核线上效果。
  • 追问一:回调和轮询谁优先?
  • 直答一:按证据可信度和状态版本收敛,不按到达方式绝对优先;任何旧状态都不能覆盖新状态。
  • 追问二:承运商不支持幂等怎么办?
  • 直答二:本地生成稳定请求键、调用前后查证、限制重试并对未知态人工处理,不能盲目重复下单。
  • 追问三:轨迹延迟可以接受多久?
  • 直答三:由客服、履约动作和用户承诺决定,写成高分位新鲜度与超窗降级,不拍统一数字。
  • 详细章节:跨境物流异常恢复
  1. 问题(综合题 24):IoT(物联网)报警风暴治理如何记录架构决策?
  • 口述答案:我会先区分“事件不丢”和“每条都立即通知”。IoT(物联网)设备抖动可能在短时间产生大量重复告警,若全量同步通知,会压垮通知通道并淹没真正高危事件。目标是保存可追溯事件、优先送达高危告警、抑制重复噪声并可恢复,非目标不是让所有事件都以相同延迟到达用户。硬约束包括高危事件不能被静默规则误删,事件与设备、规则版本和时间关联,去重聚合可解释,背压期间有落盘或受控丢弃策略,通知失败可重试且幂等。候选包括全量同步推送、MQ(消息队列)排队、窗口去重聚合与分级通道组合。推荐组合让接入先保存最小事件事实,再按设备、规则和窗口聚合,高危走独立容量,普通重复事件合并计数,通知消费者幂等并有死信和人工接管。证据要补事件基线、风暴倍数、窗口分布、通知限额和高危比例,未知标 E0(待核对);演练算例标 E3(演练证据)。适应度函数同时看接入丢失、高危送达时间、聚合压缩率、误抑制、队列年龄和通知失败,不能只追求告警数量下降。止损时先保护高危通道、限制普通通知、保留原始计数与摘要;恢复后按风险和时间重放,避免一次性补发再次形成风暴。撤销条件是高危误抑制、事件不可追溯、积压超窗或人工确认负担反而上升。决策记录还要写规则所有者和复审日期,因为设备行为和阈值会持续漂移。 规则变更也要作为带版本决策发布,先回放历史事件验证高危召回和压缩效果,再小范围启用;若新规则只让面板更安静,却增加未确认高危事件或延长处置时间,应自动回到旧规则并复审。
  • 追问一:聚合会不会丢信息?
  • 直答一:会改变展示粒度,因此保留最小原始事实、计数、首末时间和规则版本,高危事件不进入普通抑制。
  • 追问二:压缩率越高越好吗?
  • 直答二:不是;必须同时看误抑制、高危送达和人工处置效果,不能用少告警掩盖失明。
  • 追问三:报警恢复后是否全量补发?
  • 直答三:按风险、时效和用户价值重放摘要或关键事件,过时普通通知可按批准策略归档而非轰炸。
  • 详细章节:告警风暴治理
  1. 问题(综合题 25):拿到一个新架构方案,你如何从准入到批准完整评审?
  • 口述答案:我先做准入而不是立即开会。材料必须有背景、目标、非目标、业务不变量、量级与证据等级、硬约束、至少两个候选和维持现状、关键数据流、正常与失败路径、容量、安全、成本、迁移、撤销、复审和所有者。缺失时退回补齐。评审开始由业务责任人重述成功与不能接受的失败,防止技术团队替业务定义目标;再由安全、数据和运行责任人确认不可抵消约束,先淘汰违规候选。对剩余项公开权重和证据,做敏感性分析,独立质疑者必须提出推荐项在流量翻倍、依赖超时、配置错误、数据乱序、关键人员离开和回滚失败时的反例。随后审查可逆性:哪些外部承诺和数据变化不可撤销,是否需要双运行、差异校验和退出预算。风险部分区分预防、检测、隔离、恢复和剩余暴露,由有权限者签署期限。把关键不变量、质量阈值、技术债触发和撤销条件转成架构适应度函数,明确越界是告警、阻断还是降级。结论只能是批准、条件批准、拒绝或退回;条件批准有范围、补证、负责人、截止日和逾期失效。发布后实施记录关联决策版本,小范围验证业务事实、性能、成本和恢复,再决定扩面。复审同时由日期和事件触发。整个过程的重点不是寻找没有缺点的方案,而是确认在当前约束下它的失败可见、影响可控、责任明确、证据可更新且退出可执行。 最后我会让记录人把评审结论转换成可核验清单,逐项映射到负责人、发布步骤、运行信号和证据存放位置;若一项结论无法映射到实施或验证动作,说明它仍是口号,应在批准前补成可执行承诺。
  • 追问一:评审最容易漏哪个部分?
  • 直答一:常漏退出和运行恢复,只评正常架构图,导致错误后既无旧路径容量也无数据校验。
  • 追问二:没有两个可行候选怎么办?
  • 直答二:至少比较维持现状、缩小范围和延期补证;若只有一个候选,明确这是约束结果而非偏好胜出。
  • 追问三:评审通过是否等于上线完成?
  • 直答三:不等于;通过只授权特定范围,实施、运行验证和批准条件完成后才能继续扩面。
  • 详细章节:架构质量场景
  1. 问题(综合题 26):请完整讲述 ADR(架构决策记录)、评审、可逆性和技术债治理方法。
  • 口述答案:我的方法从业务问题和不可突破的不变量开始,而不是从技术产品开始。先明确背景、目标、非目标、量级、硬约束与证据等级,把未知放进假设账本;E1(源码与可复现证据)只支持可追溯事实,E2(已有材料映射)只支持项目候选映射,E3(演练证据)写明公式假设,E0(待核对)说明缺口和核对方法。生成至少两个候选与维持现状,先淘汰违反资金、安全、合规、恢复和团队能力硬约束的项,再对可交换偏好加权,并通过敏感性和反例暴露主观判断。随后判断可逆性:数据、外部接口、合同、组织和验证决定它是可小步试验还是单向门;等待只有能获得区分性证据且未过最后负责时刻才有期权价值。ADR(架构决策记录)固定保存证据、权衡、决策、收益、代价、剩余风险、撤销条件、复审日和所有者。评审采用会前准入、独立质疑、异议留痕和有期限的条件批准,风险由真正有权限的人接受。上线后把不变量、恢复、成本和撤销阈值转成架构适应度函数,实施版本与决策版本关联,事件和日期共同触发复审。技术债按本金、周期利息、风险和机会损失计量,设置偿还阈值与禁止扩散边界。决策错误时先冻结扩面和保护权威事实,再回滚、双运行、对账补偿,最后以业务事实、调用迁移、开关权限和责任关闭证明退出。缓存预扣、MQ(消息队列)异步和搜索读模型都必须守住各自权威边界;支付未知态更说明不能用表面成功率猜测事实。最终产物不是永远正确的文档,而是一套能被证伪、能及时认错、能安全退出并持续学习的责任系统。
  • 追问一:这套方法最核心的一句话是什么?
  • 直答一:在明确约束和证据下作有限承诺,并提前定义何时认错、谁负责、怎样退出。
  • 追问二:如何避免流程过重?
  • 直答二:按可逆性和失败影响分级,低风险决策用轻量模板,高风险单向门才投入完整评审与演练。
  • 追问三:怎样体现架构师而非高级开发视角?
  • 直答三:不仅解释实现,还能连接业务损失、跨角色责任、证据边界、长期债务、运行恢复和演进退出。
  • 详细章节:架构决策路线

15. 正式图形与复习清单

ADR(架构决策记录)评审、可逆性与退出时序图

这张 PlantUML(统一建模语言)图不依赖 Graphviz(图形可视化软件),以原生时序图串联决策所有者、评审组、实施团队、运行控制与风险接受人。正常路径从候选证据进入条件批准、小范围实施和持续验证;失败路径覆盖准入拒绝、适应度函数越界、冻结扩面、双运行、回切和补偿;最终业务结论是“批准”只是可撤销承诺的开始。

复习清单

  • 能不看原文说出 ADR(架构决策记录)的 13 个字段及相邻文档边界。
  • 能从数据、接口、合同、组织与验证判断可逆门或单向门。
  • 能计算等待期权价值,并指出最后负责时刻与逾期默认动作。
  • 能先用硬约束淘汰,再解释加权矩阵、敏感性和反例。
  • 能按 E1(源码与可复现证据)、E2(已有材料映射)、E3(演练证据)、E0(待核对)限制陈述。
  • 能设计评审准入、角色、议程、异议、条件批准和风险接受。
  • 能把撤销条件转成架构适应度函数并绑定失败动作。
  • 能解释决策版本、替代、废弃、迁移与运行退役的区别。
  • 能复算技术债本金、利息、风险和偿还触发。
  • 能讲清错误决策的止损、回滚、双运行、补偿与退出完成。
  • 能完整复述缓存预扣、MQ(消息队列)异步化、搜索读模型三份 ADR(架构决策记录)。
  • 能用支付未知态反驳“为了成功率猜结果”,并避免权威拍板、纪要冒充、文档失真和永不复审。

16. 数量与事实边界自检

检查项本册目标自检口径
知识型 ###13每节均有知识标记与 3 道六字段题
六字段题39问题、考点、回答思路、详细答案、进阶追问、进阶回答
综合题26每题一个口述答案、3 组追问直答、真实相对链接
Mermaid(图表语法)13其中 9 张 sequenceDiagram(时序图)
Markdown(标记语言)表不少于 14机制表、演练表与自检表
数据演绎13全部为 E3(演练证据)且公式可复算
PlantUML(统一建模语言)1 源 + 1 PNG(便携式网络图形)原生时序图,不依赖 Graphviz(图形可视化软件)

事实边界:本册的三个完整 ADR(架构决策记录)均为 E2(已有材料映射)候选与 E3(演练证据)计算,不声明真实生产采用或效果;正式 PlantUML(统一建模语言)源、真实渲染 PNG(便携式网络图形)及真实渲染检查结果可作为 E1(源码与可复现证据);仍需从项目源码、配置、发布、运行指标与事故记录补齐的量级均保持 E0(待核对)。