La ilusión: “escala = más TPS”
En un sportsbook, el cuello de botella rara vez es “procesar más apuestas por segundo”. La limitación real es mantener control determinista mientras crece la complejidad operacional: más mercados, más feeds, más reglas, más jurisdicciones, más productos (parlays, cashout, boosts), más equipos y más cambios por unidad de tiempo.
La escalabilidad que importa es capacidad de cambio sin degradar invariantes:
- coherencia de estado entre pricing, riesgo, aceptación y settlement;
- trazabilidad audit-ready;
- latencias acotadas bajo picos;
- recuperación segura ante fallas parciales;
- reproducción exacta de decisiones pasadas.
Cuando esto falla, aparecen síntomas conocidos: “apuestas fantasma”, cashouts incongruentes, límites que no se aplican, o settlement que se corrige manualmente. En términos de arquitectura, el enemigo no es el throughput; es la deriva de estado (ver /es/insights/ingenieria/deriva-de-estado-el-modo-de-falla-silencioso-en-sistemas-de-apuestas-en-tiempo-real).
Qué crece de verdad: complejidad y superficie de fallo
Multiplicación de estados y transiciones
Cada apuesta no es un registro: es un ciclo de vida con transiciones condicionadas por eventos externos (feed), reglas internas (riesgo), y acciones del usuario (cashout, cancelación).
Estados típicos:
- pre-match vs in-play (timing crítico);
- suspended/resumed (ventanas de aceptación);
- partial settlement (mercados con correcciones);
- voided/abandoned (reglas por deporte/liga/jurisdicción);
- cashout offer → accept → settle (con dependencia del price snapshot).
Escalar aquí significa que todas las transiciones sigan siendo deterministas bajo concurrencia, reintentos, duplicados y reordenamiento de eventos.
Acoplamientos invisibles
La degradación aparece cuando componentes “autónomos” toman decisiones con supuestos distintos:
- Pricing asume una versión de fixture; Risk otra.
- Wallet aplica idempotencia por
betId; settlement portransactionId. - Trading suspende por feed; frontend permite confirmar por latencia.
Estas grietas son pequeñas al inicio; con más mercados y productos se vuelven sistémicas.
Determinismo como requisito de infraestructura (no un ideal)
La pregunta clave no es “¿podemos aceptar más apuestas?”, sino:
¿Podemos reproducir exactamente por qué aceptamos/rechazamos una apuesta y con qué estado del mundo, meses después?
Esto es un requisito regulatorio y operativo. También es una ventaja técnica: reduce incidentes no reproducibles y evita “arreglos” manuales que erosionan confianza interna.
Una buena referencia conceptual: /es/insights/ingenieria/el-determinismo-como-ventaja-competitiva-en-trading-regulado.
Invariantes mínimos que deben sobrevivir al crecimiento
- Single source of truth para el estado de apuesta (y sus transiciones).
- Orden total o causal de eventos relevantes (al menos por entidad/stream).
- Idempotencia end-to-end (no por servicio aislado).
- Versionado explícito de reglas y catálogos (mercados, límites, settlement rules).
- Audit trail completo: input → decisión → efectos (wallet, exposición, settlement).
Anti-patrones de “escala” que rompen control
Escalar con microservicios sin modelo de estado
Dividir por dominios (bets, wallet, pricing, risk) sin definir:
- qué evento manda,
- quién es autoritativo,
- cómo se resuelven carreras, produce sistemas “rápidos” pero no deterministas.
Resultado: compensaciones manuales, reconciliaciones nocturnas, y parches para casos límite.
“Event-driven” sin disciplina de replay
Publicar eventos no alcanza. Si no existe:
- contrato de evento estable,
- evolución compatible,
- capacidad de replay con la misma semántica, el bus solo acelera la propagación de inconsistencias.
Optimizar latencia sacrificando consistencia
En in-play, es tentador confirmar con datos “casi actuales”. Pero si no se fija un snapshot (precio + estado de mercado + reloj lógico), el cashout y el settlement quedan apoyados en arenas movedizas.
Una arquitectura infrastructure-first para escalar complejidad
H3 1) Ledger de decisiones y estado autoritativo
Modelar el sportsbook como un sistema de decisiones registradas:
- aceptación/rechazo,
- precio aplicado,
- límite aplicado,
- suspensión vigente,
- resultado/settlement.
El “source of truth” debe permitir:
- reconstrucción por replay,
- comparación entre entornos,
- auditoría completa.
Esto no obliga a event sourcing puro, pero sí a un registro inmutable (append-only) de decisiones y sus inputs críticos.
H3 2) Particionamiento por entidad, no por capa
Particionar por claves que preserven orden local:
eventId/fixtureIdpara mercado in-play,accountIdpara wallet y límites,betIdpara ciclo de vida de apuesta.
Evitar particionar por “servicio” si eso rompe orden y obliga a coordinar transacciones distribuidas.
H3 3) Idempotencia como propiedad del flujo
Definir idempotencia desde el borde:
- un
commandId/requestIdglobal, - deduplicación consistente en puntos críticos (aceptación, wallet, settlement),
- reintentos seguros con semántica exacta.
Idempotencia local sin correlación global genera dobles cargos o dobles settles al primer incidente real.
H3 4) Gestión explícita de versiones (reglas, catálogos, feeds)
Cada decisión debe incluir referencias versionadas:
- versión de reglas de settlement,
- versión de catálogo de mercados,
- versión de modelo de límites/riesgo,
- fuente de feed y versión de normalización.
Sin esto, el replay no reproduce decisiones: solo reproduce “eventos”, no semántica.
H3 5) Observabilidad orientada a estado, no solo a métricas
Además de latencia/errores:
- divergencia de estado entre componentes (comparadores automáticos),
- backlog por partición,
- tasa de replays/reprocesos,
- checks de invariantes (por ejemplo: “una apuesta settled debe tener transacción wallet settled”).
Cuando el sistema crece, la pregunta no es “¿está arriba?” sino “¿está coherente?”.
Cómo evaluar escalabilidad real (criterios operativos)
Pruebas que importan
- Replay determinista: reproducir un día de eventos y obtener exactamente el mismo ledger de decisiones.
- Chaos parcial: caídas de feed, delays, duplicados, reordenamiento; validar invariantes.
- Migraciones con doble escritura: comparar estados y resultados antes del corte.
- Picos realistas: in-play con suspensiones rápidas, cashout masivo y settlements concurrentes.
Señales de deuda peligrosa
- reconciliaciones frecuentes entre wallet y bets;
- “fix scripts” recurrentes;
- incidentes que no se pueden reproducir;
- dependencia de humanos para resolver carreras (suspensión vs aceptación, cashout vs settlement).
Key takeaways
- Escalar un sportsbook es escalar control, no TPS.
- El riesgo principal es la deriva de estado y la pérdida de determinismo.
- La arquitectura debe priorizar ledger autoritativo, particionamiento correcto, idempotencia end-to-end y versionado.
- Observabilidad efectiva mide coherencia, no solo disponibilidad.
Lecturas internas recomendadas
- Deriva de estado en tiempo real: /es/insights/ingenieria/deriva-de-estado-el-modo-de-falla-silencioso-en-sistemas-de-apuestas-en-tiempo-real
- Determinismo en trading regulado: /es/insights/ingenieria/el-determinismo-como-ventaja-competitiva-en-trading-regulado
- Más engineering insights: /es/insights