Los MMORPG, algunos MOBA como League of Legends o incluso StarCraft 2 generalmente te obligan a elegir un servidor. Por lo general, son EE. UU., UE y MAR, en MMORPG, muchos por ubicación. Puedo ver que eso era necesario hace unos años, pero ahora con el advenimiento de AWS y ofertas similares que le permiten escalar sin problemas su "potencia de servidor", ¿por qué todavía hay servidores separados?
Mi línea de pensamiento es así (usando Star Wars: The Old Republic como ejemplo): - Siempre estás en un planeta, una "instancia" aislada de otros planetas. - Si hay demasiadas personas en un planeta, SW: TOR crea una nueva instancia del mundo y pone a los jugadores allí. - Si abandonas el mundo / cambias de instancia tienes una pantalla de carga
Entonces, ¿por qué el juego no puede crear una instancia para este planeta? Esta instancia (y solo esta) tiene sus datos actuales en su base de datos y gestiona x jugadores. Tan pronto como los jugadores x-50 estén en esta instancia, se encenderá un nuevo servidor y se generarán nuevas personas en esa instancia. Los 50 lugares están reservados para cambiar a su grupo, etc.
Podría haber una instancia para que las tres regiones principales mantengan la latencia baja, pero le permitiría seguir jugando con otros jugadores, es decir, SEA, si puede vivir con un retraso de 140 ms (que todavía no es nada).
Cada vez que cambia una instancia o viaja a otro mundo, su servidor actual entrega todos sus datos al siguiente servidor, asegurándose de que no necesita una gran base de datos centralizada. Todavía podría tener uno que reciba actualizaciones periódicamente para fines de análisis.
Cuando cierra sesión o los servidores pierden la conexión, los datos podrían transferirse a una base de datos masiva que está optimizada para almacenar los datos. Los servidores de instancias pueden optimizarse para un alto rendimiento.
¿Hay alguna razón en particular para que esto no funcione? ¿Hay otros problemas que me faltan?
fuente
Respuestas:
AWS no es una solución tan obvia como parece. Puede ser costoso, en algunos casos más que usar centros de datos internos (para un editor, el costo de estos puede amortizarse en múltiples productos, por ejemplo). Además, podría haber preocupación sobre el almacenamiento de archivos binarios y registros sensibles en el hardware fuera del control de uno. Finalmente, el poder de cómputo real no siempre es la razón para segregar la población de "servidores" en los MMO.
Guild Wars 2, de hecho, hace algo muy similar a esto. Los mapas se simulan mediante procesos de servidor individuales, y las instancias de desbordamiento se crean según sea necesario según el límite de población del mapa y algunas heurísticas para el rendimiento del mapa.
Guild Wars 2 tiene dos centros de datos principales, uno en los EE. UU. Y otro en Europa: existe una conversación cruzada entre esos centros de datos (principalmente para los puestos comerciales y los sistemas comerciales), pero en general existen en esa configuración, por lo que los jugadores en Alemania, Francia, etc., no tienen que sufrir la mayor latencia de los servidores de juegos de EE. UU. Dentro del centro de datos, los jugadores se clasifican en "mundos de origen" (o "fragmentos" en términos vernáculos); Pero una de las razones por las que se hace esto es para minimizar la cantidad de jugadores que un cliente puede ver y necesita informarles. El aspecto del lado del cliente de ese problema no se resolverá escalando a más hardware de servidor. La explosión combinatoria del lado del servidor de rutas de informes adicionales podría ser,
Te faltan bastantes cosas, pero en su mayoría son detalles (y no explicaré cómo los manejamos de todos modos, ya que se consideran secretos comerciales) que no son relevantes para una pregunta de tipo general de tan alto nivel. Creo que la falla más grande en su propuesta es tratar de entregar los datos del jugador al nuevo servidor cuando un jugador transfiere. Ese es un problema complejo que no escalará bien, probablemente sea mejor en la práctica tener los datos de ese jugador en un sistema centralizado de servidores. Es bastante factible si no utiliza esas bases de datos y el almacén de registros de tiempo de ejecución primario para los datos.
fuente
Principalmente se trata de latencia.
En primer lugar, tener un servidor geográficamente cerca de usted reduce la latencia. Si el servidor está al otro lado del mundo, verá más latencia que si el servidor está a solo unos saltos de distancia.
En segundo lugar, servicios como AWS no están diseñados para el trabajo en tiempo real. Están diseñados para un alto rendimiento a expensas de un poco de latencia. Si su página web tarda 250ms más de lo normal en cargarse en una ocasión, a nadie le importa, pero si su juego tarda 250ms más de lo normal en procesar un mensaje, el juego puede verse seriamente afectado. Es por eso que los MMO casi siempre están alojados en hardware dedicado.
Pero también se trata del diseño del juego. Si parece que todo el mundo está en el mismo mundo pero tiene que dividir una zona cuando se llena demasiado, la gente se frustra porque no puede encontrar a sus amigos en los lugares de reunión designados. Este tipo de problema se extendería a gremios, batallas PvP masivas, etc. Los jugadores están acostumbrados a las instancias en estos días, pero hay ciertas áreas que se espera compartir. Si tiene servidores completamente separados, al menos no hay sorpresas aquí.
Finalmente, hay otros problemas tecnológicos a considerar. Incluso si cada instancia está bastante aislada de las demás, generalmente todavía hay varios servicios que necesitan comunicarse entre ellas. La comunicación entre servidores es difícil de hacer bien en software en tiempo real y ha dado lugar a varias vulnerabilidades y errores en los MMO en el pasado. En particular, entregar datos de jugadores autorizados de uno a otro es arriesgado. Por lo tanto, los desarrolladores a menudo se muestran cautelosos y han delineado claramente los límites entre los servidores, reduciendo la cantidad de tráfico que debe cruzarlos.
fuente
en realidad creo que la respuesta no es relacionada con la red o la arquitectura, sino con el juego, generalmente en este tipo de juegos hay eventos, y estos eventos se cronometran de acuerdo con los plazos más cómodos para las personas que juegan en el servidor, y eso es generalmente relacionado con la zona horaria donde vive la gente, por lo tanto, UE y EE. UU., etc.
Otra razón es crear una separación entre mundos para que si hay un grupo que es demasiado fuerte no arruine el juego para todos los que juegan, y siempre puedes moverte a un mundo menos "desafiante".
Por el lado de la capacidad de la CPU del servidor, aunque las máquinas de hoy en día son bastante fuertes, siempre hay un límite de lo que una máquina puede manejar, por lo que es necesario crear una separación entre mundos para proteger el juego de la sobrecarga y permitir que las personas elijan qué mundo quieren jugar para que puedan jugar con sus amigos. Escalar horizontalmente no es solo cuestión de tener máquinas, necesita su aplicación para poder trabajar en una arquitectura escalada horizontalmente, y eso no es tan fácil cuando tiene miles de "acciones" que se llevan a cabo simultáneamente con una posible influencia mutua, y Necesito sincronizar todo. Creo que sería muy difícil hacerlo en varias máquinas.
fuente
¿Qué tiene de malo la autoinstalación? Cuando una ubicación se llena demasiado, solo pones a los 1000 jugadores en 10 instancias diferentes.
El problema con eso es que los juegos en línea tienen que ver con la comunidad. ¿Imagina que organizó una reunión con personas que conoció antes, y cuando están todos allí en el momento dado, no se ven porque están en diferentes instancias? Eso es molesto y rompe la inmersión.
¿Cómo se puede prevenir esto? Podría hacerse colocando a cada jugador en la misma instancia en todo momento, de modo que cuando se encuentre con otro jugador una vez, pueda estar seguro de encontrarse con este jugador nuevamente cuando ambos estén en la misma ubicación. Nunca conocerás a esos jugadores asignados a otras instancias.
Pero, ¿qué pasa cuando quieres conocer a alguien de fuera del juego? ¿Como un amigo de la vida real que invitaste a jugar contigo? Para permitir que eso suceda, necesitarías la capacidad de elegir la instancia al crear tu personaje. Me gusta de una lista de instancias con nombres fáciles de memorizar. Desafortunadamente, el nombre "instancia" parece confuso para el usuario promedio. No están acostumbrados a esa palabra. ¿No sería mejor usar un término al que están acostumbrados? Un término como ... ¿ Servidor ?
fuente