GaiaEx AcademyGaiaEx Academy
Motifs de conception logicielle pour les systèmes de trading
DéveloppeurProgrammation12 min read

Motifs de conception logicielle pour les systèmes de trading

Event sourcing, CQRS, et les motifs d'architecture utilisés par les plateformes d'échange

Partager les articles

Pourquoi les patterns comptent dans les systèmes de trading

Les logiciels financiers échouent de façon coûteuse : ordres dupliqués, soldes incohérents, échecs partiels silencieux. Les patterns de conception (design patterns) ne sont pas des trophées — ce sont des réponses à des modes de défaillance récurrents : le event sourcing pour l'auditabilité, le CQRS pour dimensionner les lectures différemment des écritures, les coupe-circuits (circuit breakers) pour arrêter les pannes en cascade, et l'idempotence pour que les nouvelles tentatives ne dupliquent pas un trade.

CQRS + journal d'événements (conceptuel) Côté écriture commandes validation ajout d'événements Journal d'événements immuable ordonné Côté lecture projections Caches / SQL requêtes API Les lecteurs peuvent être légèrement en retard ; les écritures restent la source de vérité dans le journal.
Les commandes produisent des faits ; les consommateurs construisent des vues matérialisées pour des requêtes rapides.

Pub/Sub et couplage faible

Les moteurs d'appariement, les contrôles de risque et les diffuseurs de données de marché ne devraient pas s'appeler directement dans un grand enchevêtrement (ball of mud). Un bus publication/abonnement (pub/sub) permet au moteur d'appariement d'émettre des exécutions tandis que les services en aval s'abonnent sans connaître les détails d'implémentation des services amont — mais vous devez tout de même choisir les garanties de livraison (au moins une fois vs exactement une fois) et la durée de rétention pour la relecture.

Coupe-circuits et cloisons étanches

Un coupe-circuit (circuit breaker) arrête d'appeler une dépendance défaillante après des échecs répétés, lui laissant le temps de se rétablir et protégeant vos pools de threads. Les cloisons étanches (bulkheads) isolent les pools de ressources afin qu'une tâche analytique incontrôlée ne puisse pas priver de ressources la soumission d'ordres.

États du coupe-circuit FERMÉ appels transmis échecs OUVERT échec rapide délai écoulé MI-OUVERT appel d'essai Les sondages en mi-ouvert décident de refermer le circuit ou de le rouvrir.
Se déclenche sur des rafales d'échecs ; laisse refroidir ; teste avec un seul appel avant le trafic complet.

Machines à états et idempotence

Les ordres et les transferts ont des cycles de vie contraints. Encodez les transitions autorisées dans une machine à états finis pour que les sauts invalides soient impossibles. Associez cela à des clés d'idempotence sur les requêtes client afin que les nouvelles tentatives réseau ne puissent pas créer d'ordres actifs dupliqués.

Moteurs d'appariement : priorité prix-temps

Les places de marché centralisées apparient les ordres entrants avec la liquidité en attente selon une priorité prix-temps. Les moteurs d'appariement on-chain (comme de nombreuses conceptions de DEX sur L1) doivent être déterministes : chaque validateur ré-exécute la même séquence et aboutit à un état identique — GaiaEx hérite de ce modèle des règles d'Hyperliquid.

Une adoption pragmatique

Ne suivez pas chaque pattern par pur mimétisme dès le premier jour. Commencez par des frontières claires, des logs structurés et des tests autour des mouvements d'argent. Ajoutez un journal d'événements quand la réconciliation devient douloureuse ; ajoutez des coupe-circuits quand les API externes deviennent instables. Les patterns résolvent de vrais problèmes, pas des problèmes imaginaires.