105 Views

Di: Team di Fortnite

Ciao ragazzi!

Come sapete, il 27 giugno scorso intorno alle 10:00 abbiamo pubblicato la nuova MAT Parco Giochi. In seguito a questo evento si è verificato un sovraccarico del servizio di matchmaking che ha determinato il crash della modalità Parco giochi, ma non solo: anche le altre modalità si sono bloccate.  Abbiamo lavorato duramente per ripristinare i livelli di servizio necessari e siamo finalmente riusciti a ripubblicare la modalità la notte tra il 2 e il 3 luglio scorso.

Che cosa è accaduto?
Il nostro matchmaking si basa sul cosiddetto “Matchmaking service” o MMS, un sistema incaricato di facilitare la “stretta di mano” (handshake) tra i giocatori che intendono unirsi a una partita e un server aperto e disponibile a ospitare quella stessa partita.  Ciascun nodo del cluster di matchmaking contiene una lunga lista di server aperti e disponibili con i quali può collaborare; essi sono distribuiti casualmente per regione, in maniera tale da avere sempre una quantità più o meno simile di server liberi in ciascuna di esse.  I giocatori che si collegano a MMS richiedono al sistema di collegarli a un server ubicato nella propria regione; il MMS assegna ogni giocatore a un nodo, il quale a sua volta sceglie un server libero nella regione richiesta dall’elenco.

Tuttavia, dal momento che la modalità Parco giochi crea partite da 1-4 giocatori invece che da 100 come nelle altre modalità, ha bisogno di un numero di server da 25 a 100 volte superiore a seconda della dimensione dei gruppi.  Anche se la modalità Parco giochi consente di “stringere” un po’ i server virtuali contenuti in ciascuna CPU fisica, avremmo dovuto comunque usare un numero di server 15 volte superiore rispetto al passato.  Questo non è stato un problema: eravamo infatti in grado di assicurare la capacità di server totale necessaria. In conseguenza di questo avvenimento, tuttavia, si sono notevolmente allungate le liste che ciascun nodo doveva gestire, cresciute di ben 15 volte.

Quando un nodo MMS non è in grado di trovare un server libero per la regione richiesta all’interno del suo elenco, deve chiedere a tutti gli altri nodi di fornirgliene uno libero consultando ciascuna delle loro liste locali.  L’allungamento delle liste ha reso questo procedimento molto più lento e più complesso.  I nodi che sono stati costretti a consultare altre liste (ciascuna di esse, ricordiamolo, 15 volte più lunga rispetto al passato) hanno registrato tempi di elaborazione per nodo di 15 volte superiori, il che ha determinato un enorme aumento della potenza e dei tempi di calcolo necessari.  Quando abbiamo pubblicato Parco Giochi l’enorme richiesta di matchmaking ha esaurito gli elenchi locali dei nodi MMS molto più velocemente rispetto al tempo di aggiornamento massimo del sistema.  Ciascun nodo consultava i suoi simili alla ricerca di server aggiuntivi che non erano presenti o, quantomeno, impiegava moltissimo tempo per spulciarne le liste e trovarne uno disponibile.  I lunghi tempi di elaborazione hanno fatto sì che la CPU accumulasse un’enorme quantità di richieste inevase, le quali hanno determinato un loop di feedback che ha infine portato l’intero sistema a un crash totale.

Che cosa abbiamo fatto per risolvere il problema?
La nostra prima azione, subito dopo aver disattivato la modalità, è stata separare l’MMS di Parco Giochi affinché utilizzasse un cluster di servizio a parte.  Questa misura si è rivelata necessaria non solo per impedire che si ingolfassero le modalità di base, ma anche per poter fare tutte le sistemazioni e le prove necessarie a riportare online Parco Giochi. Abbiamo implementato livelli sempre maggiori di ristrutturazione e li abbiamo testati accuratamente finché non abbiamo raggiunto i criteri di accettabilità che ci hanno consentito di ripubblicare la modalità.

Una volta identificata la causa prima del problema (l’esaurimento di sessioni dalle liste locali), la soluzione è stata identificata nel fornire al cluster la capacità di bilanciare le sessioni congestionate degli altre nodi, in maniera tale da rendere superflua la ripetizione in loop delle ricerche.  Dato che il sistema sposta continuamente la capacità regionale dai nodi eccessivamente liberi a quelli a rischio di rallentamento, le probabilità che un nodo restasse senza server liberi in una regione e dovesse quindi andare a cercarne altri al di fuori della sua lista locale si sono drasticamente ridotte.  Anche se questo problema non si è finora mai verificato nelle modalità di gioco principali della Battaglia reale di Fortnite, implementeremo lo stesso aggiornamento anche nel cluster principale di MMS per rendere il sistema complessivamente ancor più resiliente.

Durante la ristrutturazione del MMS abbiamo spinto i nostri “stress test” sul carico al limite; infatti, la portata degli avvenimenti che abbiamo simulato ha ecceduto di gran lunga l’utilizzo normale o i parametri di prova standard.  Abbiamo dovuto creare molti milioni di utenti teorici e farli connettere al nostro sistema MMS di Parco giochi in una sola, strabordante ondata per mettere alla prova il nuovo strumento di bilanciamento di sessione.  Anche se il ciclo di sistemazione/prova/valutazione ci ha tenuti impegnati per svariate ore a ogni iterazione, ci ha aiutato a sviluppare e ridefinire il comportamento di bilanciamento finché non siamo stati sicuri che fosse in grado di reggere l’urto, nonché a identificare e sistemare i bug “limite” che avrebbero potuto minacciare la ripubblicazione della modalità Parco giochi.

Quali lezioni abbiamo appreso?
Per farla breve, abbiamo imparato molte cose sul nostro sistema di matchmaking e sui suoi punti deboli.  Abbiamo progettato e approntato il sistema in base a quelle che pensavamo essere la capacità e le prestazioni di matchmaking necessarie calcolando la dimensione della nostra base di giocatori (più un cuscinetto di sicurezza), ma non avevamo previsto il caso limite di un’ondata iniziale di giocatori che avrebbe potuto esaurire gli elenchi locali.

Una volta rimessa online la modalità abbiamo appreso un’altra nozione:  avevamo infatti deciso di ripubblicare Parco Giochi poco a poco, una regione e una piattaforma alla volta, allo scopo di ridurre il carico iniziale del sistema e di procedere per gradi.  In realtà, il risultato di questa operazione è stato esattamente l’opposto: i giocatori si sono trasferiti in massa dalle regioni che non avevano ancora la nuova modalità a quelle in cui era già stata abilitata, e così facendo ci hanno costretto a rallentare la procedura, in quanto abbiamo dovuto fronteggiare problemi di capacità.  Il lato positivo della faccenda è che ora abbiamo molta più visibilità sulla quantità di risorse cloud totali disponibili in Asia rispetto al passato, e chiediamo a gran voce ai nostri partner dei servizi cloud di collaborare con noi per riuscire a riequilibrare la situazione il prima possibile!

Il processo di stabilizzazione e pubblicazione della modalità Parco giochi, in definitiva, è stato molto più complesso del previsto, ma ci ha ricordato che i sistemi complessi e distribuiti possono avere problemi totalmente impronosticabili.  Abbiamo dovuto eseguire svariati aggiornamenti d’emergenza al nostro servizio di matchmaking, i quali saranno molto utili per il nostro gioco che è in continua crescita e ci consentiranno di espandere ancor di più la nostra base di giocatori in futuro.

Annunci

Posted by FortniteITALY