MQTT ブローカーを使用して MQTT メッセージを発行およびサブスクライブする

重要

Azure Arc によって実現されている Azure IoT Operations プレビューは、現在プレビュー段階です。 運用環境ではこのプレビュー ソフトウェアを使わないでください。

Azure IoT Operations の一般公開リリースが提供されたときには、新規インストールをデプロイすることが必要になります。 プレビュー インストールからのアップグレードはできません。

ベータ版、プレビュー版、または一般提供としてまだリリースされていない Azure の機能に適用される法律条項については、「Microsoft Azure プレビューの追加使用条件」を参照してください。

MQTT ブローカーは、スケーラブル、高可用性、Kubernetes ネイティブといった特性を持つ、標準に準拠したエンタープライズ グレードの MQTT ブローカーを備えています。 これは、Azure IoT Operations Preview のメッセージング プレーンを提供し、双方向のエッジ/クラウド通信を可能にし、またエッジではイベント ドリブン アプリケーションを動作させます。

MQTT 準拠

MQTT ブローカーは、MQTT v3.1.1 と MQTT v5 の両方をサポートする標準準拠の MQTT ブローカーを備えています。

メッセージ キュー テレメトリ トランスポート (MQTT) は、IoT 空間に存在するプロトコル間の共通言語として役割を果たしてきました。 MQTT のシンプルな設計により、1 つのブローカーが、軽量のパブリッシュ/サブスクライブ トピックの作成と管理を行って、数万のクライアントに同時にサービスを提供できます。 多くの IoT デバイスでは、そのままの設定で使用できるように MQTT がネイティブでサポートされています。さまざまな IoT プロトコルが使用されていますが、ダウンストリーム変換ゲートウェイで MQTT に変換され、合理化されています。

MQTT ブローカーでは、メッセージング層の基盤として MQTT プロトコルが使用されます。 サポートされている MQTT 機能の詳細情報については、「MQTT ブローカーでの MQTT 機能のサポート」を参照してください。

高可用性を備えスケーラブル

Kubernetes では、複数のインスタンスで実行できるように、ワークロードを水平方向にスケーリングできます。 この冗長性により、インスタンスがダウンした場合にも要求を処理できる追加の容量を備え、信頼性が向上します。 Kubernetes には自己復旧機能が組み込まれており、インスタンスは自動で復旧します。

Kubernetes はエラスティック スケーリング テクノロジを備えているだけでなく、DevOps の標準にもなっています。 MQTT が IoT プロトコルの共通言語であるならば、Kubernetes はコンピューティング インフラストラクチャ層の共通言語です。 Kubernetes を採用することで、同じ CI/CD パイプライン、ツール、監視、アプリ パッケージ、従業員のスキルをどこでも利用できます。 つまり、クラウド コンピューティング、オンプレミス サーバー、工場内の小規模な IoT ゲートウェイから 1 つのエンド ツー エンド システムを利用できます。 インフラストラクチャや DevOps の処理に費やす時間を短縮し、自らの行うべき業務に集中できます。

MQTT ブローカーは独自のエッジネイティブなデータ プレーンの価値に焦点を当てていますが、この価値を Kubernetes エコシステムにシームレスに適合させながら波及させることができます。 このようにして、MQTT を中心に構築された高パフォーマンスでスケーラブルなメッセージング プラットフォーム プレーンと、他のスケーラブルな Kubernetes ワークロードや Azure とのシームレスな統合が実現されます。

既定でのセキュリティ保護

MQTT ブローカーは、実績のある Azure と Kubernetes ネイティブのセキュリティおよび ID の概念に基づいて構築されており、高度なセキュリティと実用性を兼ね備えています。 個々の MQTT トピック レベルまできめ細かに制御できるアクセス制御メカニズムとともに、柔軟性をもたらす複数の認証メカニズムをサポートします。

ヒント

既定の MQTT ブローカー デプロイには、クラスター IP、TLS、サービス アカウント トークンを使用してのみアクセスできます。 クラスター外から接続するクライアントは、接続する前に追加の構成が必要です。

Azure Arc の統合

Microsoft のハイブリッド プラットフォームは、Kubernetes を中心に据えつつ、単一のコントロール プレーンとして Azure Arc を使用しています。 既存の Azure 以外のリソース、オンプレミスのリソース、またはその他のクラウド リソースを Azure Resource Manager に投影する管理プレーンが提供されます。 そのようにして、仮想マシン、Kubernetes クラスター、および Azure データ センターで実行されていないデータベースを管理するための単一のコントロール ウィンドウを実現します。

