ARC 5让系统可以运行和排查第 19–22 章

第 22 章 —— 从微基准到生产容量证据

本章目标: 本章完成后,开发者能够选择一个具体 DSM 热路径,固定 JMH 环境和参数,保存原始 JSON,并只在可比条件下形成容量判断。

学习目标

  1. 区分 benchmark harness smoke、微基准结果和生产容量。
  2. 为 Register、Lease、CRDT、ChangeStream 与 security 选择对应 fixture。
  3. 记录 JDK、CPU、参数、单位和原始结果。
  4. 识别吞吐、延迟分布和分布式端到端性能的不同问题。

前置条件

案例进度

履约团队想知道「DSM 能不能扛住流量」。这个问题太大,无法直接测。团队把它拆成:RecordCodec 编解码延迟、Register get、Lease renew、CRDT apply/merge、ChangeStream overflow、加密 envelope 开销等独立热路径。

容量结论的证据链

从热路径问题到可复跑容量证据

仓库中的 benchmark module 包含:

每个 fixture 只回答它命名的局部问题。

Smoke run 与测量 run

BenchmarkHarnessTest 只验证 request 默认值、参数校验和 JSON 输出结构。一个很短的 JMH run 可以证明 harness 可执行,但 warmup、fork、测量时间不足时,结果波动不能用于容量承诺。

可复制的 smoke 命令:

cd submodule/dsm
mvn -q -pl dsm-benchmark -am test
mvn -q -pl dsm-benchmark -DskipTests exec:exec \
  -Dbenchmark.include=RegisterGetLatency \
  -Dbenchmark.warmupIterations=0 \
  -Dbenchmark.measurementIterations=1 \
  -Dbenchmark.measurementTimeMs=100 \
  -Dbenchmark.forks=0

这条命令是 CI/教学 smoke,不是报告数字的推荐测量配置。

结果卡的必要字段

字段 示例
revision DSM 505e7557
环境 macOS、JDK 25、CPU/内存、功耗模式
benchmark 完整类/方法名
fixture 参数 payload、条目数、线程等
JMH 参数 warmup、measurement、forks
mode / unit throughput 或 sample time;ops/s、ns/op 等
原始证据 JSON 文件路径与 SHA-256
解释边界 未包含网络、业务 IO、集群竞争等

只抄平均值会丢失单位、误差、分位数和运行条件。

从微基准到容量计划

微基准帮助发现热路径回归。生产容量还要叠加:实体大小与 key 分布、节点数、网络延迟/丢包、repair 流量、GC、线程竞争、安全开销、观察后端以及业务峰谷。最终压力测试需要在接近生产的独立进程环境中运行。

反例与故障注入

实验

运行 harness test 和一个短 smoke;将环境与参数写入 benchmark-run-card.json。书稿不固化短测分数,只校验结果卡字段完整。

实验验收卡

字段 内容
运行命令 BenchmarkHarnessTest + 指定 fixture 的 JMH smoke
输入或故障 明确 include、warmup、measurement、forks 和环境
可观察结果 harness 生成 JSON;结果带 mode/unit;命令可复跑
证据等级 E2:组件微基准 harness 与本机 smoke
本实验未证明 生产吞吐、P99 SLA、跨节点容量、峰值 repair 或成本预算

回顾

下一步

第 23 章进入第六篇:用真实 TCP 端口和 Redis 客户端观察 DSM 的复制、repair 与协议边界,补上 E4 证据。

证据链接