工程化要点
把篇章 / 核心原理 / 场景导读里的「工程化要点」去重提炼为平台可执行门禁:发布回滚、可观测、容量、数据、缓存、调用治理、AI 评测、安全供应链等十一组共 88 卡。与方法论「怎么想」互补——本篇回答「不上线会出事的红线是什么」。
门禁是器;怎么想见 核心方法论。以器代术是四种错位之一。
阅读口径:本篇是平台门禁速查卡,每张只写一条可阻断的红线及其验收方式。「写进变更模板与脚手架」「与同组门禁互锁」「评审缺证据即阻断」「抽检最近变更」「关联事故卡做反例」这些共性做法统一在此说明,不在卡内逐条复读;门禁的价值在于能否被流水线自动拦下,而不是条款是否写全。与 K 篇配对读:G 给准入条件,K 给绕过之后的止血动作。
每张 G 卡都按「可检查、可回滚、可观测」三问自检:没有证据链不上手段;没有回滚路径不上变更;没有卡点指标不扩量。门禁不是口号,而是变更单里可勾选的字段与上线评审里可追问的证据。
- 变更面:代码 / 配置 / 数据 / 模型与提示词一律当发布;灰度比例表、卡点指标、一键回滚三维可退;流量染色与回滚后数据修复写进变更单。
- 证据面:Traces/Metrics/Logs 三支柱默认交付;排障标准动作与季度演练;告警可行动并绑定 Runbook;变更单号进 Trace baggage。
- 容量面:应用池化与编排配额同一模型;拒绝路径用户可感;多租户配额与依赖拓扑联动;大促清单未勾完不上峰值。
- 数据与一致面:DDL/修复可回滚、SQL 审核闭环、影子表观察期;缓存失败可降级、一致窗口进契约、热/大 key 专项。
- 调用与智能面:同步超时可加总、熔断半开观察窗、Outbox/CDC 对账;AI 制品版本化、黄金集、工具副作用与成本配额同级卡点。
- 安全面:威胁建模先行、密钥双写轮换、SBOM/CVE 时限与豁免到期阻断;生产访问审计可抽检。
- 思维口径见核心方法论 M04 / M06 / M10 / M11;本篇写成勾选式门禁与变更单字段。
- 发布回滚对齐 M06.06 / M11.01;证据链对齐 M14.02;超时/对账/缓存/AI 分别对齐 M11.02 / M11.03 / M07.02 / L03.01。
- 深度问答与场景篇的工程化导读在此收口;安全细节对照服务端安全 Checkpoint;事故翻车叙事见生产踩坑(K)。
- 导图页补强十一组互锁与每卡红线/反模式/清单;三层正文与验收话术以本页为准。
- 按下周变更类型选组:发版 G01、排障 G02、大促 G03、改表 G04、缓存 G05、同步/双写 G06、AI G07、安全 G08。
- 每卡三层:核心洞察(红线与反模式)→ 原理映射(为何 / 与 M 卡同构)→ 工程表达(变更单字段、验收、话术)。
- 评审追问:证据从哪来?回滚入口与 RTO?卡点指标是什么?失败时用户可感是什么?组内卡通常互锁(如 G01 灰度依赖 G02 指标)。
阅读建议:先扫十一组标题建立索引,再按变更类型深挖三张卡;组内三卡通常互锁(例如 G01 灰度依赖 G02 指标,G05 降级依赖 G03 回源配额)。写变更单时把「工程表达」层的清单直接贴进模板。导图页用于快速回忆红线与反模式,细节以本页三层正文为准。
G01 发布回滚与变更门禁
本组管变更怎么上、怎么退:发布三要素(灰度·卡点·回滚)、配置/框架升级当发布、变更窗口与错误预算冻结、金丝雀自动回滚阈值、变更单强制字段、流量染色一致性,以及回滚后数据修复门禁。没有演练过的回滚路径等于没有回滚;与 M06.06 / M11.01 互为思维与门禁。
高风险变更默认按「分批放量 + 指标卡点 + 一键回滚」执行;没有演练过的回滚路径等于没有回滚。发布不是把包推上去,而是把爆炸半径可控地扩大,并在任一卡点失败时退回已知好版本。
三要素缺一,变更单即不合格:灰度比例表(含观察窗口)、卡点指标与阈值(业务成功率优先)、回滚命令/开关(含配置与流量维)。「进程起来了」不是卡点。
反模式:全量一把梭;只回滚镜像留下有毒配置;卡点只看 CPU/存活探针;错误预算已耗尽仍继续发版;回滚从未在预发演练。
灰度档位之间要有明确停留与否决权:观察窗口未结束不得人工「觉得没事就扩」;否决权默认交给卡点指标与错误预算,而不是现场最高职级。
回滚演练必须覆盖「配置+镜像+流量」三联:只演练 kubectl rollout undo 而配置中心仍是有毒版本,演练合格也是假合格。
对应 SRE 错误预算与金丝雀:流量或实例分批(如 1%→5%→25%→100%),卡点看错误率、延迟 P99、关键业务成功率与依赖饱和,而不是容器 Ready。
回滚是三维能力——代码/镜像、配置、流量路由——任一维不可退,整体不可退。与方法论 M06.06 回滚优先、M11.01 变更可回滚同构:回滚是默认能力,不是失败丢脸。
爆炸半径由批大小 × 暴露时长决定;观察窗口要覆盖依赖传播与缓存刷新,过短会「绿着绿着炸」。失败时优先退回,再离线分析,避免在灰度上现场改代码。
金丝雀的统计学意义:批太小看不出差异,批太大爆炸半径失控。比例表要同时写清「最小可观测流量」与「最大可接受损失」,并与业务峰值日历对齐。
卡点指标分层:L1 用户可感(成功率/RT)、L2 依赖饱和(池拒绝/下游错误)、L3 资源(CPU/内存)——L3 只能辅助,不能单独放行。
变更单模板固定附:灰度比例与每档停留时间、卡点指标/阈值/看板链接、回滚入口与 RTO、最近一次回滚演练记录。卡点未过不得扩量;错误预算耗尽冻结非紧急发布。
- 表达顺序:先退路与观察窗口,再功能清单。
- 追问「出了问题怎么办」:当场指出回滚入口、影响面、预计恢复时间。
- 验收:预发至少完成一次真实回滚演练(含配置回退)。
关联:配置变更见 G01.02;依赖升级见 G01.03;证据链见 G02;治理参数回滚见 G06.02。
变更单「回滚」栏必填:入口链接、执行人、预计 RTO、演练日期、已知限制(例如不可逆 DDL 则写补偿而非回滚)。评审口头说得出但写不出的,视为未准备。
发布值班话术:「当前档位 / 已观察时长 / 卡点红绿 / 下一步扩或退」。禁止用功能演示代替卡点汇报。
热更新与配置推送必须按发布管控:审批、灰度、快速关停与本地快照兜底。配置中心一次全量推送,杀伤力往往大于发版——「只改个开关」若影响面是全集群,就必须与发版同级门禁。
有毒配置(错误限流、错误开关、错误路由)可以在秒级制造全域事故;因此关停路径的 SLA 应严于发版回滚。
反模式:生产控制台随手改;无快照全量推;客户端无本地兜底导致配置中心抖动拖垮核心链路;动态开关不进变更单。
配置变更的爆炸半径经常大于代码:一次错误的限流阈值或开关默认值可以在秒级打满或打空全集群,而发版至少还有构建与镜像传播延迟。
本地快照不是可选项:配置中心故障或网络分区时,客户端必须能用上次成功快照继续服务,并暴露「使用降级快照」信号。
配置中心是关键依赖:客户端要有本地缓存/快照、推送失败降级、订阅隔离;长连接抖动不得阻塞业务线程。
与 M12.06「代理边界与配置契约」一致:配置项的语义、默认值、生效范围、类型校验写进契约,禁止口头约定与隐式魔法值。
灰度配置与灰度流量可独立:先小范围实例吃新配置,再扩面;回滚优先回到上一版本快照,而不是「再推一版修好」。
配置项分级:P0(鉴权/限流/路由/数据源)必须灰度+双人;P1(非关键开关)可快速通道但仍进变更单;禁止无级别的「都是开关」。
推送模型要区分:长轮询/推送失败时的退避、订阅风暴隔离、单 key 与命名空间级回滚。回滚粒度越粗,误伤越大,越要灰度。
评审配置项时同步评审:生效范围、灰度策略、回滚/关停开关、是否需要双写观察期、失败时客户端行为。
- 禁止生产控制台无单变更;动态开关也要变更单号。
- 上线核对:推送成功率、订阅滞后、关停演练耗时。
- 高危项(限流、鉴权、路由)默认双人复核。
关联:发布三要素 G01.01;治理参数 G06.02;密钥轮换 G08.02(密钥也是配置的一类)。
上线后 15 分钟核对:推送成功率、订阅滞后分位、客户端快照版本分布、关停开关可用性探测。
控制台权限:生产写权限默认关闭,临时开启有工单与自动回收;审计日志可还原「谁在何时改了何值」。
大版本升级(Boot / Spring / JDK / 中间件客户端)用契约测试 + 金丝雀;弃用 API、默认行为变化、序列化/校验差异必须进回归清单。「编译过了」不等于行为兼容。
默认值、自动配置顺序、校验与异常映射常在运行时才爆;Native Image / AOT 还要覆盖反射与资源白名单。
反模式:业务私锁雪花版依赖;CVE 快车道跳过最小回归;只升库不看 Release Note 的 Breaking Changes;无回滚镜像的「一次性升级」。
升级的隐藏成本在「默认行为」:Jackson 命名策略、Bean 校验顺序、HTTP 客户端连接池默认、JDK 字符串与 GC 行为,都可能在流量下才显现。
私锁版本的真正风险是安全补丁跟不上平台 BOM;时间盒退出写进 ADR,到期未退出视为技术债超期。
基线 BOM 由平台抬升,业务少私锁版本;Breaking change 用兼容层或双跑,时间盒退出。安全补丁与功能升级分流:CVE 可走快车道,但仍需最小回归与可回滚镜像。
契约测试覆盖 HTTP/消息/DB 行为;关键路径压测验证资源与线程模型变化(虚拟线程、连接池默认值)。
与 M05 Java 生态思维、G08.03 供应链可追溯互补:升级既是行为风险也是供应链风险。
契约测试要覆盖:错误码与异常映射、序列化兼容(含未知字段)、消息 schema、DB 访问层行为。只测 happy path 的升级门禁是穿孔门禁。
Native/AOT:反射、资源、动态代理白名单进回归;缺失时的失败应在预发暴露,而不是生产 ClassNotFound。
升级门禁清单:契约测试绿、关键路径压测、金丝雀错误预算、回滚镜像就绪、弃用 API 清单、默认行为 diff。
- 评审话术:「这次升级打破了哪些默认假设?」答不上来就补测试。
- 私锁版本须说明退出计划与时间盒。
- 发布后观察窗口覆盖序列化/校验相关错误码。
关联:G01.01 金丝雀;G08.03 SBOM/CVE;篇章 Spring/Boot 升级场景。
升级变更单附:Release Note Breaking 摘要、弃用 API 清单、契约测试报告、金丝雀计划、回滚镜像 digest。
快车道 CVE:最小回归集(启动+核心路径+安全相关用例)仍不可少;快车道不是无车道。
错误预算耗尽或变更窗口外,非紧急变更默认冻结;紧急变更走加急通道但仍要灰度与回滚演练记录。
SRE 错误预算把可靠性变成可消耗资源;耗尽即信号:优先稳定性而非功能。变更日历与业务高峰对齐。
门禁:错误预算红线、变更窗口表、加急审批人、冻结解除条件。评审问「现在能不能发」先看预算板。
金丝雀阶段必须绑定可自动回滚的客观信号(错误率、延迟、业务成功数);人工「感觉还行」不能替代阈值。
灰度是实验:实验没有停止条件就不是实验。信号要业务可感,避免只看 CPU。与错误预算、变更窗口互锁。
门禁:金丝雀比例表、自动回滚阈值、人工覆盖审批人、回滚演练记录。评审问「触发什么立刻回」。
自动回滚的验收要注入一次真实的业务成功率下跌并看是否触发:若只验「演练做过」而不验「阈值到时真的回」,演练记录与回滚能力是两回事。人工覆盖必须留痕,且与自动回滚共用同一套信号口径。
变更单缺回滚点、观察指标、负责人不得合入发布流水线。
变更是契约:字段不全等于不可审计。与灰度/回滚互锁。
门禁:模板校验、缺字段阻断、抽检变更单完整率。
- 抽检变更单完整率时要按「能否据此完成一次回滚」判合格,而不是只查字段非空;缺回滚点的单子即使填了负责人也不可执行。平台侧应让缺字段直接阻断流水线,事后抽检只用来发现绕过。
灰度流量必须端到端染色(网关→服务→MQ→任务),否则观察窗失真。
染色丢失=对照组污染。异步边界是断裂高发区。
门禁:染色传递验收用例;MQ/线程池包装器清单。
- 染色验收要在 MQ 消费端与线程池任务里各放一条断言,验证标签跨异步边界仍在;只在入口与出口比对会被中间透传掩盖。对照组一旦被污染,金丝雀与全量的指标差异就失去统计意义。
代码回滚不等于数据回滚;有副作用变更必须附数据修复/补偿方案。
状态机与外部账单不会随镜像回退。
门禁:修复脚本评审、演练记录、冻结写路径开关。
- 有副作用变更的验收必须包含一次「代码回滚 + 数据补偿」联合演练:状态机与外部账单不会随镜像回退,只验镜像能退等于没验。补偿脚本还要可回放、可中断,否则修复本身成为新的资损入口。
G02 可观测与排障证据链
本组管出事时证据从哪来、第一步做什么:三支柱默认交付、排障标准动作、告警可行动、采样与成本门禁、变更单号进 Trace baggage、SLO/错误预算看板、日志脱敏采样,以及季度排障演练制度。没有证据链的变更等于赌博;对齐 M06.07 / M14.02 / M11。
日志规范、指标、追踪随脚手架默认接入,禁止上线后补丁式接入。没有证据链的系统,排障只能靠猜,变更只能靠赌——可观测性是发布门禁的前置条件,不是增值选项。
三支柱缺一不可:只有日志没有指标会淹没在噪声里;只有指标没有追踪难定位跨服务;只有追踪没有业务日志缺上下文。
反模式:上线后再「补个 Trace」;TraceId 在 MQ/线程池/定时任务断裂;指标无业务语义只堆 JVM;采样率拍脑袋导致关键故障无跨度。
脚手架默认接入的标准要写成平台契约:日志字段字典、指标命名规范、Trace 采样默认值。业务仓库「各自发挥」会导致排障时无法跨服务拼接。
异步边界是 Trace 断裂高发区:线程池包装、MQ 生产者/消费者、定时任务、Reactive 调度都要有明确的上下文传递方案。
Logs / Metrics / Traces 互补:指标发现异常,追踪定位路径,日志给上下文。统一 TraceId 传播(HTTP、RPC、MQ、线程池、定时任务、异步回调)。
黄金指标按服务类型选型(RED/USE);采样策略在成本与排障完整度之间显式权衡并写入 ADR。与 M06.07 可观测三支柱、M14.02 证据优于经验同构。
结构化日志字段约定(traceId、tenant、变更单号、关键业务键)比「多打点」更重要;无规范的日志等于不可检索的噪声。
成本权衡显式化:全量追踪在高 QPS 下不可承受时,用头部采样+错误必采+慢请求必采;策略写入 ADR 并按季度复盘漏采事故。
业务指标优先于技术指标放行:有「下单成功数」才谈「JVM 堆」;技术指标用于定位,业务指标用于卡点。
新服务 checklist:结构化日志字段、核心业务指标、入口/出口 span、仪表盘与告警模板、采样策略说明。
- 上线评审问「证据从哪来」,而不是「出了事再加」。
- 验收:抽一条真实请求,从入口 Trace 钻到依赖与日志。
- 变更单号写入日志与 Trace baggage,便于回放。
关联:G02.02 排障动作;G02.03 告警可行动;发布卡点指标依赖本卡。
新服务 DoD:仪表盘从模板克隆、告警从模板绑定、示例 Trace 链接贴进 README。缺少任一项不得进生产命名空间。
抽检制度:每月随机抽服务验证「入口到依赖」钻取,失败记平台缺陷或业务债。
故障现场先止血再取证:保留现场(日志段、指标窗口、堆栈/转储、变更单),再离线分析。现场长时间 debug 拉长 MTTR,是最大的反模式。
止血优先级通常写在 Runbook:回滚 > 降级 > 限流 > 扩容 > 重启 > 切流——按业务选,但必须事先写清,禁止临时发明顺序。
反模式:一上来重启丢掉现场;多人并行改配置无指挥;把「感觉像是缓存」当归因;交接班只交感觉不交证据包。
指挥链比工具链更重要:谁有权执行回滚/降级、谁负责对外同步、谁禁止并行变更,必须在故障前写清。工具再全,多人无指挥仍会互踩。
现场保留清单按故障类型预制:OOM 要堆转储策略、死锁要线程栈、流量异常要入口与依赖对比图——不要故障时才想「还要什么证据」。
标准动作链:分区归因(变更?流量?依赖?资源?)→ 采证 → 假设 → 验证 → 固化 Runbook。与线上问题主题 M14.02、M11 证据优于经验对齐。
归因必须能指向证据时间线:变更窗口、流量拐点、依赖错误率、资源饱和曲线。假设要可证伪,验证失败就换假设,禁止死磕第一直觉。
止血与根因修复解耦:先恢复用户可感,再开问题单做根因与改进;两者混为一谈会反复「修一半上线一半」。
分区归因四象限强制过一遍:变更、流量、依赖、资源。跳过任一象限的「秒级结论」事后复盘往往不成立。
假设管理:同时最多保留 2~3 个高优先级假设,每个假设写「如何证伪」;证伪后归档,防止讨论原地打转。
排障话术固定四句:现象与范围、已采证据、当前假设、下一步与回滚条件。交接班移交证据包(看板截图、Trace 链接、变更单、已执行动作)。
- 复盘输出:时间线、根因、改进项负责人与截止日期。
- Runbook 每次事故后回写,禁止只存在聊天记录。
- 重大故障禁止未经指挥的并行变更。
关联:G02.01 证据来源;G02.03 告警驱动首轮;G01 回滚是常见止血手段。
交接班模板:时间线、已执行动作、未验证假设、证据包链接、当前风险。聊天记录不算交接。
复盘区分「触发因素」与「根因」:只改触发不改根因,同类故障会复发;改进项进 backlog 有截止日期与验证方式。
告警必须可行动:有明确责任人、有 Runbook、有抑制与聚合,禁止「只响铃不指向动作」。噪声告警会训练团队忽略真正的火情。
一条告警若从未被处理,就应从系统中删除或降级;告警是稀缺注意力的配额,不是指标的镜子。
反模式:原因猜测型告警(「可能是 GC」)刷屏;无抑制导致同一根因打爆手机;夜间与白天同一阈值;错误预算燃尽只多发邮件不冻结发布。
告警噪声是文化腐蚀剂:团队学会「先静音」之后,真正的火情也会被静音。治理噪声与增加告警同样是可靠性工作。
可行动 = 责任人 + 首要动作 + 升级路径 + Runbook;缺一则降级为看板或工单,不进寻呼。
告警设计:症状(用户可感)优先于原因猜测;阈值与窗口防抖;夜间与工作时间分级。错误预算燃尽应触发发布冻结与升级,而非更多噪声。
关联告警聚合,同一根因合并为一条工单;分页告警与依赖告警要有因果标签,避免「全红」时无人知道先动哪条。
与 M06.07 / M11 对齐:可观测交付的终点是「可行动」,不是「有图」。
症状优先:用户下单失败率优于「某主机 CPU」。原因类告警可作辅助面板,避免寻呼风暴。
抑制与聚合:同一根因窗口内合并;维护窗口抑制;依赖故障时下游告警降级为信息级,避免全员空转。
每条告警附:影响面、首要动作、升级路径、相关看板、Runbook 链接。季度清理无主告警与从未处理的告警。
- 验收:新人按 Runbook 能独立完成首轮处置。
- 新增告警必须同步新增或更新 Runbook。
- 发布冻结条件写入错误预算策略,值班可见。
关联:G02.01 指标来源;G02.02 首轮动作;G01 错误预算冻结发布。
告警目录季度评审:处理次数、平均确认时长、误报率;零处理告警删除或降级。
新人验收:抽三条告警,按 Runbook 完成首轮处置演练并计时,超时则改 Runbook 而不是怪新人。
追踪采样策略必须书面化:头部采样 + 错误必采 + 慢请求必采;禁止拍脑袋全开或全关。
全量追踪在高 QPS 下不可承受;漏采会导致事故不可复盘。成本与排障完整度的权衡写入 ADR。
门禁:采样 ADR 链接、错误必采开关、成本看板、季度漏采复盘。上线核对示例 Trace 可钻取。
每次生产变更必须把变更单号写入日志与 Trace baggage;否则排障无法把「现象」绑回「哪次变更」。
证据链要能回答:这个错误对应哪次发布/配置推送。无关联等于事后猜。
门禁:脚手架默认注入变更单号;抽检一条请求能从 Trace 钻到变更单。缺字段阻断发布。
抽一条生产请求验证能否从 Trace 里的变更单号反查发布单,反向也要能从发布单拉出该次变更的全部请求;单向注入在跨服务调用后极易丢字段。缺字段应阻断发布,而不是靠日志检索补。
每个关键服务必须有对外 SLO 与错误预算看板,发布前先看预算。
没有预算的稳定性讨论是空谈。
门禁:看板链接进变更单;预算红线自动冻结非紧急变更。
- 错误预算门禁的可证伪点是「预算耗尽时流水线是否真的冻结」;看板存在不等于有否决权。预算窗口也要写清按自然月还是滚动窗口,否则大促前累积的消耗会被一次重置抹平。
结构化日志默认脱敏;全量 Debug 采样禁止进生产常开。
日志既是证据也是泄露面与成本面。
门禁:字段字典、脱敏规则单测、采样策略 ADR。
- 脱敏规则要有字段级单测与抽样回放:新增字段能否被自动拦截,比规则文档是否齐全更能说明门禁有效性。全量 Debug 采样须带自动失效时长,否则临时开关会长期常驻并绕过脱敏路径。
季度至少一次真实排障演练(含取证与复盘),否则 Runbook 是假的。
演练发现断链比故障时发现便宜。
门禁:演练记录、缺口进平台债、未演练服务限制发布级别。
- 演练验收看「是否发现过断链并进平台债」,而不是看演练是否顺利完成;全程无缺口的演练多半是照 Runbook 走形式。未演练服务应限制发布级别,让制度对发布行为产生实际约束。
G03 容量与资源预算
本组管系统真实能扛多少:应用与编排同一容量模型、池化与拒绝可观测、大促前演练清单、拒绝路径用户可感、多租户配额与嘈杂邻居、依赖拓扑容量联动、线程池与连接池联合预算、弹性伸缩冷却防抖。清单未勾完不上峰值;对齐 M08.10 / M12.04。
应用线程池/连接池/队列深度与 K8s CPU/内存/HPA 必须同一容量模型,禁止「应用按 QPS 估、编排按感觉设」。两边不一致时,先打满的一侧决定真实容量。
常见失效:池子先拒而 CPU 还空;或 limit 先 OOMKill 而业务还在加并发。容量文档若不能同时解释应用与编排,就是两套幻觉。
反模式:HPA 只盯 CPU;JVM 堆 + 直接内存 + 线程栈超过 limit;压测结论不映射到编排参数变更单。
容量模型要能回答三个数:目标流量、瓶颈资源、拒绝时用户可感。答不出「拒绝时用户看到什么」,说明模型只覆盖了「理想路径」。
JVM 与容器的内存账要算全:堆、元空间、直接内存、线程栈、侧车、页缓存假设;漏算一项就会在高峰以 OOMKilled 形式出现。
容量 = 最小瓶颈资源。利特尔定律与排队论约束在途请求;容器 limit 与 JVM 堆、直接内存、线程栈、侧车要三联(多联)对齐。
HPA 指标要与业务饱和信号一致(队列深度、拒绝率、RT),CPU 不等于业务容量。与 M08.10 容量定律、M12.04 分区归因与容量一体同构。
扩容方向要写清:水平加副本 vs 调池化;加副本解决不了单分片热点与下游单点。
水平扩展有效的前提是无单分片热点、无全局锁、下游也按同模型扩。只扩应用不扩 DB/缓存,是把瓶颈挪位。
HPA 与池化参数联合设计:副本增加会放大总连接数,可能先打穿下游;扩容单含下游容量确认。
容量文档写清:目标 QPS/RT、瓶颈资源、池化参数、HPA 阈值、拒绝行为、OOM/拒绝时的用户可感。
- 评审现场核对:应用最大并发 × 单请求资源 ≈ 编排可提供资源。
- 压测结论必须能映射到具体编排/池化变更单。
- 大促前用 G03.03 清单复核同一模型。
关联:G03.02 拒绝可观测;G04.03 扩展前先单机;G06.01 超时预算受容量约束。
容量文档与编排清单同 PR 评审;压测报告必须映射到具体 YAML/池参数 diff。
评审口算:maxConcurrency × costPerReq 是否落在 request/limit 与下游配额内;口算不过关不进入压测预约。
线程池、连接池、信号量的拒绝策略必须可观测:拒绝次数、队列等待、活跃数进指标与告警。静默拒绝等于悄悄丢业务——拒绝是保护机制,必须让调用方与值班同时看见。
队列从「缓冲」变成「延迟放大器」时,要下调队列、上调拒绝可见性;无限队列是事故预告。
反模式:拒绝只打本地日志;Caller 无感知继续重试打穿;虚拟线程不限制下游并发把 DB 打爆。
可见的拒绝是友好的失败;不可见的排队是慢性中毒。队列长度与等待时间进 SLI,而不仅是「线程池还有余量」的错觉。
虚拟线程场景下,「线程用之不竭」的错觉最危险:必须用信号量把并发钉在下游可承受的数字上。
Caller 需感知背压(快速失败/降级),Callee 需暴露饱和信号。与 M08.07 背压是契约、M08.06 背压主题同构。
虚拟线程降低线程成本,不降低下游容量;仍须用信号量/池化限制对 DB、RPC、外部 API 的并发。
拒绝策略(Abort/CallerRuns/Discard)各有代价:Discard 最危险(静默丢),CallerRuns 可能反压到入口线程,须显式选择并监控。
背压传播方向:Callee 饱和 → 暴露指标/快速失败 → Caller 降级或限流 → 入口保护。任一环断裂就会在边界堆积。
拒绝策略选择写入 ADR:为何不用 Discard;CallerRuns 是否会反压到 Netty/Tomcat 线程;Abort 后的用户文案与补偿。
池化评审三项:核心/最大/队列、拒绝策略、指标名与告警。压测必打到拒绝路径,确认降级文案与补偿。
- 看板固定:拒绝 QPS、排队 P99、活跃线程/连接、下游错误率。
- 变更池参数按发布门禁,可回滚。
- 拒绝率进入错误预算与大促卡点。
关联:G03.01 同一容量模型;G06.01 超时与重试;G02.03 饱和告警。
压测报告专章「拒绝路径」:触发方式、指标曲线、用户可感、是否可恢复。缺失该章视为压测未完成。
生产看板把拒绝率与业务成功率并排;拒绝率上升而成功率暂稳,往往是下一波雪崩的前兆。
大促前必须做:全链路压测、限流阈值校验、降级开关演练、回滚演练、依赖容量确认。清单未勾完不上流量峰值——演练目标是暴露协同问题,而不是证明「没事」。
口头「应该扛得住」不算数;依赖方容量函证要书面化,含峰值 QPS、拒绝策略与联系人。
反模式:只压入口不压依赖;演练不走真实降级开关;大促窗口仍开放非预案发布;压测流量形状与真实热点不符。
演练要像打仗:真实开关、真实回滚、真实依赖函证、真实值班链路。桌面推演只能发现文档问题,发现不了「开关没接上」。
峰值流量形状必须含热点与毛刺;只用均匀压测通过的系统,会在秒杀/开售瞬间倒塌。
演练重点:缓存击穿、热点账户、消息堆积、慢 SQL、线程池打满、依赖超时雪崩。错误预算与大促窗口绑定,发布冻结有明文。
与 G01 发布门禁、G03.01 容量模型、G05 热点治理共用同一份参数来源:压测发现的参数变更仍走发布与回滚,禁止「演练现场改死参数」。
混沌与故障注入(可选)验证:单依赖超时、缓存全挂、从库延迟——失败模式应符合预期降级,而非雪崩。
发布冻结窗口与错误预算绑定:冻结不是形式,而是变更审批流真的关掉非预案通道。
依赖函证内容:峰值 QPS、超时与拒绝策略、降级约定、值班联系人、升级路径。邮件「OK」无数据视为未函证。
清单模板按「流量入口 / 核心交易 / 依赖 / 数据 / 回滚」五栏;演练结论进复盘,参数变更走发布门禁。
- 大促当天只允许预案内动作,禁止临时发明。
- 值班表、升级路径、公共决策频道提前就绪。
- 峰值后做容量复盘:预测 vs 实际、拒绝与降级触发次数。
关联:G01 回滚演练;G05.03 热点清单;G06.02 治理参数;G02 证据与告警。
清单销项会议:每项有证据链接(压测报告、演练录像/日志、函证书)。无证据不算勾完。
大促当日决策树提前打印在值班频道置顶:触发条件 → 允许动作 → 禁止动作 → 升级条件。
池满/限流拒绝必须返回可识别错误码与用户可感文案,并有指标;静默超时不算拒绝策略。
拒绝是保护手段;不可观测的拒绝等于故障。客户端应能区分可重试与不可重试。
门禁:拒绝码表、用户文案、拒绝 QPS 指标、告警绑定 Runbook。压测必测拒绝路径。
共享集群必须有租户级配额(QPS/连接/存储);无隔离的「平均可用」会在大客户峰值时拖垮全体。
嘈杂邻居是容量问题的常态形态;配额是契约,不是优化项。
门禁:租户配额表、超限拒绝可观测、大促前核对 TopN 租户预算。
配额验收要注入一个大客户超限流量,看其他租户的延迟与拒绝率是否保持平稳;只测「超限被拒绝」会漏掉拒绝前的资源争抢。租户维度的用量必须可观测,否则嘈杂邻居发生时无法归因到具体来源。
容量评审必须含关键依赖拓扑与各自瓶颈,不只看本服务 CPU。
假可用常出在下游单点。
门禁:依赖图、下游配额、故障域标注。
- 容量评审材料必须给出每个关键依赖的瓶颈值与扩容耗时:只报本服务 CPU 的评审无法发现「假可用」。判据是抽一条下游单点做故障注入,验证容量结论是否随之失效。
应用线程/虚拟线程并发与 DB/Redis/HTTP 连接池必须联合设上限。
只扩线程不扩连接=打穿下游。
门禁:联合预算表、拒绝可观测、压测验收。
- 联合预算表要把线程并发、连接池、下游最大连接数三者一起列,单边扩容的评审直接退回。压测时若先出现获取连接超时而非 CPU 饱和,说明预算表没被真正执行,只是文档里的一项。
HPA/自适应扩缩必须设冷却与防抖,避免抖动放大事故。
抖动是容量控制系统的常见失效模式。
门禁:冷却参数、扩缩事件审计、大促前演练。
- 冷却与防抖的验收要看指标短时抖动下实例数是否收敛,而不是看扩容能否成功;抖动放大只在连续扩缩事件里显现。冷却窗口应大于实例冷启动耗时,否则新实例未就绪又触发下一轮。
法侧原则见 M06.02 迟滞阈值与稳定窗口。
G04 数据变更与 SQL 治理
本组管数据面怎么改才不炸:DDL/数据修复可回滚、SQL 审核与慢 SQL 闭环、扩展前先单机、影子表与双写观察期、只读副本延迟门禁、数据修复双人审批、在线 DDL 工具白名单、备份恢复演练。数据变更往往比发版更危险;对齐 M11.01 / M08.05。
DDL 与数据修复必须可回滚或可正向补偿:影子表、双写、分批、回填校验。不可逆删改默认禁止在高峰直打生产——数据变更与代码变更同等危险,经常更危险。
「先删后说」「高峰加索引」「无备份全表 UPDATE」是经典事故模板;回滚方案写不清,变更单退回。
反模式:锁表 DDL 无窗口评估;修复脚本无抽样校验直接全量;复制延迟不管继续打主库。
数据修复的最高风险是「不可逆 + 难校验」:删改类必须先有可抽样的正确性定义,再谈执行速度。
复制延迟是隐藏锁:主库看起来成功,从库或下游 CDC 尚未跟上,业务读到旧数据会被误判为修复失败或成功。
在线 DDL 看锁与复制延迟;大表变更用 gh-ost/pt-osc 或云厂商在线变更。数据修复先备份/抽样校验,再全量;正向补偿优先于逆向幻想。
与 M11.01 变更可回滚一致;与 G06.03 双写/Outbox 在「数据面变更」上互补——结构变更与事件契约要一起评估。
校验查询与影响行数预估是门禁字段:估错一个数量级就应熔断执行。
在线 DDL 工具选型写进变更单:锁类型、是否拷贝表、磁盘与时间预估、失败回退。自研脚本等同高风险,需同等评审。
正向补偿优先:与其幻想完美回滚 SQL,不如设计可重放的修复任务与校验任务。
变更单附:执行窗口、回滚 SQL/切流方案、校验查询、影响行数预估、复制延迟阈值、熔断条件。
- 执行中盯锁等待与复制延迟;超阈熔断。
- 禁止「先删后说」;删改类须双人复核。
- 完成后用校验查询闭环,结果贴回变更单。
关联:G04.02 SQL 审核;G01 发布窗口;G06.03 结构变更对 CDC 的影响。
执行熔断条件量化:锁等待阈值、复制延迟阈值、影响行数偏差、错误率。触发即停,复盘后再续跑。
完成后校验结果与备份位点写入变更单;无闭环的数据变更视为事故隐患。
SQL 必须过审核(索引、回表、临时表、大偏移);慢 SQL 要有发现→归因→修复→回归的闭环,而不是只调大超时。超时调大是推迟爆炸,不是治理。
从库「看起来快」不能代替主路径 explain;读写分离下的慢查询仍可能打穿主库或连接池。
反模式:N+1 用缓存掩盖;深分页 OFFSET 巨大;隐式转换导致索引失效;慢日志无人认领。
慢 SQL 治理看闭环率,不看发现数:发现一堆却无人修,等于没有治理。工单 SLA 与发布门禁挂钩更有效。
「加索引」也是数据变更:写入放大、磁盘、变更窗口都要评估;禁止把索引当免费午餐。
审核关注:选择性、覆盖索引、分页策略、N+1、隐式转换、深分页、临时表与文件排序。慢日志与业务 apdex 联动;修复后用相同流量形状回归。
与高性能存储/SQL 篇章、M09 消除等待同构:慢 SQL 是等待的主要来源之一。
索引不是免费的:写入放大与空间成本要写入取舍;「再加一个索引」也要走变更与回滚(删索引)预案。
explain 结论要对照真实基数与绑定变量;开发环境的 explain 只能作参考。用生产只读或采样统计验证。
深分页与导出类 SQL 单独门禁:必须 keyset/seek 或异步导出,禁止巨大 OFFSET 上生产。
上线门禁:新增 SQL 有 explain 结论;慢 SQL 工单有负责人与截止日期;回归报告附修复前后 RT/扫描行数对比。
- 表达时能讲清「为什么走这条索引」。
- 禁止以调大超时/调大连接池作为唯一手段。
- 大促前导出 Top 慢 SQL 清单并销项。
关联:G04.01 DDL;G04.03 单机优化;G03 容量被慢 SQL 偷走。
Top 慢 SQL 周报:责任人、趋势、是否进下次发布。连续两周无进展升级。
修复回归用相同流量形状:仅用单条 SQL 基准不够,要看连接池与 RT 分位。
分库分表、读写分离前先压榨单机:索引、SQL、缓存、批量、异步。过早拆分把复杂度前置,却不一定换来容量——拆分是架构税,要用证据证明值得交。
拿不出单机优化前后对比与瓶颈证据,不批准拆分。批准后的第一期目标是「可回滚的路由与对账」,不是「一次拆完美」。
反模式:为了微服务而拆库;未解决热点就按用户 ID 哈希;无对账上双写;读写分离当银弹忽视复制延迟语义。
拆分决策的证据链:单机优化前后容量曲线、瓶颈火焰图/等待分析、成本对比(研发复杂度 vs 机器)。缺一视为冲动拆分。
「可回滚的路由」是第一期交付物:流量与数据都能退回旧拓扑,否则拆分是单行道。
与 M08.05「扩展前先单机」同构:先证明瓶颈在容量而非实现。拆分后的事务、对账、路由、热点、跨库查询成本要写进 ADR。
读写分离首先改变的是一致性语义,其次才是容量;产品契约(G05.02)必须先改。
分片键选择错误会制造新单点(热点分片);扩展方案必须含热点与扩容再平衡预案。
一致性语义变化先于拓扑变化:读写分离/分片会改变事务与可见性,产品契约与对账必须先就绪。
分片键与热点分析同单:选错分片键会把单机热点变成单分片热点,扩展税白交。
扩展评审先出示:单机优化前后对比、瓶颈证据、一致性模型变更、对账与回滚路由方案、时间盒与退出条件。
- 第一期交付:可回滚路由 + 对账任务 + 观察看板。
- 禁止无对账的双写上线。
- ADR 必填,回顾日写进日历。
关联:G04.01/02 单机手段;G06.03 Outbox;G05 缓存与一致窗口;M08.05。
ADR 模板强制字段:瓶颈证据、拒绝的替代方案、一致性影响、对账、回滚、时间盒、回看日。
第一期上线标准:路由开关 + 对账差异看板 + 回滚演练记录,三者齐全才允许扩大写入比例。
大表重构默认影子表/双写观察期,观察指标达标才切读;禁止高峰直接 rename 大表。
数据变更爆炸半径大且常不可逆;观察期用来证明正确性与性能。切读与切写可分步。
门禁:双写校验报告、观察期时长、切读开关、回切方案。对照 G04.01 可回滚原则。
读写分离上线前必须定义可接受的副本延迟与读己之写策略;延迟超阈应切主读或降级,而不是默默脏读。
最终一致不等于无限延迟。业务契约要写清延迟窗口与补偿。
门禁:副本延迟指标与告警、读路径降级开关、验收用「写后读」用例。
「写后读」用例要在副本延迟超阈时验证是否切主读或降级,能返回旧值而不报错才是最危险的形态。业务契约需写明可接受的延迟窗口与补偿动作,缺窗口定义的「最终一致」等于无限延迟。
生产数据修复必须双人审批+可回放脚本,禁止控制台手改当常态。
手改不可审计、不可回滚。
门禁:工单、脚本仓库、执行窗口与回滚包。
- 数据修复脚本要能在演练库重放并校验影响行数,双人审批须覆盖执行窗口而非只在提交时签字。判据是控制台直连账号是否仍具备写权限——只要旁路存在,工单制度就形同虚设。
大表变更只允许白名单工具/策略(gh-ost/pt-osc 等),禁止裸 ALTER。
锁表是可预期事故。
门禁:工具白名单、副本延迟观察、取消预案。
- 白名单工具之外还要验副本延迟观察点与取消预案:在线 DDL 的真风险不是锁表本身,而是无法中途停止。抽一次大表变更做分批中断演练,能停在批次边界才算有取消能力。
备份存在≠可恢复;恢复 RTO/RPO 必须演练出数。
未演练的备份是安慰剂。
门禁:季度恢复演练、耗时记录、失败即阻断高危变更。
- 恢复演练要产出实测 RTO 与 RPO 并与业务目标比对,「恢复成功」四字不构成证据;还要校验恢复后的行数与关键单据。未达目标即冻结高危变更,否则演练退化为例行勾选。
G05 缓存一致与热点治理
本组管缓存加速如何不牺牲正确性与可用性:失败可降级、一致性窗口写进契约、热 key/大 key 专项、降级演练、热点预热护栏、击穿穿透演练清单、多级缓存失效广播、容量与淘汰评审。对齐 M07.02 / M08.08。
缓存穿透/击穿/雪崩与缓存集群故障时,必须有降级:回源限流、默认值、只读旧数据、熔断依赖,禁止无限回源打穿 DB。缓存挂了系统仍应「降级可用」,而不是「更不可用」。
缓存是加速器不是真相源;把缓存当 DB 用,故障模式会从「变慢」变成「写丢/读错」。
反模式:无互斥重建导致击穿;空值不缓存导致穿透;多级缓存失效顺序未定义层层放大;故障时关闭限流「先顶住」。
降级不是「返回空」这么简单:要定义用户可感(旧数据/默认值/只读/排队),并与产品共同签字。错误的降级比故障更伤信任。
互斥重建与单飞(singleflight)是击穿标配;没有互斥的 cache aside 在过期风暴下等于自攻 DB。
失败模式要在设计期声明:一致性窗口、过期策略、互斥重建、布隆/空值缓存、回源配额。与 M07.02 缓存非源同构。
多级缓存定义失效顺序与最大回源 QPS;本地缓存要有上限与抖动过期,避免Herd。
与 G03 容量模型联动:回源配额必须小于 DB 可承受;演练「缓存全挂」是唯一验收。
回源配额是硬闸:按 key 与全局双限;超过则降级,不得「临时取消限流保业务」——那是把事故换成更大事故。
多级缓存的失效顺序写成状态机:本地 → 分布式 → DB;并行失效策略要防止惊群。
故障演练必做「缓存全挂」:观察 DB QPS 与用户可感错误率,确认限流与降级开关有效。
- Runbook:何时开降级、何时允许回源、何时止损回滚。
- 穿透/击穿/雪崩各有专项用例进回归。
- 降级开关按 G01.02 配置门禁管理。
关联:G05.02 窗口契约;G05.03 热点;G03.03 大促演练。
「缓存全挂」演练报告必含:DB QPS 峰值、错误率、降级开关生效时间、回滚决策点。
Runbook 与开关名、看板面板一一对应;禁止「开降级」却找不到开关。
缓存与 DB 的一致性不是「最终会一致」一句话,而要写成契约:窗口时长、读路径(主/从/缓存)、用户可感语义。窗口内允许什么、不允许什么,产品与研发必须同一张纸。
金融与库存等场景往往要求绕过缓存读主或同步失效;「缓存优化」若未改契约,就是静默降低正确性。
反模式:口头最终一致;延迟双删无窗口说明;读写分离延迟当缓存一致;变更缓存策略不走发布。
契约一页纸最小字段:窗口时长、读路径优先级、窗口内允许的用户可感、超时后的行为、关键写是否绕过缓存。
缓存策略变更=产品行为变更:即使「只改 TTL」,也可能让用户更频繁看到旧值或击穿更重。
Cache-Aside / Write-Through / 延迟双删各有代价:写失败、删失败、并发读写窗口不同。先定一致模型,再选组件(M07.02 / M07.01)。
读路径要可观测:用户这次读的是主、从还是缓存;排障先问路径,再问「为什么不一致」。
契约变更等于产品行为变更,须灰度与回滚;与 G01 发布三要素同级。
延迟双删/订阅失效各有失败模式:删失败、消息丢失、并发读写。失败后的最大脏读窗口必须 ≤ 契约窗口,否则契约作废。
排障时「路径」是第一问:主库直读、从库、缓存、本地缓存——路径不清则讨论无意义。
接口文档与 SLA 写明一致性窗口与读路径;用例验收含窗口内/窗外的期望行为。
- 排障话术:先确认读路径与变更窗口。
- 变更缓存策略视为发布,走灰度与回滚。
- 对账/校验任务覆盖关键字段漂移。
关联:G05.01 失败降级;G04.03 读写分离语义;G06.03 事件驱动一致。
接口文档与错误码旁标注一致性语义;验收用例覆盖窗口内/外。
策略灰度:按租户或流量百分比切换 TTL/读写策略,观察投诉与对账差异再全量。
热 key 与大 key 必须专项治理:拆分、本地缓存、复制、压缩、拆 value。热点会把集群变成单点——大促前不知道热点在哪,等于不知道单点在哪。
大 key 拖慢迁移、阻塞复制、放大网络;热 key 打满单分片 CPU。两者都要用证据发现,而不是上线后猜。
反模式:全站一个「热门商品」键;巨型 Hash/List 不拆;只加机器不打散;热点清单无主人。
热点清单是活文档:开售 SKU、活动入口、配置中心热 key、登录态大 key,都要在大促前冻结版本并指定负责人。
大 key 的危害常在运维动作:迁移、扩容、备份时阻塞;日常 QPS 不高不代表可以忽视。
发现靠:代理层热点统计、大 key 扫描、慢查询、分片 CPU。治理按「打散」:哈希标签、分片、多副本只读、本地缓存短 TTL。与高并发热点 M08.08 对齐。
打散会改变一致与失效成本,须同步更新 G05.02 契约与回源配额。
容量模型(G03)要把「单分片峰值」写进去,否则水平扩展无效。
打散手段分级:本地缓存 → 只读副本 → 拆 key → 业务改模型。越靠后成本越高,越要 ADR。
热点与限流联动:打散不及的,用用户级/商品级限流保护,避免打穿。
大促前出热点清单与预案;上线后持续扫描,超阈进工单。验收:热点 key 的单分片 CPU/QPS 不再独占集群。
- 清单含:key 模式、QPS、分片、负责人、预案(拆分/本地缓存/限流)。
- 大 key 治理含拆分与压缩目标体积。
- 演练热点打满时的降级路径。
关联:G05.01 击穿;G03.03 大促;M08.08 热点方法论。
扫描任务日更:超阈自动建单;大促前 T-7/T-3/T-1 三次销项。
验收看分片 CPU 与热 key QPS 占比,而不是「我们已经拆了」的口头。
缓存失败降级路径必须演练:降级后 DB 配额、用户可感、自动恢复条件写进 Runbook。
未演练的降级在事故中不可用。降级不是关缓存,而是受控的配额与体验。
门禁:最近演练记录、DB 配额、降级开关、恢复条件。关联 G05.01。
已知热点(大促 SKU、登录配置)必须有预热清单与单 key 护栏;靠「过期后自然重建」等于赌击穿。
热点是容量与一致性的交叉点;预热失败要有显式降级。
门禁:热点清单、预热脚本可回放、单 key QPS/带宽告警、击穿开关演练。
预热验收要让预热脚本人为失败一次,看单 key 护栏能否挡住回源洪峰;只验预热成功会漏掉降级路径。热点清单应由历史峰值反推而非人工猜,大促前的清单有效期要随流量结构更新。
缓存击穿穿透雪崩必须有演练与开关,而不是文档里的理论。
过期瞬间与恶意 key 是常态风险。
门禁:演练记录、单飞锁/空值缓存/逻辑过期验收。
- 演练须分别注入过期瞬间与恶意不存在的 key,逐项验单飞锁、空值缓存、逻辑过期是否生效;只在文档里列三种缓存问题、无演练记录,故障时必然找不到开关。判据是注入后回源 QPS 是否被压住。
本地+分布式多级缓存必须有失效广播与版本策略。
节点间旧值会造成诡异脏读。
门禁:广播通道、版本字段、失效失败重试。
- 失效广播验收要人为丢弃一次消息,看各节点是否仍收敛到同一版本;节点间旧值造成的脏读很难复现,常被误判为偶发。重试与版本字段缺一不可,只靠广播到达不保证一致。
缓存容量、淘汰策略、大 key 限制必须进容量评审。
内存打满比打满 CPU 更突然。
门禁:maxmemory 策略、大 key 扫描、淘汰命中监控。
- 淘汰策略评审要给出内存打满时的行为预期:是先拒绝写入还是先淘汰热点,两者对命中率的影响完全不同。大 key 扫描结果与淘汰命中率监控同时缺失时,内存打满会比 CPU 打满更突然。
G06 调用预算与服务治理
本组管同步链路与双写契约:超时预算入契约与强制入库、治理参数可回滚、双写走 Outbox/CDC、重试预算显式化、熔断半开观察窗、幂等键规范、对账任务 SLA。超时可加总、双走并对账;对齐 M11.02 / M11.03 / M07.01。
同步调用链的超时必须可加总:各跳超时之和小于用户超时,并留重试与排队余量。无预算的超时 = 随机故障。超时是分布式系统的第一公民,不是调优参数。
重试无幂等会放大写;熔断阈值要基于错误类型而非笼统 5xx;取消(cancellation)要能向下传递,避免下游空转。
反模式:每跳都 3s 叠出 30s;入口超时短于下游;无限重试;超时后仍继续写。
预算表是抗雪崩的宪法:没有加总通过的同步链路,不得以「先上线再调」为借口进入生产。
取消传递缺失时,下游会在上游已超时后继续烧资源——这是隐式容量泄漏。
超时、重试、幂等、熔断一起设计。与 M11.02 超时预算、M08.09 负载分型与取消同构。
预算表是契约:每跳 RT P99、超时、重试次数、幂等键、失败语义。评审时现场加总,加总不过关不得上同步链路。
某一跳变慢时,整链失败模式应「快速失败/降级」,而非层层排队雪崩——用压测验证,而非口头保证。
重试预算单独列:次数 × 超时要计入总预算;抖动(jitter)与幂等是重试的前置条件。
熔断与超时分工:超时管单次,熔断管持续错误;慢调用熔断阈值与错误熔断阈值分开配。
链路预算表进架构文档与接口契约;压测验证单跳变慢时的整链行为。
- 写路径重试必须幂等键或去重表。
- 取消向下传递进验收用例。
- 预算变更按发布门禁,观察错误率与尾延迟。
关联:G06.02 治理参数;G03.02 背压;G06.03 能异步则勿同步硬扛。
评审现场用表格加总;加总超过用户超时则砍跳、改异步或降级,而不是「每跳再减 50ms」的假动作。
故障注入:单跳延迟到接近超时,观察整链是否快速失败且无重试风暴。
限流/熔断/降级参数变更按发布管控,必须可回滚。错误的限流阈值可以制造「自攻」——把正常流量挡在门外。治理参数与业务开关一样危险。
集群限流与单机限流语义要分清,避免「每实例都以为自己是全集群」导致实际阈值放大 N 倍。
反模式:高峰临时拍脑袋调大;无观察指标的参数变更;熔断后无半开与恢复条件;降级开关无主。
治理参数的误杀与漏杀都消耗信任:误杀制造自攻,漏杀制造雪崩。所以变更要有观察指标双看:通过率与依赖健康。
单机限流 × 副本数 ≠ 集群限流;语义写错会在扩容时自动「放松」或「收紧」。
治理参数进配置门禁(G01.02);变更前后对比错误率、通过率、拒绝率、依赖健康。与错误预算联动:误杀过高同样消耗预算。
限流算法(令牌桶/漏桶/滑动窗口)与维度(用户/IP/接口/租户)要写清;维度选错会误伤或放行。
熔断要区分慢调用与错误调用;半开探测流量要受限,避免恢复时二次打穿。
半开探测要限流:恢复期用小流量探测,成功再抬门;一次放全是二次事故。
参数变更与错误预算联动:误杀率超阈同样触发回滚,不只看 5xx。
参数变更单含:旧值、新值、观察指标、回滚条件、生效范围(单机/集群)。禁止高峰无单临时调参。
- 演练:错误参数一键退回时间计入 RTO。
- 大促参数变更提前演练并冻结临时修改。
- 看板并排展示:通过率 vs 拒绝率 vs 依赖错误率。
关联:G01.02 配置发布;G03.03 大促;G06.01 超时与熔断。
变更单并排旧值/新值/预期曲线;观察窗口结束前禁止连续调参。
大促参数包提前合并为「预案包」版本化,当日只允许切换包,不允许细调单个魔法数。
消息与 DB 双写禁止「先发消息再写库」无补偿;用 Outbox / CDC / 事务消息保证至少一次投递后的可对账。双写是分布式一致的经典陷阱,必须有模式而不是有感觉。
至少一次投递必须配幂等消费;没有对账的「最终一致」是信仰,不是工程。
反模式:本地事务外发消息;消费者无幂等;CDC 乱序无版本;表结构变更打断解析无兼容策略。
Outbox 的价值是「与业务同事务的意图记录」;没有轮询/中继把 outbox 发出去,表只是墓地。
对账不是可选报表:没有差异检测与修复工具,最终一致只是口号。
最终一致三件套:幂等消费、可重试、对账(M11.03 / M07.01)。Outbox 与业务同事务;CDC 注意顺序、表结构变更兼容;乱序用版本或聚合键。
消息只唤醒,状态以库为准;对账任务可检测漏跑/错账并可审计。与 G04.01 数据变更、G05.02 一致窗口互补。
失败补偿路径要设计完整:重试耗尽进死信、人工修复工具、回放开关。
幂等键设计:业务幂等(订单号)优于技术幂等(消息 ID);两者可并存,但语义要写清。
CDC 与 schema 演进:兼容策略(向前/向后)进变更单;破坏性变更先停消费或双格式。
双写方案评审必问:失败怎么补偿、重复怎么消化、对账谁跑、差异怎么修。说不清则退回同步或单写。
- 对账任务进值班看板,差异超阈告警可行动。
- 结构变更与 CDC 解析兼容性同单评审。
- 压测含重复投递与乱序用例。
关联:M11.03 对账兜底;G04.03 扩展双写;G07 AI 工具写操作同样要幂等分级。
上线门禁:重复投递测试、乱序测试、对账任务启用、死信告警可行动。
差异修复工具最小可用:按主键重放、人工标记、审计日志;禁止只靠「再消费一遍」蒙混。
超时×重试×扇出必须可算并写入契约;默认禁止无限重试与无抖动退避。
重试放大是级联故障主因之一。预算超限应失败或降级,而不是继续打。
门禁:放大倍数计算表、最大重试、抖动、幂等要求。关联 G06.01 / K06。
熔断打开后半开必须有观察窗与成功阈值;无窗口的「立即全开」会二次打穿。
熔断是保护下游也是保护自身;半开是受控实验。
门禁:半开比例、成功阈值、失败再开、参数可回滚;变更单写清观察窗。
半开验收要注入「下游刚恢复但成功率不足」的场景,验证是否再次打开而非直接全量;无观察窗的立即全开会造成二次打穿。成功阈值、失败再开与参数回滚点都要能在演练里被触发一次。
同步链路超时必须可加总并入库为契约表,禁止拍脑袋。
超时倒挂是雪崩温床。
门禁:预算表评审、网关/服务/下游对齐检查。
- 预算表要可被代码读取而非只写在文档里:抽一条同步链路,逐段核对实际生效的超时值,并验上游剩余时限是否大于下游总时限。超时倒挂的根因常是各层独立配置、无人做加总校验。
写接口幂等键格式、存储与过期策略必须平台规范。
无幂等的重试是重复扣款。
门禁:规范文档、拦截器默认、抽检关键写路径。
- 拦截器默认注入的幂等键须由业务自然键生成并落唯一索引;重启后重放同一写请求,若产生第二条流水即判不合规。抽检关键写路径比抽检全量接口更能暴露「规范有、实现没接」的落差。
异步最终一致链路必须有对账任务与 SLA(窗口、告警、补偿)。
无对账的 Outbox 仍是赌运气。
门禁:对账看板、超窗告警、红线冻结开关。
- 对账门禁要验任务失败时是否告警并冻结相关发布,而不只是看对账看板存在。判据是人为停掉对账任务后差异表是否仍被允许无限累积;无 SLA 的 Outbox 只是把不一致延后。
G07 AI 制品与评测门禁
本组管 AI 变更的发布纪律:制品全版本化、无黄金集不上线、工具副作用分级表、Prompt 回归绑定发布、评测集漂移检测、Token/算力成本配额、模型降级开关演练。AI 变更面大于普通服务;对齐 L03.01。
Prompt、模型 ID、检索配置、工具实现、编排图全部版本化,可对齐回放与一键回退;版本号进日志与审计。AI 变更面远大于普通服务,版本化是唯一可回放手段。
温度、切片、重排、工具副作用、路由策略任一变化都视为发布;「再调一下 Prompt」与改代码同级。
反模式:线上手改 Prompt 无版本;模型静默切换;无法从一条回答追溯制品组合;回滚靠「凭记忆再改回去」。
制品组合是 AI 系统的「可执行二进制」:缺版本号的 Prompt 等于未构建产物却上了生产。
路由与实验桶必须版本化,否则回放时无法解释「为何同一问题两种答案」。
与 L03.01 AI 变更必回归同构:制品不可追溯则回归无意义。多模型路由、AB 实验桶、检索索引版本一并纳入制品清单。
回放要求:同一输入 + 同一制品组合 → 可对齐的输出(允许采样噪声时记录 seed/温度策略)。
与 G01 发布三要素结合:AI 放量同样要有灰度、卡点(质量/安全/成本)、回滚到上一制品集。
回放管道:输入、制品组合、采样策略、工具响应存根——四者缺一则「对齐回放」不成立。
审计字段进每条回答日志:modelId、promptHash、indexVer、toolVer、routeVer。
发布清单含:模型版本、提示词哈希、索引版本、工具契约版本、路由策略版本。回滚能指到具体制品组合。
- 审计:任一线上回答能追溯到制品组合。
- 禁止生产控制台无单改 Prompt。
- 制品仓权限与变更审计同代码仓标准。
关联:G07.02 黄金集;G07.03 工具分级;G01 灰度回滚。
回滚演练:切换到上一制品组合并验证黄金集与线上抽样,不只是「改回旧 Prompt 文本」。
权限:生产制品写入走 PR/变更单;控制台热修默认关闭。
任何改动必须过固定黄金集/测试集回归;无测试集不上线。离线指标 + 小流量线上数据双确认后再全量。个例体验不是评测,是采样偏差。
黄金集要冻结版本,防止「改题迎合模型」;集合覆盖正确性、拒答、安全、工具调用、延迟与成本。
反模式:只看 demo 好不好;无安全用例;线上全量后再补评测;用变化的测试集宣称提升。
黄金集冻结是防作弊机制:集合可演进,但演进有版本与评审,不能为了让报告好看而改题。
双确认针对分布漂移:线下好、线上差常见于检索语料与真实查询不一致。
评测是门禁不是演示:通过率阈值、回归报告、失败用例归因(模型/检索/工具/提示词)要可拆。与 L03.01、M01.06 定性定量同构:先定量门槛,再谈主观体验。
线下指标与线上抽样可能背离;双确认是为了防分布漂移。成本与延迟纳入同一报告,避免「更聪明但不可用」。
集合维护有流程:新增用例要评审,删除用例要说明,版本号随制品走。
评测维度拆分报告:正确性/安全拒答/工具成功率/P95 延迟/单均成本。合成一个「总分」会掩盖安全回归。
失败归因标签强制:模型、检索、提示词、工具、数据、评测本身。无归因则禁止「再训一下」。
门禁:黄金集通过率阈值、回归报告链接、灰度观察看板(质量/安全/成本)。未达标不得扩量。
- 表达:先报评测数字,再报主观体验。
- 失败用例按归因分派修复,禁止只调温度蒙混。
- 集合版本与 G07.01 制品版本对齐归档。
关联:G07.01 版本化;G07.03 工具安全用例;G01 卡点扩量。
扩量卡点:黄金集阈值 + 线上抽样窗口 + 安全用例零容忍项。安全项失败不得用「平均分还行」放行。
集合变更单:新增/删除用例理由、版本号、是否影响历史基线对比。
Agent 工具按副作用分级:只读 / 可重试写 / 不可逆写;不可逆写必须人工确认或强幂等键。工具是带权限的远程代码,不是聊天点缀。
提示词注入与越狱防护必须与工具暴露面一起评审;最小权限默认,能只读绝不给写。
反模式:一把工具万能账号;不可逆写无确认;工具超时无上限;无审计日志;用自然语言「保证别乱写」代替权限。
工具分级表是安全边界:级别决定默认是否自动执行、是否要确认、是否要幂等键、审计级别。
「尽量帮用户完成」与失败安全冲突时,失败安全优先——不确定就拒绝,并给出人工路径。
工具契约含:权限、超时、幂等、审计、输入校验、输出大小限制。与 G06.01 超时预算、G06.03 幂等写、G08.01 威胁建模同构。
副作用分级决定默认策略:只读可自动;可重试写要幂等键;不可逆写要人工或双人、或强确认码。
越权与注入测试进黄金集(G07.02);失败安全:不确定时拒绝执行,而不是「尽量帮用户办到」。
输入校验与输出限额防 prompt 注入与数据外泄;工具返回不得直接当高权限指令执行。
不可逆写的补偿设计与普通写路径同等重要:冲正、工单、人工审核队列。
上线前列出工具清单与级别;不可逆写默认关闭或双人复核。表达时能讲清「最坏能写坏什么、怎么回滚/补偿」。
- 演练:恶意/越权调用是否被挡。
- 工具权限变更走发布门禁与审计。
- 生产审计能还原:谁、何时、何工具、何参数、何结果。
关联:G07.01/02;G08 安全;G06 写路径幂等。
上线包含:工具清单、级别、权限集、超时、幂等、审计样例、越权测试报告。
演练注入:诱导模型调用高危工具;期望被策略拦截并留审计。
Agent 工具按只读/写/资金或不可逆分级;高级别默认二次确认或人工闸。
工具调用的爆炸半径可大于模型本身。分级是门禁,不是文档装饰。
门禁:工具分级表、确认策略、审计日志、一键禁用。关联 G07。
Prompt/工具/索引变更必须跑同一黄金集回归并贴结果链接;无回归的「文案小改」按生产事故定级。
LLM 行为变更不可靠肉眼;回归是唯一客观门禁。
门禁:黄金集 diff 报告、阈值阈值、失败阻断;与 G07.02 互锁。
回归报告要贴黄金集 diff 与阈值,且发布单与报告一一绑定;「文案小改」能否绕过流水线直接热更,是这套门禁最容易被击穿的地方。无回归的 Prompt 变更应按生产事故定级,而非按配置调整放行。
黄金集必须监测分布漂移与刷分;分数 alone 不能放行。
过拟合评测=线上静默塌方。
门禁:集外抽样、影子对比、漂移告警。
- 漂移检测的可证伪点是集外抽样与影子对比是否随集内分数同向;分数上升而集外指标不动,说明过拟合评测正在让门禁持续放行。评测集写权限须与模型发布权分离,否则刷分无从约束。
模型调用成本必须进配额与门禁,超限降级而非账单惊吓。
AI 成本是容量问题。
门禁:配额表、超限策略、FinOps 看板。
- 配额验收要注入成本突增,看是否触发降级而非只出账单;按自然月核账意味着发现时损失已发生。单位任务成本应作为实时指标并绑模型别名,超限动作要落在切小模型或限流上。
模型超时/质量降级开关必须演练到用户可感路径。
开关不演=故障时找不到。
门禁:演练记录、文案/兜底、回滚点。
- 降级开关演练要打到用户可感路径:文案、兜底内容与回滚点都验过才算通过。只验配置项存在,故障时仍会出现「开关开了但没生效」;验收判据是开关触发后前端能否给出可理解的提示。
编码助手、AI 代码评审、AI 单测生成进入流水线后,唯一不变的红线是:AI 产物与人工产物走同一道门禁。降低标准的那一天,就是把幻觉与供应链风险写进主干的起点。
治理要量化到可追问:采纳率、返工次数、评审命中率、单测覆盖率增量——没有度量,AI 提效就只是主观感受与采购理由。生产默认:AI 工具链的准入、上下文边界、产物审计写进研发规范,而不是靠个人习惯临时决定。
与 M06 的「可验证才可信任」同构:AI 输出不可信不是缺陷,是必须被验证的输入。因此门禁不能放松,只能前移——预提交提示、PR 检查、CI 静态分析与测试必须能拦住 AI 引入的缺陷。
与 G07.01/G07.04 互锁:AI 生成的代码同样要过制品版本化与副作用分级;外部模型即第三方处理者,送出去的上下文就是数据出境面,密钥、生产数据、客户隐私一律不进上下文窗口。
失败模式:AI 幻觉 API 编译不过(可拦);AI 生成的依赖引入未审计包(供应链);AI 评审刷屏导致告警疲劳(人不再看);上下文误送敏感代码(不可逆)。前两者靠门禁,后两者靠边界与限流。
门禁:准入清单、上下文边界、产物标记与审计、量化指标。
- 准入:AI 工具须过数据合规与依赖审计;代码助手不得直连生产库与外网模型发送完整文件。
- 边界:上下文最小化(仅相关片段)、脱敏规则前置、密钥与隐私字段硬阻断。
- 产物:AI 生成片段在提交信息与 PR 中可追溯,评审对「AI 生成未验证」一票否决。
- 量化:采纳率、AI 代码缺陷密度、PR 周期、单测覆盖率增量;按季度回看,收益不达标即下线工具。
- 验收:抽检最近变更是否带齐工具标记、脱敏证据与回归结论;关联 K 组事故卡做反例教学。
G08 安全运营与供应链
本组管安全与供应链底线:威胁建模先行、密钥证书可轮换与双写窗口、最小权限审查、依赖镜像可追溯、豁免单到期自动阻断、CVE 分级响应时限、生产访问审计抽检。对齐 M10 与安全 Checkpoint。
安全需求在设计期做威胁建模(STRIDE 等),而不是上线后补扫描。假设组件会被攻破,问「破了是否仍可控」。安全是约束,不是功能清单。
高风险项未关闭或未显式接受残余风险,不得上线。扫描只能发现已知类问题,替代不了边界与信任假设的审查。
反模式:上线后「补个 WAF」;威胁模型一页纸缺失;残余风险口头接受无签字;新依赖不重做建模。
威胁模型一页纸的读者是评审委员与未来的自己:写不清资产与信任边界,等于未建模。
残余风险接受必须具名与到期日;无限期「接受」等于放弃管理。
与 M10 纵深防御同构:最小权限、失败安全、零信任。数据流图上标信任边界与敏感数据;认证授权、输入校验、密钥、供应链分条缓解。
STRIDE(或同类方法)按资产枚举威胁与缓解;缓解要可验证(测试/门禁/监控),不可验证的缓解等于不存在。
与 G07.03 工具暴露面、G08.02/03 密钥与供应链形成安全门禁闭环。
缓解可验证:测试用例、门禁规则、监控告警、权限配置。不可验证的「我们会注意」删除。
新依赖、新工具暴露面、新数据出境都触发增量建模,而不是一年一次。
方案评审附威胁模型一页纸:资产、威胁、缓解、残余风险、验收方式。高风险项未关闭不得上线。
- 复盘安全事件时回指威胁模型缺口并更新模板。
- 重大架构变更强制重做建模。
- 与安全手册 Checkpoint 页对照检查。
关联:nav-server-security-checkpoint;G08.02/03;M10。
高风险项关闭证据贴进变更单;未关闭则阻塞发布或降级功能开关。
安全事件复盘输出:模型缺口、新增威胁、模板更新——三件都要有。
密钥与证书必须可轮换:双密钥并存窗口、自动续期、吊销流程。写死在镜像里的密钥是定时炸弹——不能轮换的密钥,等于不能响应泄漏。
共享账号长期静态口令、证书过期无告警、吊销名单拦不住流量,都是可预期的生产事故。
反模式:密钥进仓库;证书人工年审遗漏;轮换无双密钥窗口导致全球中断;吊销演练从未做过。
轮换能力是事件响应的一部分:泄漏当天才发现不能轮换,事件必然拖成灾难。
证书过期是可预防事故;过期告警不可行动等于没有告警。
密钥分级:应用密钥、数据密钥、根密钥;HSM/KMS 托管。证书过期监控与告警可行动(G02.03);吊销名单要真能拦住流量。
双密钥并存窗口保证轮换不中断;自动续期失败要升级为事件。与 G01.02 配置门禁一致:密钥下发也是配置变更。
最小权限与短生命周期:能短则短,能作用域收窄则收窄。
双密钥窗口、自动续期、吊销生效链路要分别演练;只演续期不演吊销,泄漏时仍会失败。
密钥分级决定保护强度与访问路径;根密钥触达必须极少且审计。
轮换演练每年至少一次;变更单含吊销与回滚。禁止共享账号长期静态口令。验收:泄漏演练中能在约定 RTO 内完成轮换。
- 证书到期告警绑定 Runbook 与责任人。
- 密钥不进镜像/仓库;注入方式可审计。
- 吊销演练结果贴回安全门禁。
关联:G08.01 威胁建模;G08.03 供应链;G01.02 配置。
年演内容:轮换、吊销、续期失败升级、RTO 实测。结果进入安全门禁证据库。
静态口令与长期 token 清零计划有截止日期;共享账号拆人。
依赖与镜像必须可追溯:SCA 扫描、SBOM、签名/哈希校验、基础镜像基线。供应链失败按生产事故定级。「不知道跑了什么」比「有个 CVE」更危险。
构建可复现、制品签名、部署校验;第三方调用校验证书并设超时。高危 CVE 有豁免流程与截止日,禁止无限期挂着。
反模式:latest 标签上生产;无私有基线乱拉公网镜像;SBOM 不归档;豁免无到期日。
可追溯的目标是:任意生产实例能回答「镜像 digest、构建号、依赖树、扫描时间、签名者」。
latest 与不可变标签的对立:生产只允许不可变引用;可变标签是供应链洞。
与安全手册供应链章节对齐;与 G01.03 升级门禁互补——升级是行为风险,溯源是供应链风险。
SLSA Build 轨道(官方 slsa.dev):L1 要求构建 provenance 存在;L2 要求托管构建平台生成并签名 provenance;L3 要求硬化构建平台(构建互不影响、签名密钥对用户步骤不可见)。SBOM/签名回答「产物内容」,SLSA 回答「构建过程是否可验证」;关键服务门禁可要求 Build L2+。
部署时校验签名/哈希,防止制品库被篡改后静默上线。基础镜像基线由平台维护,业务少自造。
SCA 结果要分级处置:阻断 / 限时豁免 / 接受并监控;与错误预算类似,豁免是有代价的配额。
部署校验签名失败必须阻断,而不是告警后继续。阻断策略与豁免流程成对出现。
CVE 豁免是有息债务:截止日、补偿控制、负责人;到期自动转阻断。
门禁:高危 CVE 阻断、SBOM 归档、镜像来源白名单、签名校验通过。表达时能指到「这个包从哪来、谁签的名、何时扫的」。
- 抽查:任一生产镜像能还原构建与依赖树。
- 豁免单含截止日与负责人,过期自动变阻断。
- 第三方 SDK 升级走 G01.03。
关联:G01.03;G08.01/02;安全 Checkpoint。
抽查脚本化:随机生产镜像 → 还原 SBOM → 核对签名 → 核对扫描报告。
第三方 SDK 与基础镜像升级日历公开;与 G01.03 升级门禁合并执行。
CVE/基线豁免必须有截止日与负责人;过期自动变阻断,禁止永久豁免。
豁免是风险接受,不是风险消失。无到期日的豁免会堆积成供应链黑洞。
门禁:豁免单模板、到期扫描、负责人、阻断策略。关联 G08.03。
密钥/证书轮换必须双密钥窗口:新旧并行校验→切主→吊销旧钥;单钥硬切等于计划内中断。
轮换是变更,不是运维小动作;窗口长度与回滚点要写进 Runbook。
门禁:双钥窗口时长、吊销检查清单、演练记录;告警绑轮换 Runbook。
双密钥窗口的验收点在新旧密钥同时通过校验、且吊销旧钥前能确认无在途请求仍用旧钥;单钥硬切是计划内中断。窗口长度应按最长请求时长与缓存有效期定,而非拍一个固定小时数。
密钥与令牌权限必须最小集,定期审查过权。
过权密钥泄漏爆炸半径更大。
门禁:权限矩阵、季度审查、吊销演练。
- 权限矩阵要与实际授权逐项比对并留季度审查记录:判据是是否存在超出调用方所需的权限且无回收计划。过权密钥泄漏的爆炸半径由权限而非密钥强度决定,故吊销演练比轮换频率更关键。
依赖 CVE 必须按严重级别绑定修复时限与豁免到期。
无时限的漏洞单等于永久带病。
门禁:SLA 表、自动催办、到期阻断。
- 修复时限要按严重级别自动计算并接入发布阻断;判据是豁免到期后是否真的拦截了发布。无时限、无到期自动升级的漏洞单会长期停在「已接受风险」,把临时例外变成永久状态。
生产人工访问必须审计并可抽检,禁止共享超级账号常态化。
无审计的生产访问不可追责。
门禁:堡垒机、会话录制、抽检报告。
- 审计要能抽检到具体自然人及其操作回放:判据是会话录制能否与工单一一对应。共享超级账号常态化时,所有审计字段都指向同一个主体,追责与最小权限回收同时失效。
G09 数据生命周期与治理工程化清单
覆盖数据集版本/漂移门禁、数据血缘与可复现、受监管合规三项工程化清单;对应 L02.13/F14 与 C12.44/46。清单以"缺一项即阻断"为口径,评审口头说得出但写不出视为未准备。
数据版本缺失是不可复现与静默劣化的根因;清单把"数据集即代码"落成可勾选的发布前闸门。
对应 L02.13 全生命周期框架与 C12.44:版本三元组(数据×Embedding×模型)可追溯,漂移是 training-serving skew 的静默来源。
清单:①入库即版本指纹 ②Embedding/模型版本绑定 ③三集(训练/评测/生产)隔离 ④漂移监控(PSI/KL)门禁 ⑤评测集 CI 锁快照。验收:任一项缺失则阻断发布。
信号与责任人:数据集内容哈希、采集规则版本、分区行数、字段空值率与意图分布漂移(PSI)五项入看板;分布告警归数据 owner,质量断言失败归管道 on-call,两者不得同一个「数据告警」笼统派单。
回放与预防:每个 dataset_ver 保留不可变快照与生成作业 run_id,事故时按版本回放重建;预防机制是「漂移超阈自动冻结下游训练 / 评测」并写入发布单,季度抽检冻结是否真的拦住过变更。
可复现是监管与科学的共同底线;清单保证一次实验能被精确重跑、被外部核验。
对应 C12.44 三集隔离与 A29.02:特征定义单一来源、run 绑定全要素、point-in-time correctness 防泄漏。
清单:①特征库线上线下一致 ②实验 run 绑定数据+代码+模型 ③评测集独立不可变 ④防特征穿越与时间点切片 ⑤盲集定期重测。验收:新人按 run 能复现原指标。
信号与责任人:血缘链 source → transform → dataset_ver → index_ver → eval_run 任一环缺失即告警,责任人为该段作业的 owner;缺环不等于「数据没了」,而是「无法证明数据怎么来的」,合规上同样不可用。
回放与预防:按 run_id 反查全部上游版本,能在一分钟内重建当时的评测输入;预防机制是写入路径强制带来源标注与 transform 版本,未登记的写入被 ETL 前置 Advisor 拒绝(C12.44)。
合规是可验证的工程属性而非文档;清单把审计/脱敏/回放落成强制闸门。
对应 L02.14 合规清单与 C12.46:留痕不可改覆盖全路径(含拒绝),PII 在存储边界脱敏,决策可回放。
清单:①append-only 审计(含拒绝路径)②PII 存储边界脱敏 ③consent 校验闸门 ④决策依据可回放 ⑤监管报送自动化。验收:抽查最近一次变更是否带齐字段。
信号与责任人:审计事件覆盖成功 / 拒绝 / 降级 / 人工放行四条路径,哈希链断裂或出现「有响应无审计」即 P0 告警,责任人为合规 owner;只记成功调用视为留痕不完整。
回放与预防:按 run_id 重放当时的输入、检索片段、规则命中与版本,回放结果须与留痕一致;预防机制是 PII 在入库边界令牌化、consent_scope 校验前置、以及监管报送从审计视图自动生成(C12.46)。
G10 边缘/多模态/退役/人在环 工程化清单
覆盖端侧边缘部署、多模态评测与引用、模型退役与人在环四项清单;对应 L03.14/S13/S19/S20 与 C12.45。把"边缘/多模态/退役/人在环"从口号落成可验收条目。
端侧四约束(算力/内存/能耗/离线)优先于效果;下发即一次灰度发布。
对应 C12.45 与 A30:量化是 Pareto 权衡需评测兜底,端云版本一致是正确性的前提。
清单:①量化前后评测对比 ②真机低内存验证 ③模型下发版本+签名+灰度 ④离线降级兜底 ⑤端云版本一致性校验。验收:断网时端侧不崩、回退上一代。
信号与责任人:设备分组下的加载成功率、量化方案版本、内存峰值、离线队列深度与回落次数;加载失败后静默回落旧版本是最危险的「无告警成功」,责任人为端侧发布 owner。
回放与预防:下发单绑定 model_ver / 设备分组 / 灰度比例,可按批次一键回滚;预防机制是设备能力校验前置、量化后按任务类型跑 FP16 基线对比、以及下发后 24 小时强制回执核对(C12.45)。
多模态失效常是模态间不一致;文本指标不能评多模态。
对应 A32.01:模态对齐是能力前提,跨模态评测需细粒度指标,视觉引用必须可追溯。
清单:①多模态专项评测集 ②模态缺失降级 ③跨模态一致性校验 ④图/视频出处引用可追溯 ⑤服务期对齐校验。验收:缺模态不崩、引用可点开溯源。
信号与责任人:ASR/OCR 置信度分布、物体存在性/计数/空间关系细粒度指标、引用可点开率、模态缺失降级占比;任一指标越界归评测 owner,不得用「整体准确率正常」结案。
回放与预防:每条回答保留原始片段 ID 与时间戳/帧号,审阅者可点开核对;预防机制是低置信度强制澄清、引用缺失即阻断输出、以及跨模态一致性自动校验进 CI(A33.05)。
退役不是删除模型,而是关闭调用入口+保留回滚;人在环是高风险决策的仲裁兜底。
对应 L03.19/S20:资产退役需标准作业,human-in-the-loop 作为最后否决权与兜底。
清单:①退役标准作业(入口关闭+权重归档+回滚保留)②灰度切流验证 ③高风险动作强制人工确认 ④人在环审计留痕 ⑤降级路径可触发。验收:退役后无幽灵调用、人工可一键否决。
信号与责任人:退役清单五项(入口关闭、权重归档、别名解绑、回滚保留、账单停止)逐项打勾,任一项未完成即视为「幽灵服务」;审批等待时长与超时拒绝率归平台 owner。
回放与预防:退役动作全部进审计并可回放「谁在何时关闭了哪个别名」;预防机制是别名映射设 TTL 与到期复核、高风险动作强制人在环、超时默认拒绝而非放行(A33.09)。
G11 组织治理与架构决策清单
覆盖 MTTR / 事故复盘、技术债与架构评审门禁、跨团队推动与团队赋能三项组织治理清单;把岗位要求里的技术领导力落成可验收条目,与 L02.15、G02、G07 组衔接。
MTTR 不是「修得快」,而是「发现、定位、止损、恢复、验证」五段各自可测量。多数团队只优化定位段,结果告警延迟与验证缺失仍占去大半时长。复盘的价值也不在写报告,而在产出能阻断同类事故再次发生的机制。
对应 M05.05(技术债)与 G02 组(排障证据链):把事故当作系统缺陷的输出,而非个人失误;SOP 的每一步都要有可观测信号与责任人,且与发布、容量、演练三条既有链路打通。
SOP 清单:①发现(MTTD:告警覆盖核心 SLO,缺失即列为 P0 缺陷);②定位(保留故障窗口的 trace / 日志 / 变更单 / 配置版本,先做变更关联);③止损(优先降级、限流、回滚,禁止在故障中排查式改代码);④恢复(按 runbook 验证业务指标而非仅看进程存活);⑤复盘(72 小时内出时间线、根因、 contributing factors、预防项)。
预防项必须可验收:每条动作写成「检测 / 阻断 / 演练」三类之一并带 owner 与截止日,例如「发布单强制关联 change_id」「单元切流演练每季度一次」「慢查询基线进 CI」。禁止以「加强意识」「后续关注」结案。
度量四项:MTTD、MTTF 定位段、MTTR 总时长、同类事故 90 天复发率;复盘报告里必须给出这四项的本期值与趋势,否则无法判断改进是否生效。
验收:任取一次历史事故,能在 10 分钟内从告警反查到当时全部版本与变更单;每条预防项都能在门禁或演练记录里找到对应证据。
向下回指:G02.02 / G02.08 / K02.01 / M05.05 / C10.33 / C10.32。本卡定度量口径与结案标准;日志与 Trace 的字段注入、告警可达性、演练制度由所引卡各自负责,验收时须能对一次历史事故逐项指出证据落在哪条流水线记录里。
技术债最贵的形态不是坏代码,而是决策留痕缺失:没人记得当初为什么选这个边界、为什么允许这个例外,于是每次改动都只能靠猜,重构变成高风险动作。架构评审的目标是把取舍固化成可查询的决策记录(ADR)与可执行的约束。
对应 L02.15(决策表达)与 G07 组(AI 制品门禁):评审不是一次性会议,而是「提案 → 取舍记录 → 约束落进平台默认配置 → 定期复审」的闭环;能被平台自动校验的约束不要靠人记。
ADR 最小字段:decision_id / context / options / tradeoff / decision / owner / review_date / superseded_by。涉及一致性边界、数据所有权、模型别名、隔离级别、成本预算的变更必须建 ADR,并在 PR 描述里引用 decision_id。
门禁化清单:①分层依赖与禁用 API 由静态检查阻断;②跨服务同步调用链跳数超阈值告警;③新增外部依赖需许可证与漏洞扫描;④AI 生成代码标注来源并过同等审查;⑤例外需登记有效期与回收责任人(平台自动到期回收)。
技术债台账按「影响面 × 复发频率 × 修复成本」排序,每季度挑 Top N 进迭代,禁止无限累积;对已偿还项记录前后指标(变更失败率、P95、评审耗时),避免「重构完说不清收益」。
验收:随机抽 5 个近季度架构决策,均能找到 ADR、对应约束在平台配置或 CI 规则中的落点、以及最近一次复审记录。
向下回指:M05.05 / G07.09 / K07.01 / L02.15 / C10.34 / A33.03。本卡定台账排序与回收责任;临时豁免、评测门禁、变更规范由所引卡各自负责,判据是每条已偿还债务都能给出前后指标对比,只有「重构完成」的结论不算数。
2026 年专家 / 架构师岗位反复要求「制定并推行编码规范、架构原则与技术标准」「跨团队推动落地」。这类能力无法靠一份规范文档体现,要靠推动路径、采用证据与反馈闭环:谁被影响、怎样降低对方的接入成本、用什么数据证明有效。
对应 L02.15 与平台工程(C10.34):推动的杠杆是「让正确做法成为默认路径」,而不是增加审批;赋能的产出是可复用资产(模板、门禁、runbook、演练脚本),不是一次分享会。
推动清单:①列出干系团队与各自成本(改造量、停机窗口、学习成本);②给出最小可行接入路径与迁移期双轨方案;③提供自助模板与自动校验,减少对方理解负担;④设试点团队先跑通并公开指标;⑤按采用率与例外率反馈修正默认路径;⑥保留受控例外与回收机制。
赋能资产四项:服务模板(内置可观测 / 限流 / 成本标签)、门禁规则库、事故 runbook 与演练脚本、决策记录(ADR)模板。每项带 owner、版本与更新节奏,避免文档上线即腐烂。
度量:新服务首次上线前置时间、平台默认模板覆盖率、门禁例外数与回收时长、跨团队规范一致性抽检通过率;季度评审时若例外持续上升,先改默认路径而非加强考核。
验收:任取一项跨团队规范,能指出它在哪个平台默认配置里生效、哪些团队已接入、例外如何登记与回收、以及最近一次按反馈做的调整。
向下回指:L02.15 / G07.09 / A26.02 / A33.03 / C10.34 / G11.01。本卡定规范如何变成平台默认;决策记录、团队采纳、准入红线由所引卡各自负责,判据是例外数上升时先改默认路径,而不是把达标压力转给考核。
G12 资产台账与生命周期
覆盖服务、依赖、配置、凭证、模型数据、制品与退役七类资产的登记与闭环;把「谁在管、当前是什么状态、什么时候下线」变成可查询的事实,与 G01 变更门禁、G07 制品门禁及 G11 的组织治理衔接。
没有台账时,「这个服务谁在管」只能靠记忆回答。资产台账的价值不在列全,而在每个条目都有唯一责任人和可被查询的状态;没有责任人的条目比缺失更危险。
对应 G11 的组织治理与 M16.08 依赖识别:资产是依赖图的节点,责任人决定故障时的首响路径。台账与监控、发布系统对齐,才能避免纸上有一套、线上跑另一套。
台账字段最少包含:名称、类型、责任人、环境、依赖、状态、退役日期。
用发布与监控系统反向核对台账,出现「线上有、台账无」列为待补缺陷。
责任人变更走交接流程,禁止直接改字段而不交接值班与 runbook。
出安全通告时最费时的不是修,而是确认「我们到底用没用、用在哪」。依赖清单把这个问题从全库排查变成一次查询,前提是它随每次构建自动产出而非人工维护。
对应 G07 AI 制品门禁与 G12.01 台账:清单必须绑定到具体制品版本,泛泛的「项目依赖表」无法回答某个线上镜像里含不含某个包。
每次构建产出 SBOM 并与镜像摘要一起入库,禁止发布无清单的制品。
清单覆盖直接依赖与传递依赖,包含版本与来源,能按包名反查制品。
安全通告触发时按制品维度查询,命中后能定位到部署实例与责任人。
配置漂移的可怕之处在于它不产生报错,只让同一份代码在不同环境表现不同。靠人工比对配置文件的治理方式,几乎必然在几次紧急变更后失效。
对应 G01 变更门禁与 G02 证据链:把配置当成受版本控制的资产,变更可追溯、当前值可实测。声明值与运行值的差异本身就是一条告警。
配置统一存放并版本化,禁止登录实例手工改值后不回写。
定期采集运行态配置并与声明值比对,差异进入变更工单而非直接修正。
敏感项只存引用不存明文,轮换时同步更新引用并留下变更记录。
密钥最常见的失效不是被破解,而是过期无人知晓、离职后仍可用、或散落在脚本与环境变量里无法清点。治理目标是任何凭证都能回答「谁在用、何时轮换、怎么吊销」。
对应 M13 安全与 G12.03 配置治理:凭证要集中托管、按使用方授权、可即时吊销。把轮换做成常态演练,才不会在到期日变成线上事故。
凭证集中托管,应用只持有短期票据,禁止把长期密钥写进镜像或仓库。
按使用方登记用途与轮换周期,过期前自动提醒并在到期后阻断。
每半年做一次吊销演练,验证「撤掉一把凭证」不会连带打挂无关服务。
模型和数据不像代码那样有清晰的 diff,一次重训或一次回填就可能改变线上行为却留不下可回放的依据。把它们当资产管,核心是版本与血缘可追溯。
对应 G07 评测门禁与 K12 模型事故:出问题时要能回答「当时用的是哪版权重、哪批数据、什么预处理」。答不出,就只能靠重新训练碰运气。
每次上线绑定权重版本、数据快照标识与特征处理代码版本,三者缺一不放行。
数据回填记录来源、时间窗与执行人,保留回滚到上一快照的能力。
按合规要求设定留存期限,到期归档或删除并留下可审计记录。
「本地能跑、线上不可复现」的根源通常是制品没有唯一身份。同一标签被覆盖、构建环境未锁定,都会让版本变成一个不可信的名字。
对应 C18 构建制品治理与 G12.02 SBOM:制品应由内容摘要标识,构建输入与工具链版本一并记录。这样回滚才是切回一个确定的二进制,而不是重新构建一次。
标签禁止覆盖,发布以不可变摘要为准,回滚按摘要而非按时间猜。
构建记录包含源码提交、依赖锁、工具链版本与构建参数,随制品入库。
仓库按环境设晋级路径,禁止把测试阶段制品直接标记为生产可用。
只增不减的资产清单会慢慢失去可信度:僵尸服务、废弃域名、无人认领的队列混在其中,故障时反而干扰判断。退役是资产管理闭环的最后一环。
对应 M16.07 风险登记与 G12.01 台账:退役要有判据和观察期。先停流量、观察依赖是否真的归零、再删资源,比直接删除安全得多,也比长期挂着更安全。
退役前先摘流量并设观察期,期间监控调用量,非零即回退并查漏。
归档保留配置、契约与最后一次可运行制品,满足审计与追溯即可,不保留常驻实例。
退役完成后同步台账、监控、文档与值班表,避免留下指向已删资源的链接。
G13 测试工程化与质量门禁
覆盖测试分层、契约回放、故障注入、容量回归、数据治理、偶发失败治理与放行判据七项;把「测试通过」从一句口头结论变成可查询的证据集合,与 G02 证据链、G03 容量预算、G13 之前的评测门禁衔接。
所有问题都端到端测一遍,反馈慢且定位难;只在单元层测,又抓不到契约与部署差异。分层的作用是让每类缺陷在最便宜、最靠近成因的那一层被拦住。
对应 G02 排障证据链与 M16.09 可验证产物:越靠近底层的测试越确定、越便宜,越靠近真实环境越贵但越能发现集成问题。投入应随风险分布,而非平均分配。
按缺陷类型反推层次:纯逻辑进单元,边界与契约进集成,跨服务链路留少量端到端。
端到端用例控制在关键主链路,禁止把参数组合穷举搬到这一层。
用逃逸缺陷统计反推分层是否失衡,哪层漏得多就补在哪层。
集成环境里才发现的字段不兼容,修复代价最高。契约测试把「双方对格式的假设」提前到各自构建里验证,让消费方与提供方不必同批发布。
对应 C18 IDL 契约与 M16.15 责任边界:契约由消费方描述实际需求,提供方校验自己仍满足。这样契约是需求的可执行表达,不是提供方单方面写的说明。
由消费方生成契约用例,提供方在流水线中回放,失败即阻断发布。
契约覆盖字段名、类型、可空性、枚举与错误码,不覆盖实现细节。
不兼容变更先加兼容期与双写,契约全绿后再下线旧字段。
没被演练过的降级策略,不能算可用。故障注入的目的不是制造混乱,而是用受控手段检验「监控能否发现、预案是否生效、恢复是否可验证」。
对应 G02 排障证据链与 K11 边界事故:只在稳态压测里验证过的系统,无法回答依赖超时或网络分区时会怎样。注入要限定爆炸半径并预设终止条件。
注入前写明假设、观测指标与一键终止条件,任一指标越界立即停止。
从单实例、单依赖开始,逐步扩大范围,每次复盘预案的实际表现。
把演练中失效的预案转成门禁或自动化动作,不再依赖人工临场判断。
一次压测通过不代表下次发布还成立。容量是随代码与数据漂移的属性,缺少基线与回归,扩容配置往往在流量涨上来之后才被补。
对应 G03 容量预算与 C18 内存成本模型:用固定场景、固定数据集、可比对指标建立基线,把「这次比上次慢多少」变成可判定的门禁项。
固定压测场景与数据规模,记录吞吐、P99、资源占用的基线值。
每次发布前跑同一场景,指标超阈值即阻断并要求说明原因。
压测环境资源配置与生产保持可比,否则结论只对该环境有效。
测试数据最容易出现两类问题:用了生产敏感数据带来合规风险,或数据被用例互相污染导致结果随机。两者都会让测试结论失去可信度。
对应 G12.05 数据资产与 M13 安全:数据要脱敏、要有生成规则、要有生命周期。用例之间隔离,失败时能按固定种子重放,定位才不靠碰运气。
用合成数据或脱敏快照,禁止把生产明文数据直接导入测试库。
每个用例自带数据准备与清理,或按租户隔离,避免执行顺序影响结果。
固定随机种子并保留生成脚本,失败用例可在本地按同样数据重放。
偶发失败一旦被默许为「重跑就好」,流水线就会逐渐失去拦截能力。它要么暴露真实的并发与时序问题,要么暴露测试自身的不确定性,两者都值得修。
对应 G02 证据链与 M16.18 复盘:把重跑次数当作质量指标。允许重跑等于允许未知,长此以往真实缺陷也会被顺手重跑掉。
给用例标记重跑率,超过阈值自动隔离并建缺陷单,不留在主流水线里反复污染。
优先排查共享状态、隐式时间依赖、异步等待与外部服务未打桩。
修复后连续多次无失败才恢复,恢复记录写明根因而非「已稳定」。
「测试通过」如果只是一句口头结论,就无法在事故后回答当时到底验了什么。门禁的价值是把放行条件写成可查询的证据集合。
对应 G01 变更门禁与 M16.01 验收判据:每项门禁对应一个具体风险,且结果可追溯。门禁太多会被绕过,太少会漏,按历史逃逸缺陷调整比按清单数量调整更靠谱。
放行条件固定为:静态检查、测试分层通过率、契约回放、容量回归、制品清单齐备。
每次发布归档门禁结果链接,事故复盘时能直接查到当时哪项通过、哪项被豁免。
豁免须写明理由、范围与到期时间,到期自动失效,禁止永久豁免。