哈喽大家好,我是「老周聊架构」主理人老周。今天我们来讲一下物联网平台架构设计,虽然我们是AIoT部门,也就是AI+IoT,不过大家看我的文章也能看得出最近写的关于AI的文章相对多些,那今天老周就来和大家分享下物联网平台架构设计。
物联网(IoT,Internet of Things)正在以前所未有的速度渗透到工业、农业、智能家居、城市管理等各个领域。随着接入设备数量从百万级迈向百亿级,如何构建一个高可用、高并发、低延迟、易扩展的物联网平台,成为每一个 IoT 从业者必须面对的核心命题。
本文就不以我司的IoT平台来说了,整体思想大差不差,有些差异化的东西我会说。IoT平台目前也很成熟了,我们以阿里云 IoT 平台、涂鸦智能开发者平台、小米 AIoT 开发者平台三大业界标杆为参考,结合自身在Iot领域的实践以及业界主流平台的建设,系统梳理物联网平台的整体架构设计,涵盖设备接入层、协议适配、消息总线、设备管理、数据处理、安全体系、开放能力等核心模块,力求给出一套可落地的架构参考。
一个完整的物联网平台,通常可以划分为以下五个层次:

物联网设备种类繁多,网络环境复杂,不同场景对协议的要求差异显著。三大平台均支持多协议并存:
协议 | 特点 | 适用场景 |
|---|---|---|
MQTT | 轻量、发布/订阅、长连接 | 主流 IoT 设备,智能家居 |
CoAP | 基于 UDP,极低功耗 | NB-IoT、低功耗传感器 |
HTTPS/HTTP | 无状态,穿透性强 | 短连接上报、Webhook 回调 |
WebSocket | 全双工,浏览器友好 | Web 端设备、实时监控 |
私有协议 | 厂商定制 | 存量设备改造、工业协议 |
阿里云 IoT 在接入层提供了统一的协议网关,支持 MQTT over TCP/TLS、MQTT over WebSocket,并通过云网关支持 Modbus、OPC-UA 等工业协议的转换接入。
涂鸦智能 则在硬件侧深度集成,提供 TuyaOS 操作系统和模组 SDK,设备出厂即内置了与涂鸦云的安全连接能力,大幅降低了设备接入门槛。
小米 AIoT 采用 MIoT 协议规范,统一定义设备的 Service/Property/Event/Action 模型,所有接入设备必须遵循该规范,保证了生态内的互联互通。
设备接入的第一道关卡是身份认证,这里给出主流的几种方式:

我这边的设备认证是参考阿里云的设备三元组认证的
最佳实践:
对于蓝牙、Zigbee、Z-Wave 等短距离协议设备,无法直接连接云端,需要通过边缘网关进行协议转换和代理上云:

阿里云的Link IoT Edge、涂鸦的边缘计算网关、小米的小爱音箱/路由器都承担了这一角色。边缘网关的核心能力:
MQTT Broker 是物联网平台的心脏,需要支持亿级设备长连接。核心设计要点:

关键技术选型:
连接保活机制:
设备上报的海量数据需要经过消息队列进行削峰填谷,再由流处理引擎进行实时计算:

阿里云 IoT 的消息流转支持将设备数据直接路由到 RocketMQ、Lindorm(时序数据库)、函数计算(FC)等,通过规则引擎 SQL 进行过滤和转换,无需编写额外代码。
4.3 自研MQTT Broker的整体架构
下面给一下我之前做的MQTT Broker的一个架构图,老周纯手戳的!仅供参考~

物模型是物联网平台的核心抽象,用于统一描述设备的能力。三大平台均采用了类似的三元素模型:

小米 MIoT 规范将其进一步细化为 siid(Service ID)+ piid(Property ID)+ aiid(Action ID)+ eiid(Event ID)的四维坐标体系,所有设备能力都通过这套规范描述,实现跨品牌互联互通。
涂鸦智能则提供了标准功能点(DP,Data Point)体系,每个 DP 对应一个设备功能,支持布尔、枚举、整数、字符串、RAW 等多种数据类型。

