Qu'est-ce que l'Event Sourcing ?
L’Event Sourcing, voilà un terme que l’on entend de plus en plus souvent. Décrit, il y a maintenant une dizaine d’années, ce concept commence maintenant à arriver dans nos architectures PHP. Mais, de quoi s’agit-il ? Derrière l’Event Sourcing se cache un mécanisme simple qui consiste à sauvegarder chaque événement déclenché dans une application.
Lorsque l’on accède et navigue au sein d’une application, en réalité nous accédons à un état donné de cette dernière. En effectuant certaines actions, nous pouvons par exemple modifier l’état du programme (en modifier les données qui sont gérées par ce dernier). La plupart du temps, les actions effectuées par l’utilisateur vont directement altérer les informations contenues dans la base de données. De ce fait, la base de données est une copie du dernier état de notre application.
Avec l’Event Sourcing, nous allons stocker chacun des événements qui vont déclencher la modification des données contenues en bases. L’objectif d’un tel mécanisme est de s’assurer que tous les changements d’états sont stockés comme une séquence d’événements. Il devient alors possible d’interroger n’importe quel événement qui s’est produit et d’en déduit l’état de l’application à n’importe quel moment de sa vie. Cela peut être considéré comme un journal d’événements. C’est d’ailleurs en parcourant ce dernier, que l’on reconstruit l’état actuel de l’application (pour nos utilisateurs).
Avec ce type de méthodologie, il est donc primordial que les événements soient des éléments immuables et qui ne peuvent donc être ni modifiés, ni supprimés.
Maintenant, vous devez vous demander qui peut bien utiliser une telle architecture ? La réponse la plus évidente est sans doute les systèmes de gestion de sources et du versionnement. Mais cette méthode de développement ne s’arrête pas à ces seuls outils. Des applications Web sont également conçues selon cette méthodologie. C’est notamment le cas de certaines applications internes développées chez ERDF ou encore chez BlaBlaCar.
Si vous souhaitez en savoir plus, je ne peux que vous conseillez de lire l’excellent billet de Martin Fowler très complet sur le sujet.