Ieri è stata rilasciata una nuova patch, la 10.15 – PC Build 1.0.66477 dove vengono rapidamente elencate le modifiche e l’implementazione del sistema di code.
La Patch è relativa solo per la piattaforma PC, verrà rilasciata una versione simile per console la prossima settimana.
NOTE SULLA PATCH
Una nuova patch è ora disponibile solo per PC.
Per condividere i vostri commenti, scrivete nel forum di Diablo II: Resurrected.
Per segnalare un bug del PC, visitate il nostro forum di segnalazione bug.
Per assistenza nella risoluzione dei problemi, visitate il nostro forum Supporto tecnico.
GENERALE
Abbiamo implementato una coda di accesso per i periodi di traffico elevato. Questa coda apparirà dopo la schermata del titolo quando si apre il gioco. La coda apparirà solo durante le fasi di traffico elevato.
Ai giocatori verrà mostrato un numero che indica la loro posizione nella coda.
I giocatori avranno la possibilità di uscire dalla coda e giocare offline immediatamente, se lo desiderano, premendo “Esc” sul prompt della coda.
Bisogna notare che più alto appare il numero della coda, più lentamente il numero si aggiornerà nel prompt. Il numero si aggiorna in background, quindi non raccomandiamo di lasciare la coda perché questo creerà ulteriori ritardi al vostro ingresso in gioco durante queste fasi di traffico elevato.
Ci aspettiamo una patch nella prossima settimana che implementerà la stessa funzionalità di coda per le console.
Questo in seguito al nostro post di ieri su come abbiamo intenzione di mitigare alcuni dei nostri problemi di accesso che i giocatori hanno riscontrato durante le finestre ad alto traffico.
Uno dei meme prodotti durante il down dei server
Questa patch è la risposta di Blizzard per rispondere all’afflusso eccessivo di giocatori riscontrato nel secondo fine settimana di ottobre quando i server sono definitivamente crollati andando offline per più di due giorni
Nella giornata di giovedì 14 il CM PezRadar aka Adam Fletcher ha fatto chiarezza sui problemi, pubblicando un aggiornamento che vi riportiamo tradotto in italiano dall’originale:
Dal lancio di Diablo II: Resurrected, abbiamo riscontrato diversi disservizi ai server e volevamo fornire un po’ di trasparenza su ciò che sta causando questi problemi e i provvedimenti che abbiamo preso finora per risolverli. Vogliamo anche darvi qualche indicazione su come stiamo procedendo.
tl;dr: Le interruzioni del nostro server non sono state causate da un singolo problema; stiamo risolvendo ogni problematica man mano che si presenta, sia con soluzioni mitigatrici che con cambiamenti architettonici a lungo termine. Un piccolo numero di giocatori ha sperimentato la perdita della progressione del personaggio – andando avanti, qualsiasi perdita dovuta ad un crash del server dovrebbe essere limitata a diversi minuti. Questa non è una soluzione definitiva e stiamo continuando a lavorare su questo problema. Il nostro team, con l’aiuto di altri in Blizzard, sta lavorando per portare l’esperienza di gioco ad un punto che vada bene per tutti.
Ci addentreremo un po’ nei particolari dell’ingegneria, ma speriamo che nel complesso questo vi aiuti a capire perché si sono verificate queste interruzioni e cosa abbiamo fatto per risolvere ogni caso, oltre a come stiamo indagando sulla causa principale. Cominciamo dall’inizio.
Il problema (o i problemi) dei server:
Prima di parlare dei problemi, dobbiamo brevemente fornire un po’ di contesto su come funzionano i database dei nostri server. Innanzitutto c’è il database globale, che esiste come unica fonte di realtà per tutte le informazioni e i progressi del personaggio. Come si può immaginare, questo è un compito gravoso per un solo database, e non ce la farebbe da solo. Quindi, per alleviare il carico e la latenza sul database globale, ogni regione -NA, EU e Asia- ha dei database individuali che memorizzano anche le informazioni e i progressi del personaggio, e il database della regione scriverà periodicamente su quello globale. La maggior parte delle azioni di gioco vengono effettuate su questo database regionale perché è più veloce e il personaggio è ” lockato” in quel punto per mantenere l’integrità del record individuale del personaggio stesso. La banca dati globale ha anche un back-up nel caso in cui la base principale fallisca.
Tenendo presente tutto ciò, per spiegare cosa sta succedendo, ci concentreremo sui tempi di inattività sperimentati tra sabato 9 ottobre e ora.
Sabato mattina, ora del Pacifico, abbiamo subito un’interruzione globale a causa di un improvviso e significativo aumento del traffico. Si trattava di una nuova soglia che i nostri server non avevano mai sperimentato, nemmeno al lancio. La cosa è stata esacerbata da un aggiornamento che avevamo lanciato il giorno precedente per migliorare le prestazioni relative alla creazione dei giochi – questi due fattori combinati hanno sovraccaricato il nostro database globale, causandone il time out. Abbiamo deciso di ritirare l’aggiornamento di venerdì che avevamo distribuito in precedenza, sperando che questo avrebbe alleggerito il carico sui server fino a domenica, dandoci anche lo spazio per indagare più a fondo sulla causa principale.
Domenica, però, è diventato chiaro che quello che avevamo fatto sabato non era sufficiente – abbiamo registrato un aumento ancora maggiore del traffico, provocando un’altra interruzione. I server di gioco osservavano la disconnessione dal database e tentavano immediatamente di riconnettersi, ripetutamente, il che significava che il database non aveva mai il tempo di recuperare il lavoro che avevamo completato perché era troppo occupato a gestire un flusso continuo di tentativi di connessione da parte dei server di gioco. Durante questo periodo, abbiamo anche capito che potevamo apportare dei miglioramenti alla configurazione della registrazione degli eventi del database, che è necessaria per ripristinare uno stato valido in caso di guasto del database, quindi li abbiamo completati e abbiamo intrapreso un’ulteriore analisi della causa principale.
L’arma a doppio taglio dell’interruzione di domenica era che a causa di ciò che avevamo affrontato sabato, avevamo creato quello che essenzialmente era un playbook su come riprendersi rapidamente. Il che è stato un bene.
Ma poiché siamo tornati online così rapidamente in una finestra di picco dell’attività dei giocatori, con centinaia di migliaia di partite in decine di minuti, siamo caduti di nuovo. Il che è stato un male.
Quindi avevamo molte correzioni da distribuire, compresi miglioramenti di configurazione e di codice da implementare sul database globale di backup. Questo ci porta a lunedì 11 ottobre, quando abbiamo fatto il cambio tra i database globali. Questo ha portato ad un’altra interruzione, quando il nostro database di backup continuava erroneamente ad eseguire il suo processo di backup, il che significa che passava la maggior parte del tempo a cercare di copiare dall’altro database quando avrebbe dovuto servire le richieste dei server. Durante questo periodo abbiamo scoperto altri problemi e abbiamo apportato ulteriori miglioramenti – abbiamo individuato una query ormai deprecata ma fastidiosa che abbiamo potuto eliminare completamente dal database, abbiamo ottimizzato i controlli di idoneità per i giocatori quando si uniscono a una partita, alleviando ulteriormente il carico, e abbiamo ulteriori miglioramenti delle prestazioni in fase di test proprio mentre stiamo parlando. Crediamo anche di aver risolto gli assalti di ricollegamento del database che stavamo riscontrando, perché non li abbiamo osservati martedì.
Poi martedì abbiamo raggiunto un altro massimo di giocatori contemporanei, con alcune centinaia di migliaia di giocatori in una sola regione. Questo ci ha fatto imbattere in un altro episodio di prestazioni degradate del database, la cui causa è attualmente oggetto di lavoro da parte dei nostri ingegneri informatici. Abbiamo anche contattato altri ingegneri di Blizzard per lavorare su piccole correzioni mentre il nostro team si concentrava sui problemi del server principale e abbiamo contattato anche i nostri partner terzi per assistenza.
Perché questo accade:
Nel rimanere fedeli al gioco originale, abbiamo mantenuto molto codice legacy. Tuttavia, un servizio legacy in particolare sta lottando per stare al passo con il comportamento moderno dei giocatori.
Questo servizio, con alcuni aggiornamenti rispetto all’originale, gestisce pezzi critici della funzionalità di gioco, ovvero la creazione/adesione al gioco, l’aggiornamento/lettura/filtraggio delle liste di gioco, la verifica della salute del server di gioco e la lettura dei personaggi dal database per garantire che il personaggio possa partecipare a qualsiasi cosa stia filtrando. È importante che questo servizio sia un Singleton, il che significa che possiamo eseguire solo un’istanza di esso per garantire che tutti i giocatori vedano sempre la lista di gioco più aggiornata e corretta. Abbiamo ottimizzato questo servizio in molti modi per conformarci alla tecnologia più moderna, ma come abbiamo detto in precedenza, molti dei nostri problemi derivano dalla creazione delle partite.
Menzioniamo “il comportamento moderno dei giocatori” perché è un punto interessante su cui riflettere. Nel 2001 non c’erano così tanti contenuti su internet su come giocare Diablo II “correttamente” (Baal run per fare XP, Pindleskin/Fogne Antiche/etc per trovare oggetti magici, etc). Oggi, invece, un nuovo giocatore può consultare qualsiasi numero di incredibili creatori di contenuti che possono insegnargli come giocare il gioco in modi diversi, molti dei quali includono un sacco di carico di database sotto forma di creazione, caricamento e distruzione di partite in rapida successione. Anche se avevamo previsto tutto ciò – con i giocatori che creano nuovi personaggi su nuovi server, lavorando duramente per ottenere i loro oggetti magici – abbiamo ampiamente sottovalutato la portata che abbiamo ricavato dal beta testing.
Inoltre, nel complesso, stavamo salvando troppo spesso nel database globale: Non c’è bisogno di farlo così spesso come facevamo. Dovremmo davvero salvare nel database regionale e aggiornare il database globale solo quando abbiamo bisogno di sbloccarti – questa è una delle mitigazioni che abbiamo messo in atto. In questo momento stiamo scrivendo del codice per cambiare completamente il modo in cui lo eseguiamo, così non salveremo quasi mai nel database globale, il che ridurrà significativamente il carico su quel server, ma si tratta di una riprogettazione dell’architettura che richiederà del tempo per essere costruita, testata e poi implementata.
Una nota sulla perdita di progressi:
La perdita di progressi che alcuni giocatori hanno sperimentato è dovuta al modo in cui effettuiamo i lock dei personaggi sia nel database regionale che in quello globale: blocchiamo il personaggio nel database globale quando viene assegnato ad una regione (per esempio, quando gioca nella regione USA, il personaggio) e la maggior parte delle azioni viene risolta nel database della regione USA.
Il problema era che durante un’interruzione del server, quando il database collassava, un certo numero di personaggi rimaneva bloccato nel database regionale e non avevamo modo di spostarli nel database globale. A quel tempo, credevamo di avere due opzioni: o sbloccare tutti i personaggi con modifiche non salvate nel database globale, perdendo quindi alcuni progressi a causa di una sovrascrittura che si sarebbe verificata nel database globale, o portare il gioco completamente giù per un tempo indeterminato ed eseguire uno script per scrivere i dati regionali nel database globale.
All’epoca abbiamo agito nella prima ipotesi: ci sembrava più importante mantenere il gioco attivo in modo che la gente potesse giocare, piuttosto che togliere il gioco per un lungo periodo di tempo per ripristinare i dati. Siamo profondamente dispiaciuti per tutti i giocatori che hanno perso progressi importanti o oggetti di valore. Essendo noi stessi giocatori, conosciamo il dolore di un rollback e lo sentiamo profondamente.
Andando avanti, crediamo di avere un modo per ripristinare i personaggi che non comporti una perdita di dati significativa – dovrebbe limitarsi a qualche minuto di perdita, se c’è, in caso di crash del server.
Questo è un miglioramento, ma non è ancora abbastanza valido ai nostri occhi.
Cosa stiamo facendo al riguardo:
Limitazione delle code: Stiamo limitando il numero di operazioni al database relative alla creazione e all’iscrizione di partite, e sappiamo che questo è un problema per molti di voi. Per esempio, per quelli di voi che fanno run di Pindleskin, entrerete e uscirete da una partita e ne creerete una nuova entro 20 secondi. In questo caso, ad un certo punto sarete limitati nella velocità. Quando questo accade, il messaggio di errore dirà che c’è un problema di comunicazione con i server di gioco: non è un segnale che i server di gioco sono fuori uso in questo particolare caso, significa solo che è stato limitato nella frequenza per ridurre temporaneamente il carico sul database, nell’interesse di mantenere il gioco attivo. Possiamo assicurarvi che si tratta solo di una mitigazione per il momento – non la vediamo come una soluzione a lungo termine.
Creazione di code di accesso: Lo scorso fine settimana è stato segnato da un insieme di problemi, non lo stesso problema in continuazione. A causa di una base di giocatori rivitalizzata, l’aggiunta di più piattaforme e altri problemi associati allo scaling, potremmo continuare a incorrere in piccoli problemi. Per diagnosticarli e risolverli rapidamente, dobbiamo assicurarci che l'”herding” – grandi numeri di giocatori che accedono contemporaneamente – si interrompa. Per risolvere questo problema, abbiamo persone che lavorano su una coda di login, molto simile a quella che avete sperimentato in World of Warcraft. Questo manterrà la popolazione al livello di sicurezza che abbiamo in quel momento, così possiamo monitorare dove il sistema si sta sforzando e risolverlo prima che faccia crollare completamente il gioco. Ogni volta che sistemiamo una sollecitazione, potremo aumentare i limiti di popolazione. Questa coda di accesso è già stata parzialmente implementata nel backend (al momento sembra un’autenticazione fallita nel client) e dovrebbe essere completamente implementata nei prossimi giorni su PC, con le console a seguire.
Suddivisione di pezzi critici di funzionalità in servizi più piccoli: Questo lavoro è sia parzialmente in corso per quanto riguarda le cose che possiamo affrontare in meno di un giorno (alcune sono state completate già questa settimana) sia previsto per progetti più grandi, come i nuovi microservizi (per esempio, un servizio GameList che si occupa solo di fornire la lista dei giochi ai giocatori). Una volta che la funzionalità critica è stata suddivisa, possiamo pensare a scalare i nostri servizi di gestione dei giochi, il che ridurrà la quantità di carico.
Abbiamo personale che lavora duramente per gestire gli incidenti in tempo reale, diagnosticando i problemi e implementando le correzioni – non solo nel team di D2R, ma in tutta Blizzard. Questo gioco significa molto per tutti noi. Molti di noi del team sono giocatori di D2 da sempre – abbiamo giocato durante il lancio iniziale nel 2000, alcuni fanno parte della comunità di modding e così via. Possiamo assicuravi che continueremo a lavorare finché l’esperienza di gioco non ci sembrerà buona non solo come sviluppatori, ma anche come giocatori e membri della comunità stessa.
Vi preghiamo di continuare ad inviare il vostro feedback al forum Diablo II: Resurrected, di segnalare i vostri bug al nostro forum Bug Report, e per assistenza nella risoluzione dei problemi, visitate il nostro forum Technical Support. Grazie per la vostra continua comunicazione con noi attraverso tutti i canali – è inestimabile mentre lavoriamo su questi problemi.
Il team della comunità di Diablo vi terrà aggiornati sui nostri progressi tramite i forum.
Il team di sviluppo di Diablo II: Resurrected
La nostra riflessione in merito
L’afflusso di cui si parla nell’articolo ci sembra palesemente una nuova ondata di bot, il gioco grazie anche alla sua connessione legacy, permette di essere comunque giocato nella versione originale senza sobbarcare il sistema della nuova grafica.
Ci viene subito da pensare che i botters abbiamo preso al balzo l’occasione e abbiano sviluppato nuovi sistemi per aggirare i controlli. Una volta affinato il sistema l’ingresso è stato ovviamente massimo e di conseguenza non considerato da Blizzard come già illustrato sopra.
Non è stata fatta menzione dei bot, ma è facile, conoscendo la storia passata del gioco, immaginare quanto sia plausibile questa possibilità. Forse ci sbagliamo, forse abbiamo il dente avvelenato, ma le circostanze sembrano voler portare il nostro pensiero in quella direzione. Com’è possibile che all’improvviso miglia di giocatori abbiano deciso istantaneamente di giocare tutti assieme senza averlo fatto prima? Certo esistono le coincidenze, esiste anche la possibilità che un’enorme fetta di giocatori abbia deciso di giocare nello stesso periodo. Ma parliamo comunque di cifre non valutate da Blizzard nel calcolo di dimensionamento dei servizi.
Speriamo che questa piaga venga arginata e magari debellata (un’utopia nei giochi moderni) per consentire a tutti di riuscire a giocare in santa pace.