web-dev-qa-db-fra.com

2PC vs Sagas (transactions distribuées)

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:

  • Validation en 2 phases (2PC)
  • Sagas

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.

21
Tuomas Toivonen

Dans ma compréhension (pas un grand utilisateur de 2PC car je le considère comme limitant):

  • En règle générale, 2PC est pour les transactions immédiates.
  • En règle générale, les Sagas sont pour longue durée transactions.

Les cas d'utilisation sont évidents par la suite:

  • 2PC peut vous permettre de valider l'intégralité de la transaction dans une demande ou plus, couvrant cette demande sur tous les systèmes et réseaux. En supposant que chaque système et réseau participant suit le protocole, vous pouvez valider ou annuler l'intégralité de la transaction de manière transparente.
  • Saga vous permet de diviser une transaction en plusieurs étapes, couvrant de longues périodes (pas nécessairement des systèmes et des réseaux).

Exemple:

  • 2PC: Enregistrer le client pour chaque demande de facture reçue, tandis que les deux sont gérés par 2 systèmes différents.
  • Sagas: Réservez un itinéraire de vol composé de plusieurs vols de correspondance, tandis que chaque vol individuel est opéré par différentes compagnies aériennes.

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.

14
Tengiz