Postgres トランザクション:分散システムの究極の武器

2026/07/03 3:38

Postgres トランザクション:分散システムの究極の武器

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

DBOS は、特別な関数

enqueue_workflow
を使用してアプリケーションの状態更新とワークフローチェックポイントの記録を単一の原子トランザクション内で実行することにより、標準的な Postgres データベースにワークフローを直接統合する革新的なアプローチを採用しています。この核心となるイノベーションにより、システムは自動的に exactly-once 実行を保証し、開発者が脆弱な重複処理ロジックまたは複雑なリトライメカニズムを手動で実装する必要がなくなります。

従来のシステムでは、状態保存の前にチェックポイントを作成するため、データ損失の危険な WINDOW が発生したり、イベントを確実に同期させるために別の「アウトボックス」テーブルとポーリングプロセスを必要としたりすることがよくあります。DBOS はこの複雑さを完全に回避し、外部エージェンの管理やデータドリフトの調整に伴う大きな運用オーバーヘッドなしでスケーラブルで信頼性のあるアプリケーションを実現します。Postgres ユーザー定義関数を活用してアプリケーショントランザクション内に原子的にワークフロー行を作成することで、開発者はトランザショナルアウトボックスパターンに似た堅牢性を得ながら、インフラストラクチャを単純化できます。その後、ワーカーがこれらのワークフローを非同期で退け(dequeues)して信頼性高く実行します。Postgres 内でネイティブに対応する耐用可能な実行を実装することで、開発者はモダンなイベント駆動アーキテクチャで見られる典型的なインフラストラクチャの肥大化を避けて、単純化されたパフォーマンスを得ることができます。提供されるリソースには、クイックスタートガイド、GitHub リポジトリ、さらなるサポートのための Discord コミュニティが含まれます。

本文

Postgres を同一インスタンスに配置するワークフロー構築のすすめ:アイデムポテンシーとアトミック性の解決策

記事の背景と意図

数週間前、「Postgres をそのまま使えば十分」という記述で長期的なワークフロー(Durable Workflows)の構築について発表いたしました。

  • 主な論点: State(状態)を Postgres に保存するだけでは不十分であり、アプリケーションと同一のデータベースインスタンス内にワークフローシステム自体を配置すべきです。
  • 誤解への反論: 異なる用途のデータを分離したコンポーネントとして管理するのが一般的ですが、分散システムにおいて**「同じ場所への配置(Co-location)」**は強力な武器となります。
  • 利点: ワークフローメタデータとアプリケーションデータを同一の Postgres データベース内に保持することで、両者の更新を一つのデータベーストランザクション内で実行可能です。これにより部分的な失敗を防ぎ、すべてのエッジケースを適切に処理する実装が格段に容易になります。

トランザクショナルなステップによるアイデムポテンシーの解決

分散システムの課題の一つである「アイデムポテンシー(Idempotency:同一的操作に対する結果が一定であること)」の問題について解説します。

課題と一般的な解決策

  • チェックポイント問題: ワークフローは中断された場合に最後から再開しますが、ステップの完了記録をチェックポイント書き込みより前に失う場合があり、重複実行のリスクが生じます。
  • アプリケーションレベルでの対策: 通常、「ステップ自体をアイデムポテントに設計する」ことを前提とし、追加の追跡処理(bookkeeping)を行います。
    • 例:支払い履歴を追跡するための
      applied_payments
      テーブルを追加し、トランザクション的に更新して重複防止を実現します。

Co-location によるシンプル化

ワークフロー状態とアプリケーションデータを同一の Postgres データベース内に配置する場合、複雑性が大幅に削減できます。

  • 仕組み: チェックポイントの書き込みとデータベース更新を**「同一のトランザクション」**で実行します。
    • ワークフローエンジンが提供するデータベーストランザクションを使用してステップを実行。
    • ステップ内のデータベース更新を行い、最後にワークフローエンジンがチェックポイントを記録。
    • 全体としてアトミック(原子)にコミットされます。

このアプローチにより、データベースとチェックポイントの間に**「窓状態(Window of vulnerability)」**が生じることを排除できます。

  • 成功時: データベース更新とチェックポイントは両方永続化され、ステップは二度目には実行されません。
  • 失敗時: 更新もチェックポイントもロールバックされ、リカバリ時に最初から安全に実行できます。

