【たいむあうと】

タイムアウト とは?

最終更新:
💡 待ち続けるのは、システムにとっても時間の無駄
📌 このページのポイント
タイムアウト — 一定時間で応答がなければ切断 正常時 クライアント サーバー リクエスト レスポンス(1秒) タイムアウト時 クライアント サーバー リクエスト 応答なし... 制限時間内 制限時間超過 → 切断
タイムアウトのイメージ
ひよこ ひよこ
Webページが『接続がタイムアウトしました』ってなったんだけど、これ何?
ペンギン先生 ペンギン先生
ブラウザサーバーに『ページちょうだい』ってリクエストしたけど、一定時間待っても返事がなかったから、もう待つのやめた、っていう状態だよ。レストランで注文したのに料理がいつまでも来ないから帰るようなイメージだね。
ひよこ ひよこ
ずっと待ち続ければいつか返事が来るんじゃないの?
ペンギン先生 ペンギン先生
来るかもしれないし、来ないかもしれない。問題は、待っている間ずっとリソースを使い続けることなんだ。もし1000人が同時にアクセスして全員が返事待ちで固まったら、サーバー全体がフリーズしちゃうよね。だからタイムアウトで区切りをつけるのは大事なんだ。
ひよこ ひよこ
タイムアウトの時間はどれくらいに設定するの?
ペンギン先生 ペンギン先生
用途によるけど、Web APIなら接続タイムアウトは3〜5秒、読み取りタイムアウトは10〜30秒くらいが一般的かな。短すぎると正常な処理まで打ち切っちゃうし、長すぎると障害時にユーザーを待たせすぎる。タイムアウト後にリトライする仕組みも合わせて設計するのがポイントだよ。
ひよこ ひよこ
タイムアウトって種類があるの?
ペンギン先生 ペンギン先生
主に3種類あるよ。「接続タイムアウト」はサーバーとのTCP接続確立までの制限時間。「読み取りタイムアウト」はリクエスト送信後にレスポンスが返るまでの制限時間。「アイドルタイムアウト」は通信がない状態が続いたときに接続を切るまでの時間。それぞれ異なる値を設定するのが一般的だよ。
ひよこ ひよこ
タイムアウトを設定し忘れるとどうなるの?
ペンギン先生 ペンギン先生
障害が連鎖するよ。サービスAがサービスBを呼び出すとき、Bが応答しないのにAがタイムアウトなしで無限に待ち続けると、Aのスレッドが全部Bの応答待ちで埋まって、A自身もダウンする。これが「カスケード障害」。マイクロサービスでは特に致命的で、サーキットブレーカーパターンと組み合わせて対策するのが定石だよ。タイムアウトは「設定しないこと」が最大のバグと言われるくらい重要なんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「タイムアウト」って出てきたら「応答を待つ制限時間。設定しないとシステムが固まるリスクがある」と思えればだいたいOK!
📖 おまけ:英語の意味
「timeout」 = 時間切れ
💬 スポーツの『タイムアウト』と同じ語源で、一定時間で処理を中断する意味
← 用語集にもどる