从智能家居到工业互联网,从车联网到城市级感知网络, 物联网正让万物“对话”重塑生活。每天有数亿台设备和应用程序正在通过物联网系统发送和接收数据。面对海量设备及其产生的高速数据流,如何做好以 MQTT 为代表的物联网协议性能测试显得尤为重要。今天,我们来聊聊科学开展大规模 MQTT 性能测试的实践与方法。
01 MQTT 的工作原理
MQTT 是一种基于 TCP/IP 协议的即时通讯协议,采用发布-订阅模式。发布者发送消息,订阅者接收他们感兴趣的消息,代理服务器则负责将消息从发布者传递给订阅者。发布者和订阅者都是 MQTT 客户端,它们只能与 MQTT 代理服务器通信。
图:物联网传感器的 MQTT 发布和订阅模型
MQTT 发布/订阅模式的特点
区别于传统的客户端-服务器模式,使用 MQTT 协议来传输数据,只需要建立一次TCP连接,然后就可以通过 MQTT 协议来传输数据,不需要每次都重新建立连接和发送头部信息,因此可以大大减少网络带宽的占用和连接的不稳定性。同时,MQTT 协议支持不同的QoS等级,可以确保数据的可靠传输,即使网络连接不稳定,也可以保证数据不会丢失。
02 MQTT 性能测试的重要性
大多数性能测试工具都是为HTTP API和传统Web流量设计的,而MQTT作为一种有状态、事件驱动的协议,其行为则有所不同:
- 必须跨数千个客户端处理持久连接
- 基于主题的消息分发增加了架构的复杂性
- 服务质量等级、保留消息和遗嘱消息引入了影响性能的变量
因此,大规模测试 MQTT 系统不仅仅关乎稳健性,还关乎可靠性、成本效益,以及避免在高风险环境中出现生产故障,忽视 MQTT 性能测试也可能导致企业过度配置基础设施。
03 常见的 MQTT 协议测试场景
i 并发连接上限
在高并发场景下,MQTT 的长连接机制需要占用并消耗 MQTT Broker 的一定资源,需要通过性能测试,验证现网环境在有限资源下能够承受的连接上限。
ii 消息吞吐量测试
测试在不同发布/订阅模式下(扇入/扇出场景)消息传输的性能,从而展示 QoS 级别和有效负载大小等因素对生产环境系统性能的实际影响
iii MQTT Broker 选型测试
物联网行业存在诸多的Broker,如Mosquitto、EMQX、HiveMQ等等,通过选型测试,可以帮助企业全面评估技术支持能力
04 如何开展规模化的 MQTT 性能测试?
测试方法
测试一:连接数上限测试
- 目标:探测 Broker 集群的最大稳定连接数
- 方法:逐步增加模拟设备连接数,直至无法建立新连接或大量已有连接异常断开
- 压测参数:根据业务需求模拟用户数,摸高模式,爬坡时间2分钟
- 指标要求:连接成功率 ≥ 99.9%,连接建立后保持稳定,无异常断开
测试二:消息吞吐量测试
- 目标:测量不同 QoS 模式下的消息吞吐量和延迟
- 方法:分别配置QoS 0、QoS 1、QoS 2 三种模式,使用有效载荷大小为 1KB 的消息进行一对一通信,逐步提高消息发布速率来增加工作负载,并在每种工作负载下运行 5 分钟
- 压测参数:梯度增压模式,起始百分比20%,单次增幅10%
- 指标要求:请求失败率<=0.1%, CPU负载低于80%,上下行带宽不超过网络带宽的80%
测试三:峰值流量稳定性测试
- 目标:测量业务峰值(如智慧城市交通早晚高峰、智能家居规律性交互等)场景的系统稳定性
- 方法:分别验证QoS 0、QoS 1、QoS 2 三种模式,通过浪涌压力模型,模拟真实业务场景瞬时峰值TPS
- 压测参数 :浪涌模式,起始百分比10%,起始保压时长30秒,峰值百分比100%,峰值保压时长60秒
- 指标要求:CPU负载低于80%,上下行带宽不超过网络带宽的80%
MQTT 性能测试关键指标
| 监控指标 | 描述 | 预期趋势与说明 |
|---|---|---|
| 实际连接数 | 成功建立并保持的MQTT连接数 | 目标是在尽可能高的数值上稳定保持 |
| 连接成功率 | 成功连接数 / 尝试连接数 | 接近100%为佳,下降则预示达到瓶颈 |
| 平均连接时间 | 完成TCP+MQTT握手的时间 | 会随连接数增加而上升,急剧上升预示瓶颈 |
| CPU使用率 | Broker进程的CPU占用 | 初期随连接数线性增长,后期因系统调度开销可能非线性飙升 |
| 内存使用率 | Broker进程的内存占用 | 核心指标,通常与连接数成 线性正相关 ,每个连接都有固定内存开销,这是最常见的瓶颈 |
| 网络连接数 | 操作系统层面的网络连接数(netstat, ss) | 应与MQTT连接数一致 |
| 网络带宽 | 网络接口的流入/流出流量 | 流量很小,主要由心跳包维持,但总量不可忽视(e.g., 100万连接 * 微小心跳包) |
| 系统文件描述符 | Broker进程和系统使用的FD数 | 必须确保系统级和进程级的FD限制远大于目标连接数 |
05 测试工具
这里介绍几款常用的可用于 MQTT 协议性能测试的工具
JMeter
使用 JMeter 需要安装一个 MQTT JMeter 插件,优点是开源免费,缺点是有一定门槛和学习成本,需要自行搭建测试环境。
XMeter Cloud
该工具是 EMQ 基于 JMeter 提供的 MQTT 性能测试云服务。础版用于快速体验 XMeter Cloud 测试服务。该版本支持最高 1000 连接以及最高 1000/秒消息吞吐,适用于小规模公网 MQTT 测试。专业版提供了企业级的性能测试支持,不限连接数和消息吞吐,适用于大规模的物联网测试场景。
优测全链路压力测试工具
优测全链路压力测试平台针对 MQTT 协议深度定制,该工具适合企业级、大规模测试,支持千万级并发能力,无需另行搭Prometheus等监控栈,优测平台采集压力机与被测集群的CPU、内存、网络等系统负载数据,并与压测指标时间对齐,一个平台完成压测与观测。
本文未注明其它来源的内容,其版权归优测云服务平台所有,未经允许不得转载本文内容。如需转载本文,请在显著位置注明出处(优测云服务平台,以及文章链接:https://utest.21kunpeng.com/home/topic/mqtt)
