跳到正文

端到端延迟优化:验证证据台账

文档属性取值
文档角色截至证据截止日的验证快照与易变事实汇总
关联专题端到端延迟优化专题
验证等级mixed
证据截止2026-08-26

本文维护“截至 2026-08-26 可以确认什么、还不能确认什么”。它不是实时看板,也不保证旧数值仍代表当前生产 SLO。机制解释归各案例文档所有;这里不把测试全绿、容器健康或全部 200 当成性能因果证据。

证据截止时的验收状态

目标截止时证据判定
Server Reviews p95 < 500 ms优化后生产 Reviews n=50,p95 44.296 ms已满足
warm first-ready p95 < 1.5 s正常间隔 5/5 为 0.873–1.013 s小样本满足;仍需扩大冷/热分布
App→daemon→香港 Reviews p95 < 500 msgzip 后两组各 n=40,p95 158.839 ms / 87.118 ms两组均满足
50 Draft events catch-up < 3 s较早阶段记录 0.39 s;最终组合版本未做生产等价受控 replay未闭环
无变化同步 < 50 KiB/轮7 Project、8 request 的 exact block 为 2,859 B单轮满足;不能外推其他同步
request-id 串联 Caddy/Serverroute、status、duration、upstream 可关联,敏感字段过滤已实现
SIGTERM 5 s 内 drain、exit 0、无 137单测、隔离 preflight 与精确 exit-0 gate 已通过带在途请求的生产等价演练未闭环
功能与交付回归本地 targeted、GitHub CI、Server Delivery 均通过已满足证据截止时的自动门禁

本文只记录截至 2026-08-26 的验证证据,不能据此断言后续状态,也不能把证据截止时的主体部署写成“全部完成”。

三阶段性能证据

Server 热路径

相同 route /api/v1/reviews、相同 62,632 B response body、全部 200:

阶段nCaddy p50 / p95 / maxupstream p50 / p95 / max
Server 重构前122,328 / 2,497 / 2,497 ms2,328.658 / 2,497.464 / 2,497.464 ms
Server 重构后、gzip 前4125 / 37 / 40 ms25.331 / 37.076 / 40.014 ms

这是强生产 before/after,不是随机分流、同时段或可逆 A/B。机制和查询路径见Server 热路径与 Rust 架构重构

最终生产测量窗口:

范围np50p95max
structured all-route6232.675 ms25.528 ms62.507 ms
Reviews5025.528 ms44.296 ms62.507 ms

623 个请求全部返回 200。这个窗口描述优化后运行画像,不单独计算“提升倍数”。

macOS first-ready

场景n结果结论边界
历史旧 App 基线117.765 s单个历史点,不是旧 p95
新版正常间隔启动50.873–1.013 s小样本 p95/max 1.013 s
零间隔连续压力109 次 AX marker 1.07–5.38 s;1 次 20 s 内未出现 markerServer 请求全 200;UI/进程/AX 尾部未归因

可以确认常规启动进入约 1 s 区间,不能确认所有冷启动和突发场景已经闭环。机制见macOS first-ready 与 daemon 同步

gzip 跨境传输

测试块np50p95maxdecoded body
gzip 前 Reviews40391.522 ms815.801 ms1049.878 ms62,632 B
gzip 后第一组4073.417 ms158.839 ms414.386 ms62,632 B
gzip 后独立复测4079.637 ms87.118 ms90.939 ms62,632 B

wire 62,632 B → 10,194 B,减少 83.7%;Caddy p95 37 ms → 39 ms。因果解释见跨境传输与 gzip 因果实验

轻量对照 /api/v1/me:n=20,body 1,185 B,p50/p95/max 为 36.349/39.085/41.717 ms。

无变化同步

一个 exact block:

  • 7 个 Project;
  • 8 个 request,全部 200;
  • Caddy response body 合计 2,859 B;
  • 该 block upstream 1.75–4.36 ms;
  • 近期相邻轮出现过约 19.55–23.37 ms upstream 尾值。

结论仅限“一个代表性无变化稳态轮次的数据量达标”。它不能代表首次全量、冷缓存、大量变更或长期 p95。

证据强度

