Il 4 settembre 2018, Operazione Grim Sky è stato reso disponibile sui server live. L'aggiornamento Grim Sky include miglioramenti alla fluidità del matchmaking volti a rendere la selezione iniziale del server di gioco più semplice. Dopo l'implementazione, abbiamo notato un aumento del numero di errori di matchmaking generati rispetto alla fase di test. I giocatori, principalmente in Nord America, non sono riusciti a utilizzare il sistema di matchmaking per unirsi alle partite.
Di seguito trovate un riassunto di ciò che è successo e di cosa abbiamo fatto per risolverlo.
Il processo di matchmaking
Selezionando “Multigiocatore” per una qualsiasi delle modalità di gioco online, si avvia una procedura in due fasi.
Innanzitutto, il gioco contatta i nostri servizi di matchmaking, cercando la migliore corrispondenza possibile. Questo passaggio, in base alla modalità di gioco, al grado del giocatore e alla popolazione attuale del server, impiega in media 10-60 secondi (il peggioramento non ha influito su questo passaggio del processo).
Successivamente, il client tenta di connettersi al server di gioco. Questo è il punto in cui si è verificato il peggioramento.
Le connessioni ai nostri server di gioco consistono in uno scambio di messaggi UDP (User Datagram Protocol) tra il client e il server. Viste da una prospettiva esterna, hanno questo aspetto:
Il client negozia un canale di comunicazione con il server, attende un frame (~16ms) e quindi inizia a inviare informazioni (Hello) su quel canale.
La scoperta
Analizzando questo problema, abbiamo appreso che c'era un bug preesistente nel versante server della connessione: se il 4° messaggio (Hello) raggiungeva il server di gioco prima del 3° (Ack) in un lasso di tempo molto breve, la connessione finiva in uno stato di errore e non poteva essere ripristinata. Ciò garantisce un errore 6-0x00001000 (timeout della connessione).
Nella maggior parte dei casi, quando i messaggi vengono inviati in un ordine specifico, vengono ricevuti nello stesso ordine specifico. Il riordino dei messaggi è abbastanza raro a tal punto che l'errore non è frequente, ma vale la pena notare che può verificarsi anche in casi legittimi; ad esempio, con un firewall mal configurato da parte del giocatore, il che rende difficile individuare il problema in modo efficace. In altre parole, una quantità minima di tali errori è normale e non rappresenta un problema grave, ma una quantità consistente non lo è, ed è considerata un'anomalia. Questo è il motivo principale per cui non siamo stati in grado di riconoscere immediatamente l'entità del problema nel server di test, a causa di una dimensione del campione molto ridotta in quest'ultimo.
L'evoluzione del peggioramento
Una delle modifiche apportate in Operazione Grim Sky consiste in un'ottimizzazione in cui il client non attende e invia immediatamente i messaggi 3° e 4°, ancora in sequenza, in un lasso di tempo molto breve. Sulla maggior parte dei fornitori di servizi Internet, ciò non ha alcun effetto avvertibile. Nel caso di alcuni ISP, i due messaggi inviati erano talmente ravvicinati da causarne il riordino nella maggior parte dei casi, rendendo il verificarsi del problema un evento quasi garantito per i giocatori che utilizzano quel fornitore. Ciò è dovuto alla bassa latenza offerta attraverso le connessioni con quell'ISP. In sostanza, minore è la latenza della connessione di un giocatore, maggiore è la probabilità del verificarsi questo errore.
Inoltre, se almeno un giocatore in una squadra non è in grado di unirsi a una partita, la fase di connessione del server di gioco fallisce per tutti (2-0x0000D012). Ciò è stato originariamente concepito per garantire l'integrità delle squadre durante il matchmaking tuttavia, con così tanti giocatori colpiti dall'errore iniziale, si è innescato un effetto a cascata su coloro che si univano alla squadra’di un giocatore colpito.
Una volta identificato e confermato il problema, siamo riusciti a correggere il server di gioco per garantire che questo problema non si verificasse più in futuro.
Cronologia della risoluzione
I primi due giorni li abbiamo impiegati cercando di riprodurre il problema al meglio della nostra comprensione della situazione in quel momento. Sfortunatamente, i nostri sforzi in quella circostanza non hanno avuto successo. A dispetto delle diverse simulazioni di latenza, jitter e perdita di pacchetti che abbiamo sperimentato, non siamo stati in grado di riprodurre il problema con sufficiente sicurezza da rintracciarne la radice effettiva. Impiegare tempo e risorse per tentare di “risolvere” qualcosa che non è la vera causa del problema è dannoso sia per noi che per i giocatori, in quanto serve solo a prolungare la vita del problema stesso.
Fortunatamente, molti giocatori ci hanno contattati offrendoci il loro aiuto. Abbiamo lavorato a stretto contatto con alcuni giocatori per i quali il problema si verificava con una frequenza estremamente elevata e, grazie alla loro generosità e collaborazione, siamo stati in grado di fare passi da gigante nella nostra indagine. Già dalla seconda sessione di debug abbiamo avuto la certezza di aver scoperto la radice del problema, e di poter quindi iniziare a lavorare su una soluzione reale. Entro domenica sera avevamo trovato una soluzione e, dopo aver eseguito una sessione finale di debug con i nostri team di test di volontari nella giornata di lunedì, per verificare che il problema non fosse più presente, abbiamo ritenuto di aver trovato la soluzione definitiva. Abbiamo dunque programmato di implementarla il giorno lavorativo successivo, ovvero martedì.
Passaggi successivi
Uno dei principali problemi che abbiamo affrontato nel tentativo di accertare la causa del problema è dovuto al fatto che esso si sia verificato contestualmente a un importante aggiornamento di stagione. Ciò ha reso impossibile tornare alla situazione precedente, in quanto avrebbe significato annullare l'uscita dell'intera stagione.
Per il futuro, abbiamo iniziato i preparativi per migliorare il nostro processo di rilascio, che ci consentirà di rendere disponibili i nuovi contenuti, – in particolare i contenuti relativi alle nuove stagioni –, separatamente dalle modifiche di minore entità che non influiscono direttamente sui giocatori. Pertanto, nel caso in cui problemi simili dovessero verificarsi, avremo la possibilità di ritornare alla situazione precedente se necessario.
Vogliamo cogliere l'occasione per esprimere ancora una volta la nostra gratitudine a quei giocatori che ci hanno dedicato il loro tempo prezioso aiutandoci a risolvere il problema per l'intera comunità di Rainbow Six. Siete fantastici!
Inoltre, stiamo continuando a lavorare sugli arresti anomali che i giocatori ci segnalano su tutte le piattaforme. Abbiamo soluzioni per la maggior parte di essi, in arrivo con la Patch 3.1.