IoT MQ設計篇 調研與協議選型

2021-09-11 13:46:34 字數 1624 閱讀 4322

本篇是iot mq系列的第一篇,本篇主要從以下幾個維度介紹下iot mq:

iot mq和kafka,rocketmq,rabbitmq這些訊息佇列有什麼區別

目前iot的傳輸協議有哪些,有什麼區別,如何選擇合適的協議作為基礎協議?

iot mq的適用場景有哪些?

iot mq(internet of things message queue)主要用來傳輸各種物聯網裝置的訊息,可以理解iot mq就是物聯網中的訊息中介軟體。對於很多開發者而言,對於像kafka,rocketmq,rabbitmq這樣的訊息佇列是很熟悉的,那麼iot mq相對於其他這種訊息佇列有哪些區別呢。

設計複雜度:設計系統時,系統的複雜度主要有「高可用,高效能,高可靠,規模,成本,安全,高擴充套件」等,其中「三高」是比較難設計的,對於kafka,rocketmq等就是「三高」的系統,所以內部很複雜,使用協議也是其自定義的私有協議。對於iot mq而言,訊息資料的高可靠相對而言沒有那麼重要,因為百分之90的物聯網裝置的場景都是網路不可靠的,訊息偶爾丟失是可以的。但是對於kafka這類mq和iot mq還有兩個很明顯的區別是:kafka這一類是「低連線高請求「的,而iot mq是高連線高請求的。。

coap

基於udp,不需要考慮連線成本,但是需要自己控制訊息的重傳,順序等,相應的訊息可靠性降低,但是傳輸成本降低,傳輸的資料量很小,

通訊方式跟http很像,更像是m2m的,例如通過手機檢視智慧型手環採集的心率資訊。每個終端都可以看成即是伺服器也是客戶端。

廣播訊息等是額外補充的協議,收集coap協議終端的資料相對比較麻煩。

mqtt

mqtt(message queuing telemetry transpor)訊息佇列遙測傳輸協議,其底層的傳輸協議是tcp,通訊方式與kafka這類mq的通訊方式很像,主要分為客戶端裝置與mqtt服務端兩個概念,裝置採集訊息與傳輸到服務端,服務端進行中專,主要特徵有:

基於tcp,在物聯網內通訊需要長連線,但是裝置數很多(百萬級)並且網路不可靠,所以對於連線設計的處理非常重要。

預設是廣播的,topic數量需要維護並且數量非常大,

mqtt與coap目前是使用最廣的物聯網通訊協議,其中mqtt實際上使用最多的物聯網協議,對與這兩種協議而言,主要應用場景都是物聯網,coap基於udp,複雜度主要在於訊息的可靠性,順序,重傳等需要自己處理,同時udp保證了很高的效能,沒有連線的開銷;mqtt基於tcp,複雜度主要是裝置session的儲存,長連線的處理等,所以coap更適合那種對於資料可靠性要求比較低,資料效能要求更高,網路更差的場景,mqtt則與之相反,同時mqtt也很好做一些擴充套件,例如websocket協議,tls安全等。如果要進行資料的採集,因為mqtt有broker的概念,與kafka這些很像,這也是我們選擇mqtt協議為基礎研發iot mq的原因。

物聯網裝置資訊上行採集與下行下發:例如淨水池的裝置每隔一小時採集一條水質報告傳輸到雲上進行分析,通過裝置管理平台可以下發一些訊息對每個裝置進行管理

裝置與裝置之間簡單互動(m2m),例如自己手機觀察手環採集的心率資訊,不需要額外的伺服器,只需要手機與手環進行互動

其它:一般來說,iot 意味著裝置多種多樣且數量很多,網路不可靠等,所以這些協議都是以這樣的環境產生的,在設計這樣的mq時,除了考慮本身協議的實現和應用場景外,還要考慮如何做一些擴充套件,特別是運維管理,監控等

技術選型與設計

作為乙個畢業不到一年的程式設計小白,前段時間參與了乙個準實時資料處理的專案 在這個專案中我獨自負責sql轉化中介軟體開發的任務 在接到這個任務的時候,即是興奮又是忐忑 興奮是自己能獨自負責一塊重要的東西,忐忑的是自己負責的是這次專案的核心部分,怕自己能力尚淺 事實證明,這兩樣我都說對了 開工第一天,...

頁面自動補齊設計與選型(前端與後台)

為提高頁面的輸入效率,自動補齊功能必不可以少。那麼要怎麼去實現呢?1 輸入零件編碼。根據輸入的編碼,智慧型提示。2 使用者選擇提示項,帶出零號名稱,零件 3 修改時,如零件編碼匹配不到內容時,清除零件名稱,原因 1 功能齊全,自定義性強。2 可控,自己可以修改。3 githup star 多。相信大...

騰訊 Qzone 系統架構設計選型與變遷

infoq 我們在qzone中經常了解到的乙個名詞就是set,能夠為我們介紹一下set是怎樣乙個形式?孫超 說到set,我先說乙個比較簡單的比喻 你可以把它理解成乙個貨櫃,乙個set是乙個殼子,它裡面裝著很多貨物 拿到qzone這來說,其實set就是把qzone的某些服務放到乙個小的盒子裡面,這樣來...