View a markdown version of this page

GAMEOPS05-BP01Scegli la fase, l'architettura e il framework di test di carico giusti per raggiungere i tuoi obiettivi - 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à.

GAMEOPS05-BP01Scegli la fase, l'architettura e il framework di test di carico giusti per raggiungere i tuoi obiettivi

L'approccio al load testing di un gioco può variare notevolmente in base a molti fattori, tra cui la fase del processo di sviluppo in cui viene eseguito, l'architettura del sistema di generazione del carico stesso e la scelta del framework di test di carico. La tempistica in cui verrà condotto, nelle fasi iniziali, durante gli sprint iterativi, prima dell'implementazione in produzione o dopo l'implementazione, determinerà gli obiettivi e il fulcro delle attività di test. I diversi progetti di infrastruttura di generazione di carico hanno i loro pro e contro e la scelta del framework di test di carico influenza notevolmente le capacità, la facilità d'uso e le integrazioni disponibili per il processo di test. Allineando attentamente questi elementi, i team di sviluppo possono adattare l'approccio ai test di carico in base alle caratteristiche uniche del gioco, estrarre le informazioni più preziose sulle prestazioni e offrire un'esperienza fluida ai giocatori.

Livello di rischio associato se questa best practice non fosse adottata: elevato

Guida all’implementazione

Test di carico in diverse fasi di sviluppo

L'esecuzione di test di carico esplorativi nelle prime fasi di sviluppo può convalidare l'architettura di sistema sottostante. Questo aiuta gli sviluppatori a prendere decisioni informate sull'infrastruttura del gioco, sulla progettazione del database e sulla topologia di rete prima di eseguire un lungo lavoro di implementazione. I test di carico identificano i rischi e creano una base prestazionale, riducendo potenzialmente al minimo la necessità di costose rilavorazioni e debiti tecnici nelle fasi successive del ciclo di vita dello sviluppo. Possono anche favorire una comprensione condivisa dei requisiti prestazionali del gioco tra il team, migliorando la collaborazione e il processo decisionale. In definitiva, i test di carico durante le fasi iniziali costituiscono una solida base per un gioco ad alte prestazioni, scalabile e resiliente, contribuendo a migliorare l'esperienza complessiva dei giocatori.

Alla fine di ogni sprint o iterazione, il load testing può valutare l'impatto sulle prestazioni delle nuove funzionalità, delle correzioni di bug e di altre modifiche introdotte nell'ultimo ciclo. Questo approccio mirato consente ai team di sviluppo di identificare rapidamente le regressioni o le riduzioni delle prestazioni introdotte dagli ultimi aggiornamenti, consentendo loro di risolvere questi problemi prima che si diffondano ulteriormente e mantenendo un livello costante di qualità e prestazioni.

Prima di passare alla produzione, solidi test di carico aiutano i team a convalidare la capacità del sistema di gestire il traffico e le condizioni di carico previste nel mondo reale. Possono scoprire i problemi di scalabilità o i vincoli di risorse all'interno dell'infrastruttura di produzione e offrire l'opportunità di ottimizzare le prestazioni del gioco, creando un'esperienza utente fluida e reattiva sin dal primo giorno. Le informazioni acquisite dai test di carico prima del lancio possono mitigare i rischi del giorno di lancio e consentire una pianificazione continua della capacità, che pone le basi per la sostenibilità e la scalabilità a lungo termine del gioco.

Il test di carico di un gioco già in fase di produzione consente ai team di monitorarne le prestazioni e identificare regressioni o peggioramenti delle prestazioni che possono verificarsi nel tempo. Ciò consente loro di risolvere i problemi in modo proattivo prima che influiscano sull'esperienza dei giocatori e influiscano negativamente sulla fidelizzazione degli utenti. Inoltre, i test di carico in produzione convalidano l'efficacia degli sforzi di ottimizzazione delle prestazioni o della scalabilità dell'infrastruttura implementata. Questo processo offre ai giocatori un'esperienza di gioco di alta qualità, reattiva e scalabile anche man mano che il gioco si evolve e matura.

Load-generating architetture

La progettazione dell'architettura di generazione del carico per il test del carico di gioco può assumere varie forme, ognuna con una serie di vantaggi e considerazioni. 

Al livello più elementare, le istanze Amazon EC2 autogestite possono essere predisposte e configurate per fungere da generatori di carico. Con un approccio basato sui nodi di controllo e sui nodi di lavoro, puoi configurare più istanze generatrici di carico, ognuna delle quali esegue il proprio script di test e gestita complessivamente da una singola istanza di controllo. L'architettura può scalare e generare più carico senza aumentare la complessità attivando nodi di lavoro aggiuntivi, ma questo approccio pratico richiede che i team si occupino del provisioning, della configurazione e della gestione dell'infrastruttura sottostante.

