タイムアウト

タイムアウトは、応答がない相手への待ち時間に上限を設けて、それを超えたら処理を打ち切る仕組みです。

タイムアウト のアイキャッチ図解
まずは、こう考えるとつかみやすいです。

タイムアウトは、電話をかけて一定時間つながらなければ自動で切る設定に似ています。

ひとことで言うと

タイムアウトは、応答を待つ時間に上限をつけて、それを超えたら処理を諦めて先へ進む仕組みです。

サーバーへのリクエスト、データベースへの問い合わせ、外部APIの呼び出しなど、相手から返事が来ない場面でよく設定されます。 待ち続けると他の処理も詰まってしまうため、タイムアウトは「諦める勇気」をシステムに持たせる安全装置です。

たとえ話でもう少し詳しく

タイムアウトは、電話の自動切断設定に近いです。

  • 電話をかけて相手が出なければ、いつまでも待ち続けるわけにはいかない
  • 一定回数コールしても反応がなければ自動で切る
  • 切ったあとに「つながりませんでした」と次の行動を考えられる

システムでも同じです。 あるサーバーへリクエストを送っても返事がなかった場合、永遠に待ち続けると接続が溜まり、別のユーザーへの応答まで遅れ始めます。 タイムアウトを設定しておくと、一定時間で待ちをやめてエラーとして扱い、処理を進められます。

よく出る場面・使いどころ

  • 外部APIやサービスへのリクエストが応答しないとき
  • データベースへの問い合わせが想定より長くかかるとき
  • ネットワーク越しのファイル取得が途中で止まったとき
  • ユーザー操作への応答が一定時間ない場合にセッションを切るとき

似た言葉との違い

  • レイテンシ
    • 応答が返ってくるまでの遅れ時間そのもの
    • タイムアウトは、その遅れが許容範囲を超えたら処理を打ち切るための上限設定
  • ヘルスチェック
    • サーバーが正常かどうかを定期確認する仕組み
    • タイムアウトはヘルスチェックの応答待ちにも設定される
  • エラー
    • 処理が失敗したという結果
    • タイムアウトはエラーの一種で、「時間内に返事が来なかった」という失敗

実務で気にするポイント

  • 接続タイムアウト(つながるまでの上限)と読み取りタイムアウト(データが返るまでの上限)を分けて設定する
  • 上限を短くしすぎると正常な処理まで失敗になる
  • タイムアウト後にリトライするか、エラーとして返すかを決めておく
  • タイムアウトが多発しているときは、相手の処理遅延やネットワーク問題のサインとして調査する

注意: タイムアウトを設定していないと、応答しない相手を待ち続けて接続が枯渇する「スレッド枯渇」につながることがあります。外部との通信には必ずタイムアウトを入れておくことが基本です。