GH GambleHub

Arquitectura de microservicios

1) Por qué microservicios en iGaming

Velocidad de cambio: lanzamientos independientes de los equipos (pagos, contenido, riesgo, torneos).
Fiabilidad: la falla de un servicio no valora todo el producto (límites de falla).
Escala: skale horizontal de dominios «calientes» (billetera, lobby, streams).
Cumplimiento: segregación de datos por regiones/jurisdicciones.

Cuando no vale: pequeño comando/volumen, sin prácticas DevOps, débil automatización de pruebas - entonces el monolito modular es mejor.

2) Dominios, límites y equipos (DDD + Topologies Team)

Contornos de dominio: Cuenta/Perfil, CUS/Cumplimiento, Pagos/Billetera, Contenido/Agregación de Juegos, Bonos/Misiones, Torneos, Marketing/CRM, Informes/BI.
Bounded Context = contrato sobre el modelo de datos y el lenguaje.
Flujos de cambios ↔ comando: un comando = un esquema + sus SLO.
BFF (Backend for Frontend): fachadas individuales bajo Web/Mobile/Partner para no recoger la «orquestación» en el cliente.

3) Comunicaciones: Sincrón vs asinchron

Sincrón (NAT/gRPC): cuando se necesita una respuesta inmediata (verificación de límites al depositar).
Asinchron (Kafka/NATS/SQS): eventos y procesos de fondo (acumulación de cashback, boletines, actualización de calificaciones).

Reglas:
  • Ruta crítica = mínimo de hopes de red.
  • Integración entre dominios - a través de eventos y APIs contractuales.
  • No construir «cadenas de 5 + llamadas sincrónicas» en línea → utilizar EDA/sagas.

4) Contratos y versificación

Contrato-primero: OpenAPI/AsyncAPI + Schema Registry (Avro/JSON Schema).
SemVer + compatibilidad: agregar campos no rompe clientes.
Contratos de conducción de consumo (CDC): verificaciones automáticas en CI (contra regresiones).
Política de depreciación: ventana de soporte (12-18 meses), telemetría según versiones antiguas.

5) Eventos, sagas y consistencia

Outbox/Transaction Log Tailing: registro atómico «datos + evento».

Patrones de saga:
  • Orquestación (coordinador central) para pagos/retiros.
  • Coreografía (reacción a eventos) para bonos/misiones.
  • Idempotencia: claves en 'entityId + action + nonce', almacenamiento del registro dedup.
  • Consistencia: «externa» - a través de eventos; «interno» - transacciones dentro del servicio.

6) Datos y almacenamiento

Principio «propio»: cada servicio posee su propio DB (aislamiento de circuitos).

Selección de almacenamiento por patrón de acceso:
  • Transacciones/balances - relacionales (PostgreSQL) con invariantes estrictos.
  • Eventos/registro - append-only (Kafka/Redpanda).
  • Caché/sesiones - Redis/KeyDB; Líderes - Redis Sorted Sets.
  • La búsqueda es OpenSearch/Elastic.
  • Proyecciones materializadas para lectura (CQRS): listas/informes rápidos.

7) Confiabilidad y sostenibilidad

Timeouts/Retry with jitter/Retry-budget sólo para operaciones idempotentes.
Circuit-breaker/Outlier-ejection entre servicios.
Bulkhead: grupos separados en «ruidosos» apestrimes.
Rate limits per-client/route, backpressure (503 + Retry-After).
Dead-letter + poison-message handling en colas.

8) Observabilidad (Observabilidad)

Seguimiento: OpenTelemetry ('trace _ id' a través de la shlyuz→servisy→BD).
Métricas: RPS, p50/p95/p99, error rate 4xx/5xx, saturación (CPU/amb/queue), métricas de negocio (TTP, TtW).
Registros: JSON estructural, enmascaramiento PII/PAN/IBAN, corulación por 'trace _ id'.
SLO/alertas: por ruta/función (por ejemplo, 'Depósito p95 ≤ 300 ms',' éxito ≥ 98. 5%`).

9) Seguridad y cumplimiento

Zero-Trust: mTLS servis↔servis (SPIFFE/SPIRE), certificados de vida corta.
AuthN/Z: OAuth2/JWT (aud/scope/amb), delimitación de roles atribuibles.
Secretos: KMS/Secrets Manager/Sealed Secrets, rotación de claves.
GDPR/localización de datos: clústeres regionales, geo-fencing en la puerta de enlace API.
Auditoría: registros sin cambios (WORM), seguimiento de acciones administrativas.

10) Implementación y lanzamientos

Contenedores/K8s: un servicio = un deploy; recursos/límites; PodDisruptionBudget.
CI/CD: linternas, pruebas de unidad/contrato/integ, scan de seguridad, SBOM.
Lanzamientos: canary/blue-green/shadow, migraciones de esquemas a través de expand-and-contract.
Auto scale: HPA por CPU + RPS + p95 + queue-depth; drain cuando se contrae.

11) Rendimiento y costo

Perfilando: p95/99 «por servicios y métodos», gráficos flame.
Caché: read-through/write-through; TTL/discapacidad por eventos.
Ubicación de datos: mantenga los datos calientes cerca del cálculo.
FinOps: target de carga 60-70%, "warm pools', auto-pausa de los workers inactivos.

12) Plantillas de dominio (iGaming)

12. 1 Pagos/Billetera

Servicios: 'payments-gw' (fachada), 'wallet', 'psp-adapters-', 'fraud-check'.
Flujo: 'init → reserve → capture/rollback' (saga).
События: `PaymentInitiated`, `PaymentAuthorized`, `PaymentSettled/Failed`.
Idempotencia: 'Idempotency-Key', dedoop en 'wallet'.

12. 2 CUS/Cumplimiento