阶段 | 核心能力 |
|---|---|
注册 | 批量导入、动态注册、设备三元组生成 |
激活 | 首次上线认证、绑定用户账号 |
运行 | 状态监控、影子设备、远程配置下发 |
OTA | 差分升级、分批灰度、失败回滚 |
注销 | 数据清理、证书吊销、资源释放 |
设备影子是云端对设备状态的持久化镜像,解决了设备离线时无法获取状态的问题:

这种设计使得应用层无需关心设备是否在线,始终与影子交互,由平台负责状态同步。
IoT 设备产生的数据天然是时序数据,需要专门的时序数据库进行存储和查询:
数据库 | 特点 | 适用场景 |
|---|---|---|
InfluxDB | 开源,写入性能强 | 中小规模部署 |
TDengine | 国产,超高压缩比 | 工业 IoT |
阿里云 Lindorm/TSDB | 云原生,弹性扩展 | 阿里云生态 |
TimescaleDB | 基于 PostgreSQL | 需要 SQL 查询 |
时序数据的核心挑战:
规则引擎是物联网平台的"大脑",负责对设备数据进行实时处理和联动:

这里我给大家推荐一个我之前实践的,当时我做规则引擎用的是Google Aviator,这是一款比较轻量级 Java 表达式引擎。
规则引擎的核心能力:
三大平台均在向 AI 方向演进:
安全是物联网平台的生命线,需要构建端-管-云全链路安全体系:

三大平台均提供了完善的 OpenAPI,允许第三方开发者构建上层应用:

比如 涂鸦 OpenAPI 提供了超过 200 个 API 接口,覆盖设备控制、用户管理、场景自动化等全场景,并支持 Webhook 回调,让第三方系统实时感知设备状态变化。
我5年前写过一篇文章:开放平台设计方案与实践
主要讲了开放平台几种常见的认证方式可供参考。
平台 | 硬件接入方式 |
|---|---|
阿里云 | 认证模组(乐鑫、移远等)+ Link SDK |
涂鸦 | 自有 CBU/WB 系列模组 + TuyaOS |
小米 | MIoT 认证 + 小米生态链 |

