Fortnite

Análisis detallado del MTL: Patio de juegos

18.7.2018
Por El equipo de Fortnite
¡Hola a todos!

Hace poco lanzamos inicialmente el MTL: Patio de juegos el 27 de junio, sobre las 10:00 CEST. A raíz de esto, notamos una sobrecarga en nuestro servicio de emparejamiento que provocó la caída de los modos predeterminados y de Patio de juegos.  Nos pusimos manos a la obra para devolver el servicio a su estado anterior y finalmente fuimos capaces de volver a activar el modo durante la madrugada del 3 de julio.

¿Qué ocurrió?
Nuestro emparejamiento se basa en un sistema llamado Servicio de emparejamiento (MMS en inglés), que se encarga de facilitar la "colaboración" entre jugadores que buscan unirse a una partida y un servidor dedicado disponible que pueda albergarla.  Cada nodo que conforma el sistema de emparejamiento tiene una gran lista de servidores dedicados abiertos con los que funcionar y que se distribuyen de forma aleatoria por región para conservar una cantidad proporcional de servidores libres en cada una.  Los jugadores conectados al MMS solicitan un servidor para su región y este asigna a los jugadores a un nodo para que dicho nodo seleccione un servidor libre de la lista para la región solicitada.

Como el modo Patio de juegos realiza emparejamientos por cada 1-4 personas en vez de 100, necesita entre 25 y 100 veces más partidas de lo normal dependiendo del tamaño del grupo.  Aunque pudimos ajustar un poco más los servidores virtuales por CPU física en el modo Patio de juegos, seguíamos teniendo que usar 15 veces más servidores que en el resto de modos.  Fuimos capaces de asegurar la capacidad total de los servidores, pero eso conllevó que la lista que gestiona cada nodo se hiciera 15 veces más larga.

Cuando un nodo del MMS no puede encontrar un servidor libre en la lista para la región solicitada, tiene que pedirle uno al resto de nodos a través de sus listas locales.  Y, si eres un nodo y tu lista se hace de pronto 15 veces más larga, todo va despacito.  Cuando tienes que revisar el resto de listas y estas también son 15 veces más largas, te ralentizas 15 veces por nodo, lo que se traduce en tiempos de ejecución que son órdenes de magnitud más largas de lo normal.  Cuando lanzamos Patio de juegos, la enorme demanda agotó rápidamente las listas locales en los nodos del MMS mucho más rápido de lo que el sistema podía actualizarlas.  Cada nodo corría hacia otro para solicitar servidores adicionales que no estaban todavía ahí o que al menos llevaba mucho tiempo seleccionar en una lista que no era local.  Los extensos tiempos de ejecución hicieron que la CPU tuviera un registro de solicitudes pendientes, lo que provocó un bucle de retroalimentación que acabó por detener lentamente el sistema.

¿Cómo lo arreglamos?
Lo primero que hicimos después de deshabilitar el modo fue dividir el MMS de Patio de juegos para que funcionara en su propio grupo de servicio.  El objetivo no era solo evitar que el atasco afectara a los modos básicos, sino también permitirnos hacer tantos cambios en el servicio como fueran necesarios mientas trabajábamos para recuperar Patio de juegos. Intentamos implementar un rediseño drástico y realizamos pruebas en todos los estadios hasta alcanzar los criterios aceptables para volver a activar el modo.

En cuanto identificamos la raíz del problema como la falta de sesiones en las listas locales, la solución fue otorgar al clúster la posibilidad de reequilibrar en masa las sesiones de otros nodos para garantizar que las búsquedas repetidas no fueran necesarias.  Como el sistema cambiaba constantemente la capacidad regional de los nodos con exceso a los que estaban escasos, la probabilidad de que un nodo se agotará en una región concreta y tuviera que buscar fuera de su lista local se redujo drásticamente.  Aunque en estos momentos no es un problema en los modos de juego principales de Battle Royale de Fortnite, se trata de una mejora que hemos implementado en el grupo del MMS principal que además blinda el sistema de cara al futuro.

Llevamos el proceso de pruebas de carga al límite al restructurar el MMS, ya que la escala de lo que estábamos intentando simular se alejaba enormemente del uso normal o de los patrones de pruebas.  Teníamos que poner en funcionamiento muchos millones de usuarios teóricos y soltarlos en el sistema MMS de Patio de juegos en avalancha para intentar saturar nuestro nuevo reequilibrador de sesiones.  Aunque el ciclo de cambios, pruebas y evaluación llevaba varias horas por bucle, nos permitió desarrollar y refinar el comportamiento del reequilibrio hasta el punto en el que pensamos que podría soportar el tráfico, además de identificar y corregir errores límite que podrían haber entorpecido los esfuerzos para reactivar Patio de juegos.

¿Qué hemos aprendido?
En resumen, hemos aprendido un montón de cosas sobre nuestro propio sistema de emparejamiento y sus fallos.  Hicimos planes y nos preparamos para lo que pensamos que serían el rendimiento y la capacidad sostenidos máximos del emparejamiento según la cantidad de jugadores (además de un margen de seguridad), pero no nos anticipamos debidamente al caso extremo inicial de la estampida de jugadores agotando las listas locales.

Al reiniciar el modo, hemos tenido una experiencia de aprendizaje adicional.  Decidimos reactivar Patio de juegos poco a poco en regiones y plataformas individuales, con el objetivo de reducir la carga inicial en el sistema y poder escalarlo.  De hecho, favorecimos justo lo contrario, ya que los jugadores cambiaban de región a aquellas que volvían a tener el modo y nos obligaban a ralentizar la reactivación a medida que gestionábamos los problemas de capacidad.  Las buenas noticias son que ahora tenemos mejor visibilidad que nunca de los recursos totales en la nube disponibles en Asia, ¡y queremos agradecerle a nuestros socios de servicios en la nube que trabajaron codo con codo para garantizar nuestra rápida adaptación!

El proceso para estabilizar Patio de juegos y devolverlo a los jugadores fue más duro de lo que nos hubiera gustado, pero nos sirvió de recordatorio sobre cómo los sistemas distribuidos de forma compleja pueden fallar de formas inimaginables.  Nos vimos obligados a realizar mejoras de emergencia en nuestro Servicio de emparejamiento, pero estos cambios serán útiles para el juego de cara al futuro a medida que la cantidad de jugadores sigue creciendo.