grpc¶
Channel options¶
grpc Balancing-aware Client¶
SubchannelにバランスするだけならChannel生成時に lb_policy_name
に grpclb
または round_robbin
を与えると良い。
全てのリクエストが(特に重みなどを考慮せずに)Subchannelに均等に割り振られる。
keepaliveやTCP RST等で無効になったSubchannelは使われなくなるので、ホスト/プロセス断のような単純な障害であれば特段丁寧に扱わなくてもリトライによって処理できるケースが多い。
アプリケーションの論理障害が起きている場合は被害が広がる可能性があるので、サーバー側は多少気を配りながら作る必要がある。
grpc retryConfig¶
- https://github.com/grpc/proposal/blob/master/A6-client-retries.md
- https://github.com/grpc/grpc-go/tree/master/examples/features/retry
methodConfig
にwaitForReady
が設定できるけど必要かどうかはアプリケーション特性によって使い分ける
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