《后端架构设计·演进与治理》附录 A 演进与治理速查

把卷四 13 章的判据压缩成可查表:拆分触发条件与退出条件、契约兼容矩阵、服务发现与网关参数、配置与开关分类、SLI 与错误预算、混沌演练、发布阶段、租户隔离、平台能力与成本归因,每张表都给出阈值来源、证据要求、失败回退动作与正文对应章节,便于评审时逐项核对。

怎么用这张速查

本附录不引入新概念,只把卷四 13 章的判据压成表格,方便评审、排查和写方案时回查。每张表都标注来源章节;阈值是起点,不是普适常数,落地时要结合业务量、团队规模和监管要求调整。

使用顺序建议:先查“问题属于哪一类”,再查对应表的“触发条件”,最后确认“退出条件”。只看触发条件不看退出条件,治理动作就会只进不退。

A.0 一条判据的四个部分

本附录所有表格都按同一个结构组织。缺任何一部分,判据都不完整。

部分回答的问题反例合格写法
触发条件什么情况下要采取动作“感觉拆分更好”两个模块 50% 以上发布需同时上线
观测信号用什么数据判断“看监控”发布记录与资源曲线,30 天窗口
退出条件什么情况下停止或回退“持续优化”连续 3 个月可独立发布
责任人谁维护判据与证据“团队共同负责”订单组架构负责人,季度复核

判据不是一次性文档。业务量、团队规模和监管要求变化后,同一个阈值可能从合理变成有害;因此每张表都应当在季度评审时重新确认一次,而不是复制到新项目里长期使用。

A.1 拆分判据

来源:第 1 章。

触发条件可观测信号建议动作退出/回退条件
变更频率冲突两个模块 50% 以上的发布需要一起上线先拆模块边界,再评估独立部署连续 3 个月可独立发布
独立扩缩容单模块占用 60% 以上资源且波动独立拆为独立部署单元资源曲线与主服务解耦
故障隔离单模块故障导致整体不可用拆出并加舱壁/超时故障影响面收敛到单服务
合规/数据边界监管要求数据或团队物理隔离拆服务或拆部署域审计确认隔离有效
组织边界两个团队长期争用同一发布窗口先改团队契约,再决定拆分发布协调成本低于拆分成本

拆分前必须回答的五个问题:

  1. 共享数据是什么,拆开后由谁拥有?
  2. 跨服务调用是同步还是事件,失败如何处理?
  3. 拆开后发布、回滚、值班由谁负责?
  4. 观测、告警、SLO 是否覆盖新边界?
  5. 如果收益不成立,退回单体路径需要多久?

任何一题答不上来,说明拆分条件还不成熟。拆分不是“先进架构”,而是一次带利息的借贷:自治是本金,分布式成本是利息。

A.2 契约兼容矩阵

来源:第 2 章。

变更向后兼容向前兼容处理方式
新增可选字段是视消费者而定默认值 + 忽略未知字段
新增必填字段否否先可选、双写、再收紧
删除可选字段通常否是先标记弃用,观察调用量
删除必填字段否否禁止直接删,走版本化
字段改名否否新旧字段并存至少一个弃用窗口
类型收窄(int64→int32)否否禁止;新增字段替代
枚举新增值视消费者是消费者必须有 unknown 分支
错误码语义变化否否新增错误码,旧码保留

弃用窗口的三个输入:消费者清单、调用量趋势、合同/监管要求。没有消费者清单的弃用,不是弃用,是赌博。

A.3 服务发现与负载均衡

来源:第 3 章。

参数常见起点过低的风险过高的风险
健康检查间隔2–5 秒故障实例滞留检查流量与抖动
摘除宽限期10–30 秒在途请求被切断故障实例继续接流量
TTL 租约3× 心跳间隔网络抖动导致误摘实例宕机后仍被路由
重试预算成功请求的 10%故障时放大流量正常时重试不足
退避指数 + 抖动同步重试打满恢复变慢
局部性策略同可用区优先跨区延迟与流量费单区故障影响面扩大

重试必须和超时预算一起配。单次超时 1 秒、重试 3 次,意味着最坏 4 秒;如果上游只给了 2 秒预算,重试就是把失败变成超时叠加。

A.4 网关与 BFF

来源:第 4 章。

