コンテンツにスキップ

grpc

Channel options

grpc Balancing-aware Client

SubchannelにバランスするだけならChannel生成時に lb_policy_namegrpclb または round_robbin を与えると良い。
全てのリクエストが(特に重みなどを考慮せずに)Subchannelに均等に割り振られる。
keepaliveやTCP RST等で無効になったSubchannelは使われなくなるので、ホスト/プロセス断のような単純な障害であれば特段丁寧に扱わなくてもリトライによって処理できるケースが多い。
アプリケーションの論理障害が起きている場合は被害が広がる可能性があるので、サーバー側は多少気を配りながら作る必要がある。

grpc retryConfig

Channel生成時に service_config に以下のような methodConfig を与えると retryableStatusCodes に該当するgrpc statusが返ってきたときにgrpcがリトライしてくれる。
Balancing-aware Clientと組み合わせると、リトライ時のリクエストは次のSubchannelに推移するから一時的なエラーなら大体回復できる。

{
  "methodConfig": [{
    "name": [
      {"service": "helloworld.Greeter"}
    ],
    "waitForReady": true,
    "retryPolicy": {
      "maxAttempts": 3,
      "initialBackoff": "0.1s",
      "maxBackoff": "1s",
      "backoffMutiplier": 2,
      "retryableStatusCodes": [
        "UNAVAILABLE"
      ]
    }
  }]
}

最終更新日: 2021-06-06 09:29:57