【要約】複数AIの二重実行を防ぐTask Lease [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
分散システムでAIエージェントを運用する際、タスクの重複実行が重大な事故を招く。開発者は、外部作用を伴うタスクの制御において以下の問題に直面する。
- ・複数エージェントが同一キューからタスクを重複して取得する。
- ・親プロセスがタイムアウトにより子を再起動し、二重実行が発生する。
- ・単純なロックでは、所有者の停止によるデッドロックが生じる。
- ・遅延復帰した旧所有者が、期限切れ後に操作を継続する(TOCTOU)。
// Approach
設計者は、期限付きの所有権(Lease)と単調増加するトークンを用いた解決策を提示した。この手法は、以下のステップでタスクの整合性を担保する。
- ・Task Leaseに
fencing_tokenとpayload_hashを持たせる。 - ・DBの
clock_timestamp()とCASを用いて、時計のずれを排除し取得する。 - ・外部作用の直前に、Lease行のロックと
effectReceiptの記録を直列化する。 - ・外部APIには
idempotencyKeyを渡し、通信失敗時はReadbackで状態を収束させる。
// Result
この設計により、副作用を伴う外部操作における二重実行を効果的に防止できる。分散環境下での整合性確保において、以下の成果が得られる。
- ・Fencing Tokenにより、失効した旧所有者の書き込みを確実に拒否できる。
- ・ReadbackとReceiptの併用で、通信失敗時の不確実な状態を解消できる。
- ・テストにより、競合や遅延復帰といったエッジケースの検証が可能になる。
Senior Engineer Insight
> 実戦的な設計である。特に
clock_timestamp()による時計のずれ対策や、unknown_resultを許容してReadbackへ繋ぐ設計は、分散システムの不確実性を正しく捉えている。ただし、外部APIが冪等性やFencingに対応していない場合、完全なExactly-onceは不可能だ。その際は人間による介入が必要になる。運用コストと安全性のトレードオフを考慮し、導入すべきである。