El 4 de septiembre de 2018th, lanzamos Operation Grim Sky en los servidores online activos. La actualización Grim Sky aportó mejoras en el flujo general de matchmaking para simplificar el proceso inicial de selección del servidor de juego. Después de su implementación, vimos un incremento en el número de errores de matchmaking, en comparación con los detectados en la fase del servidor de pruebas. Muchos jugadores, sobre todo de Norteamérica, no podían usar el sistema de matchmaking para unirse a las partidas.
Aquí tenéis un resumen de lo que ha pasado y las medidas que hemos tomado para corregir el problema.
Cómo es el proceso de matchmaking
Al elegir el botón “Multijugador” en cualquiera de los modos de juego online, se lanza un proceso de dos pasos.
Primero, el juego contacta con nuestro servicio de matchmaking y busca la mejor partida posible. Este paso, dependiendo del modo de juego, de tu rango y de cuántos jugadores haya online, puede durar de 10 a 60 segundos (la degeneración de matchmaking no afectaba a este paso del proceso ).
Segundo, el cliente intenta conectar con el servidor de juego. Es el punto en el que se daba la degeneración.
Las conexiones a nuestros servidores de juego son básicamente un intercambio de mensajes de tipo UDP (User Datagram Protocol) entre el cliente y el servidor. Desde una perspectiva de un nivel superior, son algo así:
El cliente negocia un canal de comunicación con el servidor, espera una ventana de acción (aproximadamente, 16 milisegundos) y luego empieza a enviar información (Hello) a través de ese canal.
Cómo lo descubrimos
Al investigar el problema, descubrimos que había un error anterior en el lado del servidor de la conexión: si el cuarto mensaje (Hello) llegaba al servidor de juego antes que el tercero (Acknowledge) en un espacio muy corto de tiempo , la conexión finalizaba en un error y no se recuperaba. Eso daba como resultado un error de tipo 6-0x00001000 (superado el tiempo de espera de la conexión).
En la mayoría de los casos, cuando los mensajes se enviaban en un orden determinado, se recibían en ese mismo orden. El reordenamiento de los mensajes no es habitual y el error no es frecuente, pero también debemos decir que algunas veces puede pasar en casos lógicos; por ejemplo, si el jugador tiene un firewall desconfigurado, lo que dificulta el seguimiento. Dicho de otra forma, una pequeña parte de los errores no es seria y es de esperar, pero otra gran parte no debería suceder y es algo anormal. Esa es la principal razón por la que no pudimos reconocer hasta dónde llegaba el problema durante la fase del servidor de pruebas, ya que la muestra (el número de usuarios) es mucho más pequeña.
Evolución del fallo
Uno de los cambios hechos en la operación Grim Sky es una mejora que hace que el cliente no espere mucho tiempo, y envíe los mensajes 3 y 4 de forma inmediata, aunque en orden, en muy poco tiempo. En muchos proveedores de servicios de internet, esto no tiene ningún efecto. Pero en algunos, los dos mensajes se mandan con tan poca diferencia de tiempo que en muchos casos se cambiaba el orden, lo que casi era una garantía de tener el error, en los jugadores con esos ISP. La razón está en la baja latencia de las conexiones con ese proveedor. En resumen, cuanto menor era la latencia de la conexión del jugador, más posibilidades había de que sucediera el error.
Por otro lado, si uno de los jugadores de un equipo no puede unirse a la partida, la fase de conexión al servidor de juego falla para todos los demás (2-0x0000D012). Este funcionamiento tiene como objetivo asegurar la integridad de los equipos en el matchmaking; sin embargo, con tantos jugadores afectados por el error inicial, se ha creado un efecto en cascada en los que se unían a un equipo de un jugador afectado por el problema.
Tras identificar y confirmar el problema, pudimos corregir el servidor de juego para asegurarnos de que este problema no vuelva a suceder de aquí en adelante.
Trabajando en la solución
Dedicamos los dos primeros días por comleto a intentar reproducir el problema, tal como entendíamos que era la situación en aquel momento. Pero los esfuerzos fueron en vano. No importaba cuántas situaciones diferentes de latencia, fluctuación o pérdida de paquetes probábamos; no podíamos reproducir el error con la certeza de saber que habíamos encontrado la raíz del problema. Gastr tiempo y recursos en intentar corregir algo que realmente no era la causa del problema no era bueno ni para nosotros ni para los jugadores, y solo servía para prolongar la vida del problema.
Afortunadamente, muchos jugadores se acercaron a nosotros para ofrecernos su ayuda. Trabajamos codo con codo con a algunos jugadores que experimentaban el error con una altísima frecuencia y, gracias a su generosidad y cooperación, por fin pudimos profundizar en nuestra investigación. En la segunda sesión de debug ya sabíamos que habíamos descubierto la fuente del problema y podíamos empezar a trabajar en la solución actual. Y el domingo por la tarde ya teníamos una corrección preparada; de modo que, tras hacer el lunes una sesión de depuración final con nuestros jugadores voluntarios para confirmar que el error había desaparecido, supimos que habíamos encontrado la solución. Programamos el lanzamiento de la corrección de inmediato, para que estuviera online el siguiente día laborable, el martes.
Próximos pasos
Uno de los principales problemas al que nos enfrentamos cuando buscábamos la causa del error era el hecho de que se lanzó al tiempo que una actualización de temporada. Y eso descartaba la opción de volver atrás, porque eso implicaba “deslanzar” la temporada completa.
De cara al futuro nos estamos preparando para mejorar nuestro proceso de lanzamiento de actualizaciones con cambios que nos permitan desplegar nuevo contenido, concretamente contenido de temporada, de forma independiente de los cambios de bajo nivel del juego, que no son contenido para el jugador. De esa forma, si se vuelve a producir un problema similar, podríamos dar marcha atrás si fuera necesario.
Queremos aprovechar esta oportunidad para mostrar nuestro profundo y sincero agradecimiento a todos esos jugadores que nos ofrecieron su tiempo y nos ayudaron a resolver el problema para toda la comunidad Rainbow Six. ¡Sois alucinantes!
-Además, seguiremos trabajando en los cuelgues que los jugadores están teniendo en todas las plataformas. Tenemos ya la solución para la mayoría de esos problemas, y queremos implementarlas en la actualización 3.1.