サービス設定

サービス所有者がサービス設定を使用してクライアントの動作を制御する方法。

サービス設定

サービス所有者がサービス設定を使用してクライアントの動作を制御する方法。

概要

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

サービス設定によって制御される動作

サービス設定の設定は、クライアント側のロードバランシング、呼び出し動作、およびヘルスチェックに影響します。

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

ロードバランシング

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

呼び出し動作

RPCはさまざまな方法で構成できます。

  • wait-for-readyが有効になっている場合、クライアントがバックエンドに接続できないと、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"
    }
  ]
}