消息代理(WAMP)
WAMP消息代理是IronFlock的通信骨干。每个组件 — 边缘设备、中央服务、虚拟设备、AI系统和Web UI — 都连接到代理并通过它进行通信。
为什么选择WAMP
WAMP(Web Application Messaging Protocol)将两种通信模式统一在一个协议中:
- 发布/订阅(Pub/Sub) — 设备将传感器数据发布到主题;仪表板、FleetDB服务和警报评估器订阅并实时接收数据
- 远程过程调用(RPC) — AI服务调用边缘设备上的函数;后端触发OTA更新;操作员向机器发送命令
这种双模式意味着IronFlock不需要为实时数据流和请求-响应操作使用不同的系统。一个协议,一个连接,两种模式。
组件如何连接
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 边缘 │ │ 虚拟 │ │ Web UI │
│ 设备 │ │ 设备 │ │ (浏览器) │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ WSS │ WSS │ WSS
└────────────────────┼────────────────────┘
│
┌───────┴───────┐
│ WAMP Broker │
└───────┬───────┘
│
┌────────────────────┼────────────────────┐
│ WSS │ WSS │ WSS
┌──────┴───────┐ ┌──────┴───────┐ ┌──────┴───────┐
│ 后端 │ │ FleetDB │ │ AI │
│ 服务 │ │ 服务 │ │ 服务 │
└──────────────┘ └──────────────┘ └──────────────┘所有连接使用WSS(WebSocket Secure) — 基于TLS的加密、持久、双向连接。
通过Realm实现项目隔离
代理使用WAMP Realm在项目之间强制执行严格隔离:
- 每个项目-应用组合获得自己的Realm — 一个完全隔离的消息命名空间
- 在一个Realm中发布的消息对所有其他Realm不可见
- 项目A中的设备无法看到或与项目B中的设备交互
- 即使相同的应用安装在两个不同的项目中,也在不同的Realm中运行
认证
与代理的每个连接都需要认证:
| 组件 | 认证方式 |
|---|---|
| 边缘设备 | WAMP-CRA(质询-响应),使用每设备密钥 |
| 后端服务 | WAMP-CRA,使用系统凭据 |
| Web UI客户端 | 基于OIDC的会话令牌 |
| AI服务 | 具有范围限制的系统凭据 |
未授权的客户端无法加入Realm、订阅主题或调用过程。
实时数据流
传感器读数从设备到仪表板的流动过程:
- 设备应用读取传感器值并将其发布到项目Realm中的WAMP主题
- WAMP代理将消息路由到该Realm中的所有订阅者
- FleetDB服务接收消息,将其写入TimescaleDB,并评估警报规则
- Web UI接收同一消息并实时更新仪表板图表
整个流程以亚秒级延迟发生 — 仪表板随数据到达的速度实时更新。
用于设备控制的RPC
代理还支持对边缘设备的直接控制:
- 操作员在Web UI中点击”重启应用”
- 后端通过代理在设备代理上调用RPC
- 设备代理接收调用,重启容器并返回结果
- Web UI显示确认信息
相同的机制驱动物理AI — 当AI助手在设备上调用函数时,它就是通过代理的RPC调用。
可扩展性
WAMP代理在生产部署中作为集群运行:
- 多个代理节点处理并发连接
- 负载在节点间分配
- 设备维持持久连接,故障时自动重连
- 代理以低延迟消息传递处理数千个并发设备连接
本地部署
在本地部署中,WAMP代理与其他中央服务一起运行在您的基础设施上。协议和隔离保证完全相同 — 唯一的区别是网络路径(本地而非互联网)。
详见本地部署。
Last updated on