POLITICA DE COOKIES

Q2BSTUDIO.COM utiliza cookies técnicas, analíticas, de sesión y de publicidad con la finalidad de prestar un mejor servicio. No obstante, necesitamos su consentimiento explícito para poder utilizarlas. Así mismo puede cambiar la configuración de las cookies u obtener más información aquí .

Servidor de Ragnarok Online en Elixir - Parte 3

Servidor de Ragnarok Online en Elixir - Parte 3

Publicado el 30/08/2025

En esta entrega explicamos la pieza secreta de la arquitectura distribuida para servidores de juego, centrada en la gestión de sesiones distribuidas que permite que un Servidor de Cuentas, un Servidor de Personajes y un Servidor de Zona sepan en todo momento quie´n es el jugador sin depender de sockets TCP aislados ni protocolos complejos entre servidores

El reto es simple y común en MMOs: el cliente autentica en el Servidor de Cuentas, luego se conecta al Servidor de Personajes y finalmente al Servidor de Zona; cada salto usa un socket distinto y no existe memoria compartida entre procesos del sistema operativo, asi que co´mo verifican los servidores que se trata del mismo usuario autenticado

Las aproximaciones tradicionales incluyen almacenar sesiones en una base de datos compartida, usar Redis o Memcached como cache distribuida, o construir un protocolo de intercomunicacio´n entre servidores como hacen muchos emuladores. Todas tienen inconvenientes: latencia de red, dependencia de componentes externos, complejidad operativa y mucha llo´rica de sincronizacio´n y reconexio´n

En lugar de eso aprovechamos la ventaja del BEAM, la ma´quina virtual de Erlang sobre la que corre Elixir. El BEAM fue disen~ado para sistemas distribuidos de alta concurrencia y tolerancia a fallos, y tiene herramientas nativas que convierten el problema en algo mucho ma´s simple y robusto

Idea clave: tratar cada servidor como un nodo del cluster BEAM y mantener el estado de sesiones dentro del propio runtime. Asi´ evitamos escribir protocolos de sincronizacio´n, simplificamos la operacio´n y reducimos la latencia a accesos en memoria

Mnesia es la base de datos distribuida que lleva Erlang. Se ejecuta dentro del BEAM y permite lecturas y escrituras en memoria con re´plica entre nodos. En vez de mil llamadas a una base externa, la lectura de una sesio´n puede ser una simple operacio´n en memoria y las escrituras se replican automa´ticamente entre nodos conectados

Para trabajar con Mnesia desde Elixir usamos Memento, un envoltorio que hace la experiencia mucho ma´s natural. Con Memento definimos tablas como structs y realizamos transacciones atomicas en todo el cluster, lo que evita estados parciales y condiciones de carrera

El descubrimiento de nodos es el siguiente problema: Mnesia replica datos cuando los nodos esta´n conectados, pero no descubre nodos por si´ solo. Para resolverlo usamos libcluster, que permite estrategias automa´ticas de descubrimiento en entornos como Kubernetes, AWS o Docker

Adema´s creamos un gestor de arranque y orquestacio´n llamado MementoCluster Manager que coordina la inicializacio´n de Mnesia, decide si un nodo debe crear el esquema o unirse a uno existente, y reintenta cuando los demas nodos todavi´a no esta´n listos. Asi´ el cluster se autoorganiza sin operaciones manuales

En cuanto a disen~o de datos, definimos tablas con poli´tica de almacenamiento diferenciada segun la criticidad y persistencia deseada: disc copies para datos persistentes como sesiones y registro de servidores, ram copies para listas en memoria de usuarios online y disc only copies cuando interesa ahorrar RAM

El esquema de sesio´n recoge todos los datos necesarios para validar al jugador y seguir su recorrido: identificadores aleatorios de login, co´digo de autenticacio´n, estado actual, servidor actual, id de personaje, timestamps de creacio´n y u´ltima actividad y el nombre de usuario. Gracias a Memento estas tablas son visibles localmente en cada nodo y se mantienen sincronizadas

