こんにちは、ishida(@kojiisd)です。
「IoT」という言葉も、IT/ICT関係者だけでなく、一般ニュースやビジネス雑誌にも登場するようになり、大分バズって広まってきていますね。
IoTといえば、やはりMQTTとの関係は切り離せず、商用のMQTT Brokerとしては、Sango だけでなく、 AWS IoT なども登場してきており、どれを利用するのが良いか、迷ってしまいますよね。
また、前回2015年6月にOSSの MQTT Broker 比較を行った際は、日本語の記事にも関わらず、VerneMQやeMQTTのコミッタの方からコメントも頂き、反響の大きさには驚きました。
ということで、OSSのBrokerも、バージョンアップがされてきているので、改めて比較レポートを作成しました!
※前回の比較内容は以下になります。
機能比較
各MQTT Brokerの機能比較に関しては、以下のようになります(○:対応あり、×:対応なし)。
Broker(version) | 開発言語 | 対応しているMQTT version | 対応OS | QoSレベル | Retain | Will | WebSocket | UI | 冗長化 |
---|---|---|---|---|---|---|---|---|---|
Mosquitto(1.4.5) | C | MQTT 3.1/3.1.1 | Win/Mac/Linux | 0,1,2 | ○ | ○ | ○ | × | × |
Apollo(1.7.1) | Java | MQTT 3.1 | Win/Mac/Linux | 0,1,2 | ○ | ○ | ○ | ○ | × |
RabbitMQ(3.5.6) | Erlang | MQTT 3.1 | Win/Mac/Linux | 0,1 | × | ○ | × | ○ | ○ |
Mosca(0.32.1) | Node.js | MQTT 3.1 | Win/Mac/Linux | 0,1 | ○ | ○ | ○ | × | × |
eMQTT(0.13.0) | Erlang | MQTT 3.1/3.1.1 | Win/Mac/Linux | 0,1,2 | ○ | ○ | ○ | ○ | ○ |
VerneMQ(0.12.2) | Erlang | MQTT 3.1/3.1.1 | Mac/Linux | 0,1,2 | ○ | ○ | ○ | × | ○ |
- Brokerのversionは調査時のものです。
- 今回、新たに「対応OS」の列を加えました。
性能比較
Publish性能(retain=false)
Publish性能(retain=true)
結果
- eMQTTには管理のためのWebUIが追加されて、使い勝手が良くなりました。
- eMQTTとVerneMQは、前回評価時は、retainをtrueにした際の性能が大幅に低下したのですが、今回はその点が改善され、retainをtrueにしても性能劣化は見られなくなりました。
- eMQTTが全体的に性能が向上し、VerneMQと同等の性能になっています。
前回評価時から、たった半年ですが、eMQTTやVerneMQなどはリリースの頻度も多く、性能も大幅に改善されていました。
個人的には、前回の結果からは「使うならVerneMQだろう」と思っていたのですが、今回の結果からはeMQTTもかなり魅力的になりました。
用途や目的に応じて、最適なBrokerを選択するのに役に立てて頂ければと思います。
計測内容
計測について、以下に処理内容を示します。
- Publish(Retainなし)
- MQTT Broker に対して、クライアントからメッセージを送信する処理になります。Retainなしの場合は、最後にPublishされたメッセージをBrokerが保持しません。
- Publish(Retainあり)
- MQTT Broker に対して、クライアントからメッセージを送信する処理になります。Retainありの場合は、最後にPublishされたメッセージをBrokerが保持します。
- Subscribe
- MQTT Broker から、クライアントがメッセージを受信する処理になります。MQTTの特性として、接続されているときのみメッセージを受信するため、Subscribeしている間、それとは別プロセスでPublish(Retainなし)の処理を行っています。
またベンチマークの条件は以下になります。
- 構成、メッセージ長
- MQTT Broker に対して、500connections で同時処理
- 1つのメッセージ長は 1024byte
- マシンスペック
Acroquest Technologyでは、キャリア採用を行っています。
- 日頃勉強している成果を、AWS、Hadoop、Storm、NoSQL、SpringBoot、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
- 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
- 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
- OSSの開発に携わりたい。
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
キャリア採用ページ