Saga Orchestration
Le pattern transactionnel pour les workflows EDI à plusieurs systèmes : pas d'XA, juste des compensations applicatives.
Problème
Un cycle EDI traverse plusieurs systèmes (ERP, WMS, TMS, billing) qui ne supportent pas XA. Comment garantir la cohérence end-to-end quand une étape échoue à mi-parcours ?
Forces
- XA cross-system n'est ni disponible ni performant.
- Sans compensation, un crash entre l'étape 3 et l'étape 5 laisse le système incohérent.
- Les compensations doivent être idempotentes (rejouées plusieurs fois sans dommage).
- Une saga complexe doit être observée et reprise après crash.
Solution
Définir le workflow comme une séquence de N steps, chacun avec son inverse explicite (compensation). Un orchestrator centralisé (Process Engine, Temporal, AWS Step Functions) exécute step après step. Si step K échoue, l'orchestrator exécute les compensations de step K-1 → 1 dans l'ordre inverse. Exemple EDI : (a) book PO, (b) reserve inventory, (c) schedule transport, (d) create invoice. Échec en (d) → compensation (c) (release transport slot), (b) (release inventory), (a) (cancel PO).
Implémentation EDI
En EDI, la Saga Orchestration est la voie réaliste pour les workflows multi-systèmes. Cas Walmart : un 850 reçu doit (1) créer la commande dans l'ERP, (2) réserver le stock dans le WMS, (3) planifier le 856 dans le TMS, (4) émettre l'855. Si (4) échoue (TMS down), l'orchestrator déclenche (3) release-stock, (2) cancel-order, et envoie un 855 négatif au partenaire. Implémentations : Temporal, Camunda Saga, AWS Step Functions Saga, Conductor.
Anti-patterns
- Saga sans compensation pour chaque step — un crash en milieu laisse l'état incohérent.
- Compensation non-idempotente — un retry annule deux fois la même réservation.
- Saga orchestrator stateful sans persistence — un crash de l'orchestrator perd la saga en cours.
- Saga avec dépendances cycliques — la compensation peut boucler à l'infini.
Patterns liés
- Process Engine — runtime canonique de la saga.
- Process Manager — concept parent.
- Transactional Client — transactionnel local par step.
- Idempotence — des steps et compensations.
Sources
- Garcia-Molina H., Salem K. — Sagas, ACM SIGMOD 1987. dl.acm.org/doi/10.1145/38713.38742
- Microsoft — Saga distributed transactions pattern. learn.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga