View a markdown version of this page

GAMEOPS05-BP01 Scegli lo stage, l'architettura e il framework di test di carico giusti per raggiungere i tuoi obiettivi - Games Industry Lens

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-BP01 Scegli lo stage, l'architettura e il framework di test di carico giusti per raggiungere i tuoi obiettivi

L'approccio al test di carico di un gioco può variare in modo significativo a seconda di 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 del carico. Il momento 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 focus delle attività di test. I diversi modelli di infrastruttura di generazione del carico hanno i propri pro e contro e la scelta del framework di test del carico influenza notevolmente le funzionalità, 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 alle caratteristiche uniche del gioco, estrarre le informazioni più preziose sulle prestazioni e fornire un'esperienza fluida ai propri 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 che venga svolto un ampio lavoro di implementazione. I test di carico identificano i rischi e creano una base di riferimento per le prestazioni, riducendo potenzialmente al minimo la necessità di costose rilavorazioni e debiti tecnici più avanti nel ciclo di vita dello sviluppo. Possono anche favorire una comprensione condivisa dei requisiti prestazionali del gioco tra il team, portando a una migliore collaborazione e processo decisionale. In definitiva, i test di carico durante le fasi iniziali gettano una solida base per un gioco ad alte prestazioni, scalabile e resiliente, contribuendo a migliorare l'esperienza complessiva del giocatore.

Al termine di ogni sprint o iterazione, i test di carico possono 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 i peggioramenti delle prestazioni introdotti dagli ultimi aggiornamenti, consentendo loro di risolvere questi problemi prima che si propaghino ulteriormente nella pipeline e mantenendo un livello costante di qualità e prestazioni.

Prima di passare alla produzione, dei robusti test di carico aiutano i team a convalidare la capacità del sistema di gestire le condizioni di traffico e carico previste nel mondo reale. Possono individuare gli ostacoli alla scalabilità o i limiti 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 del lancio e contribuire alla 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 produzione consente ai team di monitorare le prestazioni del gioco 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 del giocatore 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 implementati. Questo processo offre ai giocatori un'esperienza di gioco di alta qualità, reattiva e scalabile anche quando il gioco si evolve e matura.

Architetture che generano carico

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

Al livello più elementare, le EC2 istanze Amazon autogestite possono essere fornite e configurate per fungere da generatori di carico. Con un approccio basato su nodi di controllo e nodi di lavoro, puoi configurare più istanze che generano carico, ognuna delle quali esegue il proprio script di test e gestita complessivamente da un'unica istanza di controllo. L'architettura può scalare e generare più carico senza aumentare la complessità creando nodi di lavoro aggiuntivi, ma questo approccio pratico richiede ai team di gestire il provisioning, la configurazione e la 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 del 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 carico, mentre i team stessi configurano e gestiscono le istanze sottostanti nel cluster che ospita i pod. EC2  

In alternativa, la natura serverless di AWS Fargatepuò velocizzare e semplificare la configurazione dei test di carico eliminando la gestione dell'infrastruttura, pur garantendo la scalabilità e la flessibilità necessarie. Per le soluzioni ibride in cui esiste già un cluster Kubernetes locale che genera carichi, ma potrebbe essere necessaria una capacità aggiuntiva, EKS Anywhere è in grado di gestire entrambi i cluster come se fossero uno dal. Console di gestione AWS

È inoltre possibile utilizzare AWS Lambdale funzioni in base alle proprie esigenze e ai propri 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 presentano limiti alle funzioni simultanee e al tempo di esecuzione (15 minuti), il che può limitare la scala e la durata dei test di carico che è possibile eseguire. Anche le latenze di avvio a freddo possono influire sulla precisione dei risultati e le limitazioni delle risorse di Lambda potrebbero non essere adatte a carichi di lavoro di test di carico molto impegnativi.

Gli studi che desiderano utilizzare una soluzione preconfigurata possono utilizzare Distributed Load Testing su. AWS Questa soluzione utilizza Amazon ECS AWS Fargate per distribuire container in grado di eseguire simulazioni di decine di migliaia di utenti connessi. È possibile utilizzarlo per avviare rapidamente l'infrastruttura di test di carico in stile IAC utilizzando. AWS CloudFormation

Framework di test di carico

Non esistono due framework di test di carico creati allo stesso modo. Alcuni dispongono di interfacce grafiche intuitive per la creazione di test, mentre altri sono interamente basati sulla riga di comando. Uno strumento può essere flessibile e performante ma richiedere tempo e impegno per la configurazione e la gestione, mentre un altro potrebbe essere serverless ma limitato nei test che può creare ed eseguire. Alcuni godono di grandi community e di numerosi tutorial, pur non essendo collaudati sul campo, a differenza di altri che, pur essendo già ampiamente testati in fase di produzione, non dispongono del supporto o della documentazione della comunità. Scegli il framework che rappresenta il giusto equilibrio per te e il tuo team. Alcune delle opzioni più popolari sono:

  • Apache JMeter: popolare framework di test di carico open source basato su Java 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 lo rendono JMeter una scelta affidabile per i test di carico.

  • Locust: framework di test di carico moderno e distribuito basato su un'architettura basata sugli eventi, che lo rende performante ed efficiente sotto il profilo delle risorse. I test sono scritti in Python, il che consente 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 load testing open source noto per le sue prestazioni e scalabilità. Il suo linguaggio DSL (Domain-Specific Language) basato su Scala 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 esame.

Passaggi dell’implementazione

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

  • Architetture di generazione del carico: scegli le architetture di generazione del carico appropriate (EC2EKS, 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 Locust JMeter, Grafana K6 o Gatling) che bilanci facilità d'uso, prestazioni, flessibilità e supporto della community per soddisfare le esigenze del tuo team.