
2026/05/29 3:41
持続的なワークフローには PostgreSQL をそのまま使用してください
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
記事は、複雑な外部オーケストレーションサーバーを置き換え、永続的なワークフロー管理の中央エンジンとして PostgreSQL を採用することでインフラストラクチャを単純化することを提唱しています。Temporal や AWS Step Functions、Airflow といった専用のオーケストレーターに依存し、隔離されたワーカープール間でタスクを調整する従来のシステムとは異なり、このアプローチではオーケストレーションロジックを直接データベースに埋め込むことで、すべてロジックをリレーショナルデータベースエコシステム内に維持します。アプリケーションサーバーは標準的な workflows テーブルポーリングによってタスクをデキューし、ワーカーは Postgres テーブルに直接チェックポイントを行います。データベースの整合性制約が外部ロック機構なしで重複作業を防ぎます。高い可用性は、ワーカーが相互置換可能であることから達成されます(任意のワーカーがストリーミングレプリケーションと複数 AZ デプロイメントを使用して Postgres から状態を回復できます)。スケーラビリティは基盤となるデータベースの容量とともに拡大し、数千ものワークフローを処理できるよう垂直にスケールするか(CockroachDB などのように)分散化することができます。可観測性はチェックポイントに対する組み込み SQL クエリによって向上し、セキュリティオーバーヘッドは減少します(ワークフローデータが信頼された Postgres エンビロメント外に出ることはありませんので、別のオーケストレーターを強化する必要がありません)。DBOS は実用的な Postgres 裏付けの永続実行ソリューションを提供しており、Quickstart ドキュメント、GitHub リポジトリ、Discord コミュニティにてリソースを利用できます。
本文
DBOS を用いた PostgreSQL による持続可能なワークフロー構築
**持続可能なワークフロー(Durable Workflows)**は、信頼性の高いプログラムを構築するためのシンプルでありながら強力なアプローチです。外部オーケストレーションサーバーに依存せず、データベース自体を活用することで、スケーラビリティ、可用性、可観測性、セキュリティを実現します。
基本概念と仕組み
チェックポイントによる回復力
プログラムの進捗状態を定期的にデータベースに記録(チェックポイント)しておくことで、クラッシュや障害発生時にも最後の完了したステップから再開可能になります。これはビデオゲームの「セーブ&ロード」機能に相当します。
- 基本動作: 実行間隔ごとにプロGRESS を DB に保存
- 復旧処理: システム停止後、最終チェックポイントから自動的に再開
- 一般的な実装パターン: Temporal, Airflow, AWS Step Functions などの外部オーケストレーターによる中央管理モデル
従来の外部オーケストレーションの仕組み
多くのシステムは以下のステップでワークフローを管理します。
- 提出: クライアントからワークフローが オーケストレータ に送信される
- 登録: オーケストレータ がデータストアに記録を作成し、ワーカーへ配信
- 実行: ワーカーがステップを実行し、結果をオーケストレータへ返送
- 保存: オーケストレータ が結果をチェックポイントとして保存し、次のステップ準備
- 復旧: ワーカー失敗の場合、オーケストレータ が別のワーカーへ再配信して再開
独自のアーキテクチャ:PostgreSQL をオーケストレーターとして活用
本記事では、オーケストレーションサーバーを用意する必要はないと提唱します。なぜなら、持続可能性の本質は「状態をデータベースに保存すること」だけだからです。PostgreSQL を直接利用することで、シンプルかつ効率的なシステムが実現できます。
システムの動作フロー
アプリケーションサーバーは中央経由せず、直接 PostgreSQL と通信します。
- リクエスト: クライアントはワークフローテーブルへのエントリー作成で実行依頼
- 発見 (Polling): サーバーがテーブルをポーリングし、処理可能なワークフローをクイックオフ(Dequeue)
- 実装: サーバー内でステップを実行し、各結果を DB に即座にチェックポイント
- 障害対応: サーバークラッシュ時、別のサーバーが既存のチェックポイントから復旧を担当
分散処理とデータ整合性
中央管理者への依存関係がなく、サーバー同士が PostgreSQL を介して協調します。
- 排他制御: ロッキング句(Locking clauses)により、各ワークフローは1 つだけのワーカーで処理されるよう確保
- 重複防止: 複数のワーカーによる同時実行嘗試でも、DB の整合性制約により重複を検知・待機(Back off)
- チェックポイント管理: オークストレーターではなく、ワーカー自身が DB に直接記録
ポジgreSQL をバックボーンとする利点
中央オーケストレータをデータベースに置き換えることで、以下の課題に対する解決策として成熟した PostgreSQL の技術をそのまま利用できます。
スケーラビリティと可用性
システムのスケーラビリティと可用性は、下流にあるデータベースの性能によって決定されます。ワーカーを増やせば水平スケール可能で、DB が稼働すればシステム全体が利用可能です(ファングブルなワーカー)。
- 垂直スケーリング: 単一サーバーでも 1 秒間数万件のワークフロー処理可能
- 分散環境対応: CockroachDB やシャーディングによりさらに規模拡大が可能
- 高可用性: ストリーミングレプリケーションと自動フェイルオーバー、マルチ-AZ 展開をサポート
- 実績の継承: 長年にわたり研究され尽くした PostgreSQL の運用ノウハウを直接活用可能
可観測性
ワークフロー状態が SQL テーブルにチェックポイントされるため、自然な形でモニタリングと分析が可能になります。
- リアルタイム監視: チェックポイントをスキャンして実行状況を即座に把握
- 強力なクエリ能力: PostgreSQL の関係モデルとクエリオプティマイゼーション技術を活用
- 例示的な分析: 過去 1 ヶ月以内にエラーが発生したワークフローを検出 etc.
- コスト削減: 二次インデックス追加で「無料」に効率的な可観測性を獲得
信頼性とセキュリティ
単一障害点(SPOF)の削減と攻撃表面積の最小化を図ります。
| 構成要素 | 外部オーケストレータ採用時 | PostgreSQL をバックボーン到时 |
|---|---|---|
| 単一障害点 | オーケストレータ + データストア(2 箇所) | PostgreSQL のみ(1 箇所) |
| データ移動 | アプリ ↔ オーケストレート ↔ DB | アプリ ↔ DB(直接的) |
| セキュリティ影響 | 新しいインフラ追加による攻撃対象増大 | システム依存度の既存範囲内での活用 |
| 権限管理 | 機密データへのアクセス権限が必要 | 既存の DB セキュリティポリシーで統合管理 |
まとめ
PostgreSQL をバックボーンとした持続可能なワークフローは、外部オーケストレーションの複雑さを排除し、シンプルかつ高性能なシステムを提供します。DBOS ではこのアプローチを採用しており、スケーラブルで信頼性の高い基盤を構築しています。
さらに詳しく学びたい場合は以下のリソースをご参照ください。
- クイックスタートガイド: https://docs.dbos.dev/quickstart
- GitHub リポジトリ: https://github.com/dbos-inc
- Discord コミュニティ: https://discord.gg/eMUHrvbu67