前沿與網路的未來

MQTT

/ EM-cue-tee-tee /

想想雜誌訂閱是怎麼運作的。你不會每個月打電話問出版社「有新一期了嗎?」;你訂閱一次,新的期數就會自動送到你手上。同時出版社不需要知道它的讀者是誰——它只管印刷與出貨,由一個發行中心把刊物送給每個訂閱者。MQTT 把這種發布/訂閱(publish/subscribe)模式帶進網路,而它是物聯網的主力協定之一——非常適合需要簡單、廉價地分享資料的微小、電池供電裝置。

具體來說,MQTT 是一個輕量的發布/訂閱訊息協定。裝置不直接彼此交談,而是全都連到一台稱為代理(broker)的中央伺服器。某個裝置發布一則訊息、標上一個主題(topic)——像 sensors/greenhouse/temperature 這樣的標籤——而任何訂閱了那個主題的裝置都會收到這則訊息。發布者與訂閱者完全不需要知道彼此的存在;代理負責比對主題並遞送。這個協定刻意做得很小(它的訊息標頭可以只有區區幾個位元組),所以它只啜飲一點點頻寬與電力,而且它提供幾種傳遞品質等級——從發了就不管、到至少一次、到恰好一次——讓裝置在可靠性與額外開銷之間取捨。它通常跑在 TCP 之上,常以 TLS 加密。

為什麼重要:MQTT 的解耦與微小體積,與受限的物聯網裝置和不可靠的網路契合得極好——一個感測器可以發布一筆讀數就回去睡覺、不必維持一場對話,而代理負責緩衝並把訊息扇出給每個在乎的人。誠實的提醒:代理是個一切都倚賴的中央點(一旦它倒下或被壓垮,就是單點故障與瓶頸),而 MQTT 本身不提供任何加密——那份機密性來自把它跑在 TLS 上,而這你得真的去啟用。它也不是唯一的選擇;CoAP 等協定以不同的取捨填補類似的利基。

一個門感測器在門一移動時就向主題 home/frontdoor 發布「open」。一支手機 app 和一台保全相機都訂閱了那個主題。門一開,代理立刻把訊息遞給兩者——然而感測器自己根本不知道有誰、或是否有人,在收聽。

發布者與訂閱者透過代理而彼此解耦。

MQTT 本身不加密任何東西——除非你把它跑在 TLS 上(而這你得明確啟用),它那些微小的訊息都是明文。而且一切都經過的那個代理是單點故障:它一倒,發布者與訂閱者就再也聯繫不上彼此。

又稱
Message Queuing Telemetry TransportMQTT 協定