tldr
勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。
原文としたのEnvoyのドキュメントはこちらのディレクトリ以下にあります(ライセンス:Apache License 2.0, NOTICE)。
gRPC
gRPC は Google の RPC フレームワークです。基盤となるシリアル化/ IDL フォーマットとしてプロトコルバッファを使用します。トランスポート層では、要求/応答の多重化に HTTP/2 を使用します。 Envoyはトランスポート層とアプリケーション層の両方で gRPC を一流のサポートをしています。
- gRPC はリクエストステータスを伝えるために HTTP/2 トレーラを利用します。 Envoy は、HTTP/2 トレーラを正しくサポートする非常に少数の HTTP プロキシの1つであり、したがって gRPC 要求と応答を転送できる数少ないプロキシの1つです。
- 一部の言語用の gRPC ランタイムは比較的未熟です。 gRPC をより多くの言語に移行するのに役立つフィルタの概要については、以下を参照してください。
- gRPC-Web は、gRPC-Web クライアントが HTTP/1.1 経由で Envoy にリクエストを送信し、gRPC サーバーにプロキシされることを可能にするフィルタによってサポートされています。現在開発中であり、gRPC ブリッジフィルタの後継となることが期待されています。
- gRPC-JSON トランスコーダは、RESTful JSON API クライアントが HTTP 経由で Envoy にリクエストを送信し、gRPC サービスにプロキシされることを可能にするフィルタによってサポートされています。
gRPC ブリッジング
Envoy は2つの gRPC ブリッジをサポートしています。
- gRPC リクエストを HTTP/1.1 経由で Envoy に送信することを許可する grpc_http1_bridge フィルタ。その後、Envoy はターゲットサーバーへの転送のためにリクエストを HTTP/2 に変換します。応答は HTTP/1.1 に戻されます。インストール時に、ブリッジフィルタはグローバル HTTP 統計の標準配列に加えて RPC ごとの統計を収集します。
- grpc_http1_reverse_bridge フィルタ。これは、 gRPC リクエストが Envoy に送信され、アップストリームに送信されたときに HTTP/1.1 に変換されるようにします。その後、応答はダウンストリームに送信されたときに gRPC に変換されます。このフィルタはオプションで gRPC フレームヘッダを管理することもでき、アップストリームが gRPC を意識する必要がまったくないようにすることができます。
gRPC サービス
データプレーンで gRPC をプロキシすることに加えて、Envoy はコントロールプレーン用に gRPC を使用します。そこで、管理サーバーからの設定の取得や、レート制限や承認チェックなどのためのフィルタでの設定が行われます。これらを gRPC サービスと呼びます。
gRPC サービスを指定するときは、Envoy gRPC クライアントまたは Google C ++ gRPC クライアントのどちらを使用するかを指定する必要があります。以下に、この選択におけるトレードオフについて説明します。
Envoy gRPC クライアントは、Envoy の HTTP/2 アップストリーム接続管理を利用する、gRPC の最小限のカスタム実装です。サービスは通常の Envoy クラスターとして指定され、タイムアウト、再試行、エンドポイント検出/ロードバランシング/フェイルオーバー/ロードレポート、回線遮断、ヘルスチェック、異常値検出が定期的に処理されます。それらは Envoy データプレーンと同じ接続プールメカニズムを共有します。同様に、クラスター統計は gRPC サービスに利用できます。クライアントは最小限であるため、OAuth2 や gRPC-LB ルックアサイドなどの高度な gRPC 機能は含まれていません。
Google C ++ gRPC クライアントは、https://github.com/grpc/grpc で Google が提供する gRPC の参照実装に基づいています。 Envoy gRPC クライアントにはない、高度な gRPC 機能を提供します。 Google C ++ gRPC クライアントは、Envoy のクラスタ管理とは無関係に、独自の負荷分散、再試行、タイムアウト、エンドポイント管理などを実行します。 Google C ++ gRPC クライアントは、カスタム認証プラグインもサポートしています。
Google C ++ gRPC クライアントの高度な機能が不要な場合は、ほとんどの場合 Envoy gRPC クライアントを使用することをお勧めします。これにより、設定と監視が簡単になります。 Envoy gRPC クライアントに必要な機能がない場合は、代わりに Google C ++ gRPC クライアントを使用してください。