Imaginez un monde où le passé est la seule vérité… toute la vérité

Par éric de carufel

Vos systèmes informatiques contiennent sûrement plusieurs bases de données structurées et relationnelles. Vous devez faire des copies régulièrement pour ne pas perdre d’information. Malgré ces précautions, vous perdez tous les états intermédiaires (états du système après un événement passé) de vos systèmes d’information.

Si tout ce qui vous intéresse, c’est l’état final, ce n’est pas trop grave. Toutefois, il y a fort à parier que vous aurez un jour à répondre à des questions du genre :

  • Combien de temps s’écoule entre le moment où un client met un item dans son panier virtuel et le moment où il complète sa transaction?

  • Combien de fois cet item a-t-il été retiré d’un panier d’achats?

  • Quel était l’état de la commande avant le crash?

Si vous n’avez pas défini ces besoins lors de la conception initiale de votre système, vous ne pourrez pas répondre à ces questions. Bien sûr, il vous sera possible de le faire, mais seulement à partir du moment où vous aurez déployé les fonctionnalités nécessaires… Et encore, vous n’aurez des données qu’à partir de ce moment-là.

Je vous propose donc une solution que vous pourrez implémenter initialement et qui vous permettra de répondre à ces questions à tout moment, et même à celles que vous n’aurez pas encore pensé : CQRS et Event Sourcing.

La force de ce duo vient de l’Event Sourcing (J’aborderai CQRS dans un prochain billet.)

Vous souvenez-vous de tout ce qu’on vous a dit à propos des effets de bord? Entre autres, qu’il fallait tout faire pour les éviter?! Et bien dans ce cas-ci, ces effets sont les seules choses qui importent.

Comment fonctionne l’Event Sourcing?

Dans ce type de système, on ne conserve pas les données proprement dites, mais plutôt l’effet de celles-ci, sous forme d’événements dans le passé. Par exemple, si je lance la commande suivante :

var command = new AddItemToCart(cartId, itemId);

Le système produira l’événement suivant :

var @event = new ItemAdded(cartId, itemId);

Une des forces d’un système d’événements, c’est qu’il est maintenant possible de suivre les retraits faits au système, puisqu’au lieu d’effacer de l’information, on en ajoute :

var command = new RemoveItemFromCart(cartId, cartItemIndex);

Ce qui produira l’événement suivant :

var @event = new ItemRemoved(cartId, cartItemIndex);

Dans ce système, tous les événements dériveront de classes de base :

public class EventBase  {    public Guid Id { get; set; }    public int Sequence { get; set; }    public DateTime TimeStamp { get; set; }  }

Une classe d’infrastructure sera aussi nécessaire afin de s’assurer que tous les événements se voient attribué une date et une séquence.

Principe de base

Dans un tel système, seuls les événements ont de la valeur. Ils sont le reflet de ce qui s’est réellement passé. Ces événements serviront à bâtir des modèles de lecture propres à chaque système qui s’y intéresse. Chacun aura sa petite base de données pour répondre à ses besoins immédiats, et les changements n’affecteront qu’un seul système.

Ensuite?

Dans mon prochain billet, j’irai plus en détail et je donnerai quelques exemples sur la valeur apportée par les événements conservés de cette façon.

Autres articles qui pourraient vous intéresser

Des données en désordre font dérailler les stratégies IA

Hygiène des données: pourquoi votre stratégie IA 2027 échouera si votre structure de données 2025-2026 est un désastre

Vos données sont réparties sur cinq bases de données. Peut-être sept. Vos microservices communiquent les uns avec les autres, mais pas de manière cohérente. Les dossiers clients sont dupliqués sur trois systèmes. Votre pipeline ETL (Extract, Transform, and Load) se casse chaque mardi à 3 heures du matin, et quelqu'un, généralement un ingénieur senior débordé, le répare au lieu de corriger la cause profonde...

Logiciel sur mesure pour le secteur pétrole et gaz : Avantages et modules

Un logiciel sur mesure pour le pétrole et le gaz est une solution numérique personnalisée conçue pour gérer des opérations spécifiques en amont (exploration et production), médian (stockage et transport) ou en aval (raffinage, distribution et vente au détail). Contrairement aux logiciels commerciaux standards, ces outils sur mesure automatisent vos flux de travail uniques...

Comment le Cloud Computing Affecte le Processus de Développement de Logiciels?

Fort à parier que vous ayez déjà adressé le cloud computing dans vos opérations quotidiennes. Savez-vous toutefois comment l’utilisation de ces services en ligne interagit avec le développement logiciel sur mesure? Approfondissons différents aspects de ce type de développement dans le contexte nuagique, ce qu’il permet, ses avantages, les défis à retenir et comment l’intégration...