Mosquitto MQTT Broker: 長所 / 短所、チュートリアル、および最新の代替案
目次
Eclipse Mosquitto MQTT Brokerとは
Eclipse Mosquitto は、MQTT (Message Queuing Telemetry Transport) プロトコルを使用するオープンソースのメッセージ ブローカーです。MQTT は、低帯域幅の制約のあるデバイス向けに設計された軽量プロトコルであり、ネットワーク帯域幅が重要視されるマシンツーマシン (M2M) またはモノのインターネット (IoT) アプリケーションに最適です。
Mosquitto MQTT Brokerは、2009 年に Roger Light によって最初に開発され、後に Eclipse Foundation に寄付されました。これはおそらく最初のオープンソース MQTT プロジェクトでした。ブローカーはクライアントからすべてのメッセージを受信し、メッセージをフィルタリングして、各メッセージを購読しているユーザーを特定して、購読しているクライアントにメッセージを送信します。
デバイスが効率的に通信する必要がある IoT の世界では、複数の接続を処理し、リアルタイムでメッセージを配信する Mosquitto の機能が非常に役立ちます。
Mosquitto MQTT Brokerの主な機能
軽量
Mosquitto MQTT の主な特徴の 1 つは、軽量設計です。これは、実行に必要なシステム リソースが最小限で済むことを意味し、センサー、マイクロコントローラー、その他の IoT デバイスなど、リソースに制約のある小型デバイスに最適です。さらに、帯域幅を効率的に使用できるため、ネットワーク接続が信頼できない、または制限されている環境でも適切に動作します。
ただし、Mosquitto のスケーラビリティには限界があります。最大数千の接続をサポートできるため、小規模な IoT 導入に適していますが、大規模な導入に必要な数百万の接続までは拡張できません。
マルチプラットフォーム
Mosquitto MQTT は、Linux、Windows、macOS、さらには Raspberry Pi などの組み込みシステムを含むさまざまなオペレーティング システム上で実行できます。Docker コンテナもサポートしますが、Kubernetes や Terraform はサポートしません。
ブリッジコネクト
ブリッジコネクトにより、Mosquitto MQTT Brokerは、同じネットワークまたは異なるネットワークから他のMQTT Brokerに接続できます。ブリッジ機能は、異なるネットワークからのデータを集約する必要がある場合、または分離されたネットワークを接続する必要がある場合に便利です。
メッセージストレージ
Mosquitto MQTT はメッセージ ストレージ機能を提供します。これは、対象の受信者が現在接続していないときに受信したメッセージを保存できることを意味します。これらの受信者がオンラインになると、保存されているメッセージが受信者に配信されます。これにより、一時的に切断された場合でも、データが失われることはありません。
この機能は、電力損失やネットワークの問題など、さまざまな理由によりデバイスがオフラインになったり、到達不能になったりする可能性がある IoT アプリケーションで特に役立ちます。
Mosquitto MQTT の制限事項
Mosquitto MQTT の使用方法を学ぶ前に、その制限を理解することが重要です。この知識は、IoT ソリューションを実装する際に情報に基づいた意思決定を行うのに役立ちます。
組み込みの Web インターフェイスはありません
Mosquitto MQTT の重大な制限の 1 つは、組み込みの Web インターフェイスがないことです。これは、MQTT Brokerとトピックを Web 上で簡単に管理および監視できないことを意味します。代わりに、これらのタスクを実行するには、コマンドライン ツールまたはサードパーティ アプリケーションに依存する必要があります。グラフィカル ユーザー インターフェイスを使用すると管理と監視が容易になるため、Web インターフェイスがないことは大きな欠点となる可能性があります。
限定的なデータ統合
Mosquito は Webhook をサポートしていますが、MySQL、MongoDB、Redis などのデータ処理ツールと簡単に統合できません。これにより、Mosquitto を最新のデータ インフラストラクチャの一部として使用することがより困難になります。
限定的なクラウドサポート
多くの組織は、クラウドでの MQTT インフラストラクチャの実行に移行しています。Mosquitto には AWS、Azure、Google Cloud などのクラウド サービスのサポートが組み込まれていないため、クラウドベースの IoT 導入と互換性がありません。
限られたセキュリティ機能
Mosquitto MQTT のもう 1 つの制限は、セキュリティ機能が制限されていることです。ユーザー名/パスワード認証や SSL/TLS 暗号化などの基本的なセキュリティ機能は提供しますが、高度なセキュリティ メカニズムがありません。たとえば、Mosquitto MQTT は、特定のトピックを公開またはサブスクライブできるユーザーを詳細に制御できるロールベースのアクセス制御 (RBAC) をサポートしていません。これは、機密データが送信されるシナリオや、厳密なアクセス制御が必要なシナリオでは問題となる可能性があります。
クラスタリング機能や冗長性機能が組み込まれていない
Mosquitto MQTT には、組み込みのクラスタリング機能や冗長性機能もありません。クラスター化されたセットアップでは、複数の MQTT Brokerが連携して高可用性とロード バランシングを提供します。1 つのブローカーがダウンしても、他のブローカーが引き継ぎ、システムは確実に動作し続けることができます。残念ながら、Mosquitto MQTT はこの機能をネイティブにサポートしていません。クラスター化されたセットアップを実現するには、手動で実装するか、サードパーティのツールを使用する必要がありますが、これは複雑で時間がかかる場合があります。
限定された永続化メカニズム
最後に、Mosquitto MQTT の永続化メカニズムには制限があります。ファイルベースの永続性のみをサポートしており、すべてのデータ (メッセージ、サブスクリプションなど) を単一のファイルに保存します。ファイルベースの永続性は十分に拡張できないため、大規模な IoT 展開には適していません。
関連コンテンツ: IoT における MQTT プロトコルのガイドを読む
モスキート MQTT チュートリアル
Mosquitto MQTT の制限について説明したので、チュートリアルに進みましょう。このセクションでは、Mosquitto のインストール、ブローカーの開始、メッセージの公開、トピックのサブスクライブ、セットアップのテストの基本について説明します。
モスキートのインストール
Mosquitto をインストールする正確な手順はオペレーティング システムによって異なりますが、ほとんどの Linux ディストリビューションでは、インストールにパッケージ マネージャーを使用できます。たとえば、Ubuntu では、次のコマンドを実行して Mosquitto をインストールできます。
sudo apt- get install mosquitto mosquitto-clients
Windows または macOS の場合は、Mosquitto Web サイトからインストーラーをダウンロードし、表示される指示に従ってください。
モスキートブローカーの開始
Mosquitto をインストールしたら、次のステップは MQTT Brokerを開始することです。Linux では、次のコマンドを実行してブローカーを開始できます。
sudo systemctl start mosquitto
Windows では、ブローカーはインストール後に自動的に起動します。起動しない場合は、サービス アプリから手動で起動できます。
メッセージの公開
メッセージを公開するには、mosquitto_pub
Mosquitto パッケージに付属のコマンドライン ツールを使用できます。基本的な構文は次のとおりです。
mosquitto_pub -h <hostname> -t <topic> -m <message>
このコマンドで使用されるオプションを確認してみましょう。
- この
-h
オプションでは、MQTT Brokerのホスト名を指定します。 - この
-t
オプションは、メッセージを公開するトピックを指定します。 - この
-m
オプションでは、公開するメッセージを指定します。
トピックを購読する
トピックの購読も同様に簡単です。コマンドライン ツールを使用できますmosquitto_sub
。基本的な構文は次のとおりです。
mosquitto_sub -h <hostname> -t <topic>
オプションを確認してみましょう。
- この
-h
オプションでは、MQTT Brokerのホスト名を指定します。 - この
-t
オプションでは、購読するトピックを指定します。
セットアップのテスト
メッセージを公開してトピックをサブスクライブした後、セットアップをテストして、正しく動作していることを確認する必要があります。これを行うには、テスト メッセージを発行し、サブスクライバーがそれを受信するかどうかを確認します。すべてが期待どおりに動作している場合は、サブスクライバのコンソールにテスト メッセージが表示されるはずです。
EMQX: Mosquitto MQTT Brokerの最新の代替手段
Mosquitto は MQTT プロトコル機能を完全にサポートしていますが、クラスタリングはサポートしていないため、大規模な大量接続に対する IoT のパフォーマンス要件を満たすことが困難になります。したがって、Mosquitto は大規模サービスの MQTT サーバーには適していません。具体的には、大規模な IoT デバイスに対して何百万もの接続を必要とするエンタープライズ ソリューションをサポートできません。最も重要なのは、Mosquitto には必要なエンタープライズ機能が欠けているため、Mosquitto を使用して柔軟で真に信頼性の高い IoT アプリケーションを構築することはできません。
EMQXは拡張性の高い分散型 MQTT メッセージング ブローカーであり、単一クラスター上で数百万の同時接続をサポートできます。IoT 用の大規模分散 MQTT メッセージ ブローカーである EMQX は、大量の IoT デバイスに効率的かつ確実に接続でき、クラスターあたり最大 1 億の同時接続が可能で、メッセージとイベント フロー データをリアルタイムで処理および配信できます。EMQX ノードは、クロスプラットフォームのメッセージのサブスクリプションと送信のために、他のタイプの MQTT サーバーおよび MQTT クラウド サービスによってブリッジできます。
EMQX と Mosquitto はどちらも Docker ベースのコンテナ化されたデプロイメントをサポートしていますが、EMQX はさらに Kubernetes Operators と Terraform もサポートしているため、すべてのパブリック クラウド プラットフォームでのデプロイと運用が容易になります。
さらに、Mosquitto はクラウド展開をサポートしていませんが、EMQX は、AWS、Google Cloud、および Microsoft Azure 上でサーバーレスサービス、専用サービス、およびBring Your Own Cloud (BYOC) MQTT メッセージング サービス を提供します。