近十年来,物联网迎来了爆炸式的增长。面对海量的设备及其产生的数据,物联网应用和服务变得越来越复杂。我们不仅要保证这些物联网系统的业务功能正确无误,还要保证系统能够支持大量设备之间持续稳定地通信。
因此,我们需要通过性能测试以确保所构建的物联网系统是稳定可靠的。
(资料图片仅供参考)
对物联网系统进行集成测试和端到端测试,以保证系统功能的正确性,已经是业界的通用做法。
性能测试是一种检验系统健壮性的方法,它关注扩展性、可用性、可靠性等指标,可以帮助发现系统在正常使用场景下以及在极限使用场景下的表现。
在物联网系统的开发过程中,性能测试可以提供一种基于给定指标的评估。通过将测试结果与基准值进行比较,可以判断系统性能是否有下降。
将性能测试纳入持续集成有助于发现系统性能的瓶颈,并在问题尚未造成较高损失之前加以解决。
此外,性能测试还为容量规划提供了依据,有助于用户提前做好准备。
在对物联网系统进行性能测试时,应主要从以下两个角度考虑。
物联网系统的性能表现如何。主要关注系统是否能够应对负载增加,是否能够处理极端情况下的问题和故障,系统的延迟是否在合理的范围内。有一些指标可以量化这些属性,如响应时间、吞吐量、成功率、偏差等。 为了达到预期的系统性能,需要消耗多少计算资源。在能实现相同目标的前提下,使用更少的计算资源无疑可以节省开支,增加收益。量化计算资源的指标包括 CPU 使用率、内存使用率、磁盘 I/O 速率、数据包传输率等。虽然不同的系统和协议有各自的特定需求,需要设计不同的场景和测试用例,但是在为物联网系统设计性能测试时,我们可以参考以下几种常见的类型:
测试系统在稳定状态下的性能表现。目的是验证系统是否符合正常使用的期望。 测试系统在短时间内承受过载的性能表现。目的是验证系统在遭遇突发压力时是否仍能正常工作或者迅速恢复。 测试系统长期运行的性能表现。目的是验证系统如果持续运行一段时间是否保持稳定。 测试系统在不稳定的网络环境下的性能表现。目的是验证系统是否能够应对弱网络(这对于物联网服务来说很常见)的情况。由于 MQTT 是物联网领域最广泛使用的协议,我们也根据实际客户需求列举了一些 MQTT 协议的常见测试场景:
连接(Connection):客户端在一定时间内连接到 Broker,并与 Broker 维持连接一段时间。 广播(Fan-out):大量客户端作为订阅者,只有少数或单个发布者。 点对点(Point-to-point):发布者客户端和订阅者客户端数量相同。 上报(Fan-in):大量客户端作为发布者,只有少数或单个订阅者。在发布/订阅模型的背景下,设计 MQTT 测试场景的关键在于考虑如何模拟发布者和订阅者的不同行为。
对物联网系统进行性能测试也面临着一些挑战。物联网系统在架构、网络模式、通信协议等方面与传统的互联网系统有所区别。因此,传统的性能测试方法不能直接套用到物联网系统中。
首先,物联网系统需要与大量设备进行连接和通信,并产生海量的数据。在性能测试中,模拟真实的规模非常重要,这需要对生成负载的工具进行更精细的设计,以及对测试结果进行更有效的分析。
其次,物联网的通信方式与互联网不同,因此多种物联网通信协议应运而生。
对于 MQTT 协议,它所具备的一些特点使其与互联网消息协议有很大的区别:
MQTT 是轻量级的,专为不稳定的网络连接和节省带宽而设计。 MQTT 使用 QoS 来支持复杂的设备网络环境。 MQTT 与数据无关。 MQTT 具有持久会话的特性。因此在对 MQTT 协议进行测试时,要注意考虑它的独特特性。
性能测试对于物联网系统来说非常重要,它可以降低风险,提高健壮性,帮助企业在快速发展的物联网行业中达成业务目标。
EMQ 推出了 MQTT 开放基准测试规范,为 MQTT 基准测试提供了一种有效的方法。它分析了性能评估的关键指标,并提供了基准测试的实际用例。开发人员可以获得不同 MQTT Broker 之间客观的比较参考,从而做出明智的选择。
XMeter 是 EMQ 的另一款产品,它提供对 MQTT 协议以及其他物联网协议的负载测试服务。XMeter 可以水平扩展,能够模拟百万级 MQTT 客户端。它以流式方式收集和处理数据,并生成包含主要性能指标的报告。
关键词: