如何入门做物联网系统压测?

简介: 【4月更文挑战第13天】物联网系统在架构、网络模式、通信协议等方面与传统的互联网系统有所区别。因此,传统的性能测试方法不能直接套用到物联网系统中。

一、政策解读

微信公众号“工信微报”4月9日消息,工业和信息化部、国家发展改革委、财政部、中国人民银行、税务总局、市场监管总局、金融监管总局等七部门近日联合印发 《推动工业领域设备更新实施方案》,提出到 2027 年,工业领域设备投资规模较 2023 年增长 25 %以上,规模以上工业企业数字化研发设计工具普及率、关键工序数控化率分别超过 90 %、75 %,工业大省大市和重点园区规上工业企业数字化改造全覆盖,重点行业能效基准水平以下产能基本退出、主要用能设备能效基本达到节能水平,本质安全水平明显提升,创新产品加快推广应用,先进产能比重持续提高。

image.png

其中在方案第二部分“实施数字化转型行动”,有多处提到“物联网”相关的名词。
image.png

那这波政策对我们做性能的技术人有什么影响,个人猜测有以下两点:

  1. 设备数字化改造,这个会带来大量的物联网测试机会,对从事该方向的从业人员是一个利好消息;
  2. 乘着这波大更新,剔除漂亮国留下的暗门,也就是信创改造,针对信创的适配和测试估计会有一波红利。

那么,今天我们主要聊聊“物联网”这块的压测,说道物联网那必然绕不开 MQTT,它甚至已经成为物联网系统事实上的网络协议标准。如果你想从事物联网系统压测,就一定要掌握 MQTT 消息中间件压测方法。

二、MQTT 压测常见场景

不同的协议有各自的特定需求,需要设计不同的场景和测试用例,但是在 MQTT 设计性能测试时,我们可以参考以下几种常见的通用压测场景:

  • BenchMark :基准测试,即纯数通测试,不带业务规则,从而为后续实际业务压测场景做数据比对。
  • 基准场景:单业务容量,即将每一个业务都压到最大TPS,从而为后续场景做数据比对。
  • 容量场景:混合业务容量性能场景,即将所有业务根据比例加到一个场景中,在数据、软硬件环境、监控等的配合之下,分析瓶颈并调优的过程。
  • 稳定性场景:核心就是时长。在长时间的容量场景运行之下,观察系统的性能表现,分析瓶颈并调优的过程。
  • 异常场景:在长时间的容量场景运行之下,然后就是异常的定义最为重要。之前我们常用的手段就是岩主机、岩服务、岩网卡。随着云原生架构的发展,现在我们还有岩容器、岩虚机、岩缓存、岩队列等等。实际的场景中要模拟什么样的异常,一定是根据系统的MQTT消息中间件架构分析而来的。

三、MQTT常见业务场景

首先,我们大概了解下MQTT的基础概念。

MQTT(MQ Telemetry Transport)协议,是 IBM 公司在 1999 年开发的轻量级网络协议,它有三个主要特点:

  • 采用二进制的消息内容编码格式,所以二进制数据、JSON 和图片等负载内容都可以方便传输。
  • 协议头很紧凑,协议交互也简单,保证了网络传输流量很小。
  • 支持 3 种 QoS(Quality of Service,服务质量)级别,便于应用根据不同的场景需求灵活选择。

这三个特点,让 MQTT 协议非常适合计算能力有限、网络带宽低、信号不稳定的远程设备,所以它成为了物联网系统事实上的网络协议标准

MQTT 属于发布 - 订阅模式,其中包含三个角色,分别是发布者(Publisher)、经纪人(Broker)和订阅者(Subscriber),它们的关系如下图所示。

image.png

