Qu’est-ce que l’event sourcing et comment fonctionne-t-il ?

L’event sourcing est un pattern d’architecture logicielle avancé qui change la manière dont les données sont gérées et stockées dans les applications modernes. Au lieu de stocker l’état actuel d’une application, l’event sourcing enregistre chaque modification sous la forme d’une séquence d’événements. Les développeurs peuvent ainsi recréer n’importe quel état antérieur du système en rejouant ces événements dans l’ordre. L’event sourcing est souvent utilisé dans les systèmes où il est essentiel de conserver un historique complet des modifications, comme les applications financières, les systèmes d’e-commerce et les processus métier complexes.

En se concentrant sur les événements plutôt que sur l’état, l’event sourcing offre plusieurs avantages, notamment une meilleure évolutivité, une plus grande flexibilité et une piste d’audit plus détaillée. Cette approche permet aux développeurs de mettre en œuvre des fonctionnalités comme le « voyage dans le temps », qui permet de voir à quoi ressemblaient les données à n’importe quel moment du passé, et facilite l’intégration avec d’autres systèmes en publiant des événements vers des abonnés externes. L’event sourcing est une méthode puissante qui, bien appliquée, peut transformer la manière dont les applications sont construites et maintenues, et fournir une architecture robuste et pérenne.

L’event sourcing est un pattern d’architecture logicielle avancé qui stocke toutes les modifications de l’état d’une application sous la forme d’une séquence d’événements. Au lieu de stocker directement l’état actuel, l’event sourcing enregistre chaque modification, ce qui permet de reconstruire précisément les états antérieurs et de comprendre en profondeur le comportement du système dans le temps. Cette approche est particulièrement adaptée aux applications où l’audit, l’historique et la relecture des données sont essentiels, comme les systèmes financiers, la gestion des stocks et les processus métier complexes. L’event sourcing est souvent combiné avec CQRS, qui sépare les opérations de lecture et d’écriture afin que chaque partie du système puisse être optimisée individuellement.

More about Event Sourcing

L’event sourcing est un pattern d’architecture logicielle avancé qui permet d’enregistrer de manière précise et détaillée chaque modification de l’état d’une application en stockant une séquence d’événements. Au lieu de stocker l’état actuel des données, l’event sourcing stocke chaque modification qui mène à l’état actuel. Il est ainsi possible de recréer n’importe quel état antérieur en rejouant les événements dans l’ordre, ce qui est particulièrement utile dans les applications où l’historique et l’audit sont essentiels, comme les systèmes financiers, la gestion des stocks et les processus métier complexes.

Sur le plan technique, l’event sourcing repose sur un journal d’événements immuables auquel on ne peut qu’ajouter des entrées. Chaque événement représente une modification du système et est stocké avec un horodatage et un identifiant unique. Lorsqu’un nouvel événement survient, il est ajouté au journal, et le système peut ensuite mettre à jour son état en rejouant les événements du journal. Avec cette approche, toutes les modifications sont traçables, et les erreurs sont corrigées par l’ajout d’événements compensatoires plutôt que par la modification de l’historique, ce qui rend l’event sourcing à la fois robuste et flexible pour de nombreux usages.

L’event sourcing comporte trois étapes principales, chacune correspondant à un type d’interaction :

  1. Traitement des commandes : le système reçoit une commande qui représente une intention de modifier l’état. La commande est validée et, si elle est valide, un ou plusieurs événements décrivant la modification sont générés. Ces événements sont stockés dans le journal et utilisés pour mettre à jour l’état du système.

  2. Traitement des événements : une fois qu’un événement est stocké, il peut être traité par différents composants du système pour mettre à jour l’état ou déclencher des effets de bord. Il peut s’agir de mettre à jour des modèles de lecture, de s’intégrer à des systèmes externes ou de générer des notifications.

  3. Reconstruction de l’état : l’état actuel du système peut être reconstruit en rejouant tous les événements du journal. Il est ainsi possible de recréer n’importe quel état antérieur ou d’analyser des données historiques pour comprendre comment le système a évolué dans le temps.

L’une des plus grandes forces de l’event sourcing est sa capacité à offrir une traçabilité et une auditabilité complètes. En stockant tous les événements, le système peut toujours recréer les états antérieurs et comprendre comment et pourquoi des modifications ont été apportées. Les erreurs et les modifications non autorisées sont ainsi beaucoup plus faciles à détecter et à analyser. Des couches de sécurité supplémentaires, comme le contrôle d’accès et le chiffrement, peuvent aussi être mises en place pour protéger les données d’événements et garantir que seuls les utilisateurs autorisés peuvent effectuer des modifications.

