# Transactions distribuées : validation en deux phases, saga, idempotence

Informatique de gestion · Master 1

> Garantir la cohérence entre services : 2PC, saga, compensation et idempotence.

## Introduction

Dans une application répartie en plusieurs services ou bases, une opération métier touche plusieurs ressources : réserver un billet, débiter un compte, notifier un client. Garantir que tout réussit ou rien n'a lieu est bien plus difficile qu'avec une seule base de données.

La validation en deux phases (2PC) fait appel à un coordinateur. Dans la phase de préparation, chaque participant s'engage à pouvoir valider et verrouille ses ressources ; dans la phase de validation, le coordinateur ordonne le commit ou l'annulation. Le protocole offre une atomicité forte, mais il est bloquant : si le coordinateur tombe après la préparation, les participants restent verrouillés, et la latence augmente.

Le patron saga décompose l'opération en transactions locales successives, chacune associée à une action de compensation (annuler la réservation, rembourser). Elle peut être orchestrée par un composant central ou chorégraphiée par des événements. La cohérence est alors à terme et les états intermédiaires sont visibles. Comme les messages peuvent être livrés plusieurs fois, les opérations doivent être idempotentes, souvent grâce à une clé d'idempotence.

## Objectifs d'apprentissage

- Décrire le déroulement et les limites de la validation en deux phases
- Expliquer le principe de la saga et des compensations
- Comparer orchestration et chorégraphie
- Justifier le besoin d'idempotence avec des nouvelles tentatives
- Choisir une approche selon les exigences métier

## Concepts clés

- **Validation en deux phases** : Préparation puis validation, pilotées par un coordinateur ; atomicité forte mais blocage possible en cas de panne.
- **Saga** : Suite de transactions locales, chacune avec une compensation si une étape ultérieure échoue.
- **Compensation** : Action métier inverse qui annule l'effet d'une étape déjà validée ; elle ne restaure pas l'état exact d'avant.
- **Orchestration et chorégraphie** : Un orchestrateur pilote les étapes, ou chaque service réagit à des événements sans chef central.
- **Idempotence et clé d'idempotence** : Un identifiant unique de requête permet de traiter une seule fois une opération reçue plusieurs fois.

## Conclusion

La cohérence entre services indépendants se paie : le 2PC offre l'atomicité mais bloque et ralentit ; la saga garde la disponibilité au prix d'une cohérence à terme et de compensations à concevoir. L'idempotence et des nouvelles tentatives maîtrisées sont indispensables dans les deux cas.

Le choix dépend des exigences métier : on tolère rarement des états intermédiaires pour un virement interbancaire, mais très bien pour la réservation d'un voyage.

## Cartes

### Quelles sont les deux phases du 2PC ?

La préparation, où chaque participant vote et réserve ses ressources, puis la validation ou l'annulation décidée par le coordinateur.

### Quelle condition déclenche l'annulation dans le 2PC ?

Il suffit qu'un seul participant refuse ou ne réponde pas lors de la préparation : le coordinateur décide l'annulation globale.

### Pourquoi le 2PC est-il dit bloquant ?

Si le coordinateur tombe après la phase de préparation, les participants ayant voté oui doivent garder leurs verrous en attendant sa décision.

### Quel avantage le 2PC offre-t-il ?

Une atomicité forte : toutes les ressources valident ou aucune ne valide, avec un état intermédiaire non visible une fois la transaction terminée.

### Qu'est-ce qu'une saga ?

Une séquence de transactions locales où l'échec d'une étape déclenche des compensations pour les étapes déjà réalisées.

### Qu'est-ce qu'une compensation ?

Une opération métier qui annule l'effet d'une étape, comme un remboursement ou l'annulation d'une réservation ; elle peut laisser des traces, par exemple un frais ou un courriel déjà envoyé.

### Quelle différence entre orchestration et chorégraphie ?

L'orchestration confie le déroulé à un composant central ; la chorégraphie laisse chaque service réagir aux événements des autres, avec plus de découplage mais un suivi plus difficile.

### Quelle cohérence une saga offre-t-elle ?

Une cohérence à terme : des états intermédiaires sont visibles avant la fin ou la compensation.

### Pourquoi une opération doit-elle être idempotente dans un système avec nouvelles tentatives ?

Parce qu'un message peut être livré plusieurs fois (au moins une fois) ; rejouer l'opération ne doit pas débiter deux fois un compte.

### Comment implémente-t-on l'idempotence d'une requête de paiement ?

En associant à la requête un identifiant unique que le serveur mémorise : une requête répétée avec le même identifiant renvoie le résultat déjà obtenu.

### Pourquoi les nouvelles tentatives utilisent-elles un recul exponentiel ?

Pour éviter de surcharger un service déjà en difficulté : les délais entre essais augmentent, avec une part d'aléa.

## Glossaire

- **Coordinateur** : Composant qui pilote la décision de validation ou d'annulation d'une transaction distribuée.
- **Participant** : Ressource ou service qui prend part à une transaction distribuée.
- **Saga** : Patron de transaction longue en étapes locales compensables.
- **Compensation** : Action métier qui annule logiquement une étape déjà validée.
- **Clé d'idempotence** : Identifiant unique d'une requête permettant de ne la traiter qu'une fois.
- **Livraison au moins une fois** : Garantie qu'un message sera livré une ou plusieurs fois, jamais zéro.

https://ruvy.ch/decks/-P5D01NRWocLdvrksmZp
