124 lines
2.1 KiB
Markdown
124 lines
2.1 KiB
Markdown
# 实时网关 MVP 拆分
|
|
|
|
本文档用于把 `realtime-gateway` 第一阶段工作拆成可执行任务。
|
|
|
|
---
|
|
|
|
## 1. 目标
|
|
|
|
第一阶段只解决以下问题:
|
|
|
|
- 建立一个独立于现有模拟器的新 Go 网关工程
|
|
- 能接收 Producer 上报
|
|
- 能让 Consumer 按设备订阅
|
|
- 能转发位置和基础 telemetry
|
|
- 能保存 latest state
|
|
- 能提供最基础的健康检查和运行入口
|
|
|
|
---
|
|
|
|
## 2. 任务拆分
|
|
|
|
### 2.1 工程骨架
|
|
|
|
- 新建 `realtime-gateway/`
|
|
- 初始化 `go.mod`
|
|
- 建立 `cmd/` 和 `internal/` 结构
|
|
- 提供最小运行 README
|
|
- 提供开发配置文件
|
|
|
|
### 2.2 网络入口
|
|
|
|
- HTTP server
|
|
- `/healthz`
|
|
- `/metrics`
|
|
- `/ws`
|
|
- 优雅关闭
|
|
|
|
### 2.3 会话管理
|
|
|
|
- 生成 `sessionId`
|
|
- 维护连接生命周期
|
|
- 记录角色和订阅
|
|
- 断线清理
|
|
|
|
### 2.4 协议处理
|
|
|
|
- `authenticate`
|
|
- `subscribe`
|
|
- `publish`
|
|
- `snapshot`
|
|
- 错误返回格式统一
|
|
|
|
### 2.5 路由与 latest state
|
|
|
|
- 按 `deviceId` 路由
|
|
- 支持 `groupId` 和 `topic` 过滤
|
|
- latest state 内存缓存
|
|
- `snapshot` 获取最新值
|
|
|
|
### 2.6 轻鉴权
|
|
|
|
- Producer token
|
|
- Controller token
|
|
- Consumer token 或匿名策略
|
|
|
|
### 2.7 基础观测
|
|
|
|
- JSON 日志
|
|
- 连接日志
|
|
- 发布日志
|
|
- 基础 metrics 占位接口
|
|
|
|
---
|
|
|
|
## 3. 暂不进入 MVP
|
|
|
|
- 规则引擎正式实现
|
|
- 通知分发正式实现
|
|
- Recorder 正式实现
|
|
- Replayer 正式实现
|
|
- Redis
|
|
- 集群
|
|
- 数据库存档
|
|
- 高级限流
|
|
- 复杂 ACL
|
|
|
|
---
|
|
|
|
## 4. 建议开发顺序
|
|
|
|
1. 骨架与配置
|
|
2. HTTP 和 WebSocket 入口
|
|
3. 会话管理
|
|
4. 发布与订阅
|
|
5. latest state
|
|
6. 鉴权
|
|
7. 观察与日志
|
|
8. 插件总线占位
|
|
|
|
---
|
|
|
|
## 5. 完成标准
|
|
|
|
满足以下条件可视为 MVP 跑通:
|
|
|
|
- 可以启动一个独立 Go 服务
|
|
- 模拟 Producer 能发布 `telemetry.location`
|
|
- Consumer 能订阅某个 `deviceId`
|
|
- Consumer 能收到实时转发
|
|
- Consumer 可读取某个设备的 latest state
|
|
- Producer、Controller、Consumer 的角色边界基本可用
|
|
|
|
---
|
|
|
|
## 6. 下一阶段
|
|
|
|
MVP 跑通后优先做:
|
|
|
|
1. 插件总线正式化
|
|
2. Recorder 插件
|
|
3. 模拟器对接新协议
|
|
4. 简单规则插件
|
|
5. Dispatcher 插件
|