相关概念:

  • Publisher(发布者):消息的发出者,负责生产数据。发布者发送某个主题的数据给经纪人,发布者不知道订阅者。
  • Subscriber(订阅者):消息的订阅者,订阅经纪人管理的某个或者某几个主题。
  • Broker(经纪人):当经纪人接收到某个主题的数据时,将数据发送给这个主题的所有订阅者。
  • Topic(主题):可以理解为消息队列中的路由,订阅者订阅了主题之后,就可以收到发送到该主题的消息。
  • Payload(负载);可以理解为发送消息的内容。
  • QoS(消息质量):全称 Quality of Service,即消息的发送质量,主要有 QoS 0、QoS 1、QoS 2三个等级,下面分别介绍下:
    • QoS 0(Almost Once):至多一次,只发送一次,会发生消息丢失或重复;
    • QoS 1(Atleast Once):至少一次,确保消息到达,但消息重复可能会发生;
    • QoS 2(Exactly Once):只有一次,确保消息只到达一次。

发布/订阅模型 的背景下,设计 MQTT 测试场景的关键在于考虑如何模拟发布者和订阅者的不同行为,主要包括以下场景的场景:

  • 连接:客户端在一定时间内连接到 Broker,并与 Broker 维持连接一段时间。
  • 广播:大量客户端作为订阅者,只有少数或单个发布者。
  • 点对点:发布者客户端和订阅者客户端数量相同。
  • 上报:大量客户端作为发布者,只有少数或单个订阅者。

1、并发连接

MQTT 连接是一种基于 TCP 的长连接。客户端首先与 MQTT Broker 建立 TCP 连接,然后发送 MQTT 登录请求。连接成功建立后,客户端和 MQTT Broker 通过定期发送心跳包来维持连接状态。所以建立和长期维持一个MQTT连接是需要占用MQTT broker一定资源的,在高并发场景下,这种长连接会消耗 Broker 的大量资源。因此,通过压测,我们可以评估 MQTT Broker 在有限资源下能够承受多少并发连接。

并发连接场景我们主要关注以下两个指标:

  • 并发连接数:
  • 连接速率

并发连接数
维持海量设备连接需要消耗大量的计算资源,在并发连接测试中还要考虑是否使用 TLS/SSL 加密传输,因为它会增加压力机和MQTT Broker额外的资源开销。在计划测试时,需要评估它对性能的影响。

比如常见技术指标:支持千万级设备在线,背景连接 (只连接不发送消息)

连接速率
即每秒新增连接数越高,需要的计算资源越多,在制定测试场景时需要考虑这个因素,因为在有些场景下大量的设备会同时上线,在测试 broker 的能力或规划系统容量时需要这个指标。

比如,实际项目我们在模拟异常场景在连接故障的时候,实现了整个连接 FailOver,避免设备批量故障、云平台发布、网络抖动等原因导致大规模设备集体上线、下线,从而触发整个平台雪崩

比如常见的技术指标:能支持百万设备掉线 3 分钟故障转移目标。支持百万长连接的 session 在分钟内迁移,可用于容灾、发布断连等场景。

综上所述,在 MQTT 并发连接测试中,应该考虑以下几种场景:

  • 在固定的较低连接速率下逐步提高并发连接数,测试系统响应和资源消耗情况。这可以确定系统在给定的硬件和网络资源下能够承受的最大并发数。
  • 在给定的并发连接数下,测试不同连接速率下系统的响应和资源消耗情况。
  • 在给定的并发连接数下,测试海量连接并发瞬时连接,测试所有连接完成所需时间,期间平台不会雪崩。
  • 在设计时,区分普通 TCP 连接和 TLS/SSL 加密连接。

2、消息吞吐量测试

如前文所述,MQTT 是一种基于发布/订阅模式的消息传输协议,它是一种异步协议,实现了发布-订阅 1对1,1对多,多对1这3种类型,广泛应用于各种物联网场景。因此,消息吞吐量测试应该涵盖以下三种场景:

2.1 1 对 1

发布者和订阅者的数量相等。对于每个发布者,有唯一一个订阅者订阅其发布的主题。也就是说,MQTT Broker 的消息流入速率与流出速率相同。

image.png

