【たいむあうとぱたーん】
タイムアウトパターン とは?
最終更新:
💡 「いつまでも待たない」を仕組みにする防御の基本
外部サービスなどへの呼び出しに待機の期限を設け、期限を超えたら呼び出し元が待つのをやめる設計パターン。待ち続けることによる資源の占有を抑えるが、相手側の処理も自動で止まるとは限らない。
📌 このページのポイント
タイムアウトパターンって、ただタイムアウトを設定するだけじゃないの?
待つ期限に加えて、「どこまでが制限の対象か」「期限を超えたら何を返すか」も設計するんだよ。呼び出し元が待つのをやめても、相手側の処理は続く場合がある。この違いが大切なんだ。
タイムアウトしないとどうなるの?
遅い外部サービスを長く待つ呼び出しが増えると、スレッドや接続などが占有され、ほかの処理まで影響を受けるおそれがあるよ。待機を制限することは、こうした資源の圧迫を抑えるための手段なんだ。
タイムアウトの時間はどうやって決めるの?
正常時の応答時間の分布と、利用者や呼び出し元が許容できる待ち時間を基に考えるよ。短すぎると正常な応答を待ち切れず、再試行で負荷を増やすこともある。長すぎると資源を占有する。接続や通信の遅延、再試行を含む全体の期限も考慮しよう。
接続と読み取りのタイムアウトって何が違うの?
接続の確立を待つ時間と、接続後のデータ受信を待つ時間を分けているんだ。ただし範囲は実装によるよ。たとえばPythonのRequestsでは、読み取りの制限は受信するデータの間隔にかかり、呼び出し全体の所要時間の上限にはならない。使うクライアントの仕様を確かめよう。
タイムアウトしたあと、すぐ再試行してもいい?
注文などでは、応答が届かなくても相手側で処理が完了しているかもしれない。二重処理を防ぐべき等性などを確かめてから再試行しよう。回数と全体の待ち時間に上限を設け、待ち時間を増やしたり、再試行の時刻をランダムにずらしたりして、負荷の集中も抑える。再試行しない場合のエラー表示や代替処理も設計するんだ。
まとめ:ざっくりこれだけ覚えればOK!
「タイムアウトパターン」って出てきたら「待つ期限を決め、期限後の対応も設計する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Timeout Pattern」 = 時間切れを扱う設計パターン
💬 Timeoutは「時間切れ」。この文脈では、設定した期限を超えた待機を終えることを指すよ