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

時間が壊れる

Scope

対象は、処理の実行順序や同時性に関する前提について、 維持できない状況が観測されている状態である。

Definition

時間が壊れるとは、本来暗黙または明示的に成立していると仮定されていた 実行順序・同時実行・再試行に関する前提が部分的に崩れ、 処理の結果が一意に定まらない状況が観測される状態を指す。

Symptoms(現れ方)

  • 同じ処理を実行しても、実行順序によって結果が一意に定まらない状況が観測される
  • 再試行によって、処理が二重に適用されている状態が観測される
  • 並行実行により、部分的に完了した状態が前提として扱われている状況が観測される
  • 時間的な前後関係と整合しない状態遷移が観測される

Typical Triggers

  • 非同期化や並行化が部分的に導入された状態が継続し、全体の前提が更新されていない
  • リトライや再送が安全であるという仮定が共有されないまま運用されている
  • 外部システムとの連携により、実行タイミングを制御できない状況が観測される
  • 処理の冪等性や順序保証が明示されないまま、機能追加が継続している

Diagnostic Questions(見分けるための問い)

  • この処理は、何度実行されても同じ結果になる状態か
  • 実行順序が入れ替わった場合の挙動を説明できる状態か
  • 部分的に成功した状態を検知できる状態か
  • 再試行が安全であると断言できる状態か

What This Is Not

  • 並行処理モデルの選択問題ではない
  • 特定の言語機能やランタイムの制約を論じるものではない
  • 単純な性能問題やレスポンス遅延を指すものではない

Connections