MQTT用ApsaraMQ により、統合フレームワークを使用して、異なるデプロイモードにわたってCloud Storage Gateway(CSG)を管理できます。これにより、パブリックネットワークとプライベートネットワーク間の安全でコンプライアンスに準拠したペネトレーションが保証されます。
用語
Message Queuing Telemetry Transport(MQTTプロトコル)
MQTTプロトコルは、モノのインターネット(IoT)およびモバイルインターネット向けの業界標準プロトコルであり、モバイルデバイス間のデータ送信に適しています。MQTT用ApsaraMQ は、デフォルトでMQTTプロトコルをサポートしています。
CSG
CSGは、オンプレミスデータセンターとAlibaba Cloudにデプロイできるゲートウェイサービスです。CSGは、Alibaba Cloudオブジェクトストレージサービス(OSS)バケットをバックエンドストレージデバイスとして使用します。さらに、低コストの仮想マシンを使用することにより、CSGは、Network Attached Storage(NFS)およびCommon Internet File Systems(CIFS)プロトコルを介した標準ファイルストレージサービス、およびInternet Small Computer Systems Interface(iSCSI)プロトコルを介したブロックストレージサービスを、オンプレミスおよびオフプレミスのアプリケーションに提供します。詳細については、「Cloud Storage Gateway」をご参照ください。
MQTTブローカー
MQTT用ApsaraMQ MQTTブローカーは、MQTTプロトコルと対話するブローカーノードであり、メッセージの受信と転送に使用されます。
MQTTクライアント
MQTTクライアントは、MQTTブローカーと対話するモバイルノードです。このトピックでは、通常、CSGを使用するクライアントを指します。
RDS for ApsaraDB
Alibaba Cloudが提供する、可用性とスケーラビリティの高いオンラインデータベースサービスです。
ログサービス
Alibaba Cloudログサービスは、監査とトレースに使用されます。
背景情報
CSGは、既存のオンプレミスアプリケーション、ITインフラストラクチャ、およびデータストレージをAlibaba Cloudとシームレスに統合するのに役立つストレージサービスです。標準ストレージプロトコルと互換性のある仮想デバイスを、オンプレミスとクラウドにデプロイできます。このようにして、オンプレミスのストレージアプリケーションとワークロードをAlibaba Cloudのストレージおよびコンピューティングサービスにシームレスに接続できます。
CSGは、次の2つのモードでデプロイできます。
仮想マシンを介して、オンプレミスデータセンターにCSGをデプロイして実行します。
Alibaba Cloudの仮想ネットワーク環境にあるElastic Compute Service(ECS)インスタンスにCSGをデプロイして実行します。
2つのデプロイモードでは、CSGインスタンスはイントラネット、特にオンプレミスデータセンターにデプロイされた仮想マシンを使用します。セキュリティを確保するため、CSGコンソールは非パブリック IP アドレスに直接アクセスできません。パブリックネットワーク IP アドレスを介したAlibaba CloudにデプロイされたCSGインスタンスとAlibaba Cloudコンソールとの通信も、セキュリティ上の危険や攻撃に対する脆弱性につながる可能性があるため、不適切です。
MQTT用ApsaraMQ は、これら2つのデプロイモードでCSGコンソールとCSGインスタンス間の接続を可能にします。
CSGのアーキテクチャの詳細については、ハイブリッドクラウドストレージのデプロイに示されています。
図 1. ハイブリッドクラウドストレージのデプロイ
ソリューションアーキテクチャ
MQTT用ApsaraMQ (MQTT)は、メッセージのプッシュと収集に使用されます。メッセージのプッシュとアクティブなプルを通じてコマンドを送信し、これらのステータスを収集することにより、CSGコンソールにCSGインスタンスのステータスを表示できます。MQTT用ApsaraMQ に基づいて、出力APIを使用して各CSGインスタンスを管理します。ソリューションアーキテクチャは、全体的なアーキテクチャを示しています。
図 2. ソリューションアーキテクチャ
ハイライト
このスキームの利点を以下に示します。
自動的にスケーリングできる強力なサービス機能が利用可能です。
MQTT用ApsaraMQ メッセージ送信機能は無限にスケーラブルであるため、システム機能を損なうことなくCSGインスタンスの数を増やすことができます。
MQTT用ApsaraMQ メッセージはミリ秒単位で100万台以上のデバイスにプッシュされ、CSGによって発行された制御コマンドに輻輳は発生しません。
MQTT用ApsaraMQ は、Transport Layer Security(TLS)およびSecure Sockets Layer(SSL)プロトコルに基づく暗号化をサポートしており、データ漏洩の心配がありません。
すべてのサービスノードは可用性と安定性に優れています。
多言語SDKにより、MQTTブローカーとアプリケーションを簡単に開発できます。
内部ネットワークとパブリックネットワークの両方で、異なるネットワーク要件がサポートされています。
注意事項
前述のプロセスでは、MQTT用ApsaraMQ と RocketMQ用ApsaraMQ を使用して統合クロスネットワーク管理アーキテクチャを実装する方法について簡単に説明しました。 SDKの詳細については、「MQTT用ApsaraMQ」および「RocketMQ用ApsaraMQ」ドキュメントをご参照ください。
クロスネットワークシグナリングを構築する際に MQTT用ApsaraMQ を使用する場合は、メッセージタイプとパラメータ設計について次の原則に従ってください。
MQTTクライアント ID のマッピング
MQTTプロトコルでは、各クライアントにグローバルに一意のクライアント ID が必要です。クライアント ID は、@@@セパレータで連結された2つの部分で構成されます。最終的なクライアント ID は一意である必要があり、合計の長さは64文字を超えることはできません。クライアント ID の2つの部分を以下に示します。
プレフィックスグループ ID :グループ ID は、MQTT用ApsaraMQ コンソールで申請する必要があります。 CSGコンソールが存在するAlibaba Cloudリージョンに基づいてグループ ID を分類することをお勧めします。たとえば、[中国(杭州)]と[中国(上海)]で異なるグループ ID を使用すると、問題のあるリージョンとメッセージキューを簡単に見つけることができます。
クライアント ID のサフィックスであるデバイス ID :デバイス ID はアプリケーションによって生成されます。デバイス ID は、グローバルに一意であることを保証するために、CSGインスタンスの ID に1対1でマッピングできます。
クライアント ID の詳細については、「用語」をご参照ください。
トピック名のマッピング
MQTT用ApsaraMQ を使用してメッセージを送受信するには、MQTTプロトコルのパブリッシュ/サブスクライブパターンを理解する必要があります。詳細については、「契約ドキュメント」および「公式ドキュメント」をご参照ください。
MQTTプロトコルは、パブリッシュ/サブスクライブパターンに基づくメッセージプロトコルです。サブスクリプションとトピックは、ディレクトリツリー形式に従います。トピックは、親トピックとサブトピックに分割できます。親トピックとサブトピックを含むトピックの全長は、64文字を超えることはできません。トピックのタイプを以下に示します。
親トピック:ディレクトリツリーの最初のレベルにあるトピックは親トピックです。親トピックは、MQTT用ApsaraMQ コンソールで権限を申請した後にのみ使用できます。名前空間は名前空間に相当します。
サブトピック:MQTTのディレクトリツリーのレベル1トピックの下にあるトピックはサブトピックです。申請することなく、必要に応じてサブトピックを指定できます。
トピックの詳細については、「用語」をご参照ください。
メッセージの送受信用のトピックを設計する場合は、次の原則に従う必要があります。
アップリンクメッセージとダウンリンクメッセージには、異なる親トピックが使用されます。アップリンクメッセージは、CSGインスタンスから管理および制御サービスに送信されるメッセージです。ダウンリンクメッセージは、管理および制御サービスからCSGインスタンスに送信されるメッセージです。
優先順位が異なるメッセージまたはサイズが大きく異なるメッセージは、異なる親トピックを使用します。
上記で説明した対話プロセスでは、MQTT用ApsaraMQ が提供するP2Pメッセージを使用することをお勧めします。 P2Pメッセージはサブスクライブする必要がないため、送信者は受信するピアエンドを直接指定できます。詳細については、「P2Pメッセージングモデル(MQTT)」をご参照ください。
メッセージの送受信のためのパラメータ設計
CSGコンソールはMQTTを使用してRPC呼び出しをシミュレートします。したがって、コンソールによって送信されるメッセージは、戻り値なしで noreply を直接使用します。以前のメッセージを再度受信する必要はありません。エラーコードを受信した後、コンソールはコマンドを再発行するように促します。 MQTTクライアントを次のように構成する必要があります。
cleanSession パラメータをtrueに設定します。
cleanSession の詳細については、「用語」をご参照ください。