GaiaEx AcademyGaiaEx Academy
Patrones de diseño de ingeniería de software para sistemas de trading
DesarrolladorProgramación12 min read

Patrones de diseño de ingeniería de software para sistemas de trading

Event sourcing, CQRS y patrones de arquitectura usados por los exchanges

Compartir Publicaciones

Por qué importan los patrones en los sistemas de trading

El software financiero falla de formas caras: órdenes duplicadas, saldos inconsistentes, fallos parciales silenciosos. Los patrones de diseño no son trofeos — son respuestas a modos de fallo recurrentes: event sourcing para la auditabilidad, CQRS para escalar las lecturas de forma distinta a las escrituras, cortacircuitos (circuit breakers) para detener fallos en cascada, e idempotencia para que los reintentos no dupliquen operaciones.

CQRS + registro de eventos (conceptual) Lado de escritura comandos validar añadir eventos Registro de eventos inmutable ordenado Lado de lectura proyecciones Cachés / SQL consultas de API Los lectores pueden ir levemente rezagados; los escritores siguen siendo la fuente de verdad en el registro.
Los comandos producen hechos; los consumidores construyen vistas materializadas para consultas rápidas.

Pub/Sub y bajo acoplamiento

Los motores de emparejamiento, las comprobaciones de riesgo y los publicadores de datos de mercado no deberían llamarse directamente entre sí en una gran bola de barro. Un bus de publicación/suscripción permite que el motor de emparejamiento emita fills mientras los servicios río abajo se suscriben sin conocer los detalles de implementación de los servicios río arriba — pero aun así hay que elegir las garantías de entrega (al menos una vez frente a exactamente una vez) y la retención para poder repetir el flujo (replay).

Cortacircuitos y mamparos (bulkheads)

Un cortacircuitos (circuit breaker) deja de llamar a una dependencia enferma tras fallos repetidos, dándole tiempo para recuperarse y protegiendo tus pools de hilos. Los mamparos (bulkheads) aíslan los pools de recursos para que un trabajo de analítica descontrolado no pueda dejar sin recursos al envío de órdenes.

Estados del cortacircuitos CERRADO las llamadas pasan fallos ABIERTO fallo rápido tiempo de espera SEMIABIERTO llamada de prueba Las pruebas en semiabierto decidan si vuelve a cerrarse o se reabre.
Se dispara ante rachas de fallos; se enfría; se prueba con una única llamada antes de recibir todo el tráfico.

Máquinas de estados e idempotencia

Las órdenes y las transferencias tienen ciclos de vida bien definidos. Codifica las transiciones permitidas en una máquina de estados finita para que los saltos no válidos sean imposibles. Combina eso con claves de idempotencia en las solicitudes del cliente para que los reintentos de red no puedan crear órdenes activas duplicadas.

Motores de emparejamiento: prioridad precio-tiempo

Los mercados centralizados emparejan las órdenes entrantes con la liquidez en espera según la prioridad precio-tiempo. Los motores de emparejamiento en cadena (como muchos diseños de DEX en Layer 1) deben ser deterministas: cada validador reejecuta la misma secuencia y llega a un estado idéntico — GaiaEx hereda este modelo de las reglas de Hyperliquid.

Adopción pragmática

No copies mecánicamente todos los patrones el primer día. Empieza con límites claros, registros estructurados y pruebas alrededor del movimiento de dinero. Añade un registro de eventos cuando aparezca dolor de reconciliación; añade cortacircuitos cuando las API externas empiecen a fallar de forma intermitente. Los patrones resuelven raspaduras reales, no imaginarias.