Le 4 septembre 2018, nous avons sorti l'Opération Grim Sky sur les serveurs publics. Avec la mise à jour Grim Sky, nous avons amélioré le fonctionnement général du matchmaking pour que les serveurs soient sélectionnés de manière beaucoup plus fluide au lancement de l'Opération. Au moment de la sortie, nous avons constaté un nombre d'erreurs de matchmaking bien plus important que celui rencontré pendant la phase de test. Les joueurs, notamment en Amérique du Nord, ne pouvaient pas rejoindre des parties à l'aide du système de matchmaking.
Vous trouverez ci-dessous un résumé de ce qu'il s'est passé, et de ce que nous avons entrepris pour résoudre ces problèmes.
Processus de matchmaking
Pour tous les modes de jeu en ligne, sélectionner la touche "Multijoueur" active un processus en deux étapes :
D'abord, le jeu contacte nos services de matchmaking et recherche la partie la plus adéquate. Cette étape dure en moyenne entre 10 et 60 secondes et dépend du mode de jeu, du rang du joueur et des joueurs présents (les problèmes rencontrés n'ont pas affecté cette étape).
Le client tente ensuite de se connecter au serveur du jeu. C'est au cours de cette étape que les problèmes apparaissaient.
Les connexions à nos serveurs de jeu se font par un échange de messages UDP (User Datagram Protocol, protocole de datagramme utilisateur) entre le client et le serveur. De manière générale, voici à quoi ressemblent ces messages :
Le client négocie un canal de communication avec le serveur, puis il attend pendant une image (~16 ms) avant de commencer à envoyer une information (Hello) sur ce canal.
Découverte du problème
En enquêtant sur ce problème, nous avons découvert qu'il existait déjà un bug de connexion côté serveur : si le 4e message (Hello) atteignait le serveur de jeu avant le 3e message (Ack) avec un délai très court, la connexion se retrouvait en état d'erreur irréparable. Cela résultait en l'apparition d'un code d'erreur 6-0X00001000 (temps de connexion dépassé).
Généralement, les messages envoyés selon un ordre précis sont reçus dans le même ordre. Les messages arrivent dans le désordre suffisamment rarement pour que cette erreur ne soit pas fréquente, mais il est intéressant de constater que cela peut se produire sans être une erreur : par exemple si le pare-feu du joueur est mal configuré, ce qui rend ce problème difficile à repérer. Autrement dit, certaines de ces erreurs ne sont pas graves et sont à prévoir, mais si leur fréquence augmente, cela est considéré comme anormal. C'est la raison principale pour laquelle nous n'avons pas pu repérer immédiatement l'étendue du problème sur le serveur de test, car l'échantillon du serveur de test était beaucoup plus limité.
Évolution du problème
Avec l'Opération Grim Sky, nous avons mis en place une optimisation qui faisait que le client envoyait le 3e et le 4e message immédiatement, en séquence, avec un délai très court. Cela n'avait aucun effet visible avec la plupart des fournisseurs d'accès à internet. Avec certains FAIs, l'envoi des deux messages avec un délai si court les faisait souvent arriver dans le désordre, ce qui faisait que les joueurs utilisant le FAI impliqué recevaient un message d’erreur presque systématiquement. Cela était dû à la faible latence de la connexion avec ce FAI. Pour faire simple, plus la latence de la connexion d'un joueur était basse, plus ce joueur avait de chances de rencontrer cette erreur.
Si au moins un des joueurs d'une équipe ne pouvait pas rejoindre une partie, toute l'équipe recevait également une erreur de connexion au serveur (2-0x0000D012). Cela permettait à l'origine de préserver l'unité des équipes pendant le matchmaking. Cependant, vu le nombre de joueurs touchés par le problème initial, cela se répercutait sur les joueurs qui rejoignaient l'équipe d'un joueur atteint par ce problème.
Une fois le problème identifié et confirmé, nous avons pu corriger le serveur de jeu pour nous assurer que ce problème ne se reproduirait plus à l'avenir.
Étapes de résolution du problème
Au cours des premiers jours, nous avons tenté de reproduire l'erreur en fonction des informations que nous avions à ce moment-là. Malheureusement, ces efforts n'ont pas été fructueux. Nous avons expérimenté avec des simulations proposant différents niveaux de latence, d'instabilité et de perte de paquets, mais nous n'avons pas suffisamment réussi à reproduire l'erreur pour identifier la source du problème avec certitude. Nous avons consacré beaucoup de temps et de ressources pour "réparer" ce qui n'était pas la cause réelle du problème, et cela n'a fait que nuire aux joueurs et à nos équipes, car le problème persistait.
Heureusement, beaucoup de joueurs nous ont contactés pour nous proposer de l'aide. Nous avons travaillé en étroite collaboration avec quelques joueurs pour qui le problème était particulièrement récurrent. Grâce à leur générosité et à leur coopération, nous avons pu faire avancer notre enquête plus rapidement. À la fin de la deuxième session de débogage, nous étions sûrs d'avoir trouvé la source du problème et nous avons pu commencer à le résoudre réellement. Dimanche soir, nous avions finalisé un correctif. Lundi, après avoir lancé une dernière session de débogage avec nos testeurs bénévoles pour nous assurer que le problème était résolu, nous étions sûrs d'avoir trouvé la solution. Nous avons ensuite prévu de lancer le correctif dès le lendemain, mardi.
Étapes suivantes
Le principal problème que nous avons rencontré pour détecter la cause de ce problème, c'est le fait qu'il est apparu avec le lancement d'une importante mise à jour de saison. Cela nous empêchait donc de revenir en arrière, puisqu'il était impossible d'annuler la sortie de la saison tout entière.
Nous prévoyons à l'avenir d'améliorer notre processus de publication afin de pouvoir publier du nouveau contenu, notamment du contenu saisonnier, séparément des contenus de fond qui ne touchent pas directement les joueurs. Ainsi, si des événements similaires venaient à se produire, nous pourrions revenir en arrière en cas de besoin.
Nous tenons à remercier de nouveau les joueurs qui ont pris le temps de nous aider à résoudre ce problème ainsi que toute la communauté Rainbow Six. Vous êtes formidables !
Nous continuons également de travailler à résoudre les plantages rencontrés par les joueurs sur toutes les plateformes. La mise à jour 3.1 permettra de régler la majorité de ces problèmes.