guest@6admin.io:~$

3factor : l'architecture qui retire l'état de l'API

Au début de 2019, quelques mois après ma découverte des douze facteurs, je tombe sur 3factor , un motif d’architecture publié par Hasura dont le nom est un clin d’œil assumé à 12factor.net (la ressemblance s’arrête là, 3factor est un motif de conception, pas une méthodologie). L’idée tient en trois facteurs: du GraphQL temps réel, de l’événementiel fiable et du serverless asynchrone.

Les trois facteurs

Le premier facteur est du GraphQL temps réel: le client souscrit à l’état et le reçoit au lieu de le demander, ce qui déplace la synchronisation du polling vers le serveur. Le deuxième est de l’événementiel fiable: chaque changement d’état est un événement persisté. Des déclencheurs le délivrent aux abonnés (la livraison se fait au moins une fois, l’idempotence est à la charge du consommateur). Le troisième est du serverless asynchrone: la logique métier tourne dans des fonctions déclenchées par les événements, sans serveur à gérer, avec mise à l’échelle automatique.

L’idée centrale

Le motif tient en un mouvement: état, événement, réaction. L’état vit dans la base, l’événement le fait sortir, la réaction le fait évoluer. La gestion d’état sort de la couche API, qui devient un simple projectionniste (elle projette l’état et il s’abonne). La logique métier vit dans les réactions. C’est l’inverse d’une API REST qui porte la session, le calcul et la cohérence.

Ce que ça coûte

Le motif n’est pas gratuit. Il faut accepter la cohérence finale, puisque l’état et les événements ne sont pas transactionnels ensemble. Il faut penser idempotence, puisque les événements sont délivrés au moins une fois. Et il faut renoncer aux requêtes complexes en une fois, puisque l’état est reconstruit par abonnement. En échange, on gagne une API sans état (ce que les douze facteurs recommandent) et une logique métier qui scale indépendamment.

Le lien avec les douze facteurs

Côté Twelve-Factor , le motif coche plusieurs cases: processus sans état, parité dev/prod, logs comme flux. Il pousse surtout le facteur concurrence jusqu’au bout, puisque chaque réaction est un processus indépendant. Je le range dans la même famille que les douze facteurs, en plus jeune et plus opiniâtre.