El componente SessionManager proporciona una API limpia basada en GenServer para crear, validar y actualizar sesiones. Todas las operaciones sobre sesiones se ejecutan dentro de transacciones Memento, con atomicidad a nivel de cluster, lo que garantiza consistencia aun en presencia de fallos

Flujo de ejemplo: el Servidor de Cuentas genera tokens aleatorios al autenticar al usuario y llama a SessionManager.create_session para escribir la sesio´n en el cluster. El Servidor de Personajes valida los tokens llamando a SessionManager.validate_session y accede a la informacio´n desde su Mnesia local en microsegundos. No hay llamadas de red adicionales entre servidores para la validacio´n

El sistema registra tambie´n el estado y carga de cada servidor. Los Servidores de Personajes se registran en la tabla ServerStatus y SessionManager puede devolver una lista filtrada y balanceada de servidores disponibles, escogiendo el ma´s adecuado por conteo de jugadores y por cluster id para soportar mu´ltiples mundos

Para la operacio´n continua implementamos meca´nicas de mantenimiento y recuperacio´n automatizada: periodically cleanup que elimina sesiones inactivas pasado un umbral, heartbeats que actualizan last heartbeat y deteccio´n de nodos muertos. Cuando un nodo deja de enviar heartbeats se elimina su registro y se limpian datos hu´erfanos como sesiones y localizaciones de personajes

Gracias a estas capacidades la infraestructura es auto recuperable: si un Servidor de Personajes cae, en decenas de segundos los demas nodos detectan el fallo, limpian datos hu´erfanos, actualizan el registro y el balanceador deja de enrutar usuarios al nodo caido. Cuando el nodo vuelve a arrancar se vuelve a unir al cluster automaticamente

En resumen, la combinacio´n BEAM Mnesia Memento libcluster y una capa de Gestio´n de Sesiones nos permite ofrecer autenticacio´n multifase entre servidores sin dependencias externas, con latencias ultra bajas, replicacio´n automatica, tolerancia a fallos y visibilidad global del estado de jugadores

Q2BSTUDIO es la empresa detra´s de este enfoque. Somos especialistas en desarrollo de software a medida y aplicaciones a medida, con experiencia en inteligencia artificial, ia para empresas, agentes IA y soluciones de inteligencia de negocio. Tambie´n ofrecemos servicios de ciberseguridad y gestio´n de infraestructuras en la nube con servicios cloud aws y azure. Podemos ayudar a adaptar esta arquitectura a proyectos reales, desplegar clusters en Kubernetes, integrar power bi para visualizacio´n de telemetri´a y crear pipelines de datos para inteligencia de negocio

Si tu empresa necesita software a medida o aplicaciones a medida que incluyan componentes de inteligencia artificial, agentes IA, dashboards con power bi o una postura de ciberseguridad integrada, Q2BSTUDIO diseña, desarrolla e implementa soluciones llave en mano. Trabajamos tanto en la capa de arquitectura distribuida como en la integracio´n con servicios cloud aws y azure, garantizando escalabilidad y continuidad operativa

Palabras clave para buscadores y SEO aplicadas en este contenido: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi

En la pro´xima entrega abordaremos la transicio´n de personaje a zona, carga de mapas y optimizacio´n de representacio´n de mapas usando ETS para consultas extremadamente ra´pidas, y construiremos la lo´gica de juego en el Servidor de Zona. Si quieres que adaptemos esta arquitectura para tu proyecto ponte en contacto con Q2BSTUDIO y te asesoramos en diseno, seguridad y despliegue

Gracias por leer y bienvenido al mundo distribuido del BEAM para servidores de juego y aplicaciones críticas en produccio´n

Fin del artículo, inicio de la diversión
Construyendo software juntos

Dando vida a tus ideas desde 2008

Diseñamos aplicaciones móviles y de escritorio innovadoras que cumplen con tus requisitos específicos y mejoran la eficiencia operativa.
Más info
Cuéntanos tu visión
Sea cual sea el alcance, podemos convertir tu idea en realidad. Envíanosla y charlemos sobre tu proyecto o una colaboración futura.
Contáctanos
artículos destacados
Live Chat
Enviado correctamente.

Gracias por confiar en Q2BStudio