CQRS & Event Sourcing : quand la complexité se justifie
Command Query Responsibility Segregation (CQRS) et Event Sourcing sont souvent mentionnés ensemble mais sont des patterns indépendants. Comprendre quand chacun apporte de la valeur -- et quand le surcoût n'est pas justifié -- est la décision architecturale clé.
CRUD Traditionnel vs CQRS
| Dimension | CRUD Traditionnel | CQRS |
|---|---|---|
| Modèle de données | Modèle unique lectures/écritures | Modèles séparés lecture et écriture |
| Scalabilité | Tout évolue ensemble | Lectures et écritures scalent indépendamment |
| Cohérence | Forte (même BDD) | Éventuelle (latence de projection) |
| Complexité | Faible | Élevée (deux modèles, synchronisation) |
| Flexibilité requêtes | Limitée par le schéma d'écriture | Modèles de lecture optimisés par usage |
| Piste d'audit | Nécessite du logging supplémentaire | Native avec event sourcing |
| Coût stockage | Inférieur | Supérieur (événements + projections) |
Matrice de décision
| Critère | Score 0 (éviter) | Score 1 (envisager) | Score 2 (bon candidat) |
|---|---|---|---|
| Exigences d'audit | Aucun audit | Journal d'audit requis | Requêtes temporelles complètes |
| Ratio lecture/écriture | Équilibre | 10:1 lectures | 100:1+ lectures |
| Complexité métier | CRUD simple | Workflows modérés | Machines à états complexes |
| Taille équipe | < 3 développeurs | 3-8 développeurs | 8+ développeurs |
| Diversité des requêtes | 1-2 patterns | 3-5 patterns | 6+ patterns |
| Réglementaire | Aucun | Lignage nécessaire | Rejouabilité complète requise |
Interprétation : 0-3 total = rester en CRUD, 4-7 = envisager CQRS sans event sourcing, 8-12 = CQRS + event sourcing justifié.
Compromis complexité / bénéfice
| Pattern | Coût d'implémentation | Coût opérationnel | Debugging | Idéal pour |
|---|---|---|---|---|
| CRUD Simple | Faible | Faible | Facile | Gestion de contenu, paramètres |
| CQRS (sans ES) | Moyen | Moyen | Modéré | APIs haute lecture, dashboards |
| ES (sans CQRS) | Moyen-Élevé | Moyen | Difficile | Domaines riches en audit |
| CQRS + ES | Élevé | Élevé | Très difficile | Finance, réglementé, temporel |
Décisions d'infrastructure clés
Options d'Event Store : EventStoreDB (dédié), Apache Kafka (si déjà en place), PostgreSQL avec tables append-only (début simple), AWS DynamoDB Streams.
Stratégie de reconstruction des projections : Vous devrez reconstruire les projections. Concevez pour cela dès le premier jour. Suivez la version des projections, supportez les reconstructions parallèles.
Snapshotting : Pour les agrégats avec de longs historiques d'événements (1000+), des snapshots périodiques évitent le chargement lent.