努力
加油

部署物联网平台时,是否推荐使用云服务器?配置怎么选?

直接给结论:必须用云服务器,而且对于物联网(IoT)平台来说,云原生架构几乎是标配。

别去搞什么本地机房自建了,除非你是国家电网或者大型央企有特殊的合规红线要求,否则中小企业甚至中大型互联网公司,上云是性价比和运维效率的最优解。

下面从“为什么选云”和“怎么配配置”两个维度,掰开揉碎了说。

一、 为什么部署 IoT 平台首选云服务器?

很多人纠结要不要买物理机,其实 IoT 平台的特性决定了它天然适合云:

  1. 连接数爆发式增长:IoT 设备上线往往是脉冲式的。今天接了 100 台设备,下个月可能突然接入 10 万台。物理服务器扩容需要采购、上架、布线,周期以周计;云服务器弹性伸缩,分钟级生效。
  2. 高并发与长连接压力:MQTT 协议基于 TCP 长连接,一个活跃设备占一个连接。万级并发看似不多,但考虑到心跳包、消息重传、TLS 握手开销,对 OS 的文件描述符限制、网络栈优化要求极高。云厂商的负载均衡(SLB/ALB)和内核参数调优能力远强于普通运维团队。
  3. 数据湖与分析解耦:IoT 产生的时序数据量巨大,写入后通常要进大数据平台做分析。云上的对象存储(OSS/COS/OBS)和时序数据库(TSDB)服务化,让你不用自己维护 Hadoop/Spark 集群,按需付费。
  4. 全球/区域覆盖:如果你的设备分布在全国甚至全球,云的多地域部署能力能保证低延迟接入。

避坑提示:国内主流云厂商(阿里云、腾讯云、华为云、AWS 中国等)都有专门的 IoT Hub / IoT Core 产品。建议优先使用这些 PaaS 层产品处理设备接入、认证、路由,而不是自己从头写 MQTT Broker(如 EMQX、Mosquitto)。自研 MQTT 集群在稳定性、安全性(证书管理)、高可用架构上投入巨大,容易踩坑。


二、 配置怎么选?(实战指南)

假设你选择自建或托管 EMQX/Mosquitto 集群,并搭配业务后端(Java/Go/Python),以下是按场景划分的配置建议。

1. 核心原则:分离架构

不要把 MQTT Broker、业务逻辑、数据库全塞在一台机器里。

  • 接入层:负责协议解析、连接管理(轻量、高并发)
  • 应用层:负责业务逻辑、规则引擎执行(中等负载)
  • 数据层:存储设备状态、历史数据(I/O 密集型)

2. 具体配置推荐(以国内主流云厂商为例)

A. 小规模试点/初创项目(< 5,000 在线设备)
  • 接入节点:2 台 ECS/CVM
    • 规格:4 vCPU / 8 GB RAM
    • 系统盘:100G SSD
    • 数据盘:200G ESSD(用于日志和临时缓存)
    • 说明:两台做主备或集群模式,防止单点故障。
  • 应用服务器:1-2 台
    • 规格:4 vCPU / 8 GB RAM
    • 用途:运行业务 API、规则引擎转发逻辑。
  • 数据库:直接使用云 RDS(MySQL/PostgreSQL)
    • 规格:2 vCPU / 4 GB RAM 起步,根据查询频率升级。
  • 缓存:云 Redis(标准版即可)
    • 用途:设备在线状态缓存、热点数据。
B. 中型规模(5,000 – 50,000 在线设备)
  • 接入节点:至少 3 台(集群必需奇数个节点以保证仲裁)
    • 规格:8 vCPU / 16 GB RAM
    • 带宽:关键!每台实例需绑定公网 IP 或内网 SLB,确保带宽充足。MQTT 小包多,带宽不是瓶颈,但 QPS 和每秒新建连接数 才是。
    • 注意:开启 TCP Keepalive,调整内核 net.core.somaxconn 和 fs.file-max。
  • 应用服务器:3-4 台
    • 规格:8 vCPU / 16 GB RAM
    • 配合 SLB 做负载均衡。
  • 数据库:RDS 高可用版
    • 规格:4 vCPU / 16 GB RAM 以上,启用只读副本分担读取压力。
  • 时序数据库:云 TSDB 或 InfluxDB/TDengine 专用实例
    • 规格:根据写入速率(points/sec)评估,初期可选 8 vCPU / 32 GB RAM + 大容量云盘。
C. 大规模生产环境(> 50,000 在线设备)
  • 接入节点:5+ 台,横向扩展
    • 规格:16 vCPU / 32 GB RAM 或更高
    • 必须使用云厂商提供的 IoT 专有通道 或 VPC 内网通信,避免公网暴露。
    • 考虑使用 GPU 实例进行边缘计算卸载(如果涉及视频流或 AI 推理)。
  • 应用服务器:容器化部署(K8s/ECS 集群)
    • 使用自动伸缩组(ASG),根据 CPU 使用率或自定义指标(如 MQTT 连接数)动态扩缩容。
  • 数据库:分库分表 + 读写分离
    • MySQL 集群,或使用 NoSQL(MongoDB/Cassandra)处理设备元数据。
  • 消息队列:云 Kafka/RocketMQ
    • 设备上报数据先入 MQ,再异步落库,削峰填谷。

3. 网络与安全配置(极易忽视但致命)

  • 带宽策略:

    • MQTT 消息体通常很小(几十到几百字节),所以 带宽大小不是主要瓶颈,瓶颈在于 每秒新建连接数(CPS) 和 每秒数据包数(PPS)。
    • 选择支持高 PPS 的网络类型(如增强型网卡 ENI)。
    • 如果使用 SLB,注意其最大连接数和 QPS 限制,大并发时 SLB 本身可能成为瓶颈,考虑直接让客户端直连接入节点 IP(需配合 DNS 轮询或 GSLB)。
  • 安全组:

    • 严格限制入站规则。MQTT 端口(1883/8883)只对特定的 VPC 子网或 IP 段开放。
    • 强制 TLS 1.2+ 加密,禁用明文传输。
  • 存储选型:

    • 不要用本地磁盘存业务数据!务必使用云盘或 NAS。
    • 时序数据量大,建议使用云厂商的 TSDB 服务,成本比自建 MySQL 存时序数据低 70% 以上。

4. 成本优化技巧

  • 抢占式实例(Spot Instances):用于无状态的应用层服务和部分非核心的接入节点(需做好断线重试机制),可节省 60%-90% 成本。
  • 预留实例券(RI):对于长期稳定的基础接入节点和业务服务器,购买 RI 比按量付费便宜很多。
  • CDN/WAF:如果设备通过 HTTP/WebSocket 上报,且数据量大,可结合 CDN 提速;同时配置 WAF 防护 DDoS 和 SQL 注入。

总结建议

  1. 不要从零造轮子:先用云厂商的 IoT Hub 产品跑通流程,验证商业模式和技术可行性。
  2. 架构解耦:接入层与应用层分离,方便独立扩容。
  3. 关注 PPS 而非带宽:小消息高频次是 IoT 的特点。
  4. 监控先行:部署前就规划好 Prometheus/Grafana 或云监控,重点监控:MQTT 连接数、消息吞吐率、延迟、错误率。

最后提醒:国内云厂商对物联网的支持力度很大,尤其是阿里云 IoT 和腾讯云 IoT Explorer,文档和社区资源丰富。遇到问题先看官方文档,其次查社区,最后才考虑去 StackOverflow 或知乎提问。