![ネットワークホップごとにリクエストタイムアウトを設定する方法](https://rvso.com/image/782617/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%9B%E3%83%83%E3%83%97%E3%81%94%E3%81%A8%E3%81%AB%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
ネットワーク タイムアウトと、特定のリクエストの各ホップに対してタイムアウトを設定する方法を理解しようとしています。簡単にするために、接続タイムアウトと読み取りタイムアウトと書き込みタイムアウトの内訳は調べず、「タイムアウト」は「最初のパケット受信から最後のパケット送信までの最大許容合計時間 (クライアントの場合はその逆)」を意味するものと想定します。リクエスト フローに次のホップがあるとします。
(client) --> (AWS ALB) --> (nginx) --> (server)
…そして、サーバーが 10 秒後にタイムアウトするように設定されていると仮定します。
私の質問は、各ホップの有効なタイムアウトセットは何でしょうか?
// A
(client, 13s) --> (AWS ALB, 12s) --> (nginx, 11s) --> (server, 10s)
または
// B
(client, 7s) --> (AWS ALB, 8s) --> (nginx, 9s) --> (server, 10s)
それとも(C)何か他のものでしょうか?
もちろん、私はあなたの提案の背後にある論理にも興味があります。
答え1
ハードタイムアウト(目的を述べていない)を検討している場合、各処理段階には少ない前のものよりも時間がかかります。つまり、基本的には A が正しいアプローチです。
ただし、クライアントから AWSALB へのパスは制御できず、比較的長く/遅くなる可能性があります。ステップごとに 1 秒というのは非常に余裕のある値であるため、問題はありません。ただし、ステップごとに 50 ミリ秒または 100 ミリ秒に短縮すると、最初のステップでさらに割り当てが必要になります。