Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
GAMEOPS03-BP03 Test di caricamento precoce e frequente
Il test di carico è il processo di simulazione del traffico reale su un sistema per valutarne l'affidabilità e le prestazioni.
Livello di rischio associato se questa best practice non fosse adottata: elevato
Guida all’implementazione
Il test di carico è un fattore chiave per lo sviluppo di una base prestazionale per le risorse e la comprensione della capacità del sistema, che può guidare le previsioni finanziarie, la progettazione dell'architettura, l'allocazione delle risorse, le configurazioni di scalabilità automatizzate e le attività di pre-scalabilità post-lancio. I vantaggi aggiuntivi includono:
-
Infrastruttura ottimizzata: il provisioning delle risorse potrebbe essere eccessivo o insufficiente. La comprensione delle risorse necessarie comporterà una riduzione dei costi e una minore infrastruttura da gestire.
-
Predisposizione alla scalabilità: alcuni meccanismi e funzionalità possono spingere gli utenti a iniziare rapidamente a giocare. Sapere quando e come scalare può fare la differenza tra soddisfare adeguatamente l'aumento della domanda e perdere giocatori. Utilizza i risultati dei test di carico per preparare i runbook con soglie di sistema, punti di avviso e punti di avviso critici a diversi livelli di scala.
-
Codice di qualità superiore: problemi come l'eccessiva diafonia tra i servizi, le chiamate al database non in batch, gli algoritmi inefficienti, le perdite di memoria e i problemi di degrado del servizio sono a volte più semplici da identificare su larga scala.
-
Convalida del comportamento: l'inserimento di diversi tipi di errori nei test può convalidare il comportamento previsto del sistema o scoprire problemi di gestione degli errori che devono essere corretti.
Idealmente, gli sviluppatori dovrebbero eseguire i test di carico in più punti durante il processo di sviluppo, poiché ognuno di essi può offrire vantaggi diversi: nella fase iniziale, guidano le decisioni sull'architettura e le attività di refactoring, mentre è più economico e semplice apportare modifiche. Alla fine di ogni sprint o iterazione, convalidano le prestazioni dell'applicazione con le caratteristiche e le funzionalità più recenti.
Prima dell'implementazione in produzione, i test di carico su larga scala che simulano i modelli di utilizzo previsti nel mondo reale confermano la capacità del sistema di gestire il carico di lavoro di produzione. Dopo l'implementazione, i test di carico periodici monitorano le prestazioni del sistema e identificano i cambiamenti o le strozzature che possono insorgere nel tempo.
Per simulare il traffico dei giocatori, sono necessari client o bot leggeri che emulino i flussi del client di gioco e che interagiscano con il backend del gioco per simulare il comportamento dei giocatori nel mondo reale. Questi dati vengono generalmente acquisiti attraverso i log di gioco e i dati generati da test di controllo qualità condotti da persone, nonché attraverso alfa o beta test reali su scala limitata in cui i giocatori reali sono invitati a giocare a una versione del gioco ad accesso anticipato.
È importante registrare il comportamento del sistema in un runbook operativo per facilitare la risoluzione di possibili guasti futuri e conservare i parametri prestazionali con cui confrontare i test di carico futuri. Si consiglia inoltre di far testare il gioco da personale addetto al controllo qualità durante il test di carico, in quanto potrebbe scoprire problemi che i bot non riescono a identificare e che le metriche non riflettono.
AWS Fault Injection Service
Passaggi dell’implementazione
-
Personalizza e distribuisci Locust Control e Worker Pods all'interno del cluster EKS utilizzando i file di distribuzione forniti, abilitando una generazione di carico scalabile e gestibile.
-
Registra il comportamento e le metriche del sistema durante i test di carico in un runbook operativo per facilitare la risoluzione dei problemi futuri e stabilire le linee di base delle prestazioni.
-
Utilizza esperimenti di fault injection per simulare interruzioni nel mondo reale e scoprire problemi nascosti nelle prestazioni, nell'osservabilità e nella resilienza del sistema.