La capacité de l’event sourcing à stocker toutes les modifications sous forme d’événements est un autre avantage important. Cette approche permet d’analyser les données de nouvelles façons, d’identifier des tendances et d’optimiser les processus métier à partir des données historiques. Elle permet aussi d’expérimenter de nouvelles fonctionnalités et une nouvelle logique métier sans affecter l’état existant, puisque les événements peuvent être rejoués et testés dans des environnements isolés.

Dans la pratique, l’event sourcing a changé la manière dont de nombreux systèmes complexes sont construits et maintenus. Il est utilisé dans les applications financières, où un historique précis et l’audit sont essentiels, dans les plateformes d’e-commerce pour suivre le comportement des clients et dans les systèmes IoT pour gérer de grandes quantités de données de capteurs. L’event sourcing permet aussi de reconstruire l’état rapidement et de manière fiable après des pannes ou des plantages, en rejouant les événements du journal.

En résumé, l’event sourcing est un pattern d’architecture qui associe précision, flexibilité, sécurité et traçabilité dans une solution permettant de construire des systèmes plus robustes et plus évolutifs. Sa capacité à stocker toutes les modifications sous forme d’événements et à reconstruire l’état en fait un outil important du développement logiciel moderne, où la précision et l’historique sont essentiels.

Frequently asked questions about Event Sourcing

Quels sont les principes de base de l’event sourcing ?

L’event sourcing est un pattern d’architecture qui consiste à stocker les changements d’état sous la forme d’une séquence d’événements au lieu de stocker directement l’état actuel. Chaque modification de l’état du système est donc enregistrée comme un événement distinct, ce qui fournit un historique détaillé de toutes les modifications.

L’un des principes de base de l’event sourcing est que les événements sont immuables : ils ne peuvent qu’être ajoutés au flux d’événements, jamais modifiés ni supprimés. Il existe ainsi toujours un historique complet et exact de tous les changements d’état, ce qui peut être précieux pour le débogage, l’audit et la relecture de l’état du système.

L’event sourcing permet aussi de reconstruire l’état actuel du système en rejouant tous les événements depuis le début du flux. Il est ainsi possible de reconstituer l’état du système à n’importe quel moment antérieur, ce qui peut être utile pour le dépannage et l’analyse.

Comparé aux méthodes traditionnelles de gestion de l’état, où seul l’état actuel est stocké, l’event sourcing offre une manière plus détaillée et plus flexible de gérer les données, en particulier dans les systèmes complexes où il est essentiel de comprendre les modifications historiques.

En quoi l’event sourcing diffère-t-il des modèles de bases de données traditionnels ?

L’event sourcing est un pattern d’architecture qui diffère sensiblement des modèles de bases de données traditionnels en stockant toutes les modifications de l’état du système sous la forme d’une séquence d’événements. Au lieu de stocker l’état actuel des données, comme dans les opérations CRUD (Create, Read, Update, Delete) traditionnelles, l’event sourcing enregistre chaque modification qui se produit au fil du temps. N’importe quel état antérieur peut donc être recréé en rejouant l’historique des événements depuis le début.

L’un des plus grands avantages de l’event sourcing est qu’il fournit un journal d’audit complet, qui permet de suivre exactement comment et pourquoi les données ont changé. C’est particulièrement utile dans les systèmes où la traçabilité et l’audit sont critiques, comme les applications financières. L’historique des événements permet aussi de mettre en œuvre facilement des fonctionnalités comme le « voyage dans le temps », qui permet de consulter l’état du système à n’importe quel moment du passé.

Comparé aux modèles de bases de données traditionnels, où la modification du schéma de données exige souvent des migrations complexes, l’event sourcing peut être plus flexible, car de nouveaux modèles de lecture peuvent être construits à partir des événements existants sans modifier l’historique stocké. Les événements eux-mêmes ont toutefois une structure, et sa modification exige un versionnage soigneux pour que les anciens événements restent lisibles. L’event sourcing peut donc être plus complexe à mettre en œuvre et exige souvent un processus de conception rigoureux pour que les événements soient bien définis et pertinents.

Quels avantages l’event sourcing offre-t-il en matière d’intégrité des données et d’historique ?

L’event sourcing offre des avantages importants en matière d’intégrité des données et d’historique en stockant chaque modification de l’état de l’application sous la forme d’une séquence d’événements. Au lieu de mettre à jour une base de données avec l’état actuel, l’event sourcing enregistre chaque modification, ce qui garantit que toutes les modifications de données sont entièrement traçables et peuvent être reproduites avec précision.

Cette approche fournit un historique complet de toutes les modifications, ce qui permet de recréer les états antérieurs du système en rejouant les événements dans l’ordre où ils ont été générés. C’est particulièrement utile lorsqu’il faut comprendre comment un état donné a été atteint ou lorsque des erreurs doivent être corrigées ; cela se fait en ajoutant de nouveaux événements compensatoires plutôt qu’en supprimant les anciens.

