【たいむあうとぱたーん】

タイムアウトパターン とは?

💡 「いつまでも待たない」を仕組みにする防御の基本
📌 このページのポイント
タイムアウトパターン:無限待ちを防ぐ ✗ タイムアウトなし サービスA リクエスト 外部API 応答なし… 待ち続ける… → リソース枯渇💥 ◎ タイムアウトあり サービスA リクエスト 外部API 応答なし… ⏱ 3秒で打ち切り! → 代替処理へ ✅ コネクションタイムアウト 接続確立までの制限時間 例:1〜5秒 リードタイムアウト データ受信までの制限時間 例:3〜30秒 タイムアウト + リトライ + サーキットブレーカー = 耐障害性の基本セット
タイムアウトパターンのイメージ
ひよこ ひよこ

タイムアウトパターンって、ただタイムアウトを設定するだけじゃないの?

ペンギン先生 ペンギン先生

一見シンプルだけど、奥が深いんだよ。「何秒に設定するか」「タイムアウト後にどうするか」「どの種類のタイムアウトを設定するか」を正しく設計しないと、逆に問題を引き起こすことがあるんだ

ひよこ ひよこ

タイムアウトしないとどうなるの?

ペンギン先生 ペンギン先生

最悪のケースでは、1つの遅い外部サービスを待ち続けてスレッドやコネクションが全部埋まって、システム全体がフリーズするよ。これを「カスケード障害」と呼ぶんだ。タイムアウトは障害の連鎖を防ぐ第一の防衛線だね

ひよこ ひよこ

タイムアウトの時間はどうやって決めるの?

ペンギン先生 ペンギン先生

基本は「正常時のレスポンスタイムの数倍」だね。正常時に200msで返ってくるAPIなら、タイムアウトは1〜3秒くらいが目安。P99(99パーセンタイル)のレスポンスタイムを参考にすることも多いよ

ひよこ ひよこ

コネクションタイムアウトとリードタイムアウトって何が違うの?

ペンギン先生 ペンギン先生

コネクションタイムアウトは「接続確立までの制限時間」で、リードタイムアウトは「データ受信までの制限時間」だよ。接続はできたけどレスポンスが返ってこないケースがあるから、両方設定するのがベストプラクティスだね

ひよこ ひよこ

タイムアウトしたあとはどうするの?

ペンギン先生 ペンギン先生

リトライパターンで再試行するか、サーキットブレーカーで一定期間リクエストを止めるか、フォールバック(代替処理)で縮退運転するか、状況に応じて使い分けるよ。この3つの組み合わせが耐障害性設計の基本セットだね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「タイムアウトパターン」って出てきたら「応答を待つ制限時間を設けて無限待ちを防ぐ設計」と思えればだいたいOK!
📖 おまけ:英語の意味
「Timeout Pattern」 = 制限時間パターン
💬 Timeoutは「時間切れ」で、スポーツのタイムアウトと同じ語源。決められた時間が来たら一旦止めるという意味だよ
← 用語集にもどる