とある案件にて、HTTPでなくMQTTプロトコルを使ったデータのやり取りを実装することになりました。これを機に知識共有と備忘録を兼ねてMQTTについて紹介します。
MQTTとは?
MQTT(Message Queuing Telemetry Transport) は、1999年にIBM社とEurotech社により考案された軽量なメッセージプロトコルです。
MQTTは、限られたリソースを持つデバイスや、低帯域、高遅延、または信頼性の低いネットワーク環境向けに設計されています。そのため、機械同士が通信を介して情報をやり取りするM2M(Machine-to-Machine)や、家電や自動車など多種多様な「モノ」がインターネットにつながり、お互いに情報をやり取りするIoT(Internet of Things)を実現するのに適したプロトコルと言われています。
パブリッシュ/サブスクライブモデル
MQTTは、 パブリッシュ/サブスクライブ型 のメッセージングモデルを採用しています。
- パブリッシャー : メッセージの送信側
- サブスクライバー : メッセージの受信側
- ブローカー : MQTTサーバー。パブリッシャーからのメッセージを受信し、適切なサブスクライバーに配信する
パブリッシャーは、メッセージを特定のトピックにパブリッシュ(送信)します。サブスクライバーは、興味のあるトピックをサブスクライブ(受信)することで、そのトピックにパブリッシュされたメッセージを受け取れます。
このモデルの利点は、パブリッシャーとサブスクライバーが互いに相手を意識する必要がないことです。ブローカーがメッセージの配信を仲介するため、システムの複雑さを軽減し、スケーラビリティを向上させることができます。
MQTTの特徴
- 軽量
ヘッダーサイズが最小2バイトと小さく、ペイロードも軽量であるため、低帯域幅のネットワークや低消費電力のデバイスに適しています。 - シンプル
プロトコルがシンプルで実装が容易であるため、様々なデバイスに組み込むことができます。 - 非同期
パブリッシャーとサブスクライバーが互いの状態を意識する必要がないため、柔軟なシステム構築が可能になります。 - 双方向通信
パブリッシャーとサブスクライバーは立場を入れ替えることができ、双方向の通信を実現できます。 - メッセージの到達保証
QoS(Quality of Service) によって、メッセージの到達保証レベルを設定できます。 - Will(遺言)機能
予期せぬ切断時に、ブローカーからサブスクライバーに特定のメッセージを送信できます。
QoS(Quality of Service)
QoS(Quality of Service) は、メッセージの到達保証レベルの定義です。以下の3つのレベルが定義されています。
- QoS0 (At most once):
メッセージは最大1回配信されます。配信の保証はありません。
速度が最も速く、信頼性が低い
例:センサーデータの定期的な送信 - QoS1 (At least once):
メッセージは最低1回配信されます。重複して配信される可能性があります。
信頼性が高い
例:重要なアラートメッセージの送信 - QoS2 (Exactly once):
メッセージは正確に1回だけ配信されます。重複や損失はありません。
最も信頼性が高いが、速度が最も遅い
例:金融取引データの送信
パブリッシャーはどのQoSでメッセージを送信するか選択することができます。
HTTPとの比較
HTTPは、クライアントがサーバーにリクエストを送信し、サーバーがそのリクエストに応答する、という同期型の通信プロトコルです。一方MQTTは、非同期型の通信プロトコルであり、パブリッシャーとサブスクライバーは互いに相手を意識することなくメッセージを送受信できます。
MQTTのメリット
- 軽量
HTTPと比較してはるかに軽量であるため、IoTデバイスのようなリソースの限られた環境に適しています。 - 非同期通信
MQTTの非同期通信機能により、IoTデバイスのバッテリー寿命を延ばし、ネットワーク帯域幅を節約するのに役立ちます。 - 多対多通信
1対多、多対多の通信をサポートしているため、IoTシステムの構築に適しています。 - 不安定なネットワークへの対応
再接続機能やQoSによって、不安定なネットワーク環境でも信頼性の高い通信を実現できます。
MQTTの利用例
MQTTは、様々な分野で利用されています。
- 油田パイプライン監視
油田パイプラインに取り付けられたセンサーから衛星へのデータ送信 - Facebook Messenger
メッセージの送受信 - 自動車のIoT化
車両の状態監視、遠隔操作 - 病院のペースメーカー監視
患者の心臓の状態を遠隔監視 - 屋外の自動水やりシステム
センサーデータに基づいた自動水やり - 人工衛星
データ通信
まとめ
今回はMQTTの概要について紹介しました。MQTTは、IoTに最適な軽量で効率的なメッセージングプロトコルです。今後ひはWindowsやLinux環境にブローカーを構築する方法なども機会があれば紹介していきたいと思います。
参考サイト
- MQTTとは | かもめエンジニアリング
https://kfep.jp/solution/iot-mqtt/mqtt - MQTTとは? IoT開発未経験者向けに概要と実用例をご紹介!
https://amg-solution.jp/blog/15787 - MQTTとは?通信モデル・HTTPとの比較・利用メリット・実用例を紹介
https://www.kumikomi.jp/mqtt/ - MQTTプロトコル解説:基礎知識とクイック・チュートリアル
https://www.emqx.com/ja/blog/the-easiest-guide-to-getting-started-with-mqtt - MQTTのQoSとは?QoSとは何かやレベル別ユースケースを紹介
https://www.kumikomi.jp/mqtt-qos/