Сервисы: `kyc-flow`, `doc-storage`, `sanctions-check`, `pep-screening`.
События: `KycSubmitted/Approved/Rejected`, `RiskScoreUpdated`.
Auditoría y ETA: cola de tareas, caso de tiempo en línea, post-acciones.

12. 3 Bonos/Misiones

Servicios: 'bonus-engine', 'wallet-bonus', 'elegibilidad'.
Coreografía: 'BetPlaced → BonusEngine → BonusGranted → WalletCredited'.
Protección contra abusos: subvenciones idempotent, límites, simulador de reglas.

12. 4 Torneos/Tablas de Liderazgo

Servicios: 'tournament-svc', 'scoring', 'leaderboard'.
Almacenamiento: Redis ZSET + «resbalón» periódico en OLAP.
События: `ScoreUpdated`, `TournamentClosed`, `RewardIssued`.

13) Ejemplo «contrato + evento» (simplificado)

OpenAPI (fragmento) - Wallet

yaml paths:
/v1/wallet/{userId}/credit:
post:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreditRequest'
responses:
'202': { description: 'Enqueued' }
components:
schemas:
CreditRequest:
type: object required: [amount, currency, reason, idempotencyKey]
properties:
amount: { type: number }
currency: { type: string, example: UAH }
reason: { type: string, enum: [Deposit, Bonus, Adjustment] }
idempotencyKey: { type: string }

AsyncAPI (fragmento) - evento

yaml channels:
wallet. credit. applied:
publish:
message:
name: WalletCreditApplied payload:
type: object required: [userId, amount, currency, sourceEventId]

14) Pruebas

Unit/Property-based para reglas de dominio.
CDC (Nat/Assertible) - Pruebas de contrato de proveedores/consumidores.
Integración con corredores locales (Testcontainers).
E2E flow crítico (registratsiya→depozit→start igry→vyvod).
Pruebas Chaos/Failover: desconexión PSP/caída del bróker/pérdida de zona.

15) Métricas y SLO (mínimo)

Disponibilidad de servicios: '≥99. 9% 'para pago/billetera.
Latency p95: API de ruta crítica ≤ 300-500 ms.
Error budget: 0. 1–0. 5% por trimestre, burn-alerts.
Colas: lead time evento (produce→consume), DLQ ≤ 0. 1%.
Negocios: TTP, TtW, FTD-éxito, KYC-TtV.

16) Hojas de cheques

Diseño de servicios

  • Límite de dominio claro y propietario de datos.
  • Contratos OpenAPI/AsyncAPI + esquemas en Registry.
  • SLO/alertas definidas; métricas/tracks/logs incorporados.
  • Políticas de taimautas/retraídos/idempotentes.
  • Migraciones de esquemas: expand-and-contract.

Antes

  • Las pruebas de integración de unidad/CDC/son verdes.
  • Ruta canaria y plan de retroceso.
  • Rate-limits/rutas de peso personalizadas.
  • Los secretos/claves/certificados son rotatorios.
  • Banderas de Ficha y follbacks preparados.

17) Anti-patrones

Red como bus de datos: cadenas síncronas profundas en lugar de eventos.
Un «dios» común -BD en todos los servicios.
Falta de idempotencia → doble amortización/devengo.
Lanzamientos oscuros sin telemetría y kill-switch.
Sesionalidad oculta (pegajosidad en todas partes en lugar de estado externo).
Contratos «en código» sin versión y CDC.
La lógica en la puerta de enlace API en lugar de los servicios (gateway = slim).

18) Migración desde el monolito (Strangler Fig)

1. Resaltar la fachada-pasarela y el primer contorno (por ejemplo, pagos).
2. Quita la lógica binaria (outbox) del monolito a los eventos.
3. Transfiera progresivamente los endpoints a un nuevo servicio (enrutamiento/pesos canarios).
4. Comprimir el monolito al «núcleo» y desactivar.

19) Pila e infraestructura (ejemplo)

Comunicaciones: NAT/gRPC, Kafka/NATS; Schema Registry.
Almacenamiento: PostgreSQL, Redis, OpenSearch, S3/MinIO; OLAP — ClickHouse/BigQuery.
Contenedores/orquestación: Docker, Kubernetes (Ingress/Gateway), Mesh de servicio (Istio/Linkerd) si es necesario.
Puerta de enlace: Envoy/Kong/Traefik/NGINX.
CI/CD: GitHub Actions/GitLab CI + ArgoCD/Flux; Pact/OWASP/ZAP.
Observability: OpenTelemetry, Prometheus, Tempo/Jaeger, Loki.

20) Parche final

Diseñe los límites según los dominios y la responsabilidad de los datos.
Sincrón - sólo donde se necesita una respuesta ahora; el resto son eventos.
Contratos/esquemas/CDC - seguro contra regresiones.
Sagas + outbox + idempotencia es la base de la fiabilidad.
La observabilidad y el SLO no son una opción, sino un criterio «listo».
Lanzamientos a través de canary/blue-green, migraciones - expand-and-contract.
Seguridad/cumplimiento: mTLS, JWT, KMS, datos regionales.
Primero el monolito modular, luego la evolución... si la escala y el equipo están listos.

Contact

Póngase en contacto

Escríbanos ante cualquier duda o necesidad de soporte.¡Siempre estamos listos para ayudarle!

Iniciar integración

El Email es obligatorio. Telegram o WhatsApp — opcionales.

Su nombre opcional
Email opcional
Asunto opcional
Mensaje opcional
Telegram opcional
@
Si indica Telegram, también le responderemos allí además del Email.
WhatsApp opcional
Formato: +código de país y número (por ejemplo, +34XXXXXXXXX).

Al hacer clic en el botón, usted acepta el tratamiento de sus datos.