MQTT Broker選型

MQTT Broker選型

一、簡述

MQTT協議是IBM開發的一個即時通訊協議,目前已經是物聯網的一個重要組成部分,該協議支持所有平臺,是一個主要作爲物聯網設備消息傳輸的通信協議。

目前很多公有云平臺都已經對MQTT協議有了很好的支持,例如阿里的LMQ,騰訊的IoT-MQ等,這裏主要討論一些開源的MQTT協議產品。

二、EMQ(Erlang)

EMQ是一個基於Erlang語言的開源mqtt服務器,目前來看是開源的最好的mqtt服務器,也是國內開源的mqtt服務器,優點是功能全面,文檔齊全,社區活躍,有很好的支持,缺點是因爲erlang語言,對於其他語言的開發者自己擴展有一定難度。官方文檔是:EMQ

三、mosquitto(C++)

mosquitto是基於c++的開源mqtt服務器,開源社區較活躍,功能較齊全,缺點也是因爲採用c++實現,對於其他語言的開發者很難擴展。mosquitto

四、moquette(Java)

moquette是基於java開發的mqtt服務器。開源社區較活躍,採用java實現,功能較齊全,也是我在實際工作中參考最多的一個mqtt開源broker。Moquette:https://github.com/andsel/moquette

五、選型

上面主要介紹了三個開源的mqtt broker,這三個產品也是應用比較多的,在實際架構設計時,還要考慮團隊人員,技術儲備,可運維,可用性,可靠性,性能等,這裏簡單比較一下:

  • EMQ是開源社區最活躍的,功能最全,但是“好功能”是需要收費的,同時erlang語言也很難維護和二次開發,mosquitto與emq相似,這兩個產品也是mqtt開源broker裏應用最廣,功能最全,性能較好的(實際需要自行測試),當然缺點是對於其它語言的開發者很難進行擴展,

  • moquette是我瞭解最多的,moquette雖然是java開源mqtt broker裏最活躍的,也是目前java實現中功能最全的一個,但是缺點也很明顯:

    1. 沒有集羣實現,無高可用,高可靠,基本決定了無法投入生產~

    2. 消息的持久化實現不好,在消息持久化時,連接數,消息的tps這些性能重要指標都很差

    3. 沒有運維功能。

  • 至於其他的Java實現的mqtt broker,例如activemq等,性能太低,可用性和可靠性也不好,基本無法在生產中實現,所以基本不用考慮。

六、JMQTT

這裏我開源了一個以Java語言實現的MQTT協議的Broker,主要基於Netty實現。代碼風格主要參考了阿里的RocketMQ,主要是想實現一個基於Java語言的高性能,高可用,有一定可靠性,高擴展,插件化的MQTT Broker。

目前該產品的主要規劃有以下:

  1. 實現mqtt協議所有功能

  2. 數據可持久化,實現高可靠

  3. 集羣化,可根據需求橫向擴展,實現高可用

  4. 插件化開發,可以很方便的對接其它消息存儲插件及集羣插件等

  5. 可運維,提供http方式的管理接口等

  6. 多協議,不限於mqtt支持的websocket,ssl/tls,還包括與coap協議互通,http協議互通等

  7. 數據上雲,可通過RocketMQ,Kafka等傳輸到數據分析平臺中

該產品目前仍然在開發中,目前實現了大部分mqtt協議的功能,還有很多功能亟待開發和實現,歡迎大家參與該項目的開發。Jmqtt:https://github.com/Cicizz/jmqtt

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章