數據流在消息隊列遙測傳輸(MQTT)中的工作方式
譯文譯者 | 李睿
審校 | 孫淑娟
人類在互聯網和計算機上創建的數據并不總是準確的,人類打字、掃描、拍照或錄音也并不總是可靠的。但是,如果機器上有傳感器收集數據并能夠與其他機器通信呢?如果有某種協議可以使醫療和個人設備、電器和其他電子設備相互發送和接收數據呢?
例如,這樣的系統意味著人們可以準確地跟蹤他們庫存中的物品。或者他們商店中需要更換、補充或修理的零件或項目。由于設備中的傳感器收集數據,這意味著數據更準確、更可靠。
隨著第四次工業革命的到來,這個系統成為可能。它帶來了物聯網、機器人、人工智能和其他新興的顛覆性技術。
一、MQTT概述
智能電視、智能手表和其他可以相互發送和接收信息的“智能”設備和小工具現在與網站上的Cookie一樣常見。這些可以通過傳感器收集數據并將其發送到其他設備的智能設備稱為物聯網設備。
物聯網設備如何做到這一點?它們相互通信的能力是通過一種稱為消息隊列遙測傳輸(MQTT)的消息傳遞技術實現的。它是一個基于IP的輕量級消息傳遞系統,為物聯網提供支持。它使控制器、傳感器和其他小工具或設備能夠相互“交談”。此外,它還支持并不總是在線的設備,例如配備微控制器的自動化設備。
MQTT消息傳遞協議由IBM公司的Andy Clark和Eurotech公司的Arlen Nipper于1999年創建。它最初是主要用于石油和天然氣行業的專有協議,后來成為一個開源協議。MQTT設計用于在低帶寬網絡中工作。這一特性非常適合數字足跡較小的機器對機器通信和物聯網設備。它不僅適用于低帶寬網絡,也適用于高延遲環境。
MQTT用于制造業、衛生、電信、汽車等其他行業。它現在被公認為物聯網消息傳遞的標準。該消息系統采用發布者/訂閱者原則,使用MQTT服務器進行操作。發送者和接收者都不需要直接相互連接。
源數據由訂閱接收此類數據的客戶端發布和接收。發布者和訂閱者的關系是這樣的:
- 發布者(數據源)在主題上傳輸數據或消息。
- 客戶端訂閱主題以接收消息。
- 服務器將發布者與訂閱者匹配。
- 如果未找到匹配項,則丟棄該消息。
這種安排類似于廣播或電視廣播——只能查看您所調到的頻道的傳輸。在MQTT中,數據源“發布”數據,接收者獲取數據,因為他們是注冊訂閱者。
二、MQTT架構及數據傳輸協議
MQTT旨在成為輕量級設備的簡單發布/訂閱協議,由兩個主要組件組成:代理/服務器和客戶端。
1.MQTT代理/服務器
運行從數據源或發布者接收消息的軟件的計算機稱為代理或服務器。然后,服務器/代理將數據從源發送到其正確的目的地,即訂閱者。該軟件可以使用專有或開源軟件、現場臺式電腦或Raspberry Pi安裝在基于云的代理/服務器上。但是,如果正在處理可以通過互聯網控制的物聯網項目,則使用基于云的服務器更合適。
服務器可以管理多達數千個同時連接的MQTT客戶端,具體取決于實現。因此,在選擇MQTT服務器時,可擴展性和集成性是必不可少的考慮因素。除了接收和發送消息之外,服務器還具有其他能力,例如:
- 安全
需要保護MQTT。它應該要求其客戶提供強大的用戶名和密碼。此外,傳輸控制協議連接應使用安全套接字層(SSL)和傳輸層安全性(TLS)進行加密。這些安全措施應確保消息在傳輸過程中的安全性和隱私性。
- 服務質量(QoS)級別
服務質量(QoS)級別是消息源和預期接收者之間的協議。該協議定義了特定消息的傳遞保證。MQ遙測傳輸中有三個級別的服務質量(QoS):
(1)最多一次(0)
在這一級別,無法保證交付。這個級別最多保證的是“盡力而為”的交付。該消息既不存儲也不重新發送,并且收件人不發送接收確認。當互聯網可靠且需要快速交付數據時,使用這一服務質量級別。
(2)至少一次(1)
保證消息至少傳遞給訂閱者一次。發布者存儲消息,直到接收者發送接收確認。
服務器還確認發布者發送的消息,讓客戶端知道消息已收到。如果客戶端沒有收到確認,消息將再次發送。
確認告訴訂閱者客戶端所有與客戶端訂閱的主題有關的消息都已發布。雖然在這一級別可以保證收到消息,但如果沒有按時收到回執,則可能會出現重復消息。
如果客戶端需要接收訂閱主題的所有消息,則使用級別2。但是,許多商業服務器不支持級別2,因為它相對較慢且占用資源。
(3)恰好一次(2)
級別2是消息隊列遙測傳輸(MQTT)中的最高服務質量級別。每條消息都保證被訂閱者接收一次。它也是三個服務質量(QoS)級別中最安全但最慢的一個。雖然級別1可能導致消息重復,但級別2保證只接收一次數據。
這一保證由發布者和訂閱者之間的兩個(至少兩個)“請求和響應”流提供,這表明消息已被接收。一旦訂閱者確認收到消息,發布者就可以丟棄數據包。如果發布者沒有收到來自訂閱者的“收到消息”信號,則消息將繼續發送,直到消息被確認。
高QoS級別更可靠,但涉及高帶寬要求和更高延遲,這會減慢數據傳輸速度。當不需要快速消息傳遞并且重復消息可能導致問題時,使用這一級別。
就QoS而言,消息傳遞有兩個方面:從發布者到服務器以及從服務器到訂閱者。每次將數據發送到服務器時,數據或消息的來源/發布者都會設置數據的QoS級別。然后,服務器根據客戶端的QoS級別(在訂閱過程開始時設置)將數據發送到訂閱者客戶端。如果客戶端的QoS設置低于發布客戶端,則服務器將發送QoS較低的數據。
這一特性允許MQTT提供附加的消息傳遞服務質量,確保根據客戶端的要求發送數據。
- 存儲和轉發
即使訂閱者客戶端無法接收消息,某些MQTT消息也可以存儲并轉發給訂閱者。這些消息稱為客戶端可以訂閱的“存儲和轉發主題”。當訂閱者可以接收消息時,訂閱了存儲和轉發功能的客戶端可以接收存儲的數據。
要使這一功能有效運行,MQTT服務器需要執行以下操作:
(1)跟蹤每個訂閱者的客戶ID。
(2)跟蹤成功發送到每個客戶端的最后一條消息的標識符。
MQTT代理會自動刪除過期消息,除非配置保留它們。代理存儲配置的主題,以防將來的客戶訂閱它們。然后,這些消息將按照最初接收消息的順序傳遞給訂閱者。
2.MQTT客戶端
MQTT客戶端可以是發布者和訂閱者。標簽“發布者”和“訂閱者”指的是發布消息或訂閱接收消息的客戶端。在MQTT中,發布/訂閱功能可以在同一個客戶端中實現。客戶端可以在通信階段執行不同的功能,如訂閱、取消訂閱、發布、連接和斷開連接。
此外,這些客戶端可以是任何設備或應用程序,從臺式電腦到配備各種完全承諾的基于云的代理/服務器。客戶端可以是具有最小庫和有限資源的緊湊型設備,并使用無線網絡連接。
可以這么說,任何能夠通過TCP/IP堆棧運行MQTT的設備都可以成為客戶端。MQTT的實現是簡化和直接的,這些特性使MQTT非常適合使用最少資源的小型設備。
三、結論
MQTT是一種使智能家電、智能小工具和其他物聯網(IoT)設備“對話”并與其他機器或系統共享信息的技術。這種消息傳遞技術使智能手機、冰箱、可穿戴設備、恒溫器、遠程傳感器和其他智能小工具相互交換數據。
MQTT中的數據流在服務器/代理的幫助下通過簡單的發布者/訂閱者系統工作。發布者通過服務器傳輸有關主題的數據;然后,服務器將數據傳輸到訂閱該主題的客戶端。
原文鏈接:https://www.smartdatacollective.com/how-data-flow-works-in-mq-telemetry-transport-mqtt/