Cloud Service Mesh のロード バランシング

Cloud Service Mesh は、サイドカー プロキシまたはプロキシレス gRPC を使用して、内部マイクロサービスのグローバルなロード バランシングを実現します。インスタンスを持つ内部マイクロサービス(サイドカー プロキシベースまたはプロキシレス gRPC ベース)を複数のリージョンにデプロイできます。Cloud Service Mesh は、サイドカー プロキシまたはプロキシレス gRPC にヘルス、ルーティング、バックエンドの情報を提供し、サービスの複数のクラウド リージョンに存在するアプリケーション インスタンスに最適なトラフィック ルーティングを実行できるようにします。

次の図では、ユーザー トラフィックは外部のグローバル ロードバランサを介して Google Cloud デプロイに入ります。外部ロードバランサは、エンドユーザーの場所に応じて、us-central1 または asia-southeast1 のいずれかでフロントエンド マイクロサービスにトラフィックを分散します。

内部デプロイは、Frontend、Shopping Cart、Payments という 3 つのグローバル マイクロサービスを備えています。各サービスは、us-central1asia-southeast1 の 2 つのリージョンのマネージド インスタンス グループ(MIG)で実行されます。Cloud Service Mesh はグローバル ロード バランシング アルゴリズムを使用して、カリフォルニア州のユーザーから us-central1 にデプロイされたマイクロサービスにトラフィックを転送します。シンガポールのユーザーからのリクエストは、asia-southeast1 のマイクロサービスに転送されます。

受信したユーザー リクエストは Frontend マイクロサービスにルーティングされます。その後 Frontend とともにホストにインストールされているサービス プロキシが、トラフィックを Shopping Cart に転送します。Shopping Cart とともにホストにインストールされているサイドカー プロキシが、トラフィックを Payments マイクロサービスに転送します。プロキシレス gRPC 環境では、gRPC アプリケーションがトラフィック管理を処理します。

グローバル ロード バランシングのデプロイにおける Cloud Service Mesh。
グローバルなロード バランシングのデプロイにおける Cloud Service Mesh(クリックして拡大)

次の例では、us-central1 で Shopping Cart マイクロサービスを実行している仮想マシン(VM)インスタンスが異常であることを示すヘルスチェック結果を受け取った場合、Cloud Service Mesh はフロントエンド マイクロサービスのサイドカー プロキシに、asia-southeast1 で実行中の Shopping Cart マイクロサービスにトラフィックをフェイルオーバーするよう指示します。自動スケーリングが Google Cloud のトラフィック管理と統合されているため、Cloud Service Mesh は追加のトラフィックの asia-southeast1 に存在する MIG に通知し、その結果、MIG のサイズが増大します。

Cloud Service Mesh は、Payments マイクロサービスのすべてのバックエンドが正常であることを検出すると、Shopping Cart の Envoy プロキシに対して、お客様の構成済み容量以内の範囲でトラフィックの一部を asia-southeast1 に送信し、残りを us-central1 にオーバーフローさせるよう指示します。

グローバルなロード バランシングのデプロイにおける Cloud Service Mesh を使用したフェイルオーバー。
グローバルなロード バランシングのデプロイにおける Cloud Service Mesh を使用したフェイルオーバー(クリックして拡大)

Cloud Service Mesh のロード バランシング コンポーネント

Cloud Service Mesh の設定中に、いくつかのロード バランシング コンポーネントを構成します。

  • バックエンド サービス。構成値が含まれます。
  • ヘルスチェック。デプロイ内の VM と Google Kubernetes Engine(GKE)Pod のヘルスチェックを行います。
  • サービス ルーティング API を使用する場合、Mesh または Gateway リソースと、Route リソース。
  • ロード バランシング API を使用する場合、VIP アドレス、ターゲット プロキシ、URL マップを含むグローバル転送ルール。

xDS API 互換サイドカー プロキシ(Envoy など)は、クライアント VM インスタンスまたは Kubernetes Pod で実行されます。Cloud Service Mesh はコントロール プレーンとして機能し、xDS API を使用して各プロキシと直接通信します。データプレーンでは、アプリケーションは転送ルールまたは Mesh リソースで構成された VIP アドレスにトラフィックを送信します。サイドカー プロキシまたは gRPC アプリケーションがトラフィックを傍受し、適切なバックエンドにリダイレクトします。

次の図は、Compute Engine VM または GKE Pod で実行されているアプリケーション、Cloud Service Mesh のデプロイにおけるコンポーネントとトラフィック フローを示しています。この図は Cloud Service Mesh と、トラフィック ルーティングを決定する際に使用される Cloud Load Balancing リソースを示しています。この図は、古いロード バランシング API を示しています。

構成する Cloud Service Mesh リソース。
構成する Cloud Service Mesh リソース(クリックして拡大)

次のステップ