像阿里云 IoT 覆盖全球 8 个地域,设备根据 IP 地址自动就近接入,降低延迟。
物联网平台的各层均需支持水平扩展:
指标 | 目标值 |
|---|---|
可用性 | ≥ 99.95% |
消息延迟(P99) | ≤ 500ms |
设备连接成功率 | ≥ 99.9% |
消息不丢失率 | 100%(QoS 1/2) |
维度 | 阿里云 IoT | 涂鸦智能 | 小米 AIoT |
|---|---|---|---|
定位 | 企业级 PaaS | 一站式智能化 | 消费级生态 |
接入协议 | MQTT/CoAP/HTTP/工业协议 | MQTT/BLE/Zigbee | MIoT/BLE/Zigbee/WiFi |
设备模型 | 物模型(属性/事件/服务) | 功能点(DP) | MIoT 规范(SIID/PIID) |
边缘计算 | Link IoT Edge | 边缘网关 | 小爱音箱/路由器 |
数据存储 | Lindorm/TSDB/RDS | 涂鸦云存储 | 小米云 |
开放生态 | OpenAPI + 云市场 | OpenAPI + App SDK | 米家 App + MIoT 认证 |
AI 能力 | PAI + 达摩院 | 语音/视觉 AI | 小爱同学 |
部署方式 | 公有云 + 私有化 | 公有云 | 公有云 |
目标客户 | 企业开发者 | 品牌商/OEM | 消费者/生态链 |
如果你正在考虑自建物联网平台,以下几个关键决策点需要提前想清楚:
决策点 | 建议 |
|---|---|
MQTT Broker 选型 | 中小规模用 EMQX,大规模考虑自研或商业版 |
消息队列 | Kafka(高吞吐)或 RocketMQ(阿里云生态) |
时序数据库 | TDengine(国产,性价比高)或 InfluxDB |
设备模型 | 参考 MIoT 规范,提前定义好物模型标准 |
边缘计算 | 优先考虑 KubeEdge 或 OpenYurt(云原生边缘) |
安全方案 | 设备端 TEE + 传输 TLS + 云端 IAM,缺一不可 |
老周还是说下我自研 MQTT Broker 所遇到的一些难点以及如何解决的,这些经验我认为可以沉淀下来,供大家参考。
1、海量连接与并发管理(C10M 挑战)
难点: 当连接数达到百万甚至千万级时,操作系统的文件描述符(FD)限制、上下文切换开销,以及每个连接占用的内存(即便只是维持心跳)都会让服务器崩溃。
解决方案:
我就拿常规 16 核 32G 的机器上,如果只是“维持心跳”而没有高频业务报文,百万连接是完全可以实现的。
其实连接本身不怎么费 CPU,但非常费内存。
计算公式:
假设一个连接总共占用 15KB 内存(包括内核和应用层),那么 100 万连接 ≈ 14.3GB 内存。这还没算Broker 状态维护所需要的内存。
当时我是用 Vertx 实现了一个 Broker,刚开始能满足,后面设备连接上来以后,内存成了瓶颈,每隔一段时间内存就要爆,然后我们就加内存临时解决。当时你可能会说,为啥不做分布式的?当然这就是架构中的取舍,不要一上来就是各种分布式,前期能不用就尽量不用,因为分布式会在软件工程方面引入其它复杂的问题;那后面内存遇到了瓶颈以后,我们也重构成了分布式的。
2、高性能主题匹配(Topic Trie 瓶颈)
难点: MQTT 使用通配符(+ 和 #)进行订阅。当订阅关系达到千万级时,传统的树形结构(Trie Tree)在匹配时会产生严重的 CPU 消耗,且随着主题深度增加,内存占用呈指数级上升。
解决方案:

我拿 Node4 来举个例子吧。我们以一个节点存 8 bits (即 1 Byte)为例,如下:

可以看到,节点将存 256($2^8$)个指针,指针数组的下标代表子节点的值。整个节点占用的空间为 2048(256 * 8)bytes,然而实际有效的指针只有 3 个,也就意味着有 2024 (2048 - 24)bytes 浪费掉了。
那我们来看 ART Node4,由一个长度为 4 的 byte 数组和长度为 4 的指针数组构成,最多存储 4 个不同的 key 及其对应的子节点指针。一共占用 40(41 + 48)bytes。有效指针个数小于等于 4 时,使用这种类型的节点存储如下:

存储直接省了几十倍。
3、如何保证刚好发一次
MQTT 的 QoS 2(Exactly Once)是协议中最复杂的部分。要实现“既不丢失也不重复”,本质上是解决分布式系统中的共识问题。它通过一套四阶段握手(Four-way Handshake)机制,将消息可靠性从网络层提升到了协议状态机层面。
3.1 内存与存储爆炸 (Session Persistence)
挑战:QoS 2 要求 Broker 在握手完成前必须记住每个消息的状态。如果有 100 万连接同时进行 QoS 2 传输,内存会迅速溢出。
解决方案:
3.2 分布式集群下的状态同步
挑战:如果客户端在握手中途断线并重连到了 Broker 集群的另一个节点,新节点如何继续未完成的 QoS 2 握手?
解决方案:
3.3 消息落地的原子性
挑战:Broker 必须确保“收到消息”和“存入待分发队列”是原子的。如果 Broker 在发送 PUBREC 后突然宕机,消息必须还在。
解决方案:
WAL(Write-Ahead Logging):参考 Kafka 机制,QoS 2 消息进入 Broker 后先顺序写入日志,再进行逻辑处理。
4、集群化与横向扩展(Horizontal Scaling)
难点: MQTT 是有状态协议(Session)。如果客户端 A 连接在节点 1,客户端 B 连接在节点 2,节点 1 必须知道节点 2 上有谁订阅了 A 发的消息。
解决方案:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。