ビジネストランザクションが複数のサービス、境界のあるコンテキスト、ネットワークの境界をカバーする分散システム、およびそのようなシステム全体でデータの一貫性を維持する方法についての洞察を発展させています。
分散トランザクションの実装に使用されることがわかっている2つのアプローチを次に示します。
2PCは、アプリケーションがtransparentlyプラットフォームのサポートによりグローバルACIDトランザクションを利用するためのプロトコルです。プラットフォームに組み込まれているため、私が知る限り、ビジネスロジックとアプリケーションコードに対して透過的です。
一方、Sagasは一連のローカルトランザクションであり、各ローカルトランザクションは、グローバルトランザクションのフェーズを示すフラグとともにエンティティを変更および永続化し、変更をコミットします。つまり、トランザクションの状態はドメインモデルの一部です。ロールバックとは、一連の「反転した」トランザクションをコミットすることです。いずれの場合でも、サービスによって発行されたイベントがこれらのローカルトランザクションをトリガーします。
さて、2PCでsagasを使用するのはいつ、そしてなぜですか?両方のユースケースと賛否両論は何ですか?特に、倒立分散トランザクションも失敗する可能性があるため、sagaの脆弱性は私を緊張させます。
私の理解では(2PCを制限していると考えているため、2PCの大ユーザーではありません):
ユースケースはその後明らかになります:
例:
私は個人的に、佐賀が2PCでできることをできると考えています。反対は正確ではありません。
Sagasは普遍的であり、2PCはプラットフォーム/ベンダーのロックダウンを伴うと思います。