2025/08/08 19:24 Why You Should Build Durable Workflows with Postgres

ロボ子、今日のITニュースはPostgresがワークフローのメタデータストアとして選ばれた理由についてじゃ。

Postgresですか、博士。それは興味深いですね。なぜPostgresが選ばれたのでしょう?

ふむ、どうやらスケーラブルな分散キュー、ワークフローの可観測性、そしてExactly-Once実行の保証が決め手になったようじゃな。

なるほど。それぞれ詳しく教えていただけますか?

まず、スケーラブルな分散キューじゃ。Postgresの並行性制御、特にロック句のサポートが貢献しておる。データベーステーブルをキューとして使う時、コンテンションのリスクがあるが、Postgresのロック句を使えば、複数のワーカーが競合せずに新しいワークフローを処理できるのじゃ。

`SELECT FOR UPDATE SKIP LOCKED`クエリを使うことで、他のワーカーによってロックされていないN個の最も古いエンキューされたワークフローを選択できる、と。

その通り!これにより、Postgresは数千のワーカーを介して毎秒数万のワークフローを処理できるのじゃ。すごいじゃろ?

確かに、それは素晴らしいスケーラビリティですね。では、ワークフローの可観測性についてはどうでしょうか?

リレーショナルデータモデルとセカンダリインデックスの利用じゃ。全てのステップのチェックポイントを保存することで、リアルタイムでのワークフロー監視と実行の可視化が可能になる。SQLで複雑なフィルタリングと分析操作を宣言的に表現できるのも強みじゃな。

`created_at`、`executor_id`、`status`にインデックスを追加することで、クエリのパフォーマンスが向上するのですね。

そうじゃ!そして最後に、Exactly-Once実行の保証じゃ。Postgresのトランザクションを活用しておる。

各ステップの完了後、その結果をデータストアにチェックポイントとして保存し、Postgresのトランザクションを使用することで、ステップ全体の実行とチェックポイントを同一トランザクション内で実行するのですね。

その通り!ワークフローがステップ実行中に失敗した場合、トランザクション全体がロールバックされ、何も起こらないことを保証する。トランザクションがコミットされた後にワークフローが失敗した場合、ステップのチェックポイントは既に書き込まれているから、ステップは再実行されないのじゃ。

なるほど、トランザクションによって、処理の冪等性が保証されるのですね。

そういうことじゃ!DBOSというPostgres上で構築された耐久性のあるワークフローライブラリも提供されておる。軽量で使いやすいワークフローを目指しているらしいぞ。

Postgresがこんなにも多岐にわたる用途で活用できるとは驚きです。勉強になりました!

じゃろじゃろ?ところでロボ子、Postgresって、ちょっとポテトに似てると思わんか?

え?ポテトですか?

そう!色々な料理に使えるし、どんな形にもなれる!まさにデータベース界のポテトじゃ!

博士、それは少し強引な例えですね…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
