架构设计

物联网平台架构怎么设计?从四层模型到边云协同的完整拆解与选型清单

大部分物联网项目的架构问题,不是画错了分层图,而是在设备接入层就把容量算错了,在数据层把成本估低了。这篇按四个层逐层拆解真实的取舍点,附三种典型架构的成本区间和 12 条上线前评审清单。

发布于 2026-10-30·更新于 2026-10-30·约 14 分钟读完

聊物联网平台架构,大部分人第一反应是画一张四层图:感知层、网络层、平台层、应用层。图画得都对,但真正让项目翻车的从来不是分层,而是每一层里那些没人提前算的数。

这篇不谈概念,只谈取舍。按四个层往下拆,每一层给出具体的判断依据、容易踩的坑和成本区间,最后给一份上线前必须回答的清单。你看完应该能判断:自己手上的项目该用哪种架构、大概花多少钱、哪些地方不能省。

先看结论

  • ✓决定接入层容量的不是连接数,是「每秒消息数 × 单条消息大小」,这两个数算错,后面全部白搭
  • ✓1000 台设备每天就能产生 800 多万条数据,时序库选错一次,第二年的存储账单会翻三倍
  • ✓边云协同的判断标准只有四条:延迟能不能忍、带宽够不够、断网能不能停、数据能不能出境
  • ✓500 台设备以下的项目不要上微服务,一套单体加一个消息队列足够跑三年
物联网平台架构IoT架构设计边云协同物联网四层架构设备接入层时序数据库选型

一、四个基本层,以及每一层最容易踩的坑

先给一张对照表。这张表的价值不在「分层」,而在最后一列——每一层真正让项目延期的地方。

层级职责典型组件最常见的坑
感知层采集物理世界的数据,执行控制指令传感器、PLC、电表、摄像头、道闸、空调面板以为「支持 Modbus」等于「能对接所有 Modbus 设备」,实际上每家厂商的寄存器地址表都不一样
网络层把数据从现场送到云端4G/5G 模组、NB-IoT、LoRa 网关、以太网、WiFi按实验室网速做容量规划,现场弱网下 MQTT 心跳超时、消息堆积
平台层接入、存储、计算、分发MQTT Broker、时序数据库、规则引擎、消息队列把消息队列和数据库当同一件事,用数据库直接扛写入,几万条/秒就崩
应用层面向人的界面和业务逻辑Web 后台、大屏、小程序、开放 API把业务规则全写进规则引擎的图形化配置里,半年后没人敢改
四层模型的常见坑对照

这张表里最值得展开的是感知层。设备协议对接的复杂度,和「协议种数」几乎无关,和「厂商数」强相关。同样是 Modbus RTU,A 厂家的温度寄存器在 40001,B 厂家在 30005,C 厂家要用功能码 03 读、04 读还不一样。做过一个校园项目,光是 7 台不同厂商的无线控制器,SNMP 的 OID 就要逐个查 MIB 文档核对,华为和锐捷的同名指标在完全不同的 OID 分支下。

!一个反直觉的结论

设备接入的工作量,80% 花在「摸清每个厂商的实际实现」,只有 20% 花在写代码。项目排期时如果按「一种协议 3 天」估算,实际会超支 3-5 倍。

二、设备接入层:80% 的性能问题出在这里

很多人问「一个 MQTT Broker 能扛多少设备」,这个问题没法直接回答,因为真正的容量公式是:

i接入层容量公式

压力 = 在线连接数 × 每设备每秒消息数 × 单条消息字节数。连接数只影响内存,消息速率才影响 CPU 和网络。10 万台设备每 5 分钟报一次,压力远小于 5000 台设备每秒报一次。

按这个公式,可以把接入层分成三档。三档之间的差别不只是「加机器」,而是组件形态要变。

设备规模每秒消息量(估)Broker 部署是否需要消息队列数据库写入策略
1 万以内100-500 条/秒单节点 EMQX / Mosquitto 即可不需要直写时序库,批量提交(每 500 条或 1 秒)
1 万 - 10 万500-5000 条/秒EMQX 集群 3 节点 + 负载均衡建议加 Kafka,做削峰和异步消费Kafka 消费后批量写入,写入并发控制在库的最佳区间
10 万以上5000 条/秒以上EMQX 集群 + 独立接入网关层必须 Kafka,且要分区规划分库分表或按设备 ID 哈希分片,配合冷热分离
接入层三档架构差异

