3. 多云接入网关的总体架构
多云接入网关不是“把 MQTT Broker 换成能连三家云”的简单代理,它要在设备侧保持统一接入语义,在云侧适配不同厂商的物模型、Topic 规范、认证方式和 QoS 能力。理解它的总体架构,关键是抓住一条主线:设备流量从南向进入,经协议转换与连接管理,由消息路由决定去向,再通过北向接口写入目标云,同时整条链路具备可切换的高可用能力。下面按分层模型、南北向接口、协议转换、连接管理、消息路由与高可用六个视角展开。
一、网关分层模型
推荐把网关划分为五层,自下而上依次是:
- 接入层:监听 MQTT、CoAP、HTTP、Modbus TCP 等南向协议端口,完成 TLS 卸载、设备身份初步校验与限流。
- 协议适配层:把不同南向协议的报文解析为统一的内部消息结构(如
UnifiedMessage),并做单位、时间戳、编码归一化。 - 核心处理层:包含连接管理、会话状态、消息路由、规则过滤与本地缓存。
- 北向适配层:针对阿里云 IoT、华为云 IoTDA、AWS IoT Core 等分别实现认证、Topic 映射、物模型转换与发布。
- 运维管理层:提供配置下发、指标采集、日志、健康检查与灰度切换。
分层的意义在于:南向协议变化只影响接入层与适配层,云厂商 API 变化只影响北向适配层,核心路由与连接管理保持稳定。这样新增一朵云时,通常只需增加一个北向适配插件,而不必改动设备侧接入逻辑。
二、南北向接口
南向接口面向设备,强调“统一接入”。典型约定包括:设备以 productKey/deviceName 或统一设备 ID 接入;上行 Topic 采用 /v1/devices/{deviceId}/telemetry、/v1/devices/{deviceId}/event;下行采用 /v1/devices/{deviceId}/cmd。网关在接入层完成鉴权后,把设备映射为内部会话对象。
北向接口面向云平台,强调“按云适配”。以阿里云为例,上行属性上报 Topic 形如 /sys/{productKey}/{deviceName}/thing/event/property/post,数据体为 JSON;华为云 IoTDA 则使用 $oc/devices/{deviceId}/sys/properties/report。网关北向适配层负责把统一消息转换为目标云要求的 Topic、Payload 和签名方式。南北向接口的差异被隔离在适配层,核心层只处理统一消息。
三、协议转换
协议转换包含三个层次:传输协议转换(如 Modbus TCP 转 MQTT)、消息格式转换(如二进制 TLV 转 JSON)、语义转换(如把寄存器地址映射为物模型属性)。以 Modbus 温度寄存器为例,设备上报 0x0190(400),若量程为 0.1℃,则实际温度为 40.0℃。网关需在适配层完成“原始值 × 比例系数 + 偏移量”的换算,再按目标云物模型写入 temperature 属性。
转换规则建议配置化,而不是硬编码。例如用一张映射表描述:源协议字段、目标属性名、数据类型、缩放因子、单位、是否必填。这样同一份规则可复用于多朵云,只在北向适配层做字段名微调。
四、连接管理
连接管理要同时维护设备侧会话和云侧连接。设备侧需处理心跳、遗嘱、离线队列、会话恢复;云侧需处理长连接保活、断线重连、配额限制与证书轮换。一个实用做法是维护“双状态表”:设备会话状态(在线/离线/挂起)与云通道状态(已连接/重连中/不可用)。当云通道不可用时,网关把上行消息写入本地持久化队列,待恢复后按时间顺序补发,并设置最大缓存条数与过期时间,避免磁盘无限增长。
五、消息路由与高可用设计
消息路由决定一条上行消息最终发往哪朵云。常见策略有:按设备分组路由、按消息类型路由、按权重分流、按主备优先级路由。例如温度遥测主发阿里云、备发华为云;告警事件同时发往两朵云。路由表可用 deviceGroup → primaryCloud → backupCloud 表达。
高可用设计围绕“无单点、可切换、可回补”展开。网关实例通常无状态化部署,会话与路由配置放入 Redis 或 etcd;多实例通过负载均衡接入设备。云侧通道采用主备双连,健康检查失败后自动切换。切换过程中,未确认消息进入重试队列,带幂等键防止重复写入。下面这张图给出总体架构与数据流向。
六、一个可落地的路由与切换示例
假设某工厂有 200 台温湿度传感器,要求数据主发阿里云、备发华为云,告警事件双发。路由配置可写成:
route:
- group: factory-a-sensors
primary: aliyun-iot
backup: huawei-iotda
match: telemetry.temperature | telemetry.humidity
qos: 1
retry:
maxQueue: 5000
ttlSeconds: 3600
idempotentKey: deviceId + ts + metric
- group: factory-a-sensors
primary: aliyun-iot
backup: huawei-iotda
match: event.alarm
fanout: [aliyun-iot, huawei-iotda]
qos: 1
当阿里云通道健康检查连续 3 次失败(间隔 5 秒),网关把主通道切到华为云,同时把未确认消息写入重试队列。恢复后按 ts 升序补发,并用 deviceId + ts + metric 作为幂等键,避免云端出现重复点位。判断切换是否成功,可观察三个指标:云通道连接状态由 connected 变为 standby、重试队列长度先升后降、云端最新数据时间戳与设备时间戳偏差小于 10 秒。
综上,多云接入网关的总体架构可以概括为“南向统一接入、核心统一处理、北向按云适配、全局高可用”。分层模型保证变化隔离,南北向接口明确边界,协议转换与连接管理解决异构与状态问题,消息路由决定数据去向,高可用设计确保切换与回补不丢数据。把这六件事在架构上分开,后续扩容、排障和新增云厂商都会变得可控。