博客 / 詳情

返回

如何開展大規模 MQTT 性能測試,穩定承載億級設備同時在線?

從智能家居到工業互聯網,從車聯網到城市級感知網絡, 物聯網正讓萬物“對話”重塑生活。每天有數億台設備和應用程序正在通過物聯網系統發送和接收數據。面對海量設備及其產生的高速數據流,如何做好以 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)

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.