こんにちは、ツカノ(@snuffkin)です。
このところ IoT(Internet of Things)関連のニュースを目にすることが増えました。
最近であればPepper君の一般販売などが大きなニュースでしたが、
システムの足回りが大好きな自分としては、IoTと言えば、そう、MQTTですね!(強引!)
Googleトレンドで調べてみたら、こんな感じでした。ここ1-2年で急速に伸びていますね。
MQTTは、Message Queue Telemetry Transport の略ですが、Pub/Sub型モデルのメッセージキュー"プロトコル"であり、MQ(Message Queue)と言いつつ、メッセージを蓄積はしないんですよね。よく勘違いされる点なので、注意が必要です。
MQTTの詳しい説明は、以下のサイトが参考になります。
さて、そんなMQTTですが、メッセージをやり取りするには、仲介役となる MQTT Broker が必要になります。
OSSの MQTT Broker も多く登場してきているのですが、それぞれ実装されている仕様も異なっているため、利用時には注意が必要です。
そこで、自分としてもどのような差分があるのか知りたくなり、代表的なOSSの MQTT Broker について調査してみました。
MQTTの参照実装と言われる Mosquitto をはじめとして、利用されるケースが多い、Apollo、RabbitMQ、eMQTTD、Mosca について機能比較を行いました。
その結果が以下の表です(○:対応あり、×:対応なし)。
Broker(version) | 開発言語 | 対応しているMQTT version | QoSレベル | Retain | Will | WebSocket | UI | 冗長化 |
---|---|---|---|---|---|---|---|---|
Mosquitto(1.4.2) | C | MQTT 3.1/3.1.1 | 0,1,2 | ○ | ○ | ○ | × | × |
Apollo(1.7.1) | Java | MQTT 3.1 | 0,1,2 | ○ | ○ | ○ | ○ | × |
RabbitMQ(3.5.3) | Erlang | MQTT 3.1 | 0,1 | × | ○ | × | ○ | ○ |
Mosca(0.29.0) | Node.js | MQTT 3.1 | 0,1 | × | ○ | ○ | × | × |
eMQTTD(0.8.6-beta) | Erlang | MQTT 3.1/3.1.1 | 0,1,2 | ○ | ○ | ○ | × | ○ |
VerneMQ(0.9.4) | Erlang | MQTT 3.1/3.1.1 | 0,1,2 | ○ | ○ | ○ | × | ○ |
Brokerのversionは調査時のものです。
以下、今回比較した観点について、簡単に説明します。
- MQTT 3.1と3.1.1の違いは以下に解説されています。3.1.1では、曖昧な点の仕様を明確にしたり、Client IDのサイズ拡張等が行われています。
- QoS(Quality of Service)はメッセージ配信に関する品質保証のレベルで、以下の3段階存在します。
- Retainに対応していると、トピックにSubscribeしたときに、最新のメッセージが配信されます。
- Willは「Last Will and Testament」のことで、Publisherが切断した際に予め決めておいたメッセージを、Subscriberに配信する流す仕組みがあります。
- WebSocketは、MQTTのメッセージをWebSocketのプロトコルを使って配信できるかどうかです。
- UIは、Brokerの管理画面などがUIで提供されているかどうか表します。Webブラウザを使って管理できると便利ですよね。
各Brokerに対して寸評を書くと。。。
- Mosquitto
- Apollo
- 機能的には良いのですが、動作をさせてみたところ、MQTTのメッセージのヘッダが標準と多少異なるようで、MQTTクライアントのAPIの種類によっては、Subscribeできないケースがありました。
- RabbitMQ
- 以前から普通のMQとして利用することも多かったので、期待していたのですが、未だに、QoS=2に対応していなかったり、retainに対応していなかったり(開発は進んでおり、v3.6.0で対応する予定があるようです)する点は、残念な状況です。
- Mosca
- MQTTとしての機能は不足している感じがします。ただし、MoscaはStandaloneでもEmbedded(他アプリ内で動作する)でも動作する、という特徴があります。
- eMQTTD
- VerneMQ
また、今回はそのままインストールして利用するのではないため、比較の対象からは外していますが、750,000 Messages/sec を達成したという、Goで実装された SugeMQ (MQTT Broker/Client ライブラリ、という位置づけ)なんかもあったりします。
バージョンが変わると、また状況は変わってくるかもしれませんが、MQTT Broker を利用する際の参考なれば、と思います。
#できれば、商用の MQTT Broker も対象にしたかったのですが、それはまた今度の機会に。
次回はこれらの MQTT Broker に対して、皆さん気になるベンチマークした結果を紹介したいと思います!
2015/06/26 更新
MQTT Brokerの動きも早く、短期間の内にバージョンアップされていたり、新しいBrokerが登場していました。
それらに関してコメントを頂いたため、内容を更新しました。
- 調査対象のバージョンを、2016/06/26時点で最新のものに更新しました。
- Will、WebSocket の項目を追加しました。
- 調査対象にVerneMQを追加しました。
Acroquest Technologyでは、キャリア採用を行っています。
- 日頃勉強している成果を、Hadoop、Storm、NoSQL、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
- 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
- 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
- OSSの開発に携わりたい。
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
キャリア採用ページ