130 lines
2.1 KiB
Markdown
130 lines
2.1 KiB
Markdown
# 实时网关 MVP 拆分
|
||
> 文档版本:v1.0
|
||
> 最后更新:2026-04-02 08:28:05
|
||
|
||
|
||
本文档用于把 `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 插件
|
||
|
||
|
||
|