系统架构设计
设备 → Go → Node → Vue。禁止跳层。插件可换。同一边界从单机长到集群。
架构不是画给架构师看的装饰图,而是为首页那两笔账服务的:少人天、数据敢用。
设计原则见 设计理念;问题定义见 我们主要解决什么问题。
为什么必须这样分
| 若架构允许…… | 现场会变成…… | 凌点域的硬规矩 |
|---|---|---|
| 前端直连 Go / Broker | 权限乱、版本绑死、远程说不清 | 禁止跨层直连 |
| 协议写死在核心里 | 每加设备就改内核、等人窗 | 协议热插拔 |
| 只存「算干净」的数 | 排障只能到现场抓包 | 原始 + 标准双轨 |
| 配置散落在数据面 | 多租户与 OTA 真相源混乱 | 配置 / 权限只在 Node |
| 单机一套、集群另一套 | 扩容等于推倒重来 | 边界不变再扩容 |
一句话:Device → Go → Node → Vue,各层只跟邻居说话。
总览图
谁干什么、谁不干什么
| 层 | 组件 | 干 | 不干 |
|---|---|---|---|
| 边缘 | 设备 / 网关 | 采集、执行下行 | — |
| 消息 | gmqtt | MQTT 接入、Topic | 业务解析、权限 |
| 数据面 | Go server | 订阅、解码、规则/OTA 执行、双轨落库、事件总线 | 多租户 UI、业务编排真相源 |
| 控制面 | Node | HTTP API、实时推送、配置/OTA 编排、权限、开放接口 | 持有设备长连接 |
| 展示 | Vue / 小程序 | 可视化与现场作业 | 直连 Go 或 Broker |
| 网关 | Nginx | 反代与静态资源 | 业务逻辑 |
| 存储 | TD / PG / Redis / Manticore(可选) | 时序+全量上行 / 业务权威 / 热数据 / 全文检索 | — |
硬规矩(与实现对齐):
- Go 不托管 Broker,只当 Client 连 gmqtt。
- 业务配置、固件、任务、权限 只在 Node。
- 邻居通信,禁止跳层。
消息怎么走:少改固件、少猜意图
上下行靠约定 Topic,协议差异消化在插件,上层只认 标准设备消息信封。
Topic(示意): {PK}/{GW}/self/{module}/{u|d}
| 方向 | 典型 | |
|---|---|---|
| u | 设备 → 平台 | 属性、事件、OTA 进度、系统消息 |
| d | 平台 → 设备 | 服务、配置推送、OTA 下发 |
- 主路径:MQTT + gmqtt。
- 扩展:Modbus / HTTP / TCP / UDP 等汇入同一语义。
- 上行:接入 → 插件解码 → 双轨落库 → 规则/转发 → 事件总线 → 实时推送。
- 下行:管理端/API → Node 编排 → Go 编码 → gmqtt
d→ 设备。
对现场的意义:厂商按 Topic/插件接;运维远程看原文+标准;前端永远不碰 Broker。
数据怎么流:一次调通、远程说清
流水线为「接得上、追得回、转得出」服务,不是五层名词游戏。
| 段 | 凌点域落点 | 服务哪把尺子 |
|---|---|---|
| Adapter | gmqtt / 网络入口 / 网关 | 一次调通 |
| Uplink | Go server 上行分发 | 一次调通 |
| Processor | 插件 → 标准信封 | 一次调通 |
| Storage | TD 全量上行;Redis;PG | 远程说清 · 数据敢用 |
| Forwarder | 数据转发到外部系统 | 少绑架 |
| Downlink | Node → Go 编码 → gmqtt d | 控得住、可审计 |
编解码
原始 → 传输(可压缩)→ 解析 → 验签/归一化 → 标准设备消息 → 规则 / OTA / 落库 / 推送。
插件从哪来
Node 协议仓库发布 → Go server 拉取激活包 → 热加载(原生插件 / WASM / 内置)→ 上行解码。
新协议装模块,不改 Vue。
存在哪:双轨是数据敢用的底座
| 存哪 | 存什么 | 为何这样 |
|---|---|---|
| TD | 遥测 + 全量上行原文 | 可配保留周期;远程排障主存 |
| PG | 业务、OTA、日志索引 | 控制面权威源 |
| Redis | 热数据、影子、规则 | 短时效,不扛长期历史 |
| Manticore(可选) | 全文检索 | 按部署启用 |
没有专职数据团队时,原始可追 + 标准可算 + 标准参数口径,比再堆一张「治理中台」海报管用。
人怎么连上平台
| 通道 | 用途 |
|---|---|
| HTTP API(管理 / 开放 / 移动) | 经 Node |
| 实时推送 | 经 Node(不直连 Go) |
| Vue 管理端 + 小程序 | 同一控制面;现场用业务词 |
这是「能力交到现场」的技术前提:手机能办的,不必等人带抓包工具。
阶段一:单机起步
逻辑分层不变,进程可以挤在一台小机器上——先跑起来,再按同一边界加机。
后续:多实例、独立 gmqtt、消息队列等抬吞吐;禁止跳层与双轨规矩不换。容量见 性能测试报告。
架构 ↔ 三把尺子
| 尺子 | 架构落点 |
|---|---|
| 一次调通 | 插件 / AI 接入、标准信封、Topic 契约 |
| 远程说清 | 双轨、追踪、全量上行、实时推送 |
| 数据敢用 | 标准参数路径、业务只认物模型、脏数据不直灌业务 |
| 现场故事 | 架构如何撑住 |
|---|---|
| 工厂能管 | 规则在 Go 近实时;编排与权限在 Node |
| 园区台账 | 业务模块挂 Node;小程序同接口 |
| OEM 白标 | 协议仓库 + 私有化同边界 |
| 集成商少驻场 | 远程双轨 + 禁止跳层带来的可定位性 |