3. Une (vieille) histoire de SOA
• Refonte d’une plateforme de paiement en SOA
• Des services distribuée, chacun sa base de données
• 2 grands challenges :
1. Définir et borner les services
2. Garantir la cohérence d’ensemble des données
8. Transaction ACID distribuée
• Simplicité de développement mais …
• Fort couplage technique
• Coût élevé de l’isolation : concurrence et scalabilité réduite
• Fragilité liée à la coordination synchrone
• Non supporté par NoSQL, Kafka …
• Contexte transactionnel non propagé par REST, GraphQL, gRPC …
9. Un point moins ACID SVP
Service
1
BdD
1
Start Confirmation
Service
2
Service
3
BdD
2
BdD
3
LRA/SAGA
ACID locale 1 ACID locale 2 ACID locale 3
Compensation
12. Et les erreurs de compensation ?
• Action de compensation simple et rapide
• Différer les opérations trop complexes et risquées
13. Principes de coordination
• Des transactions ACID locales (ou pas si NoSQL)
• Une coordination globale légère, faiblement couplée
• Des opérations de compensation explicites
• Perte de l’isolation globale : de ACID à ACD
17. MicroProfile LRA Eventuate SAGA
Origine
SAGA: H. Garcia-Molina & K. Salem
1987 Association for Computing
Eventuate: 2017
Nature
Version
En cours
Implémentations
Modèle de
programmation
Echange
Messaging
Asynchrone
Infrastructure r
31. Base de données Eventuate
Holiday Trip
cdc_monitoring X
entities
events
message X X
offset_store
received_messages X X
Infrastructure
saga_instance
saga_instance_partition
saga_lock_table
snapshots
35. Pour terminer
• Si trop de transaction distribuée : revoir le découpage en service
• Solution minimaliste : tracer les erreurs et compenser en arrière plan
• Des solutions plus avancées existent
• Ne pas négliger les performances et le monitoring
• Actions de compensation simples, rapides et idempotent
36. Pour aller plus loin
• Mes 2 démos sur GitHub :
• https://github.com/jefrajames/lra-demo
• https://github.com/jefrajames/saga-demo
• Eventuate : le site microservices.io, le site Eventuate et les exemples
• LRA: le blog Narayana, les exemples Quarkus, Open Liberty, Helidon
37. Pour aller encore plus loin
• Un exemple LRA avec SpringBoot (Jersey) et Axon
• Le module LRA Camel
• Configurer le CDC en transaction log tailing sur PostgreSQL