test: bound event consumer reconnect storms
This commit is contained in:
@@ -59,7 +59,7 @@ P4/P5定时等待与后续查询轮次的实现及回归记录见[时钟报告](
|
||||
### P6 首批实施顺序
|
||||
|
||||
1. 已补[首批可复现故障工具](reports/phase-6-fault-boundaries.md):A04“派发已提交但消息尚未送达”、W01/W13事务提交结果不明,以及W16最终回执/旧PENDING结果重放/下一轮竞争。迁移器同时提供当前版本无外键新装基线;每个切点必须有实际数据库或进程证据,不能用响应错误推断事务是否已提交,也不能用普通SIGNAL竞争替代最终查询场景。
|
||||
2. 已实现[基础运行观测](api/observability.md)及[有界业务状态与事件采样](reports/phase-6-business-observability.md):HTTP/WS、数据库连接池、后台批次、固定任务/交付/流程/Inbox状态计数、最近事件类别、终态耗时样本、固定事件阶段耗时、最早年龄、截断/新鲜度指标和可离线验证的告警规则;独立采集监听默认关闭,固定指标目录拒绝动态标签;发布前只读结构核验由[`orbit-admin verify`](api/operations.md)提供,运维人员也可用 `orbit-admin observe snapshot` 获取同一有界单节点快照。仍需端到端外部效果延迟、全局持久吞吐、Inbox从事件产生到推进完成的精确阶段延迟、全局发送队列、多节点聚合及生产采集/通知验证。
|
||||
2. 已实现[基础运行观测](api/observability.md)及[有界业务状态与事件采样](reports/phase-6-business-observability.md):HTTP/WS、数据库连接池、后台批次、固定任务/交付/流程/Inbox状态计数、最近事件类别、终态耗时样本、固定事件阶段耗时、最早年龄、截断/新鲜度指标和可离线验证的告警规则;独立采集监听默认关闭,固定指标目录拒绝动态标签;发布前只读结构核验由[`orbit-admin verify`](api/operations.md)提供,运维人员也可用 `orbit-admin observe snapshot` 获取同一有界单节点快照。仍需端到端外部效果延迟、全局持久吞吐、Inbox从事件产生到推进完成的精确阶段延迟、全局发送队列、多节点聚合及生产采集/通知验证;SDK受控重连风暴已补[边界回归](reports/phase-6-reconnect-storm.md),真实慢消费者和跨节点重连仍待目标拓扑。
|
||||
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)有界受理负载工具及24次/1000次隔离样本,见[受理报告](reports/phase-6-load.md)。新增独立[`orbit-exec-load`](api/execution-load.md),通过真实Worker、任务结果和尝试历史核对,提供短/混合/中长任务的受理、排队、授权执行及完成耗时分布;具体环境、原始JSON和失败分母见[执行测量报告](reports/phase-6-execution-load.md)。新增[`orbit-workflow-load`](api/workflow-load.md),用本次发布版本的双分支并行流程,逐个核对不同任务、唯一尝试、来源、精确输出与本地调用;24/100实例及24实例截止负例已重新构建回归并绑定源码/二进制哈希,见[流程测量报告](reports/phase-6-workflow-load.md)。新增[`orbit-schedule-load`](api/schedule-load.md),已完成24/128次定时集中触发与24次计划量的截止负例,保存实际分母、唯一任务/尝试、来源与暂停收尾证据,见[定时测量报告](reports/phase-6-schedule-load.md)。标准Go 1.27.1全量仍待复跑,已补[长期积压与资源曲线样本](reports/phase-6-backlog.md):32×8 共256个触发点,在1个Worker/容量1和180秒截止下保留173个成功、83个未核验任务,并以独立数据库读取记录等待积压曲线;该单节点样本不替代目标拓扑容量。下一步补指标采集对照、长期存储增长、慢消费者/重连风暴和目标数据库拓扑容量。
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
| 受理、派发、流程推进和恢复吞吐 | 固定硬件、数据量、任务/流程混合模型,p50/p95/p99和资源曲线 | 已有受理样本、[真实Worker短/混合/中长执行样本](reports/phase-6-execution-load.md)、[Weave双分支流程样本](reports/phase-6-workflow-load.md)及[定时集中触发/积压曲线样本](reports/phase-6-backlog.md);目标硬件资源曲线、生产容量和HA仍未验收 |
|
||||
| 100万+企业规模推导 | 租户、队列、连接、事件、索引和保存周期的容量模型 | 未验收,不能由租户数直接推导 |
|
||||
| MySQL 复制、切换、RPO/RTO | 目标拓扑上的实际切换、复制确认、恢复点和恢复时间 | 未验收 |
|
||||
| 慢消费者、重连风暴、磁盘和锁等待 | 受控故障负载及积压清空证据 | 未验收 |
|
||||
| 慢消费者、重连风暴、磁盘和锁等待 | 受控故障负载及积压清空证据 | SDK 受控连续断线边界已回归(见[重连报告](reports/phase-6-reconnect-storm.md));真实慢消费者、跨节点风暴、磁盘和锁等待未验收 |
|
||||
| 跨版本 SDK/服务端 | 至少一个正式旧标签与候选版本的双向矩阵 | 当前仓库无正式标签,未验收 |
|
||||
|
||||
发布候选只有在所有“待目标环境/未验收”项得到对应环境证据后,才能进入生产审批。当前代码和阶段回归不等同于生产高可用、容量、RPO/RTO或百万企业承诺。
|
||||
|
||||
26
docs/reports/phase-6-reconnect-storm.md
Normal file
26
docs/reports/phase-6-reconnect-storm.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# P6 SDK 重连风暴边界回归
|
||||
|
||||
日期:2026-09-20。本批为独立 Go SDK 的受控协议回归,补充连接连续中断时的退避、处理器调用和最终 ACK 证据。它不是生产网络故障、跨节点公平性或慢消费者容量验收。
|
||||
|
||||
## 场景
|
||||
|
||||
`TestEventConsumerReconnectStormUsesBoundedBackoff` 使用真实 TLS WebSocket 客户端和受控测试服务器:前 4 次连接在握手后立即以传输错误关闭,第 5 次连接交付一条相同结果事件。消费器配置容量1、重连退避10–40ms、收尾1秒。处理器只在收到事件时增加一次本地调用计数,服务端收到合法 ACK 后才结束测试。
|
||||
|
||||
| 证据 | 结果 |
|
||||
| --- | ---: |
|
||||
| 连接尝试 | 5 |
|
||||
| 断线后重连次数 | 4 |
|
||||
| 退避上限 | 40ms |
|
||||
| 事件处理器调用 | 1 |
|
||||
| ACK确认 | 1 |
|
||||
| 重复/本地立即重跑 | 0 |
|
||||
| SDK竞态测试耗时 | 1.964s |
|
||||
| SDK vet/build | 通过 |
|
||||
|
||||
测试通过 `go test -race ./...`、`go vet ./...` 和 `go build ./...`(Docker Go 1.25.14 临时 modfile)运行;仓库 `go.mod` 声明的 Go 1.27.1 未修改。协议服务器只用于测试,未调用外部业务副作用。
|
||||
|
||||
重连时消费器保留订阅和事件交付身份;只有处理器返回成功后才提交 ACK。这个用例只验证连接层的有界重连和一次处理器调用,不能证明断线期间服务端租约、跨消费者业务 Inbox 去重、真实网络分区或多节点重连风暴的全局结果。处理器必须在业务 Inbox 与业务效果同一事务中按事件 ID 去重,SDK 本地计数不能替代该持久事实。
|
||||
|
||||
## 后续门槛
|
||||
|
||||
生产验收仍需固定目标网络和节点数量,加入慢处理器、事件积压、租约到期、多个消费者同时重连、数据库锁等待和采集资源曲线;应记录交付租约、ACK确认、Inbox处理、连接池、CPU、内存和磁盘指标,并核对重启后原身份恢复。当前证据不升级为跨故障域高可用、RPO/RTO或容量结论。
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
| 真实定时集中触发测量 | `orbit-schedule-load`;4×6及32×4触发,2×12截止负例,见[定时测量报告](phase-6-schedule-load.md) | 正常152项逐项核验;负例18个未观察点、4个未核验任务,非零退出;38个计划均暂停,实际库外键0。SDK全模块竞态/vet/build通过;生产容量未验收 |
|
||||
| 长期积压与曲线 | `make schedule-backlog`;32×8共256个触发点,1 Worker/容量1,独立连接每2秒读取状态 | 最高等待249,180秒截止时173成功/83未核验,计划全部暂停,实际库外键0;目标硬件资源与生产容量未验收,见[积压报告](phase-6-backlog.md) |
|
||||
| SDK 重连边界 | `TestEventConsumerReconnectStormUsesBoundedBackoff`,真实 TLS 测试服务器,4次连续断线 | 第5次连接恢复,重连4次、处理器调用1次、ACK1次;真实慢消费者/跨节点重连仍未验收,见[重连报告](phase-6-reconnect-storm.md) |
|
||||
|
||||
## 当前环境仍未覆盖
|
||||
|
||||
|
||||
Reference in New Issue
Block a user