Comparé aux modèles de bases de données traditionnels, où seul l’état actuel est stocké, l’event sourcing offre une solution plus robuste pour l’intégrité des données. En conservant un historique complet des événements, le système garantit qu’aucune information historique n’est perdue et que toutes les modifications peuvent être vérifiées et auditées, ce qui est essentiel pour les applications qui exigent une grande fiabilité et une forte traçabilité.

Comment l’event sourcing peut-il améliorer l’évolutivité d’une application ?

L’event sourcing peut améliorer l’évolutivité d’une application en changeant la manière dont les données sont gérées et stockées. Au lieu de stocker l’état actuel des données, l’event sourcing stocke toutes les modifications sous la forme d’une séquence d’événements. Comme les écritures sont de simples ajouts à un journal, cela peut réduire le besoin de transactions complexes et de verrous de base de données, ce qui permet de faire évoluer plus efficacement la partie écriture.

L’event sourcing peut aussi améliorer l’évolutivité en permettant de traiter les événements en parallèle. Les événements appartenant à des entités différentes peuvent être traités de manière asynchrone et répartis sur plusieurs serveurs, tandis que les événements d’une même entité doivent être traités dans l’ordre. Cela réduit la charge de chaque serveur et améliore les performances globales de l’application, qui peut ainsi gérer davantage de données et d’utilisateurs simultanés sans compromettre la vitesse ni la fiabilité.

Comparé aux modèles de bases de données traditionnels, qui exigent souvent des opérations complexes et gourmandes en ressources pour mettre à jour et maintenir les données, l’event sourcing offre une solution plus évolutive. En se concentrant sur les événements plutôt que sur l’état, l’application peut être adaptée et étendue plus facilement, ce qui la rend bien adaptée aux systèmes distribués modernes qui exigent haute disponibilité et performances.

Quels défis peuvent survenir avec l’event sourcing ?

L’event sourcing fournit un historique complet, mais il comporte aussi des exigences. Calculer l’état actuel à partir de nombreux événements peut prendre du temps, c’est pourquoi on utilise souvent des snapshots qui enregistrent l’état à certains moments.

Il peut être difficile de modifier la structure des événements une fois que le système fonctionne depuis un certain temps, car les anciens événements doivent rester lisibles. Les requêtes transversales sur les données nécessitent généralement des modèles de lecture distincts, mis à jour de manière asynchrone, de sorte que les données peuvent être brièvement obsolètes. Cette façon de penser est aussi nouvelle pour de nombreux développeurs, et la suppression de données personnelles peut exiger des solutions particulières, comme le crypto-shredding, qui consiste à supprimer la clé de chiffrement des données d’une personne.

Comment combiner l’event sourcing avec CQRS (Command Query Responsibility Segregation) ?

Lorsque l’event sourcing est combiné avec CQRS (Command Query Responsibility Segregation), il existe une séparation claire entre les commandes qui modifient l’état et les requêtes qui le lisent. Cette séparation permet d’optimiser et de faire évoluer chaque partie indépendamment, ce qui peut améliorer les performances et l’évolutivité du système.

Dans une architecture CQRS avec event sourcing, les commandes sont traitées en créant de nouveaux événements qui décrivent les modifications du système. Ces événements sont stockés dans un event store, qui constitue la source unique de vérité. Une fois un nouvel événement stocké, il peut servir à mettre à jour des modèles de lecture optimisés pour les requêtes. Les modèles de lecture sont généralement mis à jour de manière asynchrone et sont donc cohérents à terme (eventual consistency), c’est-à-dire qu’ils peuvent avoir un léger retard sur les dernières modifications.

Comparée aux architectures CRUD traditionnelles, où les modifications de données et les requêtes sont souvent étroitement couplées, la combinaison de l’event sourcing et de CQRS offre une solution plus flexible et plus robuste. En effet, les systèmes basés sur les événements peuvent gérer plus efficacement une logique métier complexe et le suivi de l’historique, tout en prenant en charge le traitement asynchrone et l’évolutivité. Cette combinaison est particulièrement utile dans les systèmes qui exigent une haute disponibilité et des mises à jour quasi temps réel, comme les applications financières et les plateformes IoT.

Event Sourcing for dummies

L’event sourcing est une façon astucieuse de stocker des données qui garde la trace de chaque changement dans un système, un peu comme si on filmait tout. Au lieu d’enregistrer seulement le dernier état des données, on enregistre chaque changement qui se produit au fil du temps. C’est comme tenir un journal intime où tu notes quelque chose à chaque fois qu’il se passe du nouveau, au lieu d’avoir une seule page avec les dernières infos. Cela permet de voir facilement comment et pourquoi les choses ont changé, et peut aider à recréer des états précédents ou à comprendre ce qui s’est mal passé en cas de problème. C’est un moyen efficace d’avoir toujours une vue complète de ce qui s’est passé dans le système.

Laisser un commentaire