概要
- Durable workflows は、プログラムの進捗をデータベースに定期的に保存し、障害時に直前の状態から復旧可能
- 多くのシステムでは 外部オーケストレーター が使われるが、これは複雑化の要因
- Postgres などのデータベース自体をオーケストレーターとして利用することで、シンプルかつ効率的な設計が実現可能
- 可用性・スケーラビリティ・観測性・セキュリティ の課題はPostgresの既存機能で十分に対応可能
- Postgresを活用した durable workflows の利点と具体的な設計案を紹介
Durable Workflowsの基本と課題
- Durable workflows は、プログラムの進行状況を定期的に データベースにチェックポイント として保存する設計
- プログラムがクラッシュしても、 最後のチェックポイント から再開できるため、信頼性向上
- 例えるなら、 ビデオゲームのセーブ機能 と同様の仕組み
- 一般的には、 Temporal や Airflow、 AWS Step Functions のような 外部オーケストレーター が中心となる構成
- ワークフローの各ステップの進行・チェックポイント管理・障害時のリカバリを オーケストレーター が担当
外部オーケストレーションの複雑さ
- 外部オーケストレーター は、設計と運用の両面で 複雑化 の原因
- Durable workflowsの本質は データベースによる状態管理 にあるため、 専用オーケストレーターは不要 という主張
- Postgres などのデータベースを直接活用することで、 設計の単純化と効率化 が可能
Postgresを用いたDurable Workflowsの設計
- アプリケーションサーバー が直接 Postgres と通信し、ワークフローを実行
- クライアントは、 Postgresのworkflowsテーブル にワークフローを登録
- サーバーはテーブルを ポーリング してワークフローを取得・実行
- 各ステップの出力を Postgresにチェックポイント として保存
- サーバー障害時も、 他サーバーがチェックポイントから復旧 できる設計
- ロック機構 や 一意制約 を活用し、ワークフローの重複実行を防止
Postgres活用によるメリット
- 中央オーケストレーター不要、アプリケーションサーバー間で Postgresを介した協調 が可能
- スケーラビリティ :サーバー追加で水平方向の拡張が容易、Postgres自体の性能が上限
- 可用性 :Postgresのレプリケーションや自動フェイルオーバー機能を活用
- 観測性 :ワークフローやステップの状態が Postgresテーブル に蓄積されるため、 SQLクエリ で柔軟に可視化・分析
- 例:直近1か月でエラーとなったワークフローの抽出など
- 信頼性・セキュリティ :外部オーケストレーターを排除し、 Postgresのみが単一障害点 となる設計
- 既存の アクセス制御・監査 機能をそのまま利用可能
- 新たなクリティカルインフラの導入不要
Postgres Orchestrationの今後
- Postgres を用いたdurable workflowsは、 シンプルで高信頼 なシステム構築を実現
- DBOS など、Postgresベースのdurable executionに特化したプロダクトも登場
- さらなる情報や実例は以下を参照
- Quickstart: https://docs.dbos.dev/quickstart
- GitHub: https://github.com/dbos-inc
- Discordコミュニティ: https://discord.gg/eMUHrvbu67
まとめ
- Durable workflowsは データベース中心設計 で本質的にシンプル化可能
- Postgres の既存機能を活用することで、 大規模・高可用性・高観測性・高セキュリティ を実現
- 新たなオーケストレーターの導入よりも、 既存インフラの活用 が合理的