メインコンテンツまでスキップ

Retry-as-Recovery

A Derived Failure Pattern of Temporal Assumptions and Hidden Side Effects

Summary

Retry-as-Recovery は、障害や失敗からの回復手段として リトライが事実上の唯一の戦略となり、 時間・状態・副作用に関する前提が崩れていく Failure Pattern である。

本 Pattern が扱うのは、リトライという技術自体の是非ではない。 部分失敗が常態化した環境において、 「とりあえず再実行する」判断が合理的に積み重なり、 結果として回復不能な状態が生まれる構造を扱う。


Context

分散システムや外部 API 連携において、 一時的な失敗は避けられない。

ネットワークエラー、タイムアウト、競合などは 時間をおけば解消することも多く、 リトライは有効な対処として一般的に採用されている。

Forces

この Pattern を生み出す主な力学は以下である。

  • 一時失敗の一般化
    多くの失敗が一過性であるため、 再試行すれば成功するという期待が形成されやすい。

  • 回復設計の後回し
    明示的な回復戦略を設計するより、 リトライを入れる方が短期的に安く見える。

  • 副作用の不可視性
    再実行による影響が即座に表面化せず、 問題が後から現れる。

  • 境界の不明確さ
    どこまでが安全に再実行できる範囲かが共有されない。

Failure Mode

リトライが回復の代替として使われることで、 時間と状態に関する前提が維持されなくなる。

その結果、以下のような壊れ方が同時に進行する。

  • 同一処理が複数回実行される
    冪等性が保証されない処理が再実行され、 データの重複や不整合が発生する。

  • 遅延が副作用を拡大させる
    リトライによって処理が遅れ、 その間に別の状態変更が介入する。

  • 失敗原因が不明確になる
    元の失敗とリトライ後の結果が混ざり、 問題の切り分けが困難になる。

Consequences(定着する影響)

Countermeasures(向きを変える最小介入)

以下は解決策の一覧ではなく、 Failure Mode に対して最小限の介入で力学を変えるための対抗パターンである。

  • 再実行可能な範囲と、 再実行してはならない境界を明示する
  • リトライを回復戦略の一部として位置づけ、 成功条件と失敗条件を分離する
  • リトライが発生した事実を、 学習可能なイベントとして扱う

Resulting Context(新しい当たり前)

リトライは引き続き利用されるが、 それは限定された状況における戦略となる。

回復は再実行だけに依存せず、 状態や副作用を考慮した設計判断として扱われる。

その結果、失敗は制御可能なものとなり、 時間と状態に対する理解が回復する。

See also

  • Boundary-Blind Integration
    境界上の失敗が局所化されないことで、再実行が回復手段として過剰に利用されやすくなる基底パターン。

  • Test-Passing Illusion
    リトライ後に一度成功した結果が、正しく回復したという誤った確信を生みやすくなる派生パターン。


Appendix: Conceptual References

Appendix: References

  • David L. Parnas, On the Criteria To Be Used in Decomposing Systems into Modules, 1972.
  • Fred Brooks, No Silver Bullet—Essence and Accidents of Software Engineering, 1987.
  • Donella H. Meadows, Thinking in Systems: A Primer, 2008.
  • W. Edwards Deming, Out of the Crisis, 1982.