【デュラブルエクセキューション】

Durable Execution とは?

最終更新:
💡 セーブポイントのような記録を使って、障害後に処理を再開する

実行の履歴や結果を永続化し、障害後に記録から処理を再開する実行モデル。専用APIや決定性などの制約があり、外部への副作用には再実行への対策が必要。

📌 このページのポイント
保存した記録から、復旧後に再開メモリだけに進捗がある例1登録2決済3停止進捗を失い、処理をやり直す可能性Durable Executionの例完了結果記録済み3残りを実行4完了永続化した記録外部処理の重複対策は、別途必要
上段は進捗がメモリにしかない場合、下段は基盤の復旧後に保存した記録を使う場合の模式図です。緑は復旧後の処理を表します。外部の決済などが必ず一度だけ実行される保証ではありません。
ひよこ ひよこ
普通の実行と何が違うの?
ペンギン先生 ペンギン先生
メモリだけに進捗があるプログラムは、プロセスが落ちるとその情報を失うよ。Durable Executionは実行履歴や結果を保存し、基盤が復旧した後に処理を再開する。任意の命令の途中のメモリを丸ごと復元する意味ではないんだ。
ひよこ ひよこ
普通にコードを書くだけでいい?
ペンギン先生 ペンギン先生
実装の規則に従う必要があるよ。TemporalやDurable Functionsのワークフローは履歴を再生して復元するため、同じ履歴から同じ動作になる決定性が必要。時刻や乱数、外部APIには指定のAPIやActivityなどを使うんだ。
ひよこ ひよこ
支払いも絶対に二重にならない?
ペンギン先生 ペンギン先生
そこは別の設計が必要だよ。決済は成功したのに完了記録を保存する前に落ちると、再試行で同じ決済を呼ぶ可能性がある。同じ注文IDなら重複請求しないよう、決済先の冪等性キーなどを利用するんだ。
ひよこ ひよこ
どんな処理に使えるの?
ペンギン先生 ペンギン先生
例えば登録後の案内メールや、7日後のフォローアップを管理するワークフローだよ。専用タイマーを記録できるけれど、停止中にも正確な時刻で送信できる保証ではない。再試行の回数や失敗時の対応も決めよう。
ひよこ ひよこ
ペンギン先生 ペンギン先生
TemporalやDurable Functionsは実行履歴の再生を使い、Restateもジャーナルに処理結果を記録するよ。ただし業務データをイベントで管理する設計と、実行を復旧する仕組みは目的が違う。保存基盤や利用APIの条件は製品ごとに確認するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Durable Execution」って出てきたら「永続的に保存した記録から処理を再開する仕組み。外部処理の重複対策は別途必要」と思えればだいたいOK!
📖 おまけ:英語の意味
「Durable Execution」 = 耐久性のある実行
💬 Durableは「耐久性のある」という意味で、障害に耐えて実行を継続できることを表しているんだよ

参考資料

← 用語集にもどる