天天看點

MQTT 性能測試入門:常見測試場景和名額

作者:EMQ映雲科技

引言

在物聯網領域,存在大量資源受限的傳感器和工業控制裝置運作在低帶寬且不穩定的網絡環境中,這使得 MQTT 成為物聯網場景下理想的消息傳輸協定。是以,MQTT Broker 必須保證優異的性能和高度的可靠性,以滿足物聯網應用的要求。

在進行系統測試之前,了解基本的測試場景和性能名額至關重要。在本文中,我們将根據 EMQX 團隊的測試經驗提供一份詳盡的說明,它也同樣适用于其他 MQTT Broker 測試。

名詞解釋

MQTT 協定:MQTT(Message Queuing Telemetry Transport)是一種基于釋出/訂閱模式的輕量級消息傳輸協定。盡管其名稱中包含"消息隊列"一詞,但它與消息隊列并無關聯。該協定因其簡潔、靈活、易于實作、支援 QoS 以及消息體積小等特點而成為物聯網領域的首選協定。

性能測試:性能測試是指利用測試工具模拟各種正常、峰值或異常負載條件,以評估被測試系統在各種性能名額上的表現。其目的在于驗證系統是否能夠滿足使用者的期望,并發現系統中存在的性能瓶頸和問題。

常見的 MQTT 測試場景

MQTT Broker 主要有兩種測試場景:

  • 并發連接配接,包括并發連接配接數和連接配接速率。
  • 消息吞吐,包括消息發送和接收的吞吐量,以及一些影響生産環境系統性能的因素,如 QoS、有效載荷大小、主題通配符等。

在設計具體的性能測試場景時,特别是在進行 PoC 或部署前測試時,必須始終注意以下兩點:

  • 盡量模拟真實生産環境中的使用情況。
  • 覆寫可能的峰值負載。

測試場景可以按照連接配接和消息吞吐量兩個基本次元進行劃分。

并發連接配接測試

MQTT 連接配接是一種基于 TCP 的長連接配接。用戶端首先與 MQTT Broker 建立 TCP 連接配接,然後發送 MQTT 登入請求。連接配接成功建立後,用戶端和 MQTT Broker 通過定期發送心跳包來維持連接配接狀态。是以建立和長期維持一個MQTT連接配接是需要占用MQTT broker一定資源的,在高并發場景下,這種長連接配接會消耗 Broker 的大量資源。是以,通過性能測試,我們可以評估 MQTT Broker 在有限資源下能夠承受多少并發連接配接。

另外,連接配接速率(即每秒新增連接配接數)越高,需要的計算資源越多,在制定測試場景時需要考慮這個因素,因為在有些場景下大量的裝置會同時上線,在測試broker的能力或規劃系統容量時需要這個名額。

在并發連接配接測試中還要考慮是否使用 TLS/SSL 加密傳輸,因為它會增加壓力機和MQTT Broker額外的資源開銷。在計劃測試時,需要評估它對性能的影響。

綜上所述,在 MQTT 并發連接配接測試中,應該考慮以下三種場景:

  1. 在固定的較低連接配接速率下逐漸提高并發連接配接數,測試系統響應和資源消耗情況。這可以确定系統在給定的硬體和網絡資源下能夠承受的最大并發數。
  2. 在給定的并發連接配接數下,測試不同連接配接速率下系統的響應和資源消耗情況。
  3. 在設計 1) 和 2) 時,區分普通 TCP 連接配接和 TLS/SSL 加密連接配接。

消息吞吐量測試

如前文所述,MQTT 是一種基于釋出/訂閱模式的消息傳輸協定,它是一種異步協定,實作了釋出-訂閱 1對1,1對多,多對1這3種類型,廣泛應用于各種物聯網場景。是以,消息吞吐量測試應該涵蓋以下三種場景:

  1. 1 對 1:釋出者和訂閱者的數量相等。對于每個釋出者,有唯一一個訂閱者訂閱其釋出的主題。也就是說,MQTT Broker 的消息流入速率與流出速率相同。
  2. 多對1(上報):一種典型的物聯網應用場景,有大量物聯網裝置作為釋出者,但隻有少數或單個訂閱者,例如大量裝置上報其狀态或資料。
  3. 1對多:即廣播模式,少量用戶端釋出消息,大量裝置端訂閱消費消息,如控制端指令下發。

另外,在設計消息吞吐量場景時,不要忽略 QoS、消息有效載荷大小、帶通配符的訂閱主題等因素。不同的 QoS 對負載測試的性能和資源消耗有很大影響。有效載荷大小可以根據實際使用情況确定。

其它場景

對于其它 MQTT 功能,如共享訂閱、消息轉存到資料庫或其他消息隊列(MQ)、海量主題訂閱,以及諸如衆多 MQTT 用戶端同時連接配接/斷開等極端情況,可以根據實際需求進行設計并加入測試場景中。

性能度量名額

在設計好測試場景之後,還要制定度量名額來評估測試的成功與否。

在性能測試中,名額一般可以分為兩大類:應用系統名額(比如 MQTT Broker 的名額)和計算資源名額。

  • 應用系統名額與使用者場景和需求有關,例如響應時間(或延遲)、并發量等。
  • 計算資源名額與硬體資源消耗有關。對于我們讨論的 MQTT 測試來說,這些名額與其它軟體性能測試的名額相似,例如 CPU、記憶體、網絡、磁盤 I/O。

MQTT 系統名額與測試場景緊密相關,常見的名額如下表所示。

MQTT 性能測試入門:常見測試場景和名額

性能測試工具

大規模性能測試需要能夠快速、真實、穩定地模拟高并發、高吞吐場景,同時需要管理和維護衆多機器和資源,選擇合适的測試工具可以起到事半功倍的效果。

EMQX 團隊使用的是 emqtt_bench 和 XMeter 這兩款性能測試工具。

emqtt_bench

emqtt_bench 是 EMQX 研發團隊基于 Erlang 編寫的一款 MQTT 協定性能測試工具。安裝完成後,可以通過指令行來使用。

用法:emqtt_bench pub | sub | conn           

與其它工具相比,emqtt_bench 的優點是安裝和使用簡單,占用的計算資源較少。但它支援的場景比較有限,需要結合其他監控工具測試名額資料

具體安裝和使用方法請參考 https://github.com/emqx/emqtt-bench

XMeter

emqtt_bench 适用于開發階段的快速性能驗證。如果要進行大規模測試或正式測試,我們推薦另一款更專業的性能和負載測試工具 - XMeter。

XMeter 是一款基于 JMeter 的性能測試工具,它對JMeter的架構進行了改造,達到了完全水準擴充的能力。能夠輕松處理大量資料并執行高頻測試。XMeter不僅繼承了 JMeter 的強大功能,還增加了許多新的特性。在測試過程中,提供豐富而實時的測試報告,讓測試人員能夠随時檢視 MQTT 的關鍵性能名額,如吞吐量、響應時間和成功率等。同時XMeter 内置了監控系統,可以實時監測 MQTT Broker 的資源消耗情況。

此外,XMeter 還提供了自動化和集中化的測試資源管理能力。測試機器(容器)在測試開始時自動建立,在測試結束時自動銷毀。

在整個測試階段,XMeter 将以圖形方式實時顯示 MQTT 性能名額和計算資源使用情況,如圖所示。

MQTT 性能測試入門:常見測試場景和名額
MQTT 性能測試入門:常見測試場景和名額
MQTT 性能測試入門:常見測試場景和名額
MQTT 性能測試入門:常見測試場景和名額
MQTT 性能測試入門:常見測試場景和名額

XMeter 使用指南

XMeter 有兩個版本可供選擇。

  • XMeter 本地私有化部署。适合需要對測試環境進行全面控制,并遵守嚴格安全和資料隐私規定的企業。使用該版本您需要:
    • 從 GitHub - emqx/mqtt-jmeter: MQTT JMeter Plugin(https://github.com/emqx/mqtt-jmeter)下載下傳 XMeter 團隊開發并開源的 mqtt-jmeter 插件。
    • 将 jar 檔案放入 JMeter 目錄中。
    • 根據應用場景,在 JMeter 中編寫測試腳本,如圖 6 所示。
    • 将腳本上傳到 XMeter 并開始對 MQTT 進行性能測試
  • XMeter Cloud:全托管的MQTT負載測試雲服務,簡單易用:
    • 一鍵發起 MQTT 性能測試,無需手動部署測試資源
    • 僅需 3 步完成 MQTT 測試配置,免除編寫場景腳本的負擔
    • 測試資源雲上按需建立,測試環境高度自動化,節省大量時間和人力成本

您隻需在我們的網站(https://xmeter-cloud.emqx.com/)上注冊一個免費試用賬号,然後按照文檔(https://docs.emqx.com/en/xmeter-cloud/latest/)的指引,即可開啟您的 XMeter 之旅。

總結

在本文中,我們讨論了幾種常見的測試場景和用來評估 MQTT Broker 性能的關鍵名額。通過了解和應用這些測試技術和名額,您可以優化 MQTT 系統性能和可靠性,提升物聯網和消息傳輸基礎設施的整體水準。