データ指向アプリケーションデザインというとても良い本があります。僕はこの本に賛成ですし、2相コミットに関して僕と同様に全体的に悲観的な論調です。
XAトランザクションに関する議論を引用しますと
XA は幅広いデータシステムに適合しなければならないため、最小公分母とならざるを得ません。
基本的にXAやその実装について懐疑的で
分散トランザクションは、そのコストを進んで負担するような限定された環境ではうまく利用されてきました。しかし、私は XA の耐障害性とパフォーマンス特性は貧弱であり(p.393「9.4.2 分散トランザクションの実際」参照)、そのために分散トランザクションの有用性はきわめて限定的だと考えています。
耐障害性とパフォーマンスの2面で貧弱であると断じています。
そもそも2相コミットは故障を設計スコープの中に入れていない点が問題なのですが、ビジネスがそれで問題なく回るよう折り合いが付いている(例えば障害発生時に人間のオペレータが手動で修復に来るとか障害で数日落ちてても問題ないとか)のであれば自信を持って2相コミットを使ったら良いと思います。おそらくFail Stop用アルゴリズムをCrash Recover故障モデルの上で知らずに動かすよりはマシです。
それと2相コミットに対して自前で復旧アルゴリズムを設計していたりしたら恐ろしい事になると思います。過去に作ったスライドも併せてご参照ください。
1年