Files
lislgosms/docs/phase-0-spike-progress.md

61 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 阶段 0 Spike 进度记录
## 2026-07-01
### 已完成
- 阅读第一版需求文档、UI 设计规范、前端路由、客户端布局、运营端布局和 package.json。
- 确认第一版边界:保留短信业务,彩信为待开发或隐藏,账户计费进入第一版。
- 创建阶段 0 最小工程计划。
- 创建 NestJS 与 Go Gateway 队列消息 Schema 和示例消息。
- 创建队列契约校验脚本。
- 完成 `bigwhite/gocmpp``JoeCao/cmpp-gateway` 在线资料初评,记录到 `docs/phase-0-open-source-evaluation.md`
- 创建 `api/``gateway/` 阶段 0 README 骨架,明确 Spike 边界。
- 安装 Go 1.26.4,补齐 Gateway Spike 可编译环境。
- 创建 Go Gateway 队列消息结构、追踪器、内存模拟 submit resp/deliver 链路和 15000 条模拟压测命令。
- 使用 `goproxy.cn` 成功接入 `github.com/bigwhite/gocmpp`,并创建编译级适配测试。
- 安装 Redis Windows portable fork 8.8.0,启动本地 Redis 并通过 `PONG` 验证。
- 安装 BullMQ/ioredis,创建 `api/src/spike/bullmq-link-spike.mjs`,跑通 15000 条 Redis/BullMQ 模拟链路。
- 基于 gocmpp 创建本地 TCP 集成测试,覆盖 CMPP 3.0 connect、submit、submit resp、active test。
- 基于 gocmpp 完成 deliver 回执 PDU pack/unpack 测试。
- 创建 Gateway 重连状态机和测试,验证首次断线后第二次连接成功的重试路径。
### 验证记录
- `node --version`v24.16.0。
- `npm --version`11.13.0。
- `go version`go1.26.4 windows/amd64。
- `npm run spike:contracts`:通过,4 个队列消息示例通过校验。
- `npm run build`:通过,Vite 输出 chunk 大小告警,不阻塞构建。
- `npm run spike:gateway`:通过,包含 gocmpp 编译级接入、追踪器测试和内存模拟链路测试。
- `go run ./cmd/spike`:通过,15000 条内存模拟链路全部生成 submit result 和 receipt event;本次运行耗时 32.8761 ms,吞吐 456258.50 msg/s。
- Redis:通过本地 portable Redis 启动并返回 `PONG`
- `npm run spike:bullmq`:通过,15000 条消息;入队 3444.88 ms,端到端 24377.45 ms,入队 TPS 4354.29,端到端 TPS 615.32,满足 500 条/秒 Spike 指标。
- `docker --version` / `docker compose version`:未通过,本机未安装 Docker。
### 当前阻塞与后续增强
- Docker 仍不可用;阶段 1 需要补齐 Docker Compose 或给出 Windows 本地替代启动方式。
- gocmpp 已完成本地 TCP connect、submit、active test 和 deliver PDU 验证;terminate、慢响应、窗口满、重复回执、sequence 回绕需在阶段 7 稳定性压测继续补充。
- 当前 BullMQ Spike 使用 Node 模拟 Gateway worker,不是 Go 进程直接消费 BullMQ;阶段 1/7 需要决定 Go 侧 Redis/BullMQ 兼容消费方式,或通过 NestJS Send Worker 将队列转为 Gateway 内部协议。
### 下一步
1. 进入阶段 1:工程骨架。
2. 输出阶段 1 实施计划和验收标准。
3. 建立 web/api/gateway/infra/docs 的工程结构与基础命令。
### 阶段 0 验收状态
| 验收项 | 状态 | 说明 |
| --- | --- | --- |
| 模拟短信链路:NestJS 入队 -> Go Gateway 提交 -> submit resp -> deliver 回执 -> NestJS 更新状态 | 已完成 | BullMQ/Redis 模拟链路已通过,Node 模拟 Gateway worker 回传 submit result 和 receipt eventGo 内存链路同步通过。 |
| Go Gateway 断线后可重连,并继续消费后续消息 | 已完成 | 已完成 Gateway 重连状态机测试;真实通道断线恢复将在阶段 7 加强。 |
| 全消息具备 traceId、messageId、channelId、sequenceId 或追踪映射 | 已完成 | Schema、示例、Go tracker 均已覆盖。 |
| Spike 文档记录是否采用 gocmpp、是否 fork、哪些能力自研 | 已完成 | 初步结论:协议层优先直接依赖 gocmpp,暂不 fork;连接管理、追踪、队列、限速、监控由本项目自研。 |
| 500 条/秒链路 Spike | 已完成 | BullMQ/Redis 端到端 TPS 615.32Go 内存基线同步超过 500 条/秒。 |
### 阶段 0 结论
阶段 0 已完成。第一版可以进入阶段 1 工程骨架建设。