Qikuyueser.com

タイムアウトをどの層に置くか確認する

収録 2026-11-02

タイムアウトは正しく扱える層に置きます。早く失敗させるだけでは不十分。

呼び出し経路と現行タイムアウトを渡します。1)各層のタイムアウトが下位より大きいか(上位が先に切ると下位が無駄に待つ);2)発火後に適切な処理がないもの(再試行・縮退・エラー);3)タイムアウトに見えて実は資源不足の例;4)妥当な層別タイムアウト案;5)タイムアウトと再試行を併用する際の落とし穴。単に「大きくする」は提案しない。
当サイトオリジナル

中国語の原文

開く ChatGPT
使い方

超时不是越短越好,而是要和下一层对齐。

こう変えてみる

  • コードを書く前に要件と制約を復唱させる。
  • 全体書き換えではなく、最小の変更とロールバック方法を出させる。

得られる成果物

  • そのまま使える最小変更(コピー可能なコード)
  • 影響範囲:変更ファイルと追従が必要な呼び出し元

よくある失敗

  • 一度に十ファイル変更させ、何が原因か分からなくなる。
  • エラーだけ貼ってコードとバージョンを省くと、使えない修正が返る。

出力のチェック

  • 変更は動いて戻せて、無関係なコードに手を入れていない。
  • 境界条件(空・巨大・同時実行)が説明かテストで押さえられている。

使いどころと注意

  • 向いている用途:要件と制約を復唱させてから、最小限の動く変更を出させる。
  • 注意:エラーにはバージョンと最小再現を添える。無いと一見もっともらしいが合わない修正が返る。

向いている場面

  • 本番で断続的なタイムアウトが出ているが、呼び出し側・呼ばれる側・中間プロキシのどこで起きているか特定できていない。
  • 複数のタイムアウト値を調整しようとしていて、失敗点が別の層に移るだけではないか不安なとき。

向いていない場面

  • サービスにタイムアウト制御がなく無限に待てる状態——まずタイムアウトを入れ、層の話はその後。
  • 遅い下流を特定済みで直接改善できる——タイムアウト変更は問題を隠すだけ。

例

入力
ゲートウェイ 30 秒、A が B を呼ぶ超時 5 秒、B の DB クエリ超時 3 秒、DB 側の文タイムアウトは未設定。症状:A はタイムアウトするが B のログではクエリが実行中のまま。
得られるもの
まず不整合を指摘:A は 5 秒しか待たないが、B は下流で 3 秒まで許し DB 側に上限がないため、A が諦めた後も B は動き続ける。層別に DB 文 2 秒 < B→DB 2.5 秒 < A→B 5 秒 < ゲートウェイ 30 秒を提案し、各層でタイムアウト時に何をするか(再試行・縮退・失敗)を明記。A が諦めた後に B が続行する点も、キャンセルや冪等書き込みで対処が必要と指摘。

よくある誤用

  • タイムアウトを大きくするだけ:層の不整合は残り、失敗が後ろにずれて末尾遅延が悪化する。
  • 全層を同じ値にする:層別になっていないため、上位が先に切れて下位が空回りする。

こう変えると効く

  • 「タイムアウト後は再試行か失敗か」に置き換えると、再試行予算と冪等性の確認に変わる。
  • 利用者体験の観点を足し、許容待ち時間から各層の予算を逆算する(経験値で決めない)。

同じ分野のプロンプト