¿Debo mantener el servidor de inicio de sesión aparte del servidor de juegos?

15

Estoy pensando en hacer un servidor MMO, y he estado mirando cómo otros juegos estructuran su red. Una de las cosas que he notado es que siempre hay un servidor de inicio de sesión y luego los servidores del juego.

Todavía estoy decidiendo si debo hacer esto, pero me gustaría escuchar algunas opiniones primero. ¿Cuáles son las ventajas de esto y cómo se comunica el servidor de inicio de sesión con el servidor del juego para manejar los inicios de sesión?

JPiolho
fuente
1
La pregunta "¿Cómo se logra el equilibrio de carga en los MMO?" puede ser interesante: gamedev.stackexchange.com/q/5956/450
Hendrik Brummermann

Respuestas:

15

Creo que esto se debe principalmente al hecho de que el inicio de sesión y el manejo del juego son lógicamente más o menos independientes, por lo que generalmente se mantienen separados para un mejor desacoplamiento, un mantenimiento más fácil y escalabilidad. No necesariamente tienen que residir en diferentes servidores físicos, pueden ejecutarse tan bien como servicios independientes en la misma máquina. Si el tráfico crece demasiado, el servidor de inicio de sesión se puede mover fácilmente a otra máquina.

Además, los servidores de inicio de sesión son un posible vector de ataque, por lo que es bueno tenerlos separados desde un punto de vista de seguridad.

Internamente, diferentes servicios del lado del servidor pueden usar sockets regulares para comunicarse entre sí, ya sea en la misma máquina o en otra máquina en el clúster. Alternativamente, se podría usar un servidor de base de datos para mantener un indicador de 'ha iniciado sesión' para cada usuario.

Alexander Gessler
fuente
La mayoría de las veces veo ese indicador en el servidor de juegos db y dentro del servidor de inicio de sesión db, por lo que el servidor de inicio de sesión puede verificar entre sí y si logindb! = Gamerserverdb el usuario se desconecta.
daemonfire300
10

Un aspecto muy importante en el desarrollo de MMO es lograr la escalabilidad y permitir el equilibrio de carga.

La autenticación de usuarios mediante la verificación de credenciales, el estado de prohibición, el recuento de inicios de sesión fallidos recientes, etc. es una tarea que se puede hacer sin conocer nada de la lógica del juego o los datos del juego. Por lo tanto, es muy fácil mover eso a su propio clúster de servidores.

Además, los servidores de inicio de sesión son una "entrada" bien conocida para que el cliente contacte. Después de una autenticación exitosa, pueden enviar al cliente al servidor apropiado en el clúster del servidor de juegos. Este envío se puede hacer reenviando la conexión de red al servidor de juegos correcto o diciéndole al cliente que abra una nueva conexión a un servidor de juegos correcto.

Debe pensar en los recortes de su sistema para su distribución desde el principio. Es muy fácil ejecutar varias piezas en un servidor. Pero es bastante difícil dividir cosas que se han desarrollado como una sola unidad.

Hendrik Brummermann
fuente
2

Como ex jugador de WoW, mi experiencia fue que el servidor de inicio de sesión siempre fue el eslabón más débil de la cadena.

Los servidores mundiales generalmente eran impresionantemente estables, incluso manejando bastante bien la carga excepcional (por ejemplo, nuevas versiones de paquetes de expansión).

Pero los servidores de inicio de sesión nunca parecieron funcionar tan bien, y con frecuencia estarían inactivos mientras que los servidores del mundo estaban bien. (lo que significa que si pierdes la conexión en una redada / mazmorra, no puedes volver a entrar, ¡pero los otros jugadores te están esperando!)

Y ahora que el sistema de inicio de sesión de WoW se fusionó con Battle.Net, Starcraft 2 puede dejar de estar disponible cuando WoW está bajo una carga pesada (como sucedió durante un par de horas cuando se lanzó Cataclysm)

Entonces, si está creando un juego que tendrá un gran número de usuarios, la escalabilidad y el rendimiento del sistema de inicio de sesión también son muy importantes.

bluescrn
fuente
1
Supongo que los servidores de inicio de sesión son el objetivo principal de los ataques de fuerza bruta en las contraseñas, por lo que deben ser capaces de manejar bastante carga. Especialmente si el juego es tan popular que los atacantes comienzan a usar botnets (para evitar la limitación de velocidad por dirección IP) además de la suposición aleatoria normal de los nombres de usuario.
Hendrik Brummermann
No iniciar sesión y colocar a un jugador en el mundo puede tener múltiples razones. Puede ser el servidor de inicio de sesión / la base de datos de la cuenta. Pero puede ser causado por una falla al cargar la información del jugador desde la base de datos. O por una falla del sistema que hace el envío de jugadores a servidores mundiales, servidores de chat, ... Un firewall interno aún puede manejar conexiones conocidas pero puede que no pueda aplicar el conjunto de reglas para decidir sobre nuevas conexiones. Jugar a un jugador en el mundo es mucho más complejo que interactuar una vez que estás dentro.
Hendrik Brummermann