データ指向アプリケーションデザインというとても良い本があります。僕はこの本に賛成ですし、2相コミットに関して僕と同様に全体的に悲観的な論調です。

データ指向アプリケーションデザイン

現代の分散システム設計においてデータの扱いは重要な課題です。システムはスケーラビリティ、一貫性、信頼性、効率性、メンテナンス性を維持する必要があり、そのためにリレーショナルデータベース、NoSQLデータストア、ストリーム、バッチプロセッサ、メッセージブローカーなどのツールが数多く存在します。 本書は、データを処理し、保存するさまざまなテクノロジーの特性を詳述することで、ツールの長所と短所を理解し、システムの課題と使用するアプリケーションに適した選択肢の発見を助けます。 本書では、データの量や複雑さ、変化が課題となるアプリケーションを「データ指向」と名づけ、データ指向アプリケーションの設計を支える基本的な概念を解説します。そしてレプリケーション、パーティション、トランザクションなど分散データベースについて扱い、さらにバッチ処理、ストリーム処理など、データセットの取り出しや結合について解説します。 データ処理のテクノロジーを総覧し、特性やトレードオフを詳述する本書はソフトウェアエンジニア、アーキテクト必携の一冊です。

https://www.oreilly.co.jp

XAトランザクションに関する議論を引用しますと

XA は幅広いデータシステムに適合しなければならないため、最小公分母とならざるを得ません。

基本的にXAやその実装について懐疑的で

分散トランザクションは、そのコストを進んで負担するような限定された環境ではうまく利用されてきました。しかし、私は XA の耐障害性とパフォーマンス特性は貧弱であり(p.393「9.4.2 分散トランザクションの実際」参照)、そのために分散トランザクションの有用性はきわめて限定的だと考えています。

耐障害性とパフォーマンスの2面で貧弱であると断じています。

そもそも2相コミットは故障を設計スコープの中に入れていない点が問題なのですが、ビジネスがそれで問題なく回るよう折り合いが付いている(例えば障害発生時に人間のオペレータが手動で修復に来るとか障害で数日落ちてても問題ないとか)のであれば自信を持って2相コミットを使ったら良いと思います。おそらくFail Stop用アルゴリズムをCrash Recover故障モデルの上で知らずに動かすよりはマシです。

それと2相コミットに対して自前で復旧アルゴリズムを設計していたりしたら恐ろしい事になると思います。過去に作ったスライドも併せてご参照ください。

本当は恐ろしい分散システムの話 | ドクセル

ドクセルはスライドやPDFをかんたんに共有できるサイトです

https://www.docswell.com

1年

利用規約プライバシーポリシーに同意の上ご利用ください

熊崎 宏樹さんの過去の回答
    Loading...