El 4 de septiembre de 2018, publicamos Operation Grim Sky en los servidores online. La actualización Grim Sky se desplegó con mejoras en el flujo general de matchmaking, dirigido a hacer más sencillo el proceso inicial de selección del servidor de juego. Después del despliegue, vimos un incremento en el número de errores de matchmaking generados, en comparación con los detectados en la fase del servidor de pruebas. Les presentamos un resumen de lo que sucedió y los pasos que dimos para solucionarlo. Jugadores sobre todo de Norteamérica no podían usar el sistema de matchmaking para unirse a partidas.
Les presentamos un resumen de lo que sucedió y los pasos que dimos para solucionarlo.
El proceso de matchmaking
Elegir el botón “Multijugador” en cualquiera de los modos de juego online lanza un proceso de dos pasos.
Primero, el juego contacta nuestro servicio de matchmaking y busca la mejor partida posible. Este paso, dependiendo del modo de juego, tu rango y el número actual de jugadores, dura típicamente entre 10 y 60 segundos (la degradación no impactaba este paso del proceso ).
Segundo, el cliente intenta conectar al servidor de juego. Es el punto en el que sucedía la degradación.
Las conexiones a nuestros servidores de juego son un intercambio de mensajes UDP (User Datagram Protocol) entre el cliente y el servidor. Desde una perspectiva superior, son así:
El cliente negocia un canal de comunicación con el servidor, espera una ventana de acción (~16ms) y luego empieza a mandar información (Hola) en ese canal.
El descubrimiento
Mientras investigábamos este problema, descubrimos que había un error anterior en la conexión, en el lado del servidor: si el cuarto mensaje (Hola) llegaba al servidor de juego antes que el tercero (Ack) en un espacio de tiempo muy reducido, la conexión finalizaba con error y no se recuperaba. Eso garantizaba un error 6-0x00001000 (superado el tiempo de conexión).
En muchos casos, cuando los mensajes se enviaban en un orden determinado, se recibían en el mismo orden específico. El reordenamiento de los mensajes es raro y hacerlo por un error no es frecuente, pero también debemos decir que algunas veces puede pasar en casos legítimos; por ejemplo, puede suceder si el jugador tiene un firewall desconfigurado, lo que dificulta el seguimiento. Dicho de otra forma, un pequeño número de los errores no es serio y es de esperar, pero el otro gran número no es nada normal ni debería suceder. Es la principal razón por la que no pudimos reconocer la extensión del problema de inmediato, en el servidor de pruebas, ya que la muestra es mucho más pequeña.
La evolución de la degradación
Uno de los cambios que hicimos en Operation Grim Sky es una optimización en la que el cliente no espera, y envía el tercer y cuarto mensajes inmediatamente, en orden, en muy poco tiempo. En muchos proveedores de servicios de internet, esto no tiene efecto. Pero en algunos, los dos mensajes se mandan con tan poca diferencia de tiempo que podían ser reordenados en muchos casos, lo que casi garantizaba el error para los jugadores con esos ISP. Esto se debía a la baja latencia de las conexiones con ese proveedor. En esencia, cuanto menor era la latencia de la conexión del jugador, más posibilidades hay de que suceda el error.
Además, si al menos uno de los jugadores de una escuadra no puede unirse a la partida, la fase de conexión al servidor de juego falla para todos los demás (2-0x0000D012). Esto se diseñó así para asegurar la integridad de los equipos en el matchmaking; sin embargo, con tantos jugadores afectados por el error inicial, creó un efecto en cascada sobre los que se unían a una escuadra de un jugador afectado por el problema.
Cuando identificamos y confirmamos el problema, pudimos corregir el servidor de juego para asegurarnos de que este problema no vuelva a suceder en adelante .
Línea temporal para la solución
Los dos primeros días fueron dedicados enteros a intentar reproducir el problema, tal como entendíamos la situación en aquel momento. Pero los esfuerzos no tuvieron éxito. No importaba cuántas situaciones diferentes de latencia, fluctuación o pérdida de paquetes probamos; no podíamos reproducir el error con la suficiente confianza de que habíamos encontrado la raíz del problema. Gastábamos tiempo y recursos en intentar corregir algo que realmente no es la causa del problema, y eso es malo para nosotros y para los jugadores, y solo sirve para prolongar la vida del problema.
Por suerte, muchos jugadores se acercaron a nosotros para ofrecernos su ayuda. Trabajamos junto a algunos jugadores que experimentaban el error con una altísima frecuencia, y gracias a su generosidad y cooperación pudimos avanzar en nuestra investigación. En la segunda sesión de depuración, sabíamos que habíamos descubierto la fuente del problema y podíamos empezar a trabajar en la solución actual. Y hacia el domingo por la tarde, teníamos una corrección preparada, y tras hacer una sesión de depuración final con nuestros jugadores voluntarios el lunes para confirmar que el bug ya no estaba, sentimos que habíamos encontrado la solución. La corrección se programó para implementarla inmediatamente, el siguiente día de trabajo, el martes.
Los pasos siguientes
Un problema central que experimentamos cuando buscábamos la causa del problema era el hecho de que se lanzó al tiempo que una actualización de temporada. Y eso hacía imposible volver atrás, porque significaba “deslanzar” la temporada completa.
Estamos haciendo preparativos para el futuro, que mejoren nuestro proceso de lanzamiento y así podamos desplegar nuevo contenido, en particular contenido de temporada, separado de los cambios de bajo nivel que no son cambios para el jugador. Así que, en caso de que un problema similar se produzca de nuevo, podremos dar un paso atrás si es necesario.
Queremos aprovechar esta oportunidad para expresar de nuevo nuestra gratitud hacia los jugadores que ofrecieron su tiempo para ayudarnos a resolver el problema para toda la comunidad Rainbow Six. ¡Son ustedes maravillosos!
-Adicionalmente, vamos a seguir trabajando en los bloqueos que los jugadores están encontrando en todas las plataformas. Tenemos soluciones para la mayoría de esos problemas, que se van a implementar en la actualización3.1.