电竞比分网-中国电竞赛事及体育赛事平台

分享

MQTT與RocketMQ應(yīng)用場景對比

 liang1234_ 2019-05-14

本文主要在產(chǎn)品概述的基礎(chǔ)上介紹微消息隊列 MQTT 和傳統(tǒng)消息中間件的關(guān)聯(lián)和區(qū)別,并針對實際應(yīng)用場景下的產(chǎn)品選型給出建議。

背景信息

傳統(tǒng)的消息中間件,例如消息隊列 RocketMQ、消息隊列 Kafka 等都是面向微服務(wù)大數(shù)據(jù)等領(lǐng)域,負責(zé)消息的存儲和轉(zhuǎn)發(fā),消息的生產(chǎn)者和消費者都是服務(wù)端應(yīng)用。

這種設(shè)計很適合服務(wù)端技術(shù)棧固定、語言平臺固定的場景。而移動互聯(lián)網(wǎng)和 IoT 領(lǐng)域則有所不同,這類場景更側(cè)重于多語言多平臺的海量設(shè)備接入,消息的生產(chǎn)和消費過程的業(yè)務(wù)屬性很突出,傳統(tǒng)的消息中間件并不適合這些領(lǐng)域。

秉承單一職責(zé)的原則,微消息隊列 MQTT 在設(shè)計上是一個面向移動互聯(lián)網(wǎng)和 IoT 領(lǐng)域的無狀態(tài)網(wǎng)關(guān),只關(guān)心海量移動端設(shè)備的接入、管理和消息傳輸,消息數(shù)據(jù)的存儲則都會路由給后端存儲產(chǎn)品,例如傳統(tǒng)的消息中間件消息隊列 RocketMQ、消息隊列 Kafka 等產(chǎn)品。

在這種職責(zé)劃分下,終端設(shè)備將消息發(fā)送到微消息隊列 MQTT 后,消息會根據(jù)微消息隊列 MQTT 綁定的存儲產(chǎn)品被路由到指定產(chǎn)品,云端應(yīng)用依然可以維持傳統(tǒng)的微服務(wù)開發(fā)方案,通過對接云端存儲產(chǎn)品即可和終端設(shè)備進行互動,兩者之間通過微消息隊列 MQTT 實現(xiàn)了數(shù)據(jù)互通能力。

適用場景對比

在一個業(yè)務(wù)場景中,可能包含多種不同類型的應(yīng)用組件,每個組件承擔(dān)不同的角色。因此,在方案選型時如需要使用到消息產(chǎn)品,需要先了解微消息隊列 MQTT 和傳統(tǒng)消息中間件的關(guān)聯(lián)和區(qū)別,合理搭配使用,比如組件 A 的消息收發(fā)使用微消息隊列 MQTT,組件 B 的消息收發(fā)使用消息隊列 RocketMQ。

下文將根據(jù)場景舉例描述微消息隊列 MQTT 和傳統(tǒng)的消息中間件的區(qū)別,為方便描述,傳統(tǒng)的消息中間件以消息隊列 RocketMQ 為例,其他產(chǎn)品例如消息隊列 Kafka 和消息隊列 AMQP(RabbitMQ)同理。

表 1. 適用場景對比
產(chǎn)品名 適用場景

微消息隊列 MQTT

面向移動端場景,移動端場景一般都具備海量設(shè)備,單設(shè)備數(shù)據(jù)較少的特點。因此,微消息隊列 MQTT 適用于擁有大量在線客戶端(很多企業(yè)設(shè)備端過萬,甚至上百萬),但每個客戶端消息較少的場景。
消息隊列 RocketMQ 面向服務(wù)端的消息引擎,主要用于服務(wù)組件之間的解耦、異步通知、削峰填谷等,服務(wù)器規(guī)模較小(極少企業(yè)服務(wù)器規(guī)模過萬),但需要大量的消息處理,吞吐量要求高。因此,消息隊列 RocketMQ 適用于服務(wù)端進行大批量的數(shù)據(jù)處理和分析的場景。

組合使用場景示例

  • 場景示例一

    在物聯(lián)網(wǎng) IoT 場景中,成千上萬(甚至數(shù)百萬)規(guī)模的設(shè)備傳感器可使用微消息隊列 MQTT 上傳數(shù)據(jù),需做數(shù)據(jù)分析的服務(wù)端(即部署在服務(wù)器上的應(yīng)用)則可以通過消息隊列 RocketMQ 完成數(shù)據(jù)的分析與處理。

  • 場景示例二

    在車聯(lián)網(wǎng)場景中,上百萬輛車需要上傳車輛信息數(shù)據(jù)到云端(服務(wù)端),云端同時也會下發(fā)指令到任意車輛或廣播到所有的車輛。車輛可以通過 MQTT SDK 連接到微消息隊列 MQTT 實現(xiàn)數(shù)據(jù)上報以及指令接收,監(jiān)管系統(tǒng)(數(shù)據(jù)分析系統(tǒng))可以通過消息隊列 RocketMQ 的 SDK 進行消息訂閱以及指令下發(fā)。如下圖所示:

圖 1. 場景示例

基于以上區(qū)別,推薦您在移動端設(shè)備上使用微消息隊列 MQTT,而在服務(wù)端應(yīng)用中則使用消息隊列 RocketMQ(或者其他消息產(chǎn)品)。

功能對比

微消息隊列 MQTT 和消息隊列 RocketMQ 的具體功能特性的對比如下:

表 2. 功能對比
功能特性 微消息隊列 MQTT 消息隊列 RocketMQ
客戶端連接數(shù) 客戶端規(guī)模龐大,百萬甚至千萬級 一般服務(wù)器規(guī)模較小,極少數(shù)萬級
單客戶端消息量 單個客戶端需要處理的消息少,一般定時收發(fā)消息 單個客戶端處理消息量大,注重吞吐量
部署場景 移動設(shè)備、App 軟件、H5 頁面等 服務(wù)端應(yīng)用
消費模式 支持廣播模式 支持集群消費和廣播消費
順序支持 只支持上行順序,不支持下行順序(后續(xù)開放) 支持上行和下行順序
多語言/系統(tǒng)支持(TCP 協(xié)議) 支持 Java、C、C++、.NET、Andriod、iOS、Python、JS、Go 等多種語言和系統(tǒng) 支持 Java、C++、.NET
訪問憑證 支持 RAM 的永久訪問模式和 MQTT Token 的臨時訪問模式,詳情請參見鑒權(quán)概述。 支持 RAM 永久訪問模式STS 臨時授權(quán)訪問

選型指導(dǎo)

基本原則總結(jié)如下:

  • 對于部署在服務(wù)器上的應(yīng)用,推薦使用消息隊列 RocketMQ 接入;

  • 對于部署在移動終端、App 或瀏覽器頁面等平臺上的應(yīng)用,推薦使用微消息隊列 MQTT 接入。

針對常見的應(yīng)用場景,建議的微消息隊列 MQTT 和消息隊列 RocketMQ 選型如下:

表 3. 選型推薦
場景 部署端 微消息隊列 MQTT 消息隊列 RocketMQ
設(shè)備端上報狀態(tài)數(shù)據(jù) 移動終端 ×
接收并處理分析設(shè)備的上報數(shù)據(jù) 移動終端 ×
對多個設(shè)備下發(fā)控制指令 服務(wù)器 ×
直播、彈幕、聊天 App 收發(fā)消息 應(yīng)用 ×
服務(wù)端接收并分析聊天消息 服務(wù)器 ×

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多