Per un approccio più scalabile e orchestrato, puoi utilizzare i cluster Amazon EKS Kubernetes per gestire e distribuire il carico di lavoro di test di carico su una flotta di agenti di carico basati su container. Le funzionalità di scalabilità automatica di Kubernetes possono essere utilizzate per gestire il ridimensionamento dei pod che generano il carico, mentre i team stessi configurano e gestiscono le istanze EC2 sottostanti nel cluster che ospita i pod. 

In alternativa, la natura serverless di AWS Fargate può velocizzare e semplificare la configurazione dei test di carico astraendo la gestione dell'infrastruttura e fornendo comunque la scalabilità e la flessibilità necessarie. Per le soluzioni ibride in cui esiste già un cluster Kubernetes on-premise che genera carichi ma potrebbe essere necessaria una capacità aggiuntiva, EKS Anywhere può gestire entrambi i cluster contemporaneamente. Console di gestione AWS

Puoi anche utilizzare AWS Lambda le funzioni in base alle tue esigenze e ai tuoi obiettivi. Le funzioni Lambda sono relativamente semplici da configurare e scalare senza la necessità di fornire e gestire risorse aggiuntive. Consentono inoltre la creazione di scenari di test più complessi e dinamici grazie alla profonda integrazione con altri servizi. AWS Tuttavia, le funzioni Lambda hanno dei limiti sulle funzioni simultanee e sul tempo di esecuzione (15 minuti), il che può limitare la scala e la durata dei test di carico che possono essere eseguiti. Le latenze di avvio a freddo possono anche influire sulla precisione dei risultati e le limitazioni delle risorse di Lambda potrebbero non essere adatte per carichi di lavoro di test di carico molto impegnativi.

Gli studi che desiderano utilizzare una soluzione predefinita possono utilizzare Distributed Load Testing su. AWS Questa soluzione utilizza Amazon ECS AWS Fargate per distribuire contenitori in grado di eseguire simulazioni di decine di migliaia di utenti connessi. Puoi utilizzarlo per avviare rapidamente la tua infrastruttura di test di carico in modalità IAC utilizzando. AWS CloudFormation

Framework di test di carico

Non esistono due framework di test di carico uguali. Alcuni dispongono di interfacce grafiche intuitive per la creazione di test, mentre altri sono interamente basati sulla riga di comando. Uno strumento potrebbe essere flessibile e performante ma richiedere tempo e impegno per la configurazione e la gestione, mentre un altro potrebbe essere senza server ma limitato nei test che può creare ed eseguire. Alcuni apprezzano le community numerose e i numerosi tutorial, ma non sono ancora collaudati sul campo, il che contrasta nettamente con altri che potrebbero essere testati sul campo ma non dispongono del supporto o della documentazione da parte della community. Scegli il framework che offre il giusto equilibrio per te e il tuo team. Alcune delle opzioni più diffuse sono:

  • Apache JMeter: popolare Java-based framework open source per test di carico grazie al suo robusto set di funzionalità e alla facilità d'uso. La sua capacità di simulare scenari utente complessi, l'ampia gamma di protocolli supportati, la reportistica completa e la comprovata esperienza rendono JMeter una scelta affidabile per i test di carico.

  • Locust: moderno framework di test di carico distribuito basato su un'architettura basata sugli eventi, che lo rende performante ed efficiente in termini di risorse. I test sono scritti in Python, consentendo scenari di test flessibili che sfruttano migliaia di potenti librerie di terze parti, pur rimanendo intuitivi e semplici da leggere.

  • Grafana K6: potente framework di test di carico che combina facilità d'uso con funzionalità avanzate. Il supporto per la generazione di carichi distribuiti, lo scripting flessibile e la perfetta integrazione con Grafana per la visualizzazione dei dati rendono Grafana K6 una scelta interessante.

  • Gatling: framework di test di Open-source carico noto per le sue prestazioni e scalabilità. Il suo Scala-based linguaggio DSL (Domain-Specific Language) consente agli sviluppatori di creare script di test di carico concisi e gestibili e le sue solide funzionalità di reporting e analisi forniscono informazioni dettagliate sul sistema in fase di test.

Passaggi dell’implementazione

  • Fasi di test di carico: esegui test di carico in varie fasi di sviluppo (sviluppo iniziale, sprint, pre-produzione e post-distribuzione) per convalidare le prestazioni del sistema e identificare i problemi.

  • Load-generatingarchitetture: scegli le architetture di generazione di carico appropriate (EC2, EKS, Fargate o Lambda) in base alle esigenze di scalabilità, alle preferenze di gestione e ai requisiti di test specifici.

  • Framework di test di carico: seleziona un framework di test di carico (come JMeter, Locust, Grafana K6 o Gatling) che bilanci facilità d'uso, prestazioni, flessibilità e supporto della community per soddisfare le esigenze del tuo team.