性能预算分配

把端到端延迟目标拆解到各环节:网关、服务、数据库与外部依赖各分配预算并留余量;新增依赖前核对剩余预算,避免逐项小幅劣化累积超标。

性能预算怎么分配

性能预算把端到端延迟目标拆成各环节的额度:网关多少、每个服务多少、数据库与外部依赖各多少,并留出一块余量应对波动与重试。它的作用是防止“逐项小幅劣化”累积超标——每个团队都觉得自己只慢了几毫秒,合起来就突破了整体目标。预算要进入变更流程:引入新依赖或新环节时,必须申明消耗多少额度并说明余量是否还够。

基本信息

分解对象网关、各服务、数据库、外部依赖,以及重试与序列化开销
余量总预算的 10%~20% 用于吸收波动与重试
口径按分位(P99)分解,而不是按平均耗时
载体预算表随架构文档或 ADR 维护,并被监控看板引用

典型使用场景

  • 多团队协作的服务链路:为每个环节设额度,避免单方优化目标不一致
  • 新依赖评审:评估引入后剩余预算是否仍能满足端到端目标
  • 延迟问题归因:对照预算表找出哪个环节超支最严重
  • 容量规划:按各段预算推断资源需求与扩缩容优先级
  • 架构演进:拆分或合并服务时重新分配预算并复评

示例

示例
端到端目标 P99 ≤ 500ms
网关 30ms + 服务 A 120ms + 服务 B 150ms
+ 数据库 100ms + 外部依赖 60ms + 余量 40ms

预算表维护要点

项要做的事常见遗漏
分位口径各段统一用 P99 或统一用同一分位各团队口径不一,数字无法相加
重试开销在预算里体现重试带来的额外往返只算单次调用,实际重试后超支
余量管理明确余量归属,谁动用谁记录余量被多个环节悄悄挪用后耗尽
超支处理超支环节列入治理清单并跟踪进度发现超支但无人认领,长期挂在表里

落地做法

  • 按端到端目标逐层拆解:网关、各服务、数据库、外部依赖
  • 每层预留余量(如总预算的 10%–20%)应对波动与重试
  • 新增依赖必须申明消耗额度,评审剩余余量是否足够
  • 在链路追踪中标注各段实际耗时,与预算表定期对照
  • 超支环节列入治理清单,避免长期挪用别的环节余量
预算表要进变更流程:引入新依赖时必须申明消耗多少预算并说明余量是否足够,否则预算会变成事后解释而不是事前约束。
各环节用不同分位口径(有人用 P95、有人用 P99)会让预算表失去可加性:数字看起来都达标,端到端仍可能大幅超标。

易错点

  • 各环节独立优化目标,端到端仍超标,团队各自达标却整体不达标
  • 新增依赖未申请预算,余量被悄然耗尽,问题在端到端劣化后才暴露
  • 分位口径不统一,不同环节的数字无法相加,预算表失去约束力
  • 重试成本未计入预算,故障期间实际耗时远超按单次调用估算的值
  • 预算表写完不更新,架构调整后表与现状脱节,无人再参考

数据来源与参考

  • Google SRE Workbook:SLO 与延迟预算实践
  • 《性能之巅(第 2 版)》(Gregg)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