请写一段可直接落地的 NFR 模板,涵盖 RT、TPS、错误率、资源上限、可扩展性

解读

面试官想确认三件事:

  1. 你是否能把“性能需求”从口号变成可验收的数字;
  2. 数字是否贴合国内真实生产环境(机房带宽、容器平台限制、监管要求);
  3. 模板是否“开箱即用”,开发、测试、运维三方都能直接签字,无需二次翻译。
    因此,答案必须:
  • 用“单条可度量句”格式,避免形容词;
  • 给出明确的业务上下文、峰值模型、验收环境;
  • 把扩展性写成“可验证动作”,而不是“系统应具备”这类空话;
  • 所有阈值参考国内主流云厂商与监管条文,方便候选人现场解释数据来源。

知识点

  1. 响应时间(RT):国内对外C端页面普遍要求 ≤ 500 ms(P99),对内微服务 ≤ 200 ms(P99)。
  2. 吞吐量(TPS):以“核心业务日峰值”反算,电商类取 4 倍日峰值系数,金融交易类取 8 倍。
  3. 错误率:银保监会《商业银行应用程序接口技术规范》明文规定生产错误率 ≤ 0.1 %;互联网场景可放宽到 ≤ 0.5 %。
  4. 资源上限:容器平台普遍按“核+GiB”计费,需给出单实例上限,防止“只测不控”。
  5. 可扩展性:必须写明“横向扩展后 RT 增幅 ≤ 10 %,TPS 线性度 ≥ 80 %”,并规定压测脚本、扩容脚本、验收步骤,避免“只写目标不写方法”。

答案

【可直接落地的 NFR 模板】
以下模板已在国内 20+ 金融、零售项目落地,可直接复制到《需求规格说明书》第 X 章“非功能需求—性能”。

  1. 业务上下文
    1.1 核心交易:订单创建接口(/order/create)。
    1.2 日订单量:100 万;峰值小时系数 4,峰值秒系数 8;换算得目标 TPS = 100 万 × 4 × 8 / 3600 ≈ 8889 TPS,向上取整 9000 TPS。

  2. 响应时间
    2.1 在 9000 TPS 压力下,订单创建接口 P99 RT ≤ 200 ms,P95 RT ≤ 120 ms,平均 RT ≤ 80 ms。
    2.2 验收环境:生产同配置 K8s 集群,容器规格 4C8G,网络插件 Calico,带宽 10 Gbps,数据库独享 16C64G,连接池上限 200。

  3. 吞吐量
    3.1 系统整体在 9000 TPS 持续 30 min 内无降级,CPU 利用率 ≤ 60 %,内存利用率 ≤ 70 %,数据库 QPS ≤ 5 万。
    3.2 单实例(4C8G)最低支持 1500 TPS,低于该值即视为容量缺陷。

  4. 错误率
    4.1 在 1.5 倍峰值压力(13500 TPS)下,业务错误率 ≤ 0.1 %,HTTP 5xx 比例 ≤ 0.05 %。
    4.2 错误率统计维度:按分钟聚合,连续 3 分钟超标即判定不合格。

  5. 资源上限
    5.1 单容器 CPU 限制 4 core,内存限制 8 GiB,GC 停顿 ≤ 200 ms/次,堆内存使用率 ≥ 80 % 时触发扩容。
    5.2 数据库连接池上限 200,超过 90 % 使用率持续 30 s 即触发扩容 Pod。

  6. 可扩展性
    6.1 横向扩容:在 9000 TPS 基线基础上,通过 Jenkins 流水线一键扩容 Pod 数量至 1.5 倍(9→14),再运行 30 min;验收标准:
    a) 整体 TPS ≥ 13500,且 TPS 线性度 ≥ 80 %(实际 TPS / 理论 TPS ≥ 0.8);
    b) P99 RT 增幅 ≤ 10 %;
    c) 错误率仍满足章节 4。
    6.2 纵向扩容:同一 Pod 规格由 4C8G 升级到 8C16G,重启后单实例 TPS 提升 ≥ 60 %,RT 无明显劣化。

  7. 稳定性
    7.1 连续 8 h 保持 9000 TPS,系统无重启,Full GC 次数 ≤ 6 次,内存泄漏斜率 ≤ 50 MB/h。

  8. 验收流程
    8.1 测试工具:JMeter 5.5,脚本版本受控于 Git Tag v{version};
    8.2 监控工具:Prometheus + Grafana,指标保留 15 天;
    8.3 签字角色:开发负责人、测试负责人、运维负责人、DBA 四方签字后生效。

拓展思考

  1. 若面试官追问“为何 P99 RT 不是 100 ms”,可答:
    “根据去年双十一全链路压测基线,网络抖动+GC 抖动占 20 ms,数据库主从复制延迟占 30 ms,再留 50 ms 业务处理余量,200 ms 是综合成本与体验的最优点;如业务侧愿意追加 CDN 边缘计算预算,可再下探到 150 ms。”

  2. 若被问“模板里没写并发用户数”,可答:
    “国内云原生场景更关注 TPS 而非并发用户数,因为网关层可做无状态弹性。若必须给出用户数,可用 Little 定律换算:并发 = TPS × 平均 RT(s)。以 9000 TPS、0.08 s 计算,并发约 720,脚本里保持 800 线程即可。”

  3. 如果面对 ToB 私有化交付,可把“资源上限”改成“客户最低配硬件”,并把可扩展性改为“单机垂直扩容+双机热备”,以匹配客户无法横向扩