等级本次对应证据可以怎么表述
强因果gzip:业务 body 不变、wire -83.7%、upstream 不变、两组 XPC 复现主要收益可归因于 response transfer 减少
强运行 before/afterServer:同 route/body,upstream 从秒级到几十毫秒Server hot path 是第一阶段主瓶颈;不能称随机 A/B
实现机制 + 小样本体验first-ready:关键路径重画,n=1 历史点与 n=5 新样本常规启动显著改善;不能声称完整尾部分布
单轮运行证据no-change sync 2,859 B该轮满足,不外推长期和其他场景
正确性/交付证据tests、CI、health、restarts=0证明门禁通过,不证明性能因果

证据截止时的自动验证口径

不同环境的测试计数必须分开。

本地 macOS / targeted

  • daemon library:267 passed、2 ignored;
  • daemon main:4 passed;
  • real XPC:1 passed;
  • lifecycle:65 passed;
  • keychain:1 passed;
  • server integration:8 passed;
  • fmt、clippy、macOS native、API contract、diff check 通过。

GitHub main workspace CI

  • daemon library:265 passed、2 ignored;
  • daemon main:4 passed;
  • agent runtime XPC E2E 因平台/feature gate 为 0;
  • lifecycle:60 passed;
  • server integration:8 passed。

Router oneshot + 真实 PostgreSQL容器 + migrations 属于应用级端到端测试;直接调用 ServerRepository 的 read_path_performance 属于组件/集成语义回归;daemon 随机 TCP listener 的 gzip 测试属于网络边界组件测试;香港 Caddy + 真实 XPC 才是生产链路验证。不要把它们统称成 E2E。

独立 correctness review:GO,0 blocker。

证据截止时的构建与生产交付

项目结果
PR #204 main commit8b33ec481014e3ca07be39df5be7cbf7b88d742d
PR #205 main commit408de49048021a3fdf53622157f519a88b50392d
PR #206 source / squash main53fabaf0bcfbaee6aa597768b2a340ea7830bb2b / 133fa5a7c784a314dcc85f4da0c613432e08557f
#205 main CI / delivery32868219409 / 32869884040,success
#206 main CI / delivery32919506973 / 32920318605,success
最终生产镜像ghcr.io/lilhammerfun/clumsies-server@sha256:98454460ba43353a21791bf9fffd708c314a7559bfd1d9394cd4ad63810e03f0
容器running、healthy、restarts=0、FailingStreak=0
release candidate36 tables / 22 migrations
发布保护preflight backup、cutover 前 backup、公网 health 200

这些事实证明证据采集时运行的是预期不可变构建,并通过当时的发布门禁;不证明该镜像或容器状态在证据截止日之后仍然有效,也不替代上面的性能实验。

签名旁路事实

证据采集时本地已安装的 Debug runtime:

text
Signature=adhoc
TeamIdentifier=not set
Identifier=ai.clumsies.daemon
designated requirement: identifier "ai.clumsies.daemon"
codesign --verify --strict: passed

没有创建或导入 Developer ID。签名告警来自 archived Zig 只读检查在错误边界验证未使用 runtime,已由 PR #205 修复;它不是本次性能根因。完整边界见附录:本地 Debug 与分发签名边界

未闭环清单

  1. 在最终组合版本、生产等价环境重放至少 50 个 Draft events,确认 catch-up < 3 s。
  2. 对带在途请求的候选 Server 执行 SIGTERM,确认 5 s 内 drain、exit 0、无 137。
  3. 扩大 first-ready 冷启动与 warm start 样本,区分 App phase、AX marker 和 daemon ready。
  4. 归因零间隔 10 次启动中的 1 次 AX marker timeout。
  5. 分别测量首次全量、冷缓存、大量变更和 post-ready collections settled。
  6. 为 cache writer 增加 queue depth、coalesced、evicted 与 write failure 指标。
  7. 若要正式排除系统代理,固定有效路由后做代理开/关隔离实验。

较早记录的“50 events 0.39 s”只能作为历史/集成证据,不能代替第 1 项的最终组合版本复测。

追溯链接

新证据到达时原位更新本台账。案例文档只在机制、实现或实验解释变化时更新,不为每次复测复制一套专题。