From 26ef67fb6ab57e4925f6b07ab6afbdb3ca8377cc Mon Sep 17 00:00:00 2001 From: hectorzhao Date: Thu, 20 Aug 2026 16:26:44 +0800 Subject: [PATCH] docs(test): record v5 pressure and priority results --- docs/system-functional-test-cases.md | 2 ++ docs/testing-progress.md | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/docs/system-functional-test-cases.md b/docs/system-functional-test-cases.md index 4b2cc5f..f6ddcd0 100644 --- a/docs/system-functional-test-cases.md +++ b/docs/system-functional-test-cases.md @@ -4695,6 +4695,8 @@ npm run verify:phase8 | TC-CMPP-PERF-V5-003 | 默认规则缓存失效与恢复 | 让聚合检查失败后重试;另在缓存期后模拟缺失一条默认规则 | 检查失败立即清除缓存并允许下次重试;短TTL内只缓存完整性,TTL后发现缺失规则并按既有创建校验恢复,不缓存应用规则内容或业务判断 | | TC-CMPP-PERF-V5-004 | 已持久化单消息快速入队 | 创建CMPP单号码内部任务和消息,记录已知taskId、messageRecordId、queuePriority后进入队列 | BullMQ jobId仍为messageRecordId、attempts和优先级不变;不再回查刚创建的任务和消息,任务最终更新为queued;普通批量任务原通用入队路径保持兼容 | | TC-CMPP-PERF-V5-005 | V5隔离环境阶梯复测 | 发布到虚拟机测试环境后,以V4相同模拟器、连接数、8槽Outbox和10/20/30/40/50条每秒阶梯执行 | 对比V4的SubmitResp分位及`application_lookup/risk_frequency/queue_publish/complete_submit`阶段;数据库业务数、冻结/计费、双Stream排空和回执幂等保持一致,遇拒绝、连接错误、P95超过5秒或持续积压立即停止 | + +执行记录(2026-08-20):`TC-CMPP-PERF-V5-001`至`004`通过本地API全量回归;`005`在`100.93.204.60`隔离测试环境完成。10/20/30/40条每秒均零拒绝、零连接错误且双Stream排空,判定通过;50条每秒缺8个SubmitResp且结束时命令Stream仍有`pending=64/lag=1407`,判定失败并停止升压。30与40条每秒真实积压下,优先任务排队P95分别为0.988秒、3.916秒,普通任务为26.282秒、58.536秒,优先级隔离通过;该结论仅覆盖移动号段,联通/电信六通道仍待P1复测。 | TC-GLOBAL-ALERT-001 | 铃铛分域预警菜单 | 准备签名清退未读消息和安全待处置告警后点击右上角铃铛 | 弹层分开显示“签名清退预警”和“安全检测与封禁”,分别展示真实数量和摘要,角标等于两项之和 | | TC-GLOBAL-ALERT-002 | 预警菜单跳转 | 分别点击铃铛中的两个菜单项 | 签名项跳转`/admin/signature-retirement`,安全项跳转`/admin/security-detection`,弹层关闭且对应页面读取真实后端数据 | | TC-GLOBAL-ALERT-003 | 域间故障隔离与轻量轮询 | 分别让一个汇总接口失败并观察30秒轮询请求 | 失败域显示0且另一域数据保留;安全预警使用专用汇总接口,不调用完整overview、规则、代理状态或告警大列表 | diff --git a/docs/testing-progress.md b/docs/testing-progress.md index 655d47e..3facafa 100644 --- a/docs/testing-progress.md +++ b/docs/testing-progress.md @@ -3770,3 +3770,15 @@ git diff --check - 只读测试环境PostgreSQL `EXPLAIN (ANALYZE, BUFFERS)`确认应用查询使用`SmsApplication_cmppAccount_key`,执行约0.046ms;默认规则聚合检查使用`RiskRule_applicationId_code_key`并命中5行,执行约0.047ms。现有索引已经匹配查询,因此本轮不增加猜测性索引或migration;测试环境未安装`pg_stat_statements`,没有为诊断修改数据库扩展或配置。 - 本地API TypeScript正式编译通过;API全量42套487项全部通过,其中`RiskReviewService`与`SendChainService`专项覆盖默认规则并发单飞/短缓存/失败重试/缺失恢复、单Submit只查一次应用、已知消息直接入队且不回查任务/消息,以及既有多号码、模板、频控、计费、补发和回执回归。5份Gateway队列契约、R0、R6、R7、R10和`git diff --check`通过;R9门禁在本轮已更新的`enqueueBatchTask`哈希通过后,被HEAD既有且本轮未修改的`dispatchDueScheduledTasks`哈希漂移阻断(契约期望`8fd154...`、当前方法`37db96...`),未为通过本需求门禁而改写或归因该并行历史。Jest使用`--forceExit`收尾仓库既有异步句柄;首次从仓库根目录误启动时扫描受保护`outputs/`并使用错误转换配置,未修改或删除其中任何文件,随后在`api`目录按项目配置重跑通过。 - 当前尚未部署虚拟机测试环境或执行V5阶梯压测;`TC-CMPP-PERF-V5-005`需在取得明确发布授权、建立PostgreSQL/运行源码/环境恢复资产后执行。没有发送、补发或重投真实短信,没有修改通道账号、密码、启停状态、企业余额或客户连接;`api/tsconfig.build.tsbuildinfo`、`tsconfig.tsbuildinfo`、`outputs/`、`pnpm-lock.yaml`和空文件`=`继续保护、不归因。 + +# 2026-08-20 CMPP压测优化V5:测试环境发布、阶梯复测与优先队列验收 + +- V5代码提交为`14f993c1f8e4ef5075a16c64ee8e46987054e21e`,未推送。仅发布到`100.93.204.60`虚拟机测试环境,运行标识为`14f993c1f8e4ef5075a16c64ee8e46987054e21e+workspace.v5.e38b3598c8de`;预生产`8.160.169.106`只读标识复核仍为`433b2ee56f6016ad8afff1bac73f510b8fd53083+gateway-v2.cd7bb8d05e7b`,未发布、未回退、未压测。 +- 发布前恢复目录为`/opt/cmpp-platform-backups/v5-20260820T073310Z`,包含PostgreSQL自定义格式备份、运行源码、环境/systemd配置和原运行目录Git元数据。`pg_restore --list`、tar可读性和`SHA256SUMS`均通过;数据库、源码、环境资产SHA-256分别为`1d72b72b8702b66494f6c63384ba11fb7414982aac3b3dba4f2bbcf32691c6d5`、`cfa4679ffeef64d0a5d13b198bac272b53b9b01a4887371503d76591cca8d44e`、`f8aa632d622556d709d1ddaba0610e5eeeb604075ad92b8f81aa945b16c6f251`。V5运行包`outputs/cmpp-v5-runtime-20260820-153020.tar.gz`为2407264字节,本地与测试机SHA-256均为`e38b3598c8debc00d32c336831d172b492119199a7d8c843dfb774c16711fd22`。 +- 标准发布完成依赖、安全/发布门禁、Prisma生成与迁移、前端/API/Gateway/安全代理构建、Nginx校验、重启和健康检查;91条migration无待应用项。API、Gateway、安全代理、MinIO、PostgreSQL、Redis、Nginx、Prometheus最终均active,隔离供应商连接6/6,命令与结果Stream最终均`pending=0/lag=0`。首次构建因部署目录旧Git元数据不能完成Go VCS stamping而在服务重启前停止;该元数据移入恢复目录并校验后,以`GOFLAGS=-buildvcs=false`按同一标准脚本重新发布成功,没有删除恢复资产。 +- 原压测脚本重复使用历史`1380000xxxx`号码池,首轮10条/秒有8条被真实24小时号码频控拒绝,因此该轮明确作废、未计入V5容量。没有清除或篡改Redis/PostgreSQL频控状态;测试脚本增加可配置手机号前缀,正式五档分别使用尚无频控记录的`1390000/1370000/1360000/1350000/1340000`号码池,全部经真实API、PostgreSQL、Redis、Gateway和隔离供应商链路,且数据库均识别为mobile。 +- V5正式阶梯结果:10条/秒599/599受理,P50/P95/P99=`30/105/1736ms`;20条/秒1199/1199,`552/735/808ms`;30条/秒1799/1799,`685/890/1464ms`;40条/秒2399/2399,`1016/1748/3111ms`。四档均为0拒绝、0连接错误,双Stream均在下一档前排空;相对V4,10/20/30/40条/秒P95由`146/1129/1626/2330ms`降至`105/735/890/1748ms`,40条/秒继续为安全档。 +- 50条/秒生成2999条,但只收到2991个SubmitResp,缺8个响应,因此按零丢响应停止线判定失败;已收到响应P50/P95/P99=`2586/2896/3895ms`,0显式拒绝、0连接错误。结束时命令Stream为`pending=64/lag=1407`,约75秒后排空;结果Outbox随后也恢复0/0,所有服务保持active且API/Gateway错误日志筛查为空。该档属于可恢复过载,不作为安全容量;当前结论仍为40条/秒健康、50条/秒不健康。 +- Prometheus按各60秒窗口附近75秒区间计算的API阶段平均值显示,10/20/30/40/50档`application_lookup`约为`1.42/51.04/65.54/108.64/247.65ms`,`risk_frequency`约`4.34/115.10/143.61/229.05/519.32ms`,`queue_publish`约`4.71/70.79/101.17/163.46/383.60ms`,`complete_submit`约`18.99/479.58/610.03/992.49/2285.77ms`。V5减少固定数据库往返后40条/秒P95继续下降,但50条/秒时同步风控、入队和持久化仍随数据库并发竞争放大,下一阶段应针对这些阶段继续做查询合并/事务缩短,而不是把50条/秒宣称为安全容量。 +- 优先队列在真实积压下通过验收。BullMQ配置为priority=1、normal=100;30条/秒时优先任务`queuedAt`至首条`SmsSubmitRecord.createdAt`的P50/P95=`0.786/0.988s`,普通任务为`14.678/26.282s`;40条/秒分别为`2.996/3.916s`与`45.017/58.536s`。低负载10/20条/秒两类接近,符合无积压时无需插队的预期;高负载差异证明优先任务能够越过普通积压持续取得发送Worker。SubmitResp按优先/普通拆分在40条/秒P95为`1727/1741ms`,说明上游受理没有饿死普通连接。50条/秒优先任务也优于普通任务,但两类均出现几十秒下游等待,不能用优先级掩盖总容量过载。 +- 本轮优先级结论只覆盖3个priority应用与7个normal应用混合、移动号段和现有六个隔离供应商账号;联通、电信号段及六通道跨运营商容量/优先级隔离仍未完成,不外推为全运营商结论。完整报告和原始`events.jsonl/summary.json`保存在短信平台测试项目。没有发送真实短信,没有修改通道账号、密码、启停状态、企业余额或客户连接;受保护的`api/tsconfig.build.tsbuildinfo`、`tsconfig.tsbuildinfo`、`outputs/`、`pnpm-lock.yaml`和空文件`=`继续排除提交、不删除、不归因。