举例场景:

  • 场景名称:单节点 10 万并发连接下支持 20 万 QoS1 消息吞吐
  • 描述:10 万 MQTT TCP 连接, pub 客户端和 sub 客户端数量相同都是 5 万,每个接收端均订阅一个对应的发送端 pub 主题,每个 pub 客户端每秒发送 2 条 QoS 1、payload 为 1k 字节的消息。因此消息发送和接收均为每秒 10 万,总的消息吞吐达到每秒 20 万。测试执行 1 个小时。
  • 期望结果:内网测试成功率为 100%,无消息积压,CPU 和内存在测试期间表现平稳,没有大幅度的抖动。

2.2 多对1(上报)

一种典型的物联网应用场景,有大量物联网设备作为发布者,但只有少数或单个订阅者,例如大量设备上报其状态或数据。
image.png

举例场景:

  • 场景名称:千万连接+消息吞吐
  • 描述:1000 万 MQTT TCP 并发连接,心跳间隔 200s。其中 700 万为背景连接 (只连接不发送消息),300 万活跃用户,每个用户每隔 15S 上报一条 QOS 0 的消息,payload 为 100B。消息通过规则引擎桥接到 Kafka。稳定性运行30分钟。
  • 期望结果:内网测试成功率为 100%,无消息积压,CPU 和内存在测试期间表现平稳,没有大幅度的抖动。

    2.3 1对多

即广播模式,少量客户端发布消息,大量设备端订阅消费消息,如控制端指令下发。

image.png

举例场景:

  • 场景名称:消息广播
  • 描述:1000 万 MQTT TCP 并发连接,所有连 接均订阅同一个 OTA 广播主题(QoS 0,payload 为 100B)。模拟一个 MQTT 客户端每隔 10 分钟向该主题广 播一条消息,测试 30 分钟
  • 期望结果:内网测试成功率为 100%,所有订阅客户端成功消费 3 条消息

另外,在设计消息吞吐量场景时,不要忽略 QoS、消息有效载荷大小、带通配符的订阅主题等因素。不同的 QoS 对负载测试的性能和资源消耗有很大影响。有效载荷大小可以根据实际使用情况确定。

2.4 其它场景

对于其它 MQTT 功能,如共享订阅、消息转存到数据库或其他消息队列(MQ)、海量主题订阅等极端情况,可以根据实际需求进行设计并加入测试场景中。

三、MQTT常见性能指标

指标一般可以分为两大类:应用指标(比如 MQTT Broker 的指标)和计算资源指标。

  • 应用指标与用户场景和需求有关,例消息时延、并发连接数、数据吞吐量(TPS)等。
  • 计算资源指标与硬件资源消耗有关,例如 CPU、内存、网络、磁盘 I/O。

常见的指标如下表所示:
image.png

四、MQTT常见性能工具

1、emqtt-bench

emqtt-bench 是 emqx 编写的用于测试 MQTT 服务器性能 BenchMark 的测试程序,使用 Erlang 语言编写,与其它工具(如:JMeter)相比,emqtt_bench 的优点是安装和使用简单,占用的计算资源较少。但它支持的场景比较有限,需要结合其他监控工具测试指标数据。

image.png

具体安装和使用方法请参考: 性能工具之emqtt_bench快速上手

2、JMeter

如果要进行大规模业务压测,我们推荐另一款更专业的性能和负载测试工具 - JMeter。

JMeter 提供了基于 MQTT 协议开源测试插件:https://github.com/xmeter-net/mqtt-jmeter

目前 JMeter MQTT 插件的最新版本为 2.0.2,支持连接、消息发布、消息订阅等多种采样器,并可通过组合构建更复杂的测试场景。

image.png

五、小结

物联网系统在架构、网络模式、通信协议等方面与传统的互联网系统有所区别。因此,传统的性能测试方法不能直接套用到物联网系统中。

