当前位置: 测试器械 >> 测试器械优势 >> MQTT性能测试入门常见测试场景和指标
在物联网领域,存在大量资源受限的传感器和工业控制设备运行在低带宽且不稳定的网络环境中,这使得MQTT成为物联网场景下理想的消息传输协议。因此,MQTTBroker必须保证优异的性能和高度的可靠性,以满足物联网应用的要求。
在进行系统测试之前,了解基本的测试场景和性能指标至关重要。在本文中,我们将根据EMQX团队的测试经验提供一份详尽的说明,它也同样适用于其他MQTTBroker测试。
名词解释
MQTT协议:MQTT(MessageQueuingTelemetryTransport)是一种基于发布/订阅模式的轻量级消息传输协议。尽管其名称中包含"消息队列"一词,但它与消息队列并无关联。该协议因其简洁、灵活、易于实现、支持QoS以及消息体积小等特点而成为物联网领域的首选协议。
性能测试:性能测试是指利用测试工具模拟各种正常、峰值或异常负载条件,以评估被测试系统在各种性能指标上的表现。其目的在于验证系统是否能够满足用户的期望,并发现系统中存在的性能瓶颈和问题。
常见的MQTT测试场景MQTTBroker主要有两种测试场景:
并发连接,包括并发连接数和连接速率。
消息吞吐,包括消息发送和接收的吞吐量,以及一些影响生产环境系统性能的因素,如QoS、有效载荷大小、主题通配符等。
在设计具体的性能测试场景时,特别是在进行PoC或部署前测试时,必须始终注意以下两点:
尽量模拟真实生产环境中的使用情况。
覆盖可能的峰值负载。
测试场景可以按照连接和消息吞吐量两个基本维度进行划分。
并发连接测试
MQTT连接是一种基于TCP的长连接。客户端首先与MQTTBroker建立TCP连接,然后发送MQTT登录请求。连接成功建立后,客户端和MQTTBroker通过定期发送心跳包来维持连接状态。所以建立和长期维持一个MQTT连接是需要占用MQTTbroker一定资源的,在高并发场景下,这种长连接会消耗Broker的大量资源。因此,通过性能测试,我们可以评估MQTTBroker在有限资源下能够承受多少并发连接。
另外,连接速率(即每秒新增连接数)越高,需要的计算资源越多,在制定测试场景时需要考虑这个因素,因为在有些场景下大量的设备会同时上线,在测试broker的能力或规划系统容量时需要这个指标。
在并发连接测试中还要考虑是否使用TLS/SSL加密传输,因为它会增加压力机和MQTTBroker额外的资源开销。在计划测试时,需要评估它对性能的影响。
综上所述,在MQTT并发连接测试中,应该考虑以下三种场景:
在固定的较低连接速率下逐步提高并发连接数,测试系统响应和资源消耗情况。这可以确定系统在给定的硬件和网络资源下能够承受的最大并发数。
在给定的并发连接数下,测试不同连接速率下系统的响应和资源消耗情况。
在设计1)和2)时,区分普通TCP连接和TLS/SSL加密连接。
消息吞吐量测试
如前文所述,MQTT是一种基于发布/订阅模式的消息传输协议,它是一种异步协议,实现了发布-订阅1对1,1对多,多对1这种类型,广泛应用于各种物联网场景。因此,消息吞吐量测试应该涵盖以下三种场景:
1对1:发布者和订阅者的数量相等。对于每个发布者,有唯一一个订阅者订阅其发布的主题。也就是说,MQTTBroker的消息流入速率与流出速率相同。
多对1(上报):一种典型的物联网应用场景,有大量物联网设备作为发布者,但只有少数或单个订阅者,例如大量设备上报其状态或数据。
1对多:即广播模式,少量客户端发布消息,大量设备端订阅消费消息,如控制端指令下发。
另外,在设计消息吞吐量场景时,不要忽略QoS、消息有效载荷大小、带通配符的订阅主题等因素。不同的QoS对负载测试的性能和资源消耗有很大影响。有效载荷大小可以根据实际使用情况确定。
其它场景
对于其它MQTT功能,如共享订阅、消息转存到数据库或其他消息队列(MQ)、海量主题订阅,以及诸如众多MQTT客户端同时连接/断开等极端情况,可以根据实际需求进行设计并加入测试场景中。
性能度量指标在设计好测试场景之后,还要制定度量指标来评估测试的成功与否。
在性能测试中,指标一般可以分为两大类:应用系统指标(比如MQTTBroker的指标)和计算资源指标。
应用系统指标与用户场景和需求有关,例如响应时间(或延迟)、并发量等。
计算资源指标与硬件资源消耗有关。对于我们讨论的MQTT测试来说,这些指标与其它软件性能测试的指标相似,例如CPU、内存、网络、磁盘I/O。
MQTT系统指标与测试场景紧密相关,常见的指标如下表所示。
性能测试工具大规模性能测试需要能够快速、真实、稳定地模拟高并发、高吞吐场景,同时需要管理和维护众多机器和资源,选择合适的测试工具可以起到事半功倍的效果。
EMQX团队使用的是emqtt_bench和XMeter这两款性能测试工具。
emqtt_bench
emqtt_bench是EMQX研发团队基于Erlang编写的一款MQTT协议性能测试工具。安装完成后,可以通过命令行来使用。
用法:emqtt_benchpub
sub
conn
与其它工具相比,emqtt_bench的优点是安装和使用简单,占用的计算资源较少。但它支持的场景比较有限,需要结合其他监控工具测试指标数据
具体安装和使用方法请参考
转载请注明:http://www.aideyishus.com/lkgx/6140.html