Todos los proyectos
Infraestructura y DevOps

SeaTyrants GameServer — Infraestructura MMORPG

Servidor de juego UDP de alta frecuencia en Kubernetes

Una infra MMORPG que sostiene 128 Hz, mapa a mapa, detrás de un proxy UDP.

La necesidad del cliente

Contexto

SeaTyrants es un MMORPG en tiempo real que debe atender a miles de jugadores con baja latencia y alta cadencia de servidor.

Problema

Ninguna infraestructura permitía dividir los mapas, mantener 128 Hz por tick y enrutar el tráfico UDP de forma escalable.

Objetivo

Construir una infraestructura Kubernetes capaz de escalar por mapa y sostener el tiempo real sobre la red UDP.

Lo que está en juego

  • Sostener una cadencia de 128 ticks por segundo en el servidor

  • Escalar horizontalmente mapa a mapa

  • Enrutar el tráfico UDP de forma fiable y eficiente

  • Gestionar la concurrencia (mutex, multi-threading) sin romper la cadencia

La solución propuesta

Qué se construyó

Una infra Kubernetes donde cada mapa corresponde a un pod dedicado, alimentada por un servidor UDP forkeado de ENET, un bus NATS orientado a eventos y un proxy UDP Quilkin en frente.

Por qué esta elección

Dividir por mapa permite escalar de forma independiente, Quilkin se encarga del enrutado UDP, NATS desacopla los servicios y ENET es uno de los protocolos UDP más sólidos para juegos en tiempo real.

Cómo responde a la necesidad

Un pod por mapa, multi-threading y mutexes en el proceso de juego, NATS para los eventos transversales, Quilkin para el enrutado UDP, balanceadores de carga del lado de la infra.

Funcionalidades clave

  • Un pod Kubernetes por mapa del juego

  • Servidor UDP basado en un fork de ENET

  • Cadencia de servidor a 128 Hz por tick

  • Bus de eventos NATS para la comunicación entre servicios

  • Proxy UDP Quilkin y balanceadores de carga en la infra

  • Sincronización mediante mutex y multi-threading

Resultados

  • Infra capaz de sostener el tiempo real para un MMORPG

  • Escalabilidad por mapa sin romper la cadencia del servidor

  • Arquitectura orientada a eventos lista para evolucionar

Stack técnico

Decisiones técnicas usadas en este proyecto.

KubernetesENET (fork)C / C++NATSQuilkinDockerLinux

¿Tienes una necesidad similar?

Hablemos de tu proyecto. Te ayudo a adaptar este enfoque a tu propio contexto.