MQTTは何に使われるのか?
MQTTは、電力効率が高く、最小限の帯域幅しか消費しないように設計されたIoTデバイスで通常使用される軽量メッセージングプロトコルです。
MQTTプロトコルはTCP/IP 上で実行され、ロスレス通信による双方向パブリッシュ・サブスクライブモデルに基づいており、MQTTメッセージが損失なく効率的に配信されることを保証します。
MQTTは、帯域幅とCPUの制限を強く考慮した低オーバーヘッドのプロトコルとして構築されました。MQTTは、組み込み環境で動作し、確実かつ効果的に通信手段を提供できるように設計されています。
MQTTは基本的にパブリッシュ/サブスクライブ(pub/sub)プロトコルである。クライアントは特定のトピックに対して、パブリッシャー、サブスクライバー、またはその両方として接続することができる。クライアントは、すべてのメッセージパッシングを処理するブローカーに接続し、各クライアントは一意のクライアントIDで識別されます。
実際のMQTTの例とユースケース
MQTTは、センサー、アクチュエーター、家電製品などの低電力デバイスに接続し、通信するためのIoTアプリケーションに一般的に使用され、送信されるデータのペイロードを効率的に管理します。
農業では、土壌水分、温度、湿度などの環境要因を監視するために MQTT が使用され、農家は適切な行動を取ることができます。 産業オートメーションでは、MQTTはエンドツーエンドの製造プロセスを監視し、一貫した品質を確保し、生産チェーン上のシステム的問題を特定することができます。 交通機関では、MQTTは信号機、パーキングメーター、公共交通機関のリアルタイムの位置を監視するために使用され、エコシステムと低帯域幅要件に配慮しています。
なぜHTTPではなくMQTTを使うのか?
HTTPとMQTTは、異なる目的で使用される2つの全く異なる通信プロトコルです。
HTTPはリクエスト/レスポンス・プロトコルで、クライアントからのリクエストに応答してデータを配信します。 MQTTは、非同期のメッセージ配信を可能にするpub/subプロトコルであり、複数のクライアントが1つのトピックを購読し、パブリッシャーまたはパブリッシャーからメッセージを受信することができます。 MQTTは少量のデータ用に最適化されていますが、ネットワークのオーバーヘッドやデバイスの消費電力の点ではHTTPよりも効率的であるため、AWS IoTサービスで管理されるような、低帯域幅と最小限の電力消費を必要とするアプリケーションに適しています。
MQTTはどのような言語で書かれていますか?
MQTTは単なるプロトコルであり、多くの言語で書くことができる。しかし、MQTTプロトコルを使用して通信するために使用されるMQTTクライアントライブラリは、 C/C++、 Java、Python、JavaScript( Node.js、Ruby、Go、PHP、Swiftを含む)などの複数の言語で利用可能です。 MQTTクライアントライブラリは、複数のプログラミング言語で利用可能なMQTTブローカーを介して通信します。
MQTTはどのように機能するのか?
MQTTは非常に柔軟なプロトコルですが、基本的なエンティティはMQTTクライアントとMQTTブローカーの2つだけです。
MQTTクライアントはどのように機能するのか?
MQTTクライアントは、MQTTプロトコルを実装するエンドポイントであれば何でも構いません。IoTの場合、クライアントはセンサー、モニター、Arduinoボードなどの接続されたデバイスですが、MQTTはIoTに限定されるものではなく、例えばクライアントはスマートフォンやラップトップでもかまいません。
MQTTクライアントは互いに直接通信することはない。MQTTブローカーと呼ばれるサーバー・コンポーネントがクライアントの間に位置し、メッセージのルーティングを処理します。
MQTTのグループ化とは何ですか?
MQTTの通信はすべて「トピック」にグループ化されます。 MQTTクライアントは、トピックにメッセージをパブリッシュし、他のクライアントからのメッセージを受信するためにサブスクライブすることができます。 トピックは任意の文字列にすることができ、共通の関心のあるテーマをグループ化することを目的としています。例えば、センサーのアップデートはトピックにパブリッシュされ、グループチャットのメッセージは、ユースケースに応じてパブリッシュされます。
MQTTブローカーとは何ですか?
ブローカーは、どのクライアントがどのトピックをサブスクライブしているかを管理し、特定のトピックで公開されたメッセージを受信し、更新をサブスクライブしているクライアントにそのメッセージを送信する役割を担います。 クライアントとブローカー間の接続が切断された場合、ブローカーはメッセージをキャッシュし、接続が再確立されたときにクライアントに配信する役割も担います。
どのようなMQTTブローカーが使用できますか?
MQTTブローカーはMQTTプロトコルの基本であり、MQTTサーバーと考えることができます。 前述したように、ブローカーはすべてのクライアントの間に位置し、通信を促進します。
多くのMQTTブローカーがオープンソースとプロプライエタリの両方で存在し、MQTTベースの展開の最も重要なアーキテクチャ決定の1つは、ブローカーをどのようにホストするかです。 MQTTは非常に大規模で実行するように設計されているため、どのようなブローカーアーキテクチャもそれに応じて拡張する必要があります。ほとんどの企業導入では、クラウドホスト型のプロプライエタリな製品に依存するため、インフラに関する懸念はありませんが、セルフホスト型のオプションもあります。
すべての通信の間に位置するブローカーは、メッセージを保持し、すべてのセッションの安全な記録を保持することができます。クライアントは互いに隔離されているため、クライアントの安全性や脆弱性をサンドボックス化することができ、ネットワークトポロジーによっては、ブローカーはネットワーク全体のトラフィックを削減し、より効率的なルーティングを可能にします。
MQTTとPub/Subの使用方法
MQTTプロトコルをサポートするクライアントであれば、トピックのサブスクライブやパブリッシュが可能ですが、以下のモデル例に示すように、すべての通信はブローカーを経由します。
PubNubをMQTTソリューションとシームレスに統合するために、弊社独自のMQTTブローカーである MQTTブリッジを用意しています。 詳細はこの記事の最後にあります。
MQTTプロトコルの特徴
しばしばIoTソリューションと見なされますが、MQTTは多くの有名なIoT製品を支えるプロトコルにすぎません。 MQTTの多くの特徴は、デバイス間の効率的な通信に特に適しています:
立ち上げと実行が簡単
MQTTの歴史は古く、堅牢で信頼性が高く、スケーラブルなプロプライエタリおよびオープンソースのソリューションが数多く存在します。 これらの既存のMQTTコンポーネントは、大規模なソリューションから情熱的なプロジェクトまで、開発者の経験に関係なく、変更することなくすべてのプロジェクトで使用することができます。
信頼性と構成
MQTTには、後で詳しく説明するQoS(Quality of Service)の概念があり、MQTTブローカー上でメッセージをキューに入れキャッシュし、接続が再確立されたときにクライアントに配信します。 これは、部分的に接続されたデバイスや、IoTデバイスのように接続が断続的なクライアントには特に効果的です。
クライアントはソリューションアーキテクチャを考慮する必要がない
MQTTでは、トピックにメッセージをパブリッシュし、利用可能になったときにメッセージを受信します。 クライアントとして、接続の確立や再確立、受信者がメッセージをリッスンしているかどうかを心配する必要はありません。
規模に合わせた設計
MQTTは、新興企業からグローバル企業まで、ソリューションが必要とするあらゆる規模に対応できます。 最も有名なところでは、Facebook Messengerが通信にMQTTを使用しています。
MQTTセッションのライフサイクル
MQTTは接続をTCP/IPに依存しているため、同様のライフサイクルをたどります。
接続
MQTTクライアントはMQTTブローカーへの接続を開始する。 通常、これは標準のMQTTポート(セキュア接続と非セキュア接続はそれぞれ1883/883)を介して行われる。
認証
MQTT プロトコルには、基礎となる TCP/IP 接続用のTLS 以外の認証に関する考慮はなく、ほとんどのユースケースではこれで十分である。
パブリッシュ/サブスクライブ
接続すると、クライアントはトピックを発行または購読してメッセージを送受信できる。
切断
切断は、クライアントまたはブローカーのいずれかによって開始することができ、進行中のリクエストが処理された後に MQTT セッションが終了します。
MQTTサービス品質(QoS)
一般的に、接続の信頼性が高いほど、再試行とメッセージ保持のための潜在的なメモリ・オーバーヘッドが大きくなります。
QoS -1
メッセージは一度だけ送信され、クライアントとブローカーは配信を確認するための追加ステップを取りません。 これは「fire and forget」としても知られています。
これはクライアントから送信されたメッセージにのみ適用されます。 メッセージがブローカーで受信されると、QoS 0とみなされます。
QoS 0
送信者と受信者はハンドシェイクを行い、メッセージのコピーが1部しか受信されないことを確認する。 これにより、配信が保証され、メッセージのコピーが複数送信されることを避けることができる。
QoS 1
メッセージは受信者が受信を確認するまで複数回再送信される。 これは時間的制約のあるメッセージに最適だが、重複したメッセージを受信する可能性がある。
MQTTの使用例とIoT
MQTTは軽量で電力効率に優れたプロトコルであり、長年にわたり、それらが重要な考慮事項である種類のソリューションで使用されてきた。
IoTは、MQTTが最適である最も一般的な例です。 IoTデバイスは、一般的にバッテリー駆動であり、メンテナンスに非常にコストがかかるため、バッテリー交換の間隔が長いことが好まれます。 家庭環境では、時々バッテリーを交換することは難しくありませんが、産業環境では、数千のセンサーが広範囲に広がり、非常に届きにくい場所にあることが多いため、そのメンテナンスにはすぐにコストがかかります。
MQTT IoTのユースケースには、火災探知機、盗難追跡、位置監視、センサー、エンジン状態などがあります。MQTTはまた、データ・オーバーヘッドが非常に低いので、データが高価な環境、または何千ものデバイスが配置されているため帯域幅が懸念される環境では、MQTTは理想的です。
PubNubとMQTTが どのように信頼性が高く、スケーラブルで効率的なIoTソリューションを提供できるかについては、IoT デモと IoTチュートリアルをご覧ください。
MQTTはリアルタイム通信でも非常に人気があり、最もよく知られている例はFacebook Messengerです。 FacebookがなぜMQTTを採用したかというと、携帯電話のバッテリーを消耗せず、過剰なデータを使用せず、セキュアなプロトコルで動作し、スケーリングが可能で、グループチャットが容易にでき、中央のMQTTブローカー・バックボーン・インフラを通じてすべてのデータを配信するからです。
PubNubはMQTTユースケースをサポートしていますか?
もちろんです!PubNubは、カスタムMQTTブローカーをデプロイする必要を回避し、 Functionsや データストリーミングなどの他のPubNub機能との簡単な統合を提供する、非常に低遅延を提供するMQTTブリッジを提供します。
PubNubはパブリッシュ・サブスクライブモデルを中心に設計されているため、MQTTに非常にうまくマッピングされます:
Publish / Subscribeです:これらの概念はPubNubとMQTTの両方で同じです。
PubNubチャンネル:MQTTでこれに相当するのは「トピック」です。
UUID: PubNubとMQTTの両方に、各クライアントに割り当てられる一意の識別子という概念がある。
ワイルドカード:PubNubもMQTTもチャンネル/トピックを購読する際にワイルドカードをサポートしています。PubNubの のドキュメントを参照してください。
MQTTユースケースの活用方法
MQTTを通信手段として使用することの核心はトピックです。これはMQTT特有のものではなく、非常にシンプルなアイデアです。しかし、MQTTプロトコルはこの力を非常にうまく活用しています。トピックは、いくつかのタスクを暗黙のうちに達成し、最も重要なことは、メッセージが正しいリスナーに配信されるようにすることです。MQTT はトピックをファイルパスとして扱う。トピックを単純な通信フィルタとして考えると、パスアプリケーションは非常に強力になる。
パスの特定の上位レベルまたはリーフ要素に興味があるかもしれない。明示的に言わなくても、MQTTはツリーパスのどこにサブスクライブするかに基づいてメッセージをフィルタリングする。シンプルなアイデアですが、非常に効果的に使用できます。
ユースケースを満たすMQTT技術仕様
MQTTの技術的な側面をもう少し掘り下げてみよう。まず、このプロトコルはTCP/IPネットワークスタックの上で動作する。クライアントが接続し、パブリッシュ/サブスクライブする際、MQTTはそのプロセスのハンドシェイクを助けるさまざまなメッセージタイプを持つ。MQTTヘッダーは2バイトで、最初のバイトは定数である。
最初のバイトでは、送信されるメッセージのタイプと、QoSレベル、retain、およびDUP(重複)フラグを指定する。2バイト目は残りの長さのフィールドである。興味があれば、MQTT仕様から得られる情報がもっとある。
PubNubとMQTTの使い方
PubNubがリアルタイムでグローバルなデータストリーム・ネットワーク上でMQTTをサポートするようになったので、プロトコルの概要と、私たちの観点からMQTTを使用する理由、または使用しない理由を説明したいと思います。
あなたはすでにMQTTベースのデバイスを導入しているかもしれません。あるいは、新たなIoT導入を検討されているかもしれません。いずれにせよ、“いつMQTTを使い、いつPubNubを使うべきか、という疑問が生じます。MQTTベースのデバイスに堅牢な双方向通信オプションを検討している場合、PubNubはエンタープライズグレードのセキュリティ、スケーラビリティ、信頼性を提供し、ファンクション・アズ・ア・サービス、プレゼンス検出、メッセージの保存と再生など、多くの付加価値機能も提供します。そして、これらのパワーはすべてシンプルなパブリッシュ・サブスクライブ・コマンドで利用可能です。
ピーナッツバターとチョコレートのことわざのように、PubNubとMQTTを一緒に使えば、多くの組み込みデバイスのユースケースをエレガントに解決できる。PubNubとMQTTを活用することで、低レイテンシーで効率的な異常検知のようなユースケースを満たすことができます。例えば、産業用の発電タービンにMQTTベースのセンサーがあるとします。PubNubを活用すれば、「Functions-as-a-Service」ファンクションを含め、センサーデータにリアルタイムで反応し、送信することができる。また、MQTTベースの家庭用アラームでPubNubを活用して、アラーム全体の信号を確認し、誤検知を送信している悪いアラームがあるかどうかを特定することもできます。また、ユースケースを問わず、PubNubの複数の機械学習サービスへの統合を活用して、異常を検出することができる。
MQTTが現在のインフラに含まれていない場合は、モノのインターネット接続のすべてにPubNubの多数のIoT SDKとともにPubNubデータストリームネットワークを直接活用することを検討するとよいでしょう。また、MQTT付きPubNubネットワークは、低消費電力デバイスに最適です。
MQTT対応デバイスでPubNubネットワークを利用するには、mqtt.pubnub.comでデバイスをPubNubにサブスクライブする必要があります。PubNub Improves MQTT Support & IoT Capabilitiesガイドでは、サブスクリプションの手順について詳しく説明しています。
その他のMQTTリソース
Pahoプロジェクト(MQTTクライアント)
PubNubはどのようにお役に立ちますか?
この記事はPubNub.comに掲載されたものです。
PubNubのプラットフォームは、開発者がWebアプリ、モバイルアプリ、IoTデバイス向けにリアルタイムのインタラクティブ機能を構築、提供、管理できるように支援します。
私たちのプラットフォームの基盤は、業界最大かつ最もスケーラブルなリアルタイムエッジメッセージングネットワークです。世界15か所以上で8億人の月間アクティブユーザーをサポートし、99.999%の信頼性を誇るため、停電や同時実行数の制限、トラフィックの急増による遅延の問題を心配する必要はありません。
PubNubを体験
ライブツアーをチェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する
セットアップ
PubNubアカウントにサインアップすると、PubNubキーに無料ですぐにアクセスできます。
始める
PubNubのドキュメントは、ユースケースやSDKに関係なく、あなたを立ち上げ、実行することができます。