Je développe mes connaissances sur les systèmes distribués et sur la façon de maintenir la cohérence des données sur ces systèmes, où les transactions commerciales couvrent plusieurs services, des contextes délimités et des limites de réseau.
Voici deux approches qui, je le sais, sont utilisées pour implémenter des transactions distribuées:
2PC est un protocole permettant aux applications de de manière transparente utiliser les transactions ACID globales par le support de la plateforme. Étant intégré dans la plate-forme, il est transparent pour la logique métier et le code d'application pour autant que je sache.
Les sagas, d'autre part, sont des séries de transactions locales, où chaque transaction locale mute et persiste les entités avec un indicateur indiquant la phase de la transaction globale et valide le changement. En d'autres termes, l'état de la transaction fait partie du modèle de domaine. Le rollback consiste à engager une série de transactions "inversées". Les événements émis par les services déclenchent ces transactions locales dans les deux cas.
Maintenant, quand et pourquoi utiliser des sagas sur 2PC et vice versa? Quels sont les cas d'utilisation et les avantages/inconvénients des deux? Surtout, la fragilité des sagas me rend nerveux, car la transaction distribuée inversée pourrait également échouer.
Dans ma compréhension (pas un grand utilisateur de 2PC car je le considère comme limitant):
Les cas d'utilisation sont évidents par la suite:
Exemple:
Personnellement, je considère que Saga est capable de faire ce que 2PC peut faire. Le contraire n'est pas exact.
Je pense que les Sagas sont universels, tandis que 2PC implique le verrouillage de la plate-forme/du fournisseur.