Service Mesh (ASM) は、フルバージョン向けに複数の部分環境をデプロイできる、許可モードでのスイムレーン機能を提供します。ただし、ASM は、トレースにメッセージキューが含まれる特定のシナリオでは、メッセージキューイングプロトコルをサポートしていません。トラフィックタグをメッセージキューで配信できるようにするには、適合プロセスが必要です。このトピックでは、許可モードでメッセージキューをスイムレーンと統合する方法について説明します。
前提条件
メッセージキューとアプリケーションのデプロイメントが以下の要件を満たしていることを確認してください。
メッセージキュー
メッセージにカスタムメタデータを指定できます。
コンシューマーは、特定の特性を持つメッセージのみを消費できます。
アプリケーションのデプロイメント
コンシューマーによってメッセージがアクティブにプルされるメッセージキューでは、コンシューマーはスイムレーンに関連するサービスディスカバリ情報を検出できません。期待どおりにメッセージを消費するには、次のようにスイムレーンに有効なコンシューマーとプロデューサーをデプロイする必要があります。
有効なデプロイメント:プロデューサーまたはコンシューマーをスイムレーンにデプロイするか、どちらもデプロイしません。
無効なデプロイメント:プロデューサーまたはコンシューマーをスイムレーンにデプロイします。
解決策
メッセージキューのプロデューサーは、スイムレーンのタグをメッセージに書き込みます
トレース内のリクエストのスイムレーンのタグは、リクエストがメッセージキューを通過した後でも変更されないままにする必要があります。このようにして、コンシューマーはスイムレーンのアプリケーションによって送信されたメッセージを消費し、メッセージに含まれるタグをアップストリーム サービスに送信されたリクエストに復元できます。たとえば、プロデューサーアプリケーション APP-B がタグをメッセージキューに書き込む場合、プロデューサーはメッセージにアプリケーションが存在するスイムレーンとダウンストリーム サービスから受信したリクエストのスイムレーンのタグの両方を指定する必要があり、コンシューマーはタグフィルタリング条件フィールドにアプリケーションが存在するスイムレーンを指定する必要があります。
アプリケーションが存在するスイムレーン:これはフィルターキーとして機能します。アプリケーションが存在するスイムレーンは、ワークロードのタグによって特徴付けられます。環境変数タグの値をアプリケーションに公開することで、アプリケーションが存在するスイムレーンを取得できます。
ダウンストリーム サービスから受信したリクエストのスイムレーンのタグ:トラフィックが ASM イングレスゲートウェイを通過した後、ゲートウェイによって送信されたリクエストにはスイムレーンのタグが含まれており、メッシュプロキシを使用して指定されたスイムレーンにルーティングできます。ASM は、リクエストヘッダー
x-asm-prefer-tag
を介してタグをエンドツーエンドの HTTPS に渡します。
メッセージキューのコンシューマーは、アプリケーションが存在するスイムレーンのメッセージを消費します
コンシューマーが指定されたメッセージキューのメッセージを消費できるようにするには、コンシューマーはアプリケーションが存在するスイムレーンのフィルターキーをサブスクライブする必要があります。
プロデューサーとコンシューマーは、スイムレーン v1 と v2 にデプロイされています:プロデューサーとコンシューマーは両方ともスイムレーン v1 と v2 にデプロイされています。APP-C(v1) はフィルターキー v1 のメッセージを消費できます。これは、APP-C(v1) が APP-B(v1) によって生成されたメッセージのみを消費することを意味します。APP-C(v2) はフィルターキー v2 のメッセージを消費できます。これは、APP-C(v2) が APP-B(v2) によって生成されたメッセージのみを消費することを意味します。
プロデューサーもコンシューマーもスイムレーン v2 にデプロイされていません:プロデューサーとコンシューマーはスイムレーン v1 にデプロイされていますが、APP-A(v2) と APP-D(v2) のみがスイムレーン v2 にデプロイされています。APP-A(v2) によって受信されたリクエストは、APP-B(v2) がデプロイされていないため、許可モードでスイムレーンの APP-B(v1) にルーティングされます。メッセージが APP-A(v1) または APP-A(v2) から APP-B(v1) に送信されると、システムは APP-C(v1) によってメッセージが消費される前に、フィルターキーをスイムレーンのタグとして指定します。メッセージが App-Cv1 によって消費されると、APP-C(v1) はメッセージに含まれるスイムレーン v1 のタグを削除します。このようにして、メッセージが APP-D に送信されると、スイムレーン v2 のタグが付いたメッセージを APP-D(v2) にルーティングできます。
コンシューマーアプリケーションは、メッセージに含まれるスイムレーンのタグをダウンストリーム サービスに送信されるリクエストに書き込みます
コンシューマーアプリケーションがメッセージを消費した後にメッセージを他のアプリケーションにルーティングする必要がある場合、コンシューマーアプリケーションはメッセージに含まれるスイムレーンのタグを他のアプリケーションに送信されるリクエストに書き込む必要があります。このようにして、ASM メッシュプロキシはタグに基づいて異なるアプリケーションにリクエストをルーティングできます。
上記の構成が完了した後、コンシューマーアプリケーションは送信されるリクエストにリクエストヘッダー x-asm-prefer-tag
を追加し、ヘッダー値をメッセージキューから消費されるメッセージに含まれるスイムレーンのタグとして指定します。ASM メッシュプロキシは、リクエストヘッダー x-asm-prefer-tag
を使用してリクエストを指定されたスイムレーンにルーティングします。