如何發起 MQTT 億級連線和千萬訊息吞吐效能測試

阿里巴巴雲原生發表於2022-04-22

作者:亦炎

隨著 5G 時代的來臨,萬物互聯的偉大構想正在成為現實。聯網的物聯網裝置 在 2021 年已經達到了 120 億,在未來兩年,僅智慧水電氣表就將超過 10 億。在如此大的物聯網需求下,海量的裝置接入和裝置管理對網路頻寬、通訊協議以及平臺服務架構都帶來了很大挑戰。如何做好以 MQTT 為代表的物聯網協議效能測試,也就顯得尤為重要。那麼,我們該如何做好 MQTT 的效能測試呢?

什麼是 MQTT 協議

MQTT 是基於 TCP/IP 協議棧構建的非同步通訊訊息協議,是一種輕量級的釋出、訂閱資訊傳輸協議。可在不可靠的網路環境中進行擴充套件,適用於裝置硬體儲存空間或網路頻寬有限的場景。使用 MQTT 協議,訊息傳送者與接收者不受時間和空間的限制。

對於物聯網協議來說,必須針對性地解決物聯網裝置通訊的幾個關鍵問題:其網路環境複雜而不可靠、其記憶體和快閃記憶體容量小、其處理器能力有限。MQTT 協議憑藉簡單易實現、支援 QoS、報文小等特點,佔據了物聯網協議的半壁江山。

MQTT 的釋出訂閱模式

釋出訂閱模式區別於傳統的客戶端-伺服器模式,它使傳送訊息的客戶端(釋出者)與接收訊息的客戶端(訂閱者)分離,釋出者與訂閱者不需要建立直接聯絡。我們既可以讓多個釋出者向一個訂閱者釋出訊息,也可以讓多個訂閱者同時接收一個釋出者的訊息,它的精髓在於由一個被稱為代理的中間角色(或稱為 MQTT Broker)負責所有訊息路由和分發的工作。傳統的客戶端-伺服器模式可以實現類似的效果,但是無法做到像釋出訂閱模式這樣簡潔和優雅。

釋出訂閱模式的優點在於釋出者與訂閱者的解耦,這種解耦表現在以下兩個方面:

空間解耦 : 訂閱者與釋出者不需要建立直接連線,新的訂閱者想要加入網路時不需要修改釋出者的行為。

• 時間解耦:訂閱者和釋出者不需要同時線上,即便不存在訂閱者也不影響釋出者釋出訊息。
在這裡插入圖片描述

為什麼要做 MQTT 效能測試

MQTT 效能測試主要幫助我們做到如下內容:

1. 摸清 MQTT 核心指標

• 不同網路環境下,訊息端到端的時延
• MQTT Broker 同時保持的最大連線數
• MQTT 收發訊息的 TPS

2. 輔助 MQTT Broker 選型

物聯網行業裡可選的 MQTT Broker 不勝列舉,除了經典的 Mosquitto 和 AWS、Azure,百度雲、阿里雲、IBM 等幾個提供物聯網 MQTT 接入服務的產品外,可用於商業生產的 MQTT Broker 還有多款。

但是每一款 MQTT Broker 的系統效能與適用場景都不盡相同。例如,EMQ 單機效能較高,單機支援百萬級併發,叢集支援千萬級併發,優勢在於高併發連線與高吞吐訊息的服務能力;HiveMQ 單機效能相對較差,有一定高併發連線與高吞吐訊息的服務能力。

通過 MQTT 效能測試,我們可以更加精準的選擇合適的 MQTT Broker。

業界一般如何做 MQTT 效能測試?

MQTT 效能測試的難點在於能夠同時發起並保持海量的連線。

目前最常見的 MQTT 效能測試方式,是基於 JMeter 的 MQTT-Xmeter 外掛實現的。該外掛的底層原理就是每個執行緒都模擬一個 MQTT Client,向 MQTT Broker 傳送連線請求。然而 JMeter 的執行緒模型(一個併發就是執行緒)決定了,想要發起海量的連線請求,施壓機就必須建立同等數量的執行緒,不僅造成資源的嚴重浪費,還限制了單個施壓機能夠發起的總連線請求數。阿里雲的效能測試 PTS 允許單個執行緒發起並保持最多 100 個,單臺施壓機最大 5 萬個,單次壓測最大 1 億個 MQTT 連線數。

使用 PTS 可以幫助使用者輕鬆發起千萬乃至億級的 MQTT 連線,節省大量時間成本和機器成本。

如何使用 PTS 發起 MQTT 億級連線和千萬訊息吞吐效能測試

使用步驟

1、建立場景。我們在 PTS 控制檯的【壓測中心】->【建立場景】中建立 MQTT 壓測場景;

在這裡插入圖片描述

2、場景配置。PTS 支援建立連線、釋出訊息、訂閱訊息和關閉連線四種測試節點。使用者若僅需測試 Broker 支援的最大連線數,可以只建立建立連線節點。

對於阿里雲的 MQTT 例項,使用者只需要開啟簽名鑑權開關,填入 AccessKey ID、AccessKey Secret 和例項 ID 即可,PTS 會動態生成使用者名稱和密碼。PTS 支援指定單併發連線數,以及均勻遞增、階梯遞增和固定壓力三種流量模型。使用者可以通過調整壓測中併發數,來控制 MQTT 連線數的增長速率。

場景配置示例:1 萬個 MQTT 連線作為 pub 客戶端傳送訊息,每個 pub 客戶端每秒傳送 1 條 QoS0 訊息;99 萬個 MQTT 連線作為 sub 客戶端接收訊息,每個 sub 客戶端每秒接收 1 條 QoS0 訊息。因此,總的訊息釋出吞吐率為每秒 10000,總的訊息接收吞吐率達到每秒 100 萬。
在這裡插入圖片描述
在這裡插入圖片描述

總結

本文闡述了:

1、什麼是 MQTT 協議

2、MQTT 效能測試必要性

3、使用 PTS 做 MQTT 效能測試的優勢

4、如何使用 PTS 快速發起 MQTT 效能測試

同時,PTS 全新售賣方式來襲,基礎版價格直降 50%!百萬併發價格只需 6200!更有新使用者 0.99 體驗版、VPC 壓測專屬版,歡迎大家選購!

在這裡插入圖片描述

相關文章