首先,物联网系统压测的对象主要是“设备”,而非“用户”,需要模拟大量设备进行连接和通信,并产生海量的数据。所以模拟真实的设备规模非常重要,这需要对生成压测工具进行更精细的设计,以及对测试结果进行更有效的分析。

其次,物联网的通信方式与互联网不同,因此多种物联网通信协议应运而生。

对于 MQTT 协议,它所具备的一些特点使其与互联网消息协议有很大的区别:

  • MQTT 是轻量级的,专为不稳定的网络连接和节省带宽而设计。
  • MQTT 使用 QoS 来支持复杂的设备网络环境。
  • MQTT 与数据无关。
  • MQTT 是一种基于 TCP 的长连接,具有持久会话的特性。

因此在对 MQTT 协议压测进行测试时,要注意考虑它的独特性。

参考资料:

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
物联网 传感器
【物联网开发实战】- 设备上云方案详解
以智能洗衣机为例,介绍温度/水位等传感器,主控MCU(Microcontroller Unit),无线通信模组等核心模块,以实现洗衣机数据采集、预处理、加密、传输上云等功能。
3606 0
|
6月前
|
消息中间件 网络协议 物联网
如何入门做物联网系统压测?
【4月更文挑战第18天】物联网系统在架构、网络模式、通信协议等方面与传统的互联网系统有所区别。因此,传统的性能测试方法不能直接套用到物联网系统中。
366 13
如何入门做物联网系统压测?
|
6月前
|
Prometheus 监控 Cloud Native
助力工业物联网,工业大数据之服务域:服务器性能监控Prometheus及项目总结【三十五】
助力工业物联网,工业大数据之服务域:服务器性能监控Prometheus及项目总结【三十五】
69 1
H8
|
自然语言处理 物联网 Unix
全网最佳IoT命令行超级工具箱|帮你轻松解决百万物联网设备测试和联调
作为一个物联网开发和学习人员,IoT设备协议的测试联调是工作中很重要的一环!我有很多时刻都想拥有一个能集成常见物联网协议的客户端工具可供使用。经过我一通查找,发现和我拥有相同问题的人不在少数。 不仅仅是IoT开发者,包括云厂商、网络运营商都有相同烦恼: 开源物联网平台Thingsboard: coap -> coap.js(需要安装node); 移动OneNET平台: mqtt -> mqtt.fx(几年没更新了); 电信AEP平台:自定义TCP协议 -> sokit工具(只支持windows); 阿里云物联网平台: Nb-IoT协议 -> 需要到电信或移动平台上进行测试; 作者:穆书伟
H8
490 0
EMQ
|
物联网 测试技术 网络性能优化
构建可靠的物联网系统:了解 MQTT 性能测试
性能测试对于确保物联网系统的稳定可靠至关重要。本文将介绍物联网系统性能测试的常见场景、挑战以及设计性能测试时需要考虑的因素。
EMQ
584 1
|
安全 物联网安全 测试技术
物联网安全测试流程笔记
物联网安全测试流程笔记
173 1
|
运维 Prometheus 监控
《2023云原生实战案例集》——01 汽车/制造——传音 基于ARMS构建全球一体化可观测平台,高效支撑业务创新
《2023云原生实战案例集》——01 汽车/制造——传音 基于ARMS构建全球一体化可观测平台,高效支撑业务创新
|
新零售 运维 自动驾驶
稳定服务亿级连接,阿里云IoT物联网络新能力发布
阿里云发布的物联网络新能力,包括新平台、新网络和新生态,突出智能高效的特点。
435 0
稳定服务亿级连接,阿里云IoT物联网络新能力发布
|
测试技术
|
存储 数据采集 SQL
迈科清洗(MEIKO)如何借助IOT手段解决企业设备运维问题
迈科清洗专注于专业的餐具清洗消毒设备和技术应用,物联网平台为其提供数据存储,进行长时间存放和业务分析。
282 0
迈科清洗(MEIKO)如何借助IOT手段解决企业设备运维问题

热门文章

最新文章

相关产品

  • 物联网平台