Interrupción del servicio de Destiny 2 y regresión

11 FEB, 2020 - Destiny Dev Team

Hoy temprano (martes 11 de febrero), tras el lanzamiento del hotfix 2.7.1.1, se nos informó del resurgimiento de un problema que causó que una fracción de los jugadores perdieran divisas y materiales. Esto se presenta luego de la primera ocurrencia de este problema, que causó que todos los jugadores perdieran divisas y materiales el 28 de enero con el lanzamiento del hotfix 2.7.1, resultando en regresión de las cuentas de jugador. Debido este último incidente, hemos tomado medidas similares y regresamos cuentas al estado que tenían a las 8:30 a.m. (Hora del Pacífico), antes del lanzamiento de 2.7.1.1.

Ya que ambos incidentes tienen la misma causa y el mismo efecto en nuestros jugadores, y teniendo en cuenta que ambos incidentes se dieron dentro de un periodo corto de tiempo; queríamos mostrar a ustedes el panorama completo de cuál fue el error, cómo lo reparamos y cómo nos aseguraremos de que no vuelva a pasar. Para empezar, veamos qué causó el problema en primer lugar: un error de juego relacionado con la gestión de inventario y una serie de configuraciones de servidor que reintrodujeron el error cuando ya había sido reparado.

Gestión de inventario

En Destiny 2, las aventuras son tratadas de manera similar como otros elementos del inventario, tal como las divisas y los materiales. Todos los objetos tienen una marca de tiempo, definida por el momento cuando se añaden los objetos por primera vez al inventario del jugador. Estas marcas de tiempo sirven para organizar las aventuras de acuerdo al orden en que fueron adquiridas. El juego limpia el inventario del jugador en cada inicio de sesión, para que sea coherente con cualquier cambio al contenido, como la cantidad máxima de objetos de un tipo determinado que se puedan tener.

Hace unos meses, los jugadores reportaron que las aventuras no estaban siendo organizadas adecuadamente y quisimos reparar eso. Nuestro equipo investigó y descubrió que el proceso de limpieza estaba reiniciando las marcas de tiempo de un grupo de aventuras, lo que afectaba el orden cronológico. Decidimos reparar esto por medio de desactivar la función de reinicio de marcas de tiempo en las aventuras. En teoría, este arreglo sonaba lógico pero por medio de sutiles efectos secundarios, terminó afectando negativamente el proceso de limpieza. El resultado final es que el juego calculaba erróneamente la capacidad máxima de objetos agrupables (como divisas y materiales), causando que se perdieran si pasaban de ese límite. Sabíamos que este era un código crucial y, según nuestros procesos regulares, asignamos dos expertos en el área para revisar el código. Desafortunadamente, no detectamos el error.

Unos días después, nuestros equipos internos de pruebas notaron el problema. Sin embargo, concluimos erróneamente que fue causado por un fallo de instrumentación en los flujos de depuración que usamos en las pruebas, y no un error real dentro del juego. Creyendo que habíamos hecho nuestro trabajo, el problema entró en línea en el 2.7.1. Una vez se identificó el problema en el juego en línea, lo siguiente fue determinar cómo repararlo, lo que nos lleva al siguiente punto: servidores de juego y sus configuraciones.

Configuraciones de servidores

Antes de todo lanzamiento mayor (ejemplo, Bastión de Sombras) hacemos pruebas de uso exhaustivas para tener una imagen del comportamiento de los usuarios y su impacto en nuestra arquitectura de servicio. Ya que no hay forma de simular exactamente el comportamiento de millones de usuarios, complementamos estas pruebas monitoreando de cerca las estadísticas de servicio tras el lanzamiento.

En octubre, para poder lidiar con la carga incrementada de jugadores y procesamiento por el lanzamiento de Bastión de Sombras, habilitamos servidores adicionales (estos llamados WorldServers); más de los que habíamos usado antes para esta tarea. Controlar todos estos servidores tuvo algunos efectos secundarios que monitoreamos pero fueron generalmente invisibles para los jugadores. Por ejemplo, un problema fue que una fracción (menos del 1%) de estos servidores se bloqueaban al iniciar, debido a la cantidad de servidores más allá de las capacidades de una de las bases de datos de respaldo. Nuestra solución para esto fue simplemente reiniciar manualmente los servidores bloqueados cada vez que detectábamos el problema y nos pareció que esto trataba con problema sin efectos discernibles para los jugadores.

Ahora vamos a hace dos semanas. El 2.7.1 tenía el problema antes mencionado del error que causaba corrupción en la información de personaje, resultando en nuestra primera regresión de personajes en toda la historia. Para solucionar esto rápidamente, aplicamos una revisión a los servidores en lugar de desplegar una configuración del programa completo del juego. Esto implicó hacer un cambio a una configuración de servidor que el programa usaba para procesar la información de personaje y reiniciar los WorldServers para implementar ese cambio. 

Vamos adelante al 11 de febrero, cuando arrancamos la actualización 2.7.1.1 que coincide con el lanzamiento de los Días Carmesí. Tras el lanzamiento, algunos de los WorldServers se bloquearon otra vez debido a la alta cantidad de servidores iniciando al tiempo. De nuevo, reiniciamos esos servidores manualmente, creyendo que todo andaba bien. Nos equivocamos. 

Sin nosotros saberlo, ese bloqueo causó que los WorldServers no aplicaran el arreglo previamente hecho al daño de información de personaje. Aquello implicó que una fracción de los WorldServers estuvieran corriendo un programa antiguo y el error que dañaba la información de personaje. Tenemos sistemas de verificación que detectan este tipo de incongruencias entre configuraciones pero al reiniciar los WorldServers tras los bloqueos, los servidores omitieron el proceso de verificación. Antes de la mañana del 11 creíamos que omitir estas anulaciones y verificaciones era imposible.

Como parte de nuestras prácticas regulares de verificación de una nueva versión, nuestro equipo usa cuentas de prueba para verificar la experiencia de juego. Debido a que tenemos cientos de servidores en nuestro ambiente de producción, cada prueba que hicimos tuvo la (mala) suerte de darse en los servidores "buenos", y ninguna prueba se dio en la fracción de servidores en malas condiciones. Así que dimos el visto bueno.

Hoy, luego de que el juego entrara en línea tras el despliegue del 2.7.1.1, empezamos a recibir reportes de los jugadores de pérdida de divisas. El equipo inicio la investigación de inmediato y desconectó el juego a las 10:30 a. m. (Hora del Pacífico). En ese tiempo, cientos de miles de jugadores habían iniciado sesión en el juego o habían tenido acceso a sus personajes a través de terceros. Nuestra investigación reveló lo que creíamos imposible: un número pequeño de los WorldServers habían iniciado sin la configuración correcta que reparaba el daño de datos en 2.7.1. Desafortunadamente, cualquiera que haya tenido acceso a sus personajes con estos servidores desactualizados se encontró con ese problema de daño de información.

Una vez determinamos que este era el mismo problema ocurrido el 28 de enero y entendimos cómo ocurrió, el equipo decidió que el mejor camino a seguir era —en lugar de intentar identificar cada cuenta afectada a riesgo de omitir algo en ese proceso— restaurar toda la información de personaje desde el respaldo hecho justo antes de desplegar el 2.7.1.1. 


Medidas preventivas

El equipo ha identificado una serie de medidas protectoras adicionales para evitar este problema en el futuro 

1) Añadimos medidas protectoras adicionales a nuestros procesos de "revisión en caliente" de nuestros servidores para impedir que inicien con una versión inesperada. Este cambio ya está en funcionamiento desde que reinició el juego.
2) Solucionamos el problema que hacía que una fracción de los WorldServers se bloquearan al iniciar. Ese arreglo se aplicará con la Temporada 10. 
3) El arreglo permanente del daño de datos de personaje se implementará en la próxima actualización como un cambio ejecutable, eliminando la necesidad de anular la configuración. (Desafortunadamente, el hotfix 2.7.1.1 ya llevaba mucho tiempo como para beneficiarse de esto)
4) Planeando al futuro, estamos investigando maneras de acelerar nuestros mecanismos de regresión y recuperación.
5) En un lanzamiento futuro, atenderemos el problema que hace que los servidores omitan cargar información de configuración.
6) También añadiremos más protecciones al programa de limpieza al inicio de sesión, para así evitar errores futuros en un área tan crítica.
7) Estamos mejorando nuestras metodologías de desarrollo para detectar problemas como este temprano en la línea de producción. 

Con la regresión del 11 de febrero, todas las cuentas de personaje estarán en el estado que tenían a las 8:30 a. m. (Hora del Pacífico). Además, el equipo está trabajando duro preparando el hotfix 2.7.1.2 con fecha tentativa de lanzamiento el 13 de febrero. También valga notar que este hotfix solucionará el problema del empuñasoles infinito.

Sabemos que la interrupción de servicio del 11 de febrero y la regresión de personajes ha sido frustrante para ustedes, más con el lanzamiento de los Días Carmesí; para nosotros también ha sido frustrante al darnos cuenta que este es un problema que pudimos haber evitado. Pedimos disculpas por la frustración e inconvenientes que esto haya causado y seguiremos trabajando para impedir que este tipo de problemas se presenten otra vez. Como siempre, si tienen algún problema con su experiencia de juego en Destiny, por favor contáctennos en nuestra página de ayuda de Bungie y en Twitter @BungieHelp ¡Muchas gracias por su paciencia!

Este sitio utiliza cookies para brindarte la mejor experiencia de usuario posible. Al hacer clic en 'Aceptar', aceptas las políticas documentadas en Política de cookies y Política de privacidad.