关注点网关负责BFF 负责服务负责
路由路径/域名/租户到服务端到端聚合路径业务路由
认证边缘令牌校验会话与端特定声明细粒度授权
限流租户/租户组配额端特定配额资源级并发
超时入口总预算聚合子预算下游调用预算
降级统一错误页/兜底端特定部分失败业务降级
观测入口指标与追踪起点聚合耗时拆分服务内部信号

网关最常见的错误是把“统一”做成“全知”:认证、限流、路由、聚合、协议转换全塞进网关,最后网关变成不可发布的单体。BFF 的边界是“按端裁剪”,不是“把业务逻辑搬上来”。

A.5 配置与开关

来源:第 5 章。

类型生命周期变更频率回滚方式典型风险
环境配置长期低版本回退环境漂移
实例配置跟随实例中重启/重新下发实例间不一致
发布开关天到周高关闭开关开关过期未删
实验开关周到月高关闭并清理实验组残留
权限开关长期低策略回退越权
运维开关小时到天高恢复默认忘记恢复

开关债的三个信号:超过 90 天仍在使用、没有负责人、没有过期时间。三者占其二,就应进入清理队列。

A.6 可观测性

来源:第 6 章。

信号必须统一的字段用途常见缺口
日志trace_id、tenant_id、order_id、level、service事件细节与审计字段名各写各的
指标service、route、status、tenant、version聚合与告警高基数标签
追踪trace_id、span_id、parent_id、status、duration跨服务路径上下文丢失
事件change_id、deploy_id、actor变更关联没有变更记录

语义约定的最小验收:给定一个 order_id 和一个时间窗口,能在 5 分钟内拉出完整链路、相关日志和同期变更。做不到,说明字段或关联键缺失。

A.7 SLI 与错误预算

来源:第 7 章。

项目定义示例注意
SLI好事件/总事件成功下单请求占比分母要包含失败与超时
SLO窗口内目标30 天 99.9%窗口越长,预算越大
错误预算(1-SLO)×总事件30 天约 43 分钟按请求量还是时间要统一
燃尽率实际消耗/预算1 小时烧掉 10%用于告警与冻结
冻结条件预算低于阈值剩余 < 20% 停止非紧急发布必须有解冻流程

多服务依赖时,用户可用性近似为路径上各服务可用性的乘积。每个服务都 99.9%,十个串联服务的理论可用性只有约 99.0%。预算分配要按关键路径,不是平均分。

A.8 混沌演练

来源:第 8 章。

层次注入手段爆炸半径必须先有的保护
进程杀进程、暂停、CPU/内存压力单实例健康检查与摘流
网络延迟、丢包、分区、DNS 故障单服务/单可用区超时、重试预算、舱壁
依赖下游错误、慢响应、连接拒绝单依赖降级与熔断
区域机房/可用区隔离单区域多活切换与数据校验

一次合格实验必须写清:稳态假设、注入范围、持续时间、止损条件、回滚动作、观测信号。缺一项,就不是实验,是事故演练。

A.9 发布阶段

来源:第 9 章。

阶段代码数据库开关退出条件
Expand新旧兼容加字段/加表,双写新路径默认关双写校验差异为 0
Migrate读新写新可灰度回填历史数据按租户/比例放量回填完成、指标达标
Contract删除旧路径删旧字段/旧表移除开关观察窗口结束、无回滚需求

发布顺序不能倒:先删旧字段再发新代码,会让旧实例读不到数据;先关开关再回填,会让部分租户永久停在旧状态。

A.10 租户与身份

来源:第 10 章。

隔离级别数据计算成本适用
共享库共享表tenant_id 行级隔离共享进程最低小租户、SaaS 长尾
共享库独立 schemaschema 隔离共享进程中中租户、合规要求一般
独立库库级隔离共享或独立进程较高大租户、数据敏感
独立部署完全隔离独立资源最高监管、专属实例

服务身份的最小要求:每个服务有独立身份、权限按操作而非按服务粗放授予、密钥可轮换、调用有审计。共享长期密钥是治理债,不是捷径。

A.11 平台与成本

来源:第 11、12 章。

指标定义用途反指标
采纳率使用黄金路径的新服务/新服务总数判断平台是否被使用只统计访问量
交付周期从创建到首次上线判断是否真的提效只统计流水线时长
反悔成本迁回旧路径所需人天判断锁定风险不统计迁移成本
单位成本成本/订单或成本/租户判断规模经济只看总账单
未分摊比例无标签成本/总成本判断归因质量把未分摊塞进“其他”

