サービス構成

サービス所有者がクライアントの動作を制御するためにサービス構成をどのように使用できるか。

サービス構成

サービス所有者がクライアントの動作を制御するためにサービス構成をどのように使用できるか。

概要

サービス構成は、gRPCサーバーとやり取りする際のgRPCクライアントの動作を指定します。サービス所有者は、すべてのサービスクライアントの期待される動作を持つサービス構成を提供できます。サービス構成の設定は、グローバルではなく、常に特定のターゲット文字列(例:「api.myapp.com」)に適用されます。

サービス構成によって制御される動作

サービス構成の設定は、クライアント側の負荷分散、呼び出しの動作、およびヘルスチェックに影響します。

このページではサービス構成のオプションを概説しますが、完全なサービス構成データ構造は、protobuf定義で文書化されています。

負荷分散

サービスは複数のサーバーで構成でき、負荷分散構成はクライアントからの呼び出しをこれらのサーバーにどのように分散するかを指定します。デフォルトではpick_first負荷分散ポリシーが使用されますが、サービス構成で別のポリシーを指定できます。例:round_robinポリシーを指定すると、クライアントは最初のサーバーを繰り返し使用するのではなく、サーバーをローテーションします。

呼び出しの動作

RPCは多くの方法で構成できます

  • 待機してから実行が有効になっている場合、クライアントがバックエンドに接続できない場合、RPCはすぐに失敗するのではなく遅延します。
  • 呼び出しのデッドラインを指定でき、RPCのギブアップ前にクライアントが待機する最大時間を示します。
  • 以下のいずれか
    • リトライポリシー(最大試行回数、バックオフ設定、リトライ可能なステータスコード)
    • ヘッジングポリシー(最大試行回数、遅延、非致命的なステータスコード)

ヘルスチェック

クライアントは、ヘルスチェック名を提供することでヘルスチェックを実行するように構成できます。その後、クライアントは標準のgRPCヘルスチェックサービスを使用します。

サービス構成の取得

サービス構成は、名前解決またはクライアントアプリケーションによるプログラムでの提供が可能です。

名前解決

gRPCの名前解決メカニズムは、プラグ可能な名前解決実装を可能にします。これらの実装は、名前に関連付けられたアドレスと関連付けられたサービス構成を返します。これは、サービス所有者がサービス構成を多数のgRPCクライアントに配布するために使用できるメカニズムです。

  • xDS名前解決では、コントロールプレーンから受信したxDS構成を対応するサービス構成に変換します。
  • Go実装の標準DNS名前解決では、名前サーバーのTXTレコードに保存されたサービス構成をサポートしています。

プログラムで

gRPCクライアントAPIは、JSON形式でサービス構成を指定する方法を提供します。これは、名前解決でサービス構成が提供されない状況で使用されるデフォルトのサービス構成を提供するために使用されます。また、一部のテスト状況でも役立ちます。

サービス構成の例

以下の例は次のことを行います。

  • round_robin負荷分散ポリシーを有効にします。
  • すべてのサービスのすべてのメソッドに適用されるデフォルトの呼び出しタイムアウトを1秒に設定します。
  • fooサービスでbarメソッド、およびbazサービスのすべてのメソッドのタイムアウトを2秒にオーバーライドします。
{
  "loadBalancingConfig": [ { "round_robin": {} } ],
  "methodConfig": [
    {
      "name": [{}],
      "timeout": "1s"
    },
    {
      "name": [
        { "service": "foo", "method": "bar" },
        { "service": "baz" }
      ],
      "timeout": "2s"
    }
  ]
}