Traffic Director により gRPC サービスの可用性と効率性が向上
Google Cloud Japan Team
※この投稿は米国時間 2021 年 9 月 1 日に、Google Cloud blog に投稿されたものの抄訳です。
Traffic Director は、Google Cloud で提供される、フルマネージドのサービス メッシュ用トラフィック コントロール プレーンです。gRPC をベースにしたサービス間のトラフィック フローを管理するのに役立ちます。たとえば、カナリアまたは Blue/Green デプロイ用にサービスの複数のバージョン間でトラフィックを分割できます。アプリケーションの再デプロイを必要とせずに、一元的に管理(たとえば、Traffic Director に API 呼び出しを行って)できます。
最新の gRPC リリースでは、Traffic Director を使用するプロキシレス gRPC サービスに新しいトラフィック管理機能である再試行とセッション アフィニティが搭載されています。
再試行
再試行は、gRPC アプリケーションがポリシーに従って送信リクエストを再試行できるようにすることで、サービスの可用性の向上に役立ちます。サーバー アプリケーションをホストするインスタンスやエンドポイントが遅いまたは不安定な場合に便利です。
クライアント側の gRPC アプリケーションによりリクエストが送信されると、リクエストの特性(ホスト名など)に基づいて、特定のバックエンド サービスにリクエストが解決されます。Traffic Director を使用して、そのバックエンド サービスの再試行ポリシーを設定できます。クライアントは、バックエンド サービスにリクエストを送信する前にそのポリシーを確認します。ポリシーによりプロキシレス gRPC のクライアント アプリケーションのリクエストを再試行する方法が次のように定義されます。
再試行の条件に準拠(たとえば、「利用不可」「リソース不足」などのレスポンス コードが発生した場合)
x 回数(x は構成可能なものとする。たとえば、最大 3 回まで再試行可能など)
セッション アフィニティ
セッション アフィニティは、特定のユースケースの実現に不可欠であり、アプリケーションのパフォーマンスと効率を向上させます。リクエストの特性(HTTP ヘッダー)に基づいて、同じバックエンド サービスのインスタンスまたはエンドポイントにリクエストを送信しようとすることで機能します。
たとえば、セッション アフィニティでは、セッション中に特定のユーザーからのリクエストを同じショッピング カートのインスタンスにルーティングし、カートがユーザーのカートに入っているアイテムを返せるようにします。さらに、インスタンスがメモリ内にそのアイテムを格納できるため、データベースからのエントリを繰り返し読み書きする必要がなく、レイテンシの発生を抑えられます。
Traffic Director を使用して、バックエンド サービスのヘッダーに基づいたセッション アフィニティを有効にできます。gRPC アプリケーションがリクエストを送信すると、所定のリクエスト ヘッダーを持つすべての RPC を同じエンドポイントにルーティングしようとします。アプリケーションは、特定のセッション内のすべての RPC で同じヘッダーを使用するだけでよいのです。
サービス メッシュの導入、システムのパフォーマンスの改善や信頼性の向上を検討されている場合は、プロキシレス gRPC と Traffic Director が役立ちます。プロキシレス gRPC のアプリケーションで Traffic Director を使用できるようにすると、各アプリケーションを個別にコーディングするのではなく、API 呼び出しを介してすべてのアプリケーションで上述の機能を有効にできます。
Traffic Director と gRPC の併用と、これらの新機能の詳細については以下のリンクをご参照ください。
-gRPC エンジニアリング リード Mark D. Roth
-gRPC ソフトウェア エンジニア Penn Zhang