成本归因的最低标准:每一笔资源至少有一个 owner 标签;没有 owner 的成本进入未分摊桶,并设上限与处置人。没有上限的未分摊桶,会变成永久黑洞。

A.12 一张总表

治理动作最小证据失败信号回退动作
拆分触发条件 + 验收指标发布更慢、故障面扩大合并回单体路径
契约变更兼容矩阵 + 消费者验证下游反序列化失败保留旧字段/旧版本
服务发现健康检查 + 摘流验证5xx 随实例上下线抖动固定实例列表兜底
网关改造超时预算 + 级联测试入口故障扩散绕过网关直连(临时)
配置变更版本 + 灰度 + 回滚配置推错导致全量异常回退上一版本
开关上线负责人 + 过期时间开关债累积关闭并删除
SLO 门禁SLI + 预算 + 冻结流程全绿但用户投诉重定义 SLI
混沌演练稳态 + 爆炸半径 + 止损演练伤及生产立即停止并回滚
金丝雀发布指标门禁 + 自动回滚回滚不干净蓝绿/全量回退
多租户隔离级别 + 越权测试跨租户数据泄漏提升隔离级别
平台建设黄金路径 + 采纳率能力多但没人用收敛能力,做用户旅程
成本治理归因 + 预算 + 责任人账单涨但找不到主未分摊桶封顶

这张总表适合放在评审文档的第一页。评审时逐行问“我们的证据是什么”,比讨论“要不要做治理”有效得多。

A.13 判据怎么写

写一条可执行的判据,比收集一堆“最佳实践”更难。下面是一个五步模板,适用于本附录的任何一张表。

  1. 从症状出发:先写“什么现象让我们决定采取动作”,不要从工具或方案出发;
  2. 选一个主指标:能直接反映症状的指标,允许多个但必须有一个主指标;
  3. 给阈值和窗口:阈值要能写进查询,窗口要覆盖至少一个业务周期;
  4. 写退出条件:明确什么情况下停止、回退或合并,避免动作只进不退;
  5. 指定责任人与复核周期:谁维护数据,多久复核一次,过期怎么办。

一个反例和改写:

反例问题改写
“服务拆分后要持续优化性能”无指标、无阈值、无退出“拆分后订单创建 p99 不超过拆分前 1.2 倍,连续 30 天;否则回退到单体路径”
“上 SLO 提升稳定性”把工具当目标“订单创建 SLI 达到 99.9%,错误预算低于 20% 时冻结非紧急发布”
“加强成本管理”无归属、无口径“关键资源 owner 标签覆盖 100%,单位订单成本按周对比,连续两周上涨 10% 触发评审”
“推进平台建设”无用户、无采纳“新服务黄金路径采纳率 80%,创建到首次上线中位数不超过 1 天”

模板不能保证判据一定正确,但能挡住大部分“听起来很对、实际上无法验收”的治理目标。评审时如果一条判据写不出主指标和退出条件,就应当退回重写,而不是先上线再说。

常见错误

  • 把阈值当常数。表中的数字是起点,业务量、团队规模和监管要求不同,阈值必须重新校准。
  • 只查触发条件,不写退出条件。治理动作没有退出条件,就会变成永久负担。
  • 用工具名代替判据。“我们上了服务网格”不是证据,“配置冲突检查通过、级联故障演练通过”才是。
  • 把未分摊成本藏进“其他”。未分摊比例本身就是一个需要治理的指标。
  • 把附录当规范。附录是索引,具体推导和代码在正文;脱离正文引用表格,容易断章取义。

小结

本附录把卷四的判据压成 12 张表,覆盖拆分、契约、发现、网关、配置、观测、SLO、混沌、发布、租户、平台与成本。每张表都包含触发条件、观测信号和退出条件,目的是让治理动作可以被评审、被执行、被撤回。

表格不能替代判断。真正要带走的是三个习惯:先定义证据,再决定动作;先写退出条件,再开始改造;先找责任人,再谈指标。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「books」更多文章

  1. 《互联网产品的 AI 架构·平台化与治理》附录 C 平台化评审清单
  2. 《互联网产品的 AI 架构·平台化与治理》附录 B 能力目录与配额字段速查
  3. 《互联网产品的 AI 架构·平台化与治理》附录 A 治理角色与职责速查