Failover, replicación y planes de DR para el casino
1) Objetivos de negocio: RTO/RPO y flow crítico
RTO (cuánto tiempo el servicio puede no estar disponible): inicio de sesión/apuesta/depósito - segundos/minutos; Informes - reloj.
RPO (cuántos datos se pueden perder): monedero/transacciones - ~ 0-30 segundos; telemetría - minutos.
Flow crítico: inicio de sesión, depósito/retiro, apuesta/settlement, KYC/AML-salchichas, webhooks PSP/proveedores de juegos.
2) Patrones arquitectónicos de tolerancia a fallas
Active-Active (multi-región): ambas regiones manejan el tráfico; baja RTO/RPO, consistencia compleja.
Active-Standby: una región en funcionamiento, la segunda caliente; estado más fácil, minutos RTO.
Cell-based: aislamiento por «celdas» (market/brand), los incidentes locales no lo matan todo.
Edge-pie: Anycast CDN/WAF → gateways regionales → clústeres de aplicaciones → BD/caché con replicación.
3) Gestión de tráfico y failover de red
Anycast + CDN/WAF: absorción de L3/4/7, cheque de salud en origin.
DNS Feilover (bajo TTL, valor múltiple), Traffic Manager/GSLB por métricas de salud.
Anuncio BGP a través de un proveedor anti-DDoS para un cambio rápido de ruta.
Cheque de salud (lógica de ejemplo):
if p95_latency>threshold          5xx_rate>threshold          synthetic_login_fail:
drain(region_A); shift(traffic->region_B, ramp=5min)4) Datos: billetera, pedidos, apuestas
La fuente de la verdad es el registro de cableado (ledger): sólo append, idempotencia por 'operation _ id'.
Negociación: reconciliation-jobs periódicos entre ledger, PSP y proveedores de juegos.
Anti-toma: idempotency-llaves para depósitos/embutidos/pagos; deduplicación en outbox/inbox.
5) Replicación de la DB: opciones y compromisos
Sincronizado físico (semi-sync): RPO mínimo, riesgo de retrasos - aplicar puntualmente (monedero).
Asincrónico: mayor rendimiento/simplicidad, RPO segundos-minutos - bajo metadatos de juego, referencias.
Lógico (CDC → streaming a otra región): selectividad flexible, conveniente para motores cruzados y análisis.
Cachi (Redis/Memcached): no como fuente de la verdad; réplica/snapshots, lanzamientos cálidos.
PITR: registros continuos (WAL/redo) en almacenamiento offsite, ventana de recuperación ≥ 7-30 días.
6) Consistencia y patrones de negociación
Saga + Outbox: transacciones comerciales como cadena de pasos, la publicación de eventos es atómica con un registro en la DB.
Exactly-once «por sentido»: idempotencia de las operaciones, control de las versiones de balance (bloqueo optimístico).
Consistencia eventual en flows no clave (tablero de liderazgo, analítica); strong para el dinero.
7) Componentes y su failover
API/backend
Contenedores de Estatles, Auto Scale, Blue-Green/Canary; confecciones a través del almacenamiento (con versionamiento).
Colas/streams
Clústeres de quórum (N = 3/5), réplica cruzada AZ; directivas de repetición y cola dlt.
Billetera DB
Primari en Región A, réplica sincronizada en A (otra AZ), asíncrona en Región B; promote automático con split-brain prohibido - sólo manual/script con check-list.
Archivos/artefactos CUS
Almacenamiento de objetos versionados, réplica regional cruzada/CRR, claves en KMS.
WebSocket/Real-time
Charding por llaves (table/game/market), sticky-routing; con feilover - resubscribe con rejoin-token.
8) Pagos y proveedores de juegos: muchas fuentes de verdad
Feilover PSP: un mínimo de 2 proveedores por cada método (tarjeta, billetera, cripto).
Porcentaje de enrutamiento por SLA/costo/banlists BIN; apagar el PSP degradante por la máquina.
Proveedores de juegos: canales de respaldo/ASN allow-list, claves individuales a las regiones, aislamiento de tiempos de espera.
9) Webhooks y embutidos: recepción y reproducción sostenidas
Inbox-pattern: aceptamos webhook → verificamos la firma/NMAS → escribimos en immutable-inbox → procesamos el worker idempotentemente.
Retrés de proveedores: backoff + dedoop por 'event _ id '/' signature'.
En DR: una réplica de inbox con control de orden (txn → settlement).
10) Backups: estrategia 3-2-1 y verificación de recuperación
3 copias/2 medios/1 offsite (y 1 fuera de línea/WORM para registros críticos).
Horarios: snapshots diarios + registros permanentes; prueba-restore semanal en el stand «oscuro».
Catálogos de recuperación: «cómo levantar la cartera en el momento t- Δ».
11) Plan de DR: roles, escenarios, comunicaciones
Роли: Incident Commander, Comms, DB Lead, App Lead, Payments/Game PM, SRE Oncall.
Canales: war-room, página de estado, plantillas de mensajes a sapport/partners/afiliados.
Scripts (mínimo):- Pérdida de AZ, pérdida de región, inaccesibilidad de PSP, caída del clúster de BD, degradación del proveedor de juegos, fuga de claves, 5xx masivo.
12) Ejemplo de matriz de scripts DR
13) Runbook 'y y automatización
Botón «DR-cutover»: secuencia de pasos con validación (freeze writes → promote → warm caches → ramp traffic).
Scripts de comprobación de integridad: conciliar sumas por ledger/monedero, consistencia de balances.
Feature-flags: rápido disable reportes/exportaciones/dashboards pesados durante el accidente.
14) Observabilidad para Feover
SLO-métricas como desencadenantes: inicio de sesión, depósito, apuesta, lanzamiento del juego.
Технические: replication-lag, WAL-shipping, queue-lag, 5xx, p95, SYN backlog, WebSocket disconnects.
Escenarios Synthetic de otras regiones: inicio de sesión/depósito/apuesta cada minuto.
End-to-end tracks, etiquetas 'region', 'psp', 'game _ provider'.
15) Enseñanzas Chaos/DR
GameDay trimestral: desactivación de AZ, degradación de PSP, «pérdida» de nodo de BD, parada de cola.
Retrospectiva: tiempo de toma de decisiones, alertas faltantes, ruido, cuellos de botella.
Ajuste de RTO/RPO y automatización basada en hechos, no en «sensaciones».
16) Seguridad y cumplimiento
Claves/secretos en KMS/HSM (regional cruzada), rotación y control dual.
WORM/immutabilidad para registros de auditoría y transacciones.
DPA/contratos con PSP/proveedores en compromisos SLA/DR y puntos de contacto 24 × 7.
17) Ejemplo de política de Feilover mínima (pseudocódigo)
on Incident(type="REGION_DOWN"):
freeze_non_critical_writes()
promote_db(region=B)
verify_ledger_consistency()
warm_caches(region=B)
route_traffic(region=B, ramp=10%)
for step in [25%, 50%, 100%]:
if SLO_green(): ramp(step) else rollback()
announce_statuspage()18) Lista de verificación de preparación (prod-ready)
- Se definen RTO/RPO por flow; aceptados por el negocio.
- Mínimo de multi-AZ; Multi-región para monedero, inicio de sesión y pagos.
- Ledger + idempotencia (keys) + outbox/inbox; reconciliation según lo programado.
- Replicación DB: sync localmente, async en DR; PITR está activado, restore está validado.
- Dos PSP por método, política de routing y claves de prueba; proveedores de juegos - alternativas.
- DNS/GSLB/Anycast, cheques de salud y sintéticos, bajo TTL.
- Runbook 'y «botón DR-cutover», características-flags para la degradación.
- SLO/alertas/senderismo; panel de estado DR.
- Ejercicios trimestrales de RD + retro; contactos actualizados 24 × 7.
Resumen
Una plataforma iGaming fiable se construye en torno a un circuito monetario: un registro de cableado con idempotencia, un feilover predecible, replicación verificable y ejercicios de DR regulares. Divida el sistema en celdas y regiones, automatice el cutover, mantenga dos proveedores de juegos PSP y de repuesto, vigile el SLO y la integridad del ledger, e incluso un accidente importante se convertirá en un evento manejable sin pérdida de confianza y dinero.
