diff --git a/docs/08-development-plan.md b/docs/08-development-plan.md index 3f6193c..9160e62 100644 --- a/docs/08-development-plan.md +++ b/docs/08-development-plan.md @@ -62,7 +62,7 @@ P4/P5定时等待与后续查询轮次的实现及回归记录见[时钟报告]( 2. 已实现[基础运行观测](api/observability.md)及[有界业务状态与事件采样](reports/phase-6-business-observability.md):HTTP/WS、数据库连接池、后台批次、固定任务/交付/流程/Inbox状态计数、最近事件类别、终态耗时样本、固定事件阶段耗时、最早年龄、截断/新鲜度指标和可离线验证的告警规则;独立采集监听默认关闭,固定指标目录拒绝动态标签;发布前只读结构核验由[`orbit-admin verify`](api/operations.md)提供,运维人员也可用 `orbit-admin observe snapshot` 获取同一有界单节点快照。仍需端到端外部效果延迟、全局持久吞吐、Inbox从事件产生到推进完成的精确阶段延迟、全局发送队列、多节点聚合及生产采集/通知验证。 3. 已补齐受保护管理环境中的固定凭据操作文件、轮换、撤销、幂等回执和脱敏管理审计;轮换保留授权绑定并要求新令牌重新建立会话,旧 Worker 会话被排空且立即过期,撤销允许在停用范围内执行且不改写历史记录。已用一次性 MySQL 定向验证旧令牌失效、新令牌重绑和零外键;仍需补齐提交不明故障切点、多节点安全重绑演练、凭据最小权限配置核对和生产密钥托管/审计演练。 4. 已补[`orbit-admin retention inventory`](api/retention.md)只读盘点和[阶段报告](reports/phase-6-retention-inventory.md),能区分过期幂等、确定终态、未知效果、未终结流程、已确认/未确认交付、已消费/未消费Inbox、事件和审计规模;它不执行归档或删除。后续仍需评审各类保留周期、归档格式、受保护记录核对,再执行备份恢复、兼容升级和六类容量负载。未确认交付、有效幂等身份、当前/历史执行证据和未终结流程不能被普通清理破坏。生产HA及RPO/RTO继续按实际拓扑验证,不缩减为本机多进程检查。 -5. 已补[`orbit-load`](api/load.md)有界受理负载工具:固定请求形状、并发上限、每请求超时、无自动重试、延迟百分位和有限错误分类;已完成一次隔离 MySQL + HTTP 小样本实测,证据见[负载报告](reports/phase-6-load.md)。标准 Go 1.27.1 隔离回归仍需在工具链恢复后复跑;该工具只提供受理层测量,真实 Worker/流程/数据库拓扑容量仍需独立报告。 +5. 已补[`orbit-load`](api/load.md)有界受理负载工具:固定请求形状、并发上限、每请求超时、无自动重试、延迟百分位和有限错误分类;已完成24次冒烟及1000次扩大隔离样本,证据见[负载报告](reports/phase-6-load.md)。标准 Go 1.27.1 隔离回归仍需在工具链恢复后复跑;该工具只提供受理层测量,真实 Worker/流程/数据库拓扑容量仍需独立报告。 6. 已补[隔离备份恢复演练](api/backup-restore.md):源库和恢复库均为一次性 MySQL 容器,逻辑备份恢复后核对迁移账本、核心记录数量、固定索引和零外键;证据见[恢复报告](reports/phase-6-backup-restore.md)。该演练不替代生产备份介质、复制切换、跨版本恢复或 RPO/RTO 验收。 7. 已补[A18 数据库短暂不可用恢复演练](api/db-recovery.md):readiness 在数据库停止期间返回 503,同卷恢复后返回 200,并用原权限范围继续受理任务;证据见[数据库恢复报告](reports/phase-6-db-recovery.md)。该演练不替代主从切换、复制确认、跨故障域或 RPO/RTO 验收。 diff --git a/docs/release-checklist.md b/docs/release-checklist.md index 54a7f91..45d510d 100644 --- a/docs/release-checklist.md +++ b/docs/release-checklist.md @@ -38,7 +38,7 @@ | 项目 | 必须提供的证据 | 状态 | | --- | --- | --- | -| 受理、派发、流程推进和恢复吞吐 | 固定硬件、数据量、任务/流程混合模型,p50/p95/p99和资源曲线 | 仅有隔离小样本受理工具,生产容量未验收 | +| 受理、派发、流程推进和恢复吞吐 | 固定硬件、数据量、任务/流程混合模型,p50/p95/p99和资源曲线 | 已有24次及1000次隔离受理样本;Worker/流程/积压/资源曲线和生产容量未验收 | | 100万+企业规模推导 | 租户、队列、连接、事件、索引和保存周期的容量模型 | 未验收,不能由租户数直接推导 | | MySQL 复制、切换、RPO/RTO | 目标拓扑上的实际切换、复制确认、恢复点和恢复时间 | 未验收 | | 慢消费者、重连风暴、磁盘和锁等待 | 受控故障负载及积压清空证据 | 未验收 | diff --git a/docs/reports/phase-6-load.md b/docs/reports/phase-6-load.md index d5fad8e..2212711 100644 --- a/docs/reports/phase-6-load.md +++ b/docs/reports/phase-6-load.md @@ -1,6 +1,6 @@ # P6:受理层有界负载工具 -验证日期:2026-09-19。本批新增 `sdk/go/cmd/orbit-load`,用于隔离环境测量任务受理 HTTP 交换耗时。工具固定请求并发上限和每请求超时,使用独立幂等键,不自动重试、不启动 Worker、不执行外部副作用;失败仍输出报告并以非零状态退出。它不构成生产容量、可用性或百万租户承诺。 +验证日期:2026-09-20。本批新增 `sdk/go/cmd/orbit-load`,用于隔离环境测量任务受理 HTTP 交换耗时。工具固定请求并发上限和每请求超时,使用独立幂等键,不自动重试、不启动 Worker、不执行外部副作用;失败仍输出报告并以非零状态退出。它不构成生产容量、可用性或百万租户承诺。 ## 实现边界 @@ -23,6 +23,18 @@ 结果证明 24 次独立 HTTP 受理均成功且没有错误分类;延迟数值只属于本次主机、连接、数据量和请求形状,不能外推到生产。Go 1.27.1 工具链恢复后,标准 `scripts/test-mysql.sh` 会再次执行相同负载样本并把输出纳入全量日志。 +## 扩大隔离样本 + +为避免只保留冒烟级样本,使用同一工具在 macOS arm64(12 个主机逻辑 CPU)、Docker MySQL 8.4、单个 Orbit 进程、Go 1.25 临时兼容模块和共享网络命名空间中提交 1000 个任务;并发32、单请求超时10秒,未启动 Worker。数据库、凭据、服务进程和任务均在测试结束后销毁。 + +实际输出: + +```json +{"started_at":"2026-09-19T18:05:35.166979462Z","finished_at":"2026-09-19T18:05:37.964063213Z","requests":1000,"concurrency":32,"success":1000,"errors":0,"p50_ms":79.260709,"p95_ms":154.177542,"p99_ms":195.787458,"max_ms":333.219167} +``` + +1000 次受理全部成功,样本墙钟约2.797秒;这只能说明该隔离拓扑和请求形状下的受理行为,不能换算为生产吞吐、Worker执行吞吐、流程推进能力或百万企业容量。正式容量仍需固定目标硬件、连接池、数据量、任务/流程混合模型、积压恢复和数据库复制故障。 + ## 未完成的生产验收 仍需在固定硬件和目标拓扑中补充短/中/长任务混合、Worker 连接与重连、定时集中触发、流程推进、慢消费者、长期积压、数据库锁等待、复制延迟、故障切换、备份恢复及容量余量测试;这些结果必须与本工具的受理层样本分开记录。