Una settimana dopo il lancio dell’espansione Dragonflight, Blizzard ha deciso di raggiungere i suoi giocatori. Gli sviluppatori di WoW discutono del lato tecnico e delle sfide che il team di sviluppo deve superare per un rilascio di questa portata.
Vi suggerisco di trovare la lettera completa qui sotto.
Ora che l’uscita di Dragonflight è alle nostre spalle, vorremmo ripercorrervi questi ultimi giorni dal punto di vista tecnico. L’obiettivo è spiegare un po’ meglio cosa rappresenta una release globale di questo tipo, cosa può andare bene o male, i problemi che possono sorgere e le soluzioni a nostra disposizione per risolverli.
Internamente, chiamiamo un giorno come lunedì scorso un “rilascio di contenuti”, perché il rilascio di estensioni è un’attività a lungo termine e non è limitato a una singola data. World of Warcraft non è un gioco statico e ha fatto molta strada da quando è uscito per la prima volta 18 anni fa, e anche negli ultimi due anni. Di conseguenza, dobbiamo cambiare il modo in cui pubblichiamo i contenuti man mano che il gioco cresce.
L’espansione è ora implementata in più fasi: prima il codice viene incorporato nel contenuto esistente, quindi gli eventi pre-lancio consentono di aggiungere nuovi sistemi di gioco e infine, il giorno del “lancio del contenuto”, sono accessibili missioni, aree e dungeon. . Ogni passaggio è mirato e ci consente di isolare i problemi in modo più efficace. Tuttavia, per sistemi così complessi, non è sempre possibile prepararsi a tutto.
Una delle novità di questa estensione è stata il rilascio di contenuti attivati da un evento a tempo, ovvero diverse modifiche apportate al gioco che sono programmate per essere distribuite contemporaneamente. Tali modifiche, se effettuate manualmente, comporteranno inevitabilmente la possibilità di errore umano, ovvero il rischio di guasti interni o esterni che potrebbero vanificare l’operazione. Il lancio temporizzato e automatizzato riduce notevolmente il rischio.
Un’altra modifica apportata con Dragonflight è il miglioramento della crittografia dei dati di gioco, che ci consente di inviare informazioni importanti al gioco lato client in modo che i filmati, i dialoghi e gli script delle missioni funzionino correttamente e in modo tempestivo. Scarso o accessibile prima del tempo. Conosciamo la passione della nostra community per WoW; Quando muori dalla voglia di scoprire cosa c’è di nuovo, può essere allettante saltare sulla più piccola informazione e rovinare così la sorpresa. Questo nuovo sistema di crittografia mira a evitare questo tipo di situazione, garantendo che il contenuto sia sempre disponibile quando arriva il momento giusto, non prima.
Abbiamo stabilito che gli elevati tempi di risposta e l’instabilità del server nell’ultima settimana sono stati causati dall’interazione tra questi due nuovi sistemi. Il server di simulazione (il server che gestisce i tuoi movimenti e le tue azioni nel gioco) si è trovato a dover ricalcolare diverse centinaia di volte al secondo ciò che doveva o non doveva essere disponibile per ogni simulazione. In effetti, il sistema si è rapidamente saturato di questi account, le simulazioni hanno iniziato a impantanarsi e le richieste provenienti da altri servizi sono state accodate. Per i giocatori, ciò si traduce in messaggi di errore relativi al tempo di risposta e al “server mondiale inattivo”.
Fortunatamente, siamo stati in grado di identificare il problema. I dati crittografati in attesa che un evento specifico li sbloccasse hanno rivelato un errore logico nel codice: una riga di codice fuori posto che indicava al server di ricalcolare i dati da crittografare, quando nulla era cambiato.
Ecco come è andata la nostra indagine. Tutto inizia a mezzanotte, ora di Parigi. Grazie ai test effettuati, sapevamo già che la nave dell’Orda sarebbe arrivata qualche istante prima della nave dell’Alleanza. La maggior parte di noi è anche nel gioco con i nostri personaggi sui moli, in un paio di endpoint, con altre finestre aperte per visualizzare dati, grafici e grafici vari. Siamo anche in contatto diretto con altri team di supporto di Blizzard.
Prima del lancio, ci siamo preparati per diversi scenari peggiori e come evitarli o correggerli rapidamente durante le fasi di test. Ad esempio, abbiamo creato dei portali per consentire ai giocatori di accedere alle Dragon Islands quando le barche non funzionano.
Alle 2:00, la nave adunata arriva come da programma. Evviva! I giocatori, compresi gli Stati Uniti, affollano il tabellone. Alcuni e alcuni di noi rimangono sul banco degli imputati, nel caso in cui i portali debbano essere attivati. La barca parte, ma molti dei passeggeri non raggiungono la loro destinazione, subiscono interruzioni di comunicazione o si ritrovano bloccati.
Rivediamo immediatamente i dati, i grafici e le tabelle. Non ci sono molte persone nelle Isole del Drago. Diversi colleghi stanno segnalando problemi con i loro nomi personali e domini. Altri hanno segnalato problemi con il carico del processore e con l’NFS (Network File Storage, File Management Protocol) utilizzato dai nostri server. I nostri team continuano a monitorare il gioco e segnalare eventuali problemi.
Seguendo le navi dell’Orda, vediamo arrivare le navi dell’Alleanza. La maggior parte di loro non arriva e le navi dell’orda non tornano.
Stiamo iniziando a vedere il quadro generale: le navi sono bloccate e i server di Dragon Island rispondono più lentamente del previsto. Ora è il momento di rimboccarsi le maniche e trovare soluzioni. Non è la prima volta che le barche si trovano in difficoltà. Attiviamo i portali e continuiamo le indagini. È molto chiaro che il nostro sistema NFS è sovraccarico. Ci sono troppe richieste in attesa e il sistema di coordinamento del server di simulazione già sovraccarico inizia a calcolare tutte le richieste non riuscite. L’infrastruttura è completamente immersa. Ancora peggio, l’attivazione dei portali ha solo esacerbato il problema, poiché potevano essere cliccati ripetutamente, creando più richieste. Disattiviamo i cancelli.
Stiamo facendo tutto il possibile affinché il maggior numero possibile di giocatori possa giocare, ma il servizio non si comporta affatto come durante le fasi di test. Continuiamo il processo di cancellazione, grazie ai dati raccolti durante queste fasi di test.
Si sta facendo tardi, ma una parte del team continua a lavorare sui problemi, mentre altri si riposano per poter tornare a svolgere il primo compito al mattino.
Martedì mattina abbiamo una visione d’insieme molto migliore del problema. Ora sappiamo che i client di gioco ricevono molte informazioni per gestire le attività. Capiremo in seguito che questa non è la causa iniziale del problema. Il nostro protocollo API richiede molto NFS. Il codice che gestisce le nuove interazioni con gli NPC è anormalmente lento. Il servizio impiega molto tempo per inviare tutte le modifiche ai dati apportate nelle patch ai client di gioco. I giocatori che sono riusciti a unirsi alle Isole del Drago stanno ora sperimentando una notevole latenza.
Mercoledì mattina la fortuna ha giocato a nostro favore: scavando nel codice in questione, abbiamo scoperto interazioni insolite con il sistema di cifratura. Cominciamo a chiederci se il sistema di crittografia sia alla radice di tutti questi problemi. In effetti, si è rivelato vero. La lentezza del sistema di crittografia spiega tutti gli altri problemi con il trasferimento dei dati, NFS, il sovraccarico della CPU e la latenza. Una volta identificata la fonte del problema, l’autore del rispettivo sistema è in grado di correggere rapidamente gli errori.
Tuttavia, implementare una correzione nel codice utilizzato da molti reparti diversi non è una semplice pressione di un pulsante. Sarà ora necessario trasferire tutti i personaggi a nuove simulazioni in modo che vengano eseguite tenendo conto delle correzioni. Inoltre, acceleriamo molto, il che crea un carico aggiuntivo su un altro servizio. Sarebbe necessario riavviare i server, ma lo stiamo spingendo ancora per applicarlo nelle ore di punta e non per infastidire ulteriormente i giocatori. Con la correzione in atto, le prestazioni e la stabilità sono notevolmente migliorate.
Non è stato facile identificare e risolvere il problema, ma il nostro team è stato molto reattivo e diligente ed è stato in grado di implementare la correzione il più rapidamente possibile. Nell’ingegneria del software, l’obiettivo non è non commettere mai errori, ma cercare di ridurre al minimo le possibilità che si verifichino, essere in grado di identificarli rapidamente quando si verificano e avere gli strumenti giusti…
…e un fantastico team pronto a superare ogni ostacolo.[Text Wrapping Break]
– Squadra tecnica di World of Warcraft
“Ninja del web professionista. Giocatore certificato. Appassionato di zombi fanatico. Fanatico del bacon a misura di hipster.”