MQTT ブローカーは、Azure Arc for Kubernetes 拡張機能としてデプロイされ、フル機能の Azure リソース プロバイダー (RP) - rosoft/IoTOperationsMQ を介して管理されます。 つまり、Virtual Machines、Storage などのネイティブ Azure クラウド リソースと同じように管理できます。

Azure Arc テクノロジを使用すると、オンプレミスの Kubernetes クラスターで実行されている MQTT ブローカーサービスで変更を有効にできます。 完全な Kubernetes ネイティブのアプローチを使用する場合は、必要に応じて、Kubernetes カスタム リソース定義 (CRD) をローカルで使用するか、Flux などの GitOps テクノロジを使用して、MQTT ブローカーを管理できます。

クラウド コネクタ

クラウド シナリオには、異なるメッセージング要件がある場合があります。 たとえば、優先度の高いデータに対して双方向のクラウド/エッジの高速パスを使用したり、バッチで更新できる時間的な制約の少ないデータに対して準リアルタイムのクラウド ダッシュボードや、より低コストの低速パスを使用したりできます。

柔軟性を高めるために、MQTT ブローカーには、Event Hubs への組み込みの Azure コネクタ (Kafka エンドポイントを使用)、Event Grid MQTT ブローカー機能、Microsoft Fabric、Blob Storage が用意されています。 MQTT ブローカーは拡張可能であるため、ソリューションで動作する好みのクラウド メッセージング ソリューションを選択できます。

Azure Arc 上に構築すると、強力な Azure ロールベースのアクセス制御 (RBAC) を使用してクラウド サービスにアクセスするために、Azure マネージド ID を使用するようにコネクタを構成できます。 手動で安全でなく、面倒な資格情報の管理は必要ありません。

Dapr プログラミング モデル

Dapr は、状態管理、サービス間呼び出し、パブリッシュ/サブスクライブ メッセージングなどの一般的な分散アプリケーション機能を公開することで、分散型アプリケーション間のプラミングを簡略化します。 構成ブロックの下にある Dapr コンポーネントにより、各機能の具象実装が提供されます。 自分はビジネス ロジックに集中し、Dapr に分散型アプリケーションの詳細をまかせることができます。

MQTT ブローカーは、プラグ可能な Dapr 発行/サブスクライブおよび状態ストアの構成要素を提供し、エッジ上のイベント ドリブン アプリケーションの開発とデプロイを容易にし、それらが特定のテクノロジに依存しないで済むようにします。

Architecture

MQTT ブローカーには、次の 3 つのレイヤーがあります。

  • クライアント要求を処理するステートレスなフロントエンド レイヤー
  • 要求をルーティングし、ブローカーを他のブローカーに接続するロード バランサー
  • データを格納および処理するシャード化されたステートフルなバックエンド レイヤー

バックエンド レイヤーは、クライアント セッションのクライアント ID やトピック メッセージのトピック名など、さまざまなキーによってデータをパーティション分割します。 チェーン レプリケーションを使用して、各パーティション内のデータをレプリケートします。 すべてのパーティションで共有されるデータの場合、すべてのパーティションにまたがる単一のチェーンが使用されます。

アーキテクチャの目標は、次のとおりです。

  • フォールト トレランスと分離: バックエンド ノードが失敗した場合でもメッセージの発行が続行され、障害がシステムの残りの部分に伝達されないようにします
  • 障害復旧: オペレーターが介入しない自動障害復旧
  • メッセージ損失なし: 少なくとも 1 つのフロントエンド ノードと 1 つのバックエンド ノードが実行されている場合のメッセージの配信
  • エラスティック スケーリング: エッジとクラウドのデプロイをサポートするために、パブリッシュとサブスクライブのスループットを水平スケーリングします
  • 規模が大きくても一貫性のあるパフォーマンス: チェーン レプリケーションによるメッセージ待機時間のオーバーヘッドを範囲内に収めます
  • 運用の簡素化: メンテナンスと複雑さを簡素化するための外部コンポーネントへの最小限の依存

次のステップ

Azure IoT Operations プレビューを Arc 対応 Kubernetes クラスターにデプロイする