Cloud Service Mesh の分離

このページでは、分離構成を作成してバックエンド サービスのリクエスト分離を改善し、サービス メッシュを構成する方法について説明します。

この機能は、サービス バックエンドの追加の分離サポートを提供し、リージョン間のオーバーフローを防ぎます。

デフォルトでは、Cloud Service Mesh はリージョンごとのウォーターフォール アルゴリズムを使用して、ユーザー トラフィックのルーティング先を決定します。Cloud Service Mesh のこのアルゴリズムでは、バックエンドが構成された容量の上限で実行されるまで、トラフィックは最も近いリージョンにルーティングされます。その後、トラフィックはより遠く離れたリージョンにオーバーフローし始めます。

この機能を使用すると、フロントエンド リージョンと分離の構成に基づいて、トラフィックが最も近いリージョンまたはローカル リージョンに制限され、最も近いリージョンで容量が不足してもオーバーフローしません。これにより、カスケード障害の発生を防ぎ、同じリージョンで発生する可能性のあるサービス停止を制限できます。それ以外の場合は、サービス構成をグローバル レベルで管理します。

分離の図

この機能を使用するかどうかは、実際のユースケースによって異なります。使用する前に、次の点を慎重に検討してください。

  • あるリージョン内のバックエンドが過負荷になっている場合、他のリージョンのバックエンドがトラフィックを処理できる場合でも、Cloud Service Mesh は追加のトラフィックをそのリージョン内のバックエンドに送信することがあります。つまり、各リージョンが追加のトラフィックにより過負荷になる可能性が高くなるため、それに応じた計画が必要になります。
  • トラフィックは引き続きグローバル コントロール プレーンでルーティングされます。つまり、複数のリージョンでグローバルな協調障害が発生する可能性があります。
  • この機能は、serviceLbPolicy リソースで構成されます。すべての制限が引き続き適用されます。
  • STRICT 分離モードでは、同じリージョンにサービング バックエンドがない場合、リクエストは失敗します。

この機能を適用した後のシナリオには、次の 2 つがあります。

最近傍分離

最近傍リージョン分離では、同じリージョンにバックエンドが配置されているフロントエンドは、そのリージョンのみに分離されます。ローカル ロケーションに使用可能なバックエンドがない場合、ネットワーク レイテンシを最適化しながらバックエンド リージョンに接続されます。

最近傍分離の図

厳格な分離

厳格なリージョン分離では、フロントエンド ロケーションはローカル リージョン内のバックエンドにのみ到達できます。ローカル リージョンにサービング バックエンドがないフロントエンドでは、すべてのトラフィックがドロップされます。

厳格な分離の図

分離を有効にする

gcloud

Google Cloud CLI を使用して分離構成を作成するには、次の操作を行います。

  1. 次のコマンドを実行して serviceLbPolicy を作成します。

    gcloud network-services service-lb-policies create my-isolation-policy \
        --isolation-config-granularity=REGION \
        --isolation-config-mode=ISOLATION_MODE \
        --location=global
    

    ISOLATION_MODE は、次のいずれかのオプションに置き換えます。

    1. NEAREST: トラフィックは最も近いリージョンに送信されます。
    2. STRICT: フロントエンドと同じリージョンに使用可能なサービング バックエンドがない場合、トラフィックは失敗します。

    明示的に指定しない場合、デフォルト値は NEAREST です。このフィールドは、--isolation-granularity フラグも設定されている場合にのみ指定できます。

    既存のポリシーがある場合は、次のコマンドを使用して更新します。

    gcloud network-services service-lb-policies update POLICY_NAME \
        --isolation-config-granularity=REGION \
        --isolation-config-mode=ISOLATION_MODE \
        --location=global
    

    POLICY_NAME は、既存のポリシーの名前に置き換えます。

  2. serviceLbPolicy リソースを作成または更新したら、backendService リソースに接続します。

      gcloud compute backend-services update BACKEND_SERVICE_NAME \
      ‐‐service-lb-policy POLICY_URL
    

    BACKEND_SERVICE_NAME は、バックエンド サービスの名前に置き換えます。

分離を無効にする

この機能を無効にするには、次の 2 つの方法があります。

  1. isolationConfigs を未指定に設定します。
  2. ServiceLbPolicy がこのポリシーで有効にした唯一の機能である場合は、サービスから削除します。

isolationConfigs を未指定に設定する

isolationConfigs を未指定に設定するには、次のコマンドを実行します。

gcloud network-services service-lb-policies update my-isolation-policy \
  --isolation-config-granularity=unspecified \
  --isolation-config-mode=unspecified \
  --location=global

ServiceLbPolicy をサービスから削除する

ServiceLbPolicy を削除するには、次のコマンドを実行します。

gcloud network-services service-lb-policies delete my-isolation-policy --location=global

サポート性、診断、トラブルシューティング

このセクションでは、この機能をオンにした後に発生する可能性のある問題について説明します。

バックエンドの過負荷

この機能は分離サポートを提供するため、ローカル リージョンが上限に達しても、トラフィックがリモート リージョンに移行されることはありません。そのため、この機能をオンにすると、一部のバックエンドが過負荷になる可能性があります。これが望ましい動作でない場合は、この機能をオフにすることを検討してください。バックエンドの過負荷を適切に処理するため、自動スケーリングを有効にすることも検討してください。

トラフィックが移行された

この機能は、容量ベースのトラフィック オーバーフローを防止します。そのため、この機能をオンにする前にバックエンドが過負荷になっていた場合、トラフィックがすでにリモート リージョンに移行されていた可能性があります。この場合、この機能をオンにすると、これらのトラフィックが元のリージョンに戻される可能性があります。

トラフィックが移行されなかった

この機能は、容量ベースのトラフィック オーバーフローを防止します。そのため、この機能をオンにする前にバックエンドが過負荷になっていなかった場合、最も近いリージョンがすべてのトラフィックを処理できる可能性があります。この場合、この機能をオンにしても、短期的にはトラフィックの移行が発生しない可能性があります。

バックエンドをリージョンに追加またはリージョンから削除した後にトラフィックが移行された

この機能がオンになっている場合、リージョンに新しいバックエンドを追加すると、トラフィックが移行される可能性があります。これは、Cloud Service Mesh が、ネットワークの全体的なレイテンシを最適化するために、これらのバックエンドにトラフィックをルーティングしようとするためです。同様に、最後のバックエンドが削除されると、Cloud Service Mesh はトラフィックをリモート リージョンに送信し始めます。これも想定される動作です。

リクエストが失敗した

STRICT 分離モードが有効になっていて、フロントエンドと同じリージョンにサービング バックエンドがない場合、トラフィックは失敗することが想定されます。これが意図した動作でない場合は、トラフィックが送信される各リージョンにバックエンドが配置されていることを確認します。