View a markdown version of this page

GAMEOPS03-BP03 Test di carico precoce e frequente - Obiettivo per l'industria dei giochi

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 carico 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à automatiche e le attività di pre-scalabilità successive al lancio. I vantaggi aggiuntivi includono:

  • Infrastruttura ottimizzata: le risorse potrebbero essere sovradimensionate o insufficienti. La comprensione delle risorse necessarie comporterà una riduzione dei costi e dell'infrastruttura da gestire.

  • Prontezza alla scalabilità: alcuni meccanismi e funzionalità possono spingere gli utenti a entrare rapidamente nel gioco. Sapere quando e come scalare può fare la differenza tra soddisfare in modo adeguato l'aumento della domanda e perdere giocatori. Usa i risultati dei test di carico per preparare runbook con soglie di sistema, punti di avviso e punti di avviso critici a diversi livelli di scalabilità.

  • Codice di qualità superiore: problemi come l'eccessiva diafonia tra i servizi, le chiamate non batch al database, gli algoritmi inefficienti, le perdite di memoria e i problemi di degrado del servizio sono talvolta 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 del processo di sviluppo, poiché ognuno di essi può offrire diversi vantaggi: fin dall'inizio, guidano le decisioni sull'architettura e gli sforzi di refactoring, mentre apportare modifiche è più economico e semplice. 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 le modifiche o i colli di bottiglia che possono insorgere nel tempo.

Per simulare il traffico dei giocatori, hai bisogno di client o bot leggeri che emulino i flussi del client di gioco ed effettuino transazioni con il backend del gioco per simulare il comportamento dei giocatori nel mondo reale. Questi dati vengono generalmente acquisiti tramite registri di gioco e dati generati da test di controllo qualità condotti dall'uomo, nonché tramite alpha o beta test reali su scala limitata in cui i giocatori reali sono invitati a provare una versione del gioco ad accesso anticipato.

È importante registrare il comportamento del sistema in un runbook operativo per facilitare la risoluzione di eventuali guasti futuri e conservare le metriche delle prestazioni con cui confrontare i test di carico futuri. Si consiglia inoltre di far testare il gioco da personale addetto al controllo qualità umano 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 è un servizio completamente gestito per l'esecuzione di esperimenti di fault injection che semplificano il miglioramento delle prestazioni, dell'osservabilità e della resilienza di un'applicazione. Gli esperimenti di fault injection vengono utilizzati nell'ingegneria del caos, ossia la pratica di stressare un'applicazione in ambienti di test o produzione creando eventi dirompenti, come un improvviso aumento del consumo di CPU o memoria, osservando come risponde il sistema e implementando miglioramenti. Gli esperimenti di fault injection aiutano i team a creare le condizioni reali necessarie per scoprire i bug nascosti, monitorare i punti ciechi e le strozzature prestazionali che sono difficili da riscontrare nei sistemi distribuiti.

Passaggi dell’implementazione

  • Configura un ambiente di test di carico distribuito utilizzando Guidance for Game Load Testing. Kubernetes-Bases

  • Personalizza e distribuisci Locust Control e worker pod all'interno del cluster EKS utilizzando i file di distribuzione forniti, consentendo 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.

  • Usa gli esperimenti di fault injection per simulare interruzioni del mondo reale e scoprire problemi nascosti nelle prestazioni, nell'osservabilità e nella resilienza del sistema.