除了容量,接入层还有三个必须提前定死的参数,定错了后期改起来很痛:

  • 心跳间隔(keepalive):默认 60 秒。设太短,10 万台设备的空心跳就能打满 Broker;设太长,设备掉线要 3 倍时间才能发现。建议 60-120 秒,配合服务端主动探测。
  • 重连退避:设备断网恢复后如果同时重连,会造成「惊群」。必须让设备端做指数退避加随机抖动,否则一次基站切换就能把 Broker 打挂。
  • QoS 等级:QoS 2 的开销是 QoS 0 的 4 倍以上。除了计费类指令,其余全部用 QoS 0 或 1。见过一个项目全链路 QoS 2,10 万台设备的吞吐只有理论值的四分之一。

还有一个常被忽略的点:设备离线判定和业务告警要分开。设备离线是通信层事件,业务告警是应用层事件。把两者混在一起,会导致「网络抖一下,值班手机响一片」。正确做法是设备离线超过 3 个心跳周期才置为离线,超过 10 分钟才发业务告警。

三、数据层:时序库选型,和一张容易被低估的账单

先算一笔账。假设 1000 台设备,每台 10 个指标,10 秒上报一次:

!数据量测算

1000 × 10 × 8640 次/天 = 8640 万条/天,约 2500 万条/天压缩后仍占 3-8 GB。一年下来 1-3 TB。如果选了一个不支持高压缩比的方案,或者把原始数据全量保留三年,第二年的存储和查询成本会翻三倍以上。

时序库的选择,本质是在「写入吞吐、压缩比、查询灵活度、运维成本」之间做取舍。下面是常见四种的实际对比:

方案写入能力压缩比查询语言运维复杂度适合场景
TDengine很高,单机可到百万级/秒高(列式 + 专用压缩)类 SQL,支持降采样函数低,国产文档齐全设备量大、指标结构固定、团队没专职 DBA
InfluxDB高中高Flux / InfluxQL中,集群版为商业授权指标基数高、查询灵活度要求高
TimescaleDB中高中标准 PostgreSQL SQL低(就是 PG)已有 PG 技术栈、需要和业务库联表
ClickHouse极高高SQL,分析能力强中高,需要懂分区和索引设计既要时序又要多维分析、报表场景重
四种时序方案对比(基于公开压测数据与实际项目经验,具体以自身数据模型实测为准)

比选型更重要的是分层保留策略。不管用哪个库,都建议按这个结构设计:

  • 原始数据(10 秒/1 分钟粒度):保留 7-30 天,用于问题回溯和精确告警
  • 分钟聚合(平均值、最大值、最小值、累计值):保留 1 年,用于趋势分析
  • 小时聚合:保留 3 年,用于同比环比和年度报表
  • 日聚合:永久保留,数据量小,用于长期经营分析

这套结构能把存储成本压到全量保留的十分之一左右,同时不影响任何常见查询。代价是聚合任务要写对,尤其是「累计值」的聚合不能简单求和,要取每个时间段的最大值减最小值。这个细节做错,电表读数、流量统计会全线出错。

四、边云协同:什么该放边缘,什么必须上云

「边缘计算」这个词被用得过度了,很多项目把边缘当成一个技术时髦,结果部署了一堆边缘盒子,运维成本翻倍,收益却说不清。判断标准其实只有四条,按顺序问:

判断维度问自己如果答案是「是」如果答案是「否」
延迟从采集到动作,能不能容忍 200 毫秒以上的往返?必须放边缘可以考虑上云
带宽现场上行带宽是否小于 1 Mbps,或按流量计费?边缘做预处理和聚合原始数据可直传
断网可用断网时业务能不能停?边缘必须能独立闭环纯云端可接受
数据合规原始数据是否不允许离开现场?边缘存储,只上传统计结果可以上云
边云划分的四条判断依据

举个最典型的例子:停车场道闸。断网时车还得出去,所以「识别车牌 → 比对白名单 → 抬杆」这一整条链路必须在本地完成,云端只负责同步白名单、记录流水、做跨场站的对账。这类业务如果设计成「识别后请求云端判断」,一次网络抖动就会堵住出口。

反过来,边缘不适合做的事情也很明确:

  • 跨站点对比分析——边缘只有本站数据,做不了横向比较
  • 长期趋势和同比环比——边缘存储有限,保留不了几年数据
  • 复杂规则和模型推理——边缘算力有限,模型更新也麻烦
  • 统一权限和审计——分散在各站点无法统一管控
✓一个实用的折中

如果拿不准,就按「边缘保底、云端增强」设计:边缘保留最近 7 天的本地数据和最关键的 5-10 条联动规则,保证断网时核心业务不中断;其余全部上云。这样边缘的开发和运维成本可控,又不会因为断网背锅。

五、应用层:规则引擎的边界到底在哪

规则引擎是 IoT 平台最好卖的功能,也是最容易变成技术债的功能。判断一条逻辑该不该放进规则引擎,只需问一句:这条规则未来半年会不会变?变的时候是谁来改?

逻辑类型放规则引擎写进代码理由
阈值告警(温度 > 40 报警)✓变化频繁,运营自己就能调
简单联动(门磁开 → 灯亮)✓场景多、组合多,代码写不完
定时任务(每晚 22 点关空调)✓纯配置,无需开发介入
跨设备多条件关联(A 设备报警且 B 设备在线才触发)△✓规则引擎表达力有限,复杂条件会写成天书
需要历史数据回算(同比上周同期)✓规则引擎通常只处理流数据
需要调用外部 API 或走审批流✓涉及事务和错误处理,配置化做不了
规则引擎的适用边界

一个实际的经验:规则引擎里的规则数量超过 200 条之后,维护成本会指数上升。因为规则之间会互相影响,改一条不知道会触发什么。这时候应该做的是「规则分组 + 生效范围 + 变更审批」,而不是继续往里堆。

另外,应用层一定要预留开放 API。理由很实际:客户早晚会提「能不能和我们自己的 OA/ERP 对接」。如果平台没有标准 API,每次对接都要定制开发,一个项目能拖三个月。API 设计上优先保证三件事:鉴权清晰、分页规范、错误码可读。

六、三种典型架构的适用场景与成本区间

把上面的内容收拢,实际项目里 90% 落在三种架构之一。这张表可以直接用来做方案对比和报价参考。

架构形态设备规模硬件投入软件投入运维人力首年总成本区间
单机版(一体化部署)500 台以内1 台 8 核 16G 云服务器开源组件 + 少量定制0.5 人3-8 万
标准云版(集群化)500 - 5 万台3-5 台云服务器 + 对象存储商业平台授权或自研1-2 人15-60 万
边云混合(多站点)5 万台以上 / 多现场每站点边缘盒子 2000-8000 元 + 云端集群平台 + 边缘系统 + 集成2-4 人60 万起,随站点数线性增长
三种架构的成本区间(含硬件、软件、首年运维,不含现场施工)

三个提醒:

  1. 1500 台设备以下不要上微服务。拆分带来的部署复杂度、链路追踪成本,远大于它带来的弹性收益。一套单体应用加一个消息队列,足够跑到 5000 台。
  2. 2边缘盒子的成本不要只看硬件。每个站点的上门部署、调试、后续固件升级,人工成本通常是硬件价格的 2-3 倍。
  3. 3云服务器的钱可以省,数据库的钱不要省。见过太多项目在 4 核 8G 的机器上跑时序库,然后抱怨查询慢。

七、上线前必须回答的 12 个架构评审问题

这份清单可以直接拿去开评审会。任何一条答不上来,都说明这块设计还没想清楚。

  1. 1峰值每秒消息量是多少?这个数是怎么算出来的,有没有实测依据?
  2. 2单台设备离线多久算异常?离线判定和业务告警是不是分开的?
  3. 3设备批量重连时,Broker 会不会被打挂?退避策略是什么?
  4. 4原始数据保留多久?聚合数据保留多久?一年后的存储成本是多少?
  5. 5时序库的单表(或单分区)能撑多久?什么时候需要分片?
  6. 6断网时哪些功能必须可用?边缘侧有没有独立闭环能力?
  7. 7规则引擎里现在有多少条规则?谁负责维护?变更流程是什么?
  8. 8对外 API 的鉴权方式是什么?第三方对接需要多久?
  9. 9设备固件升级(OTA)失败了怎么回滚?升级期间业务会不会中断?
  10. 10有没有做过一次真实的断网演练和一次真实的压力测试?
  11. 11监控告警覆盖到哪一层?Broker、数据库、业务接口分别由谁盯?
  12. 12这套架构如果设备量翻 10 倍,需要改哪些部分?改造成本大概多少?
i最后一条最重要

第 12 条是架构设计的分水岭。如果答案是「要重做」,说明架构没有留出扩展余地;如果答案是「加机器就行」,说明分层做对了。好的架构不是一次设计到 100 万台,而是让从 1 万到 10 万的迁移成本可控。

八、常见问题

自建物联网平台还是买现成的?

看两件事:设备协议复杂度,和业务差异化程度。协议种类多、厂商杂(比如要对接几十家不同品牌的电表、空调、传感器),自建的对接成本很高,建议买现成平台再二次开发。业务逻辑是核心竞争力(比如停车场的计费规则、充电桩的分时电价),这部分必须自己写,但底层的接入和存储可以买。

MQTT 一定要用吗?能不能直接用 HTTP?

设备端能稳定保持长连接、需要服务端主动下发指令,就用 MQTT。设备只能短连接、上报频率很低(比如一天几次)、或者设备是电池供电且要极致省电,HTTP 或 CoAP 更合适。很多项目是混合的:主链路 MQTT,配置下发和文件传输走 HTTP。

边缘计算节点用什么硬件?

看算力需求。只做协议转换和数据聚合,ARM 架构的工控机(4 核 2G)就够,成本几百到一千多。要做视频分析和本地 AI 推理,才需要上带 GPU 或 NPU 的设备,成本会到几千。不要为了「以后可能要跑 AI」提前上高配,边缘设备的迭代周期比云端快得多。

架构设计阶段需要做压力测试吗?

必须做,而且要用真实设备或真实报文做。用脚本模拟的 MQTT 客户端,行为和真实设备差别很大——真实设备会有重连风暴、会有报文格式错误、会有半开连接。建议在架构定稿后、开发开始前,用 100 台真实设备跑一次 72 小时稳定性测试,能提前暴露大部分接入层问题。

FAQ

常见问题

选型和技术评审时最常被问到的几个问题,直接给结论。

物联网平台架构设计的第一步应该做什么?
先算清楚三个数:设备总数、每台设备的指标数、上报频率。这三个数决定接入层容量、数据层存储成本和整体预算,是所有架构决策的起点。很多项目跳过这一步直接画分层图,结果做到一半发现存储成本超预算,或者 Broker 撑不住。
1 万台设备的物联网平台大概需要多少服务器?
标准配置是 3 台 8 核 16G:一台跑 MQTT Broker 和应用服务,一台跑时序数据库,一台做备份和监控。如果消息频率高(每秒 1000 条以上),需要把 Broker 和数据库拆开并各自集群化,大约 5 台。具体要看每秒消息量和数据保留周期。
物联网平台一定要做边云协同吗?
不一定。如果业务允许断网停机、现场带宽充足、对响应延迟不敏感(比如环境监测、水电抄表),纯云端架构更简单也更便宜。只有满足「断网必须可用」「延迟要求低于 200 毫秒」「带宽严重受限」「数据不能出境」其中任意一条,才需要引入边缘节点。
时序数据库和关系型数据库能混用吗?
可以,而且是常见做法。设备元数据、用户、权限、工单这类结构化业务数据放 MySQL 或 PostgreSQL,设备上报的时序数据放 TDengine 或 InfluxDB。两者通过设备 ID 关联。注意不要用关系型数据库直接存高频时序数据,几千万行之后查询会非常慢。

这套架构在你的现场能跑通吗?

把设备清单、协议种类和规模告诉我们,48 小时内给出架构建议、设备成本和实施周期。不收费,不推销。