その結果、アプリケーションレベルでのアイデムポテンシーロジックや追跡テーブルが不要になり、データベース操作は「正確に一度」「全く実行されない」かのどちらかのみになります(Exactly-once セマンティクス)。


トランザクショナルなワークフローアウトボックスによるアトミック性の解決

複数のシステムへの一貫した更新を行う「アトミック性」の課題についても解説します。

課題と一般的な解決策

  • 問題: データベースレコードを更新しつつ、他システムに通知を送る場合など、複数操作がアトミックである必要があります。失敗時にどちらか一方だけ更新されると不整合(データドリフト)が生じます。
    • 例:倉庫へ通知せず注文だけ入力される、または存在しない注文について倉庫が通知されるなど。
  • 一般的な対策:トランザクショナルなアウトボックス(Transactional Outbox)
    1. データベースレコードを更新する。
    2. 同じトランザクション内で「アウトボックステーブル」にメッセージを書き込む。
    3. バックグラウンドプロセスが定期的にアウトボックスをスキャンし、対象システムへ配信する。

一般的な課題点

  • 運用の複雑性: アウトボックスのスキャン、配信、リトライ処理、失敗監視のためのインフラストラクチャが必要になります。
  • 分離時のリスク: ワークフローエンジンとデータベースが分離されている場合、状態の不一致を検出するため、下流システムへ通知せずデータベースのみを更新したケースを修正するためのリコンシリアジョンジョブなどの追加インフラが必要となります。

Postgres によるシンプル化ワークフロー

データベースを活用し、ワークフロー状態をアプリケーションデータと同一場所で配置することでパターンを単純化できます。

  • 不要になるもの: 手動でアウトボックステーブルを管理したり、別途ポーリングプロセスを持ったりする必要がありません。
  • 代替手法:Postgres ユーザー定義関数(UDF)の利用
    • アプリケーション更新と同じトランザクション内でワークフローをキューに追加します。
    • 例:
      enqueue_workflow
      という UDF を使用して、ワークフロー行(名称、キュー名、入力値など)を作成。

この仕組みにより、アトミック性が保証されます。

  • コミット成功: 更新とキューへの追加が同時に完了し、非同期でワーカーがデキューして実行します。
  • コミット失敗: どちらも更新されず、後続の処理も発生しません。

これにより、外部システムとの状態不整合を防止しつつ、追加インフラを大幅に削減できます。


さらに詳しく知る

スケーラブルで堅牢なシステムの構築に興味をお持ちでしたら、DBOS の環境を試してみてください。Postgres に裏打ちされた長期的な実行(Durable Execution)をシンプルかつ高性能にするのが目標です。

同じ日のほかのニュース

一覧に戻る →

2026/07/03 6:03

バージニア州、地理的位置データ販売を禁止

## Japanese Translation: 提供されたテキストは、一貫した記事ではなく二進データ、符号化文字、および読み取れない内容のみから構成されているため、要約することができません。事実や日付、製品名を含む標準的な記事とは異なり、この源資料には有意義な分析に必要な理解可能性を欠いています。その解読不可能な性質から、特定の文脈、出来事、または背景情報は導き出すことができません。テキストを処理できないというこの状況のため、有益な洞察や関連する事実を引き出すことは不可能です。源入力を人間が読み取れる言語に変換されるまで、有効な要約を作成することは不可能です。その間もなお、中央テーマ、主要な論点、または具体的な物語を特定しようとするのは無駄であり、データには識別可能なストーリーが存在しないためです。最も重要な点は、この入力が混乱した非構造化形式のため、標準的な読解タスクに根本的に使用できないということです。

2026/07/03 3:41

エキスパンクス(2018)

## Japanese Translation: EXAPUNKS プロジェクトは、プレイヤーが現実的なハッキング活動に取り組み、「EXas」と呼ばれる自律エージェントを管理し、複雑なデジタルタスクを実行できるサンドボックス環境を提供します。従来のシミュレーションとは異なり、このエコシステムではユーザーが現実世界の物体を操作したり、実際のネットワークを侵害したりし、その侵害された状態の中でゲーム世界内で安全に行動することができます。体験の中核には、秘密のヒント、コメント、チュートリアル、EXas をプログラミングしてファイルを破棄させたり、自己複製したり、他のエージェントを停止させたり、痕跡を残さずに姿を消させたりするための詳細を提供する公式 *TRASH WORLD NEWS* ズィンがあります。プレイヤーは銀行、大学、工場、テレビ局、高速道路の標識、ゲームコンソール、政府システム、さらには自身の肉体など幅広い対象を対象とし、その後「ПАСЬЯНС」(パシアンズ)、地域ロックをハッキングした後の「HACK*MATCH」、あるいは TEC Redshift 用のホームブロー開発などの代替ミニゲームにアクセスできます。物理的なデラックス版のズィンセットは、2020 年 4 月に Lulu でのオンデマンド印刷を通じて復活し、7 ドルプラス送料で提供されましたが、両方の号への注文が必要でした。開発者向けには、2018 年 7 月 16 日に詳細とともにリリースされた「Axiom VirtualNetwork+」があり、ホスト、ファイル、レジスタ、ゴール、そしてその API を通じた完全なパズル仕様機能を利用して、ホストスクリプトを記述した JavaScript ベースの「バーチャルネットワーク」を作成することでカスタムパズルの作成が可能になります。2018 年と 2020 年のこれらのリリース以降、専用のコミュニティが栄え、標準的な商業制約を超えたサイバーセキュリティの探求やイノベーションを促進し続けます。

2026/06/28 8:36

現実には驚くほど多くの詳細が存在する (2017)

## Japanese Translation: 私たちが単純なものとして扱っている多くのタスク—地下室の階段を築くことや水を沸かすことなど—is、実行前に深い調査が必要となる重要な細部を隠しています。著者の父は 18 歳でコロンビアから北米へ移住し、実地作業を通じて建築を教えてくれました(フェンスの取り替え、塹壕の掘削、床および小屋の築造など)。著者はフェンスの手すりを取り替える際、床を敷設し、地下室の階段を築く際にこの教訓を実際の経験として学びました。 二つの 2×12 に角度ブラケットを用いて作られた階段は一見単純に見えますが、複数の副次的タスクを含んでいます:切り取り角度を計算またはトラACING し、U ブラケットを取り付けること、および板材を固定することです。木材は乾燥するにつれて歪むため、2x12 を正しい角度に切り取ることは容易ではありません。視覚的な対齐も失敗するため、三角関数を使用するか、円鋸用ガイドを雇用するか、または計算だけよりも木目追跡の方法を好む必要があります。ブラケットを引かれた線上に合わせてからネジを取り付けた場合でも、最初にもうけホールを掘らないとネジが斜めに取り付けられてしまいます;ブラケットを数インチ移動して再 drilling することでより良い結果が得られます。2 インチより長いネジを使用すると、階段の踏み面から突き抜け足に刺さるリスクがあるため、短いネジが不可欠です。 同様に、沸騰は単に「100°C の水」ではありません。真の沸騰の前に小さな気泡が発生します。ガラス鍋はより高い温度を耐え、硫酸で清掃されたガラス容器では水を過加熱することができ、攪拌によって爆発的に飛び散ります。二つの液体の間にわずか一滴の水を挟むだけでも、沸騰せずに約 300°C に加熱でき、一般的な主張と矛盾します。これらのリスクは、充填ベッドとロケット軌道計画を必要とする工業プロセスにも広がっており、見えない力は正確なスロットル制御と使い回し可能なロケットのための慎重な重量管理を要求します。 歴史もこれらの教訓に反響しています:アルコール熱計は 18 世紀にジャン=アンドレ・デュリュがその非線形性を明らかにするまで標準的なものでした。重要な細部が見えないままにされる時、知的な行き詰まりが生じます—例えば、「すべてのデータは「偽造されている」と主張し気候変動を否定する代わりに、見落とした過ちを注意すること—。一度見えなかった細部が出会うと透明化し、進捗はそれを見無視する場合のみ停滞します(例:三角関数 versus トラACING を巡る家族の議論)。究極的に言えば、住宅修理、大規模なエンジニアリング、科学的探究における成功は、予期しない変数を積極的に探し求め、詳細な観察を受け入れ、表面的な仮説への依存を拒むことにかかっています。

Postgres トランザクション:分散システムの究極の武器 | そっか~ニュース