微消息隊列 MQTT 版是專為移動互聯網(MI)、物聯網(IoT)領域設計的消息產品,覆蓋互動直播、金融支付、智能餐飲、即時聊天、移動 Apps、智能設備、車聯網等多種應用場景;通過對 MQTT、WebSocket 等協議的全面支持,連接端和雲之間的雙向通信,實現 C2C、C2B、B2C 等業務場景之間的消息通信,可支撐千萬級設備與消息並發,如果說傳統的消息隊列中間件一般應用於微服務之間,那么適用於物聯網的微消息隊列 MQTT 版則實現了端與雲之間的消息傳遞和真正意義上的萬物互聯。。
產品優勢
微消息隊列 MQTT 版相當於一個具備無限擴展能力的連接網關,不僅提供了自閉環的消息收發和存儲能力,還提供了規則轉入轉出能力。您可以通過配置規則搭配阿里雲其他產品,例如傳統服務端消息中間件(消息隊列 RocketMQ 版、消息隊列 Kafka 版等)來實現雲和端的數據雙向互通。
微消息隊列 MQTT 版系統采用分布式理念進行設計,無單點瓶頸,各組件之間均可以無限水平擴展,保證容量可以隨着您的在線使用量進行調整,並且對用戶完全透明。
下圖展示了微消息隊列 MQTT 版的產品優勢。
圖 1. 產品優勢
相比其他移動端消息服務,微消息隊列 MQTT 版具有以下優勢:
- 支持的都是標准協議,例如 MQTT、STOMP,應用方無技術捆綁,使用絕大多數開源的 SDK 即可無縫遷移到雲上。
- 作為一個海量移動終端長連接網關,后端通過規則引擎和阿里雲其他消息產品數據打通,應用可以無需搭建自己的網關即可實現端和雲的雙向通信。
- 支持設備級權限控制,並支持 SSL/TLS 加密通信,數據傳輸更安全可靠。
下面介紹一下微消息隊列 MQTT 版和傳統消息中間件,例如消息隊列 RocketMQ 版的關聯和區別,並針對實際應用場景下的產品選型給出建議。
背景信息
傳統的消息中間件,例如消息隊列 RocketMQ 版、消息隊列 Kafka 版等都是面向微服務大數據等領域,負責消息的存儲和轉發,消息的生產者和消費者都是服務端應用。
這種設計很適合服務端技術棧固定、語言平台固定的場景。而移動互聯網和 IoT 領域則有所不同,這類場景更側重於多語言多平台的海量設備接入,消息的生產和消費過程的業務屬性很突出,傳統的消息中間件並不適合這些領域。
秉承單一職責的原則,微消息隊列 MQTT 版在設計上是一個面向移動互聯網和 IoT 領域的無狀態網關,只關心海量移動端設備的接入、管理和消息傳輸,可與其他阿里雲產品通過數據互通規則實現交互,例如消息隊列 RocketMQ 版。
在這種職責划分下,終端設備將消息發送到微消息隊列 MQTT 版后,消息會根據微消息隊列 MQTT 版創建的規則路由到指定產品,雲端應用依然可以維持傳統的微服務開發方案,通過對接雲端存儲產品即可和終端設備進行互動,兩者之間通過微消息隊列 MQTT 版實現了數據互通能力。
適用場景對比
在一個業務場景中,可能包含多種不同類型的應用組件,每個組件承擔不同的角色。因此,在方案選型時如需要使用到消息產品,需要先了解微消息隊列 MQTT 版和傳統消息中間件的關聯和區別,合理搭配使用,例如組件 A 的消息收發使用微消息隊列 MQTT 版,組件 B 的消息收發使用消息隊列 RocketMQ 版。
下文將根據場景舉例描述微消息隊列 MQTT 版和傳統的消息中間件的區別,為方便描述,傳統的消息中間件以消息隊列 RocketMQ 版為例,其他產品例如消息隊列 Kafka 版和消息隊列 AMQP 版(RabbitMQ)同理。
產品名 | 適用場景 |
---|---|
微消息隊列 MQTT 版 |
面向移動端場景,移動端場景一般都具備海量設備,單設備數據較少的特點。因此,微消息隊列 MQTT 版適用於擁有大量在線客戶端(很多企業設備端過萬,甚至上百萬),但每個客戶端消息較少的場景。 |
消息隊列 RocketMQ 版 | 面向服務端的消息引擎,主要用於服務組件之間的解耦、異步通知、削峰填谷等,服務器規模較小(極少企業服務器規模過萬),但需要大量的消息處理,吞吐量要求高。因此,消息隊列 RocketMQ 版適用於服務端進行大批量的數據處理和分析的場景。 |
組合使用場景示例
- 場景示例一
在物聯網 IoT 場景中,成千上萬(甚至數百萬)規模的設備傳感器可使用微消息隊列 MQTT 版上傳數據,需做數據分析的服務端(即部署在服務器上的應用)則可以通過消息隊列 RocketMQ 版完成數據的分析與處理。
- 場景示例二
在車聯網場景中,上百萬輛車需要上傳車輛信息數據到雲端(服務端),雲端同時也會下發指令到任意車輛或廣播到所有的車輛。車輛可以通過 MQTT SDK 連接到微消息隊列 MQTT 版實現數據上報以及指令接收,監管系統(數據分析系統)可以通過消息隊列 RocketMQ 版的 SDK 進行消息訂閱以及指令下發。如下圖所示。
基於以上區別,推薦您在移動端設備上使用微消息隊列 MQTT 版,而在服務端應用中則使用消息隊列 RocketMQ 版(或者其他消息產品)。
功能對比
微消息隊列 MQTT 版和消息隊列 RocketMQ 版的具體功能特性的對比如下。
功能特性 | 微消息隊列 MQTT 版 | 消息隊列 RocketMQ 版 |
---|---|---|
客戶端連接數 | 客戶端規模龐大,百萬甚至千萬級。 | 一般服務器規模較小,極少數萬級。 |
單客戶端消息量 | 單個客戶端需要處理的消息少,一般定時收發消息。 | 單個客戶端處理消息量大,注重吞吐量。 |
部署場景 | 移動設備、App 軟件、H5 頁面等。 | 服務端應用。 |
消費模式 | 支持廣播模式。 | 支持集群消費和廣播消費。 |
順序支持 | 只支持上行順序,不支持下行順序(后續開放)。 | 支持上行和下行順序。 |
多語言/系統支持(TCP 協議) | 支持 Java、C、C++、.NET、Android、iOS、Python、JS、Go 等多種語言和系統。 | 支持 Java、C++、.NET。 |
訪問憑證 | 支持 RAM 主子賬號授權和 MQTT Token 的臨時訪問模式,詳情請參見鑒權概述。 | 支持 RAM 主子賬號授權和 跨雲賬號授權(STS 臨時授權訪問)。 |
選型指導
基本原則總結如下:
- 對於部署在服務器上的應用,推薦使用消息隊列 RocketMQ 版接入。
- 對於部署在移動終端、App 或瀏覽器頁面等平台上的應用,推薦使用微消息隊列 MQTT 版接入。
針對常見的應用場景,建議的微消息隊列 MQTT 版和消息隊列 RocketMQ 版選型如下。
場景 | 部署端 | 微消息隊列 MQTT 版 | 消息隊列 RocketMQ 版 |
---|---|---|---|
設備端上報狀態數據 | 移動終端 | √ | × |
接收並處理分析設備的上報數據 | 移動終端 | × | √ |
對多個設備下發控制指令 | 服務器 | × | √ |
直播、彈幕、聊天 App 收發消息 | 應用 | √ | × |
服務端接收並分析聊天消息 | 服務器 | × | √ |
√ 表示建議使用該消息隊列產品;× 表示不建議使用該消息隊列產品。