

# REL12-BP03 Test dei requisiti di scalabilità e prestazioni
<a name="rel_testing_resiliency_test_non_functional"></a>

 Utilizza tecniche come i test di carico per convalidare che il carico di lavoro soddisfi i requisiti di dimensionamento e prestazioni. 

 Nel cloud puoi creare un ambiente di test su scala di produzione per il carico di lavoro su richiesta. Invece di affidarti a un ambiente di test con risorse ridotte verticalmente, che potrebbe portare a previsioni imprecise dei comportamenti in produzione, puoi utilizzare il cloud per fornire un ambiente di test che rispecchi fedelmente l'ambiente di produzione previsto. Questo ambiente consente di eseguire i test in una simulazione più precisa delle condizioni reali in cui si trova l'applicazione. 

 Oltre ai test sulle prestazioni, è essenziale verificare che le risorse di base, le impostazioni di dimensionamento, Service Quotas e la progettazione di resilienza funzionino come previsto sotto carico. Questo approccio olistico verifica che l'applicazione sia in grado di scalare in modo affidabile e funzionare come richiesto, anche nelle condizioni più difficili. 

 **Risultato desiderato:** il carico di lavoro mantiene il comportamento previsto anche quando è soggetto a picchi di carico. Affronti in modo proattivo tutti i problemi di prestazioni che possono verificarsi con la crescita e l'evoluzione dell'applicazione. 

 **Anti-pattern comuni:** 
+  Utilizzi ambienti di test che non corrispondono strettamente all'ambiente di produzione. 
+  Tratti il test di carico come un'attività separata e una tantum, anziché come una parte integrata della pipeline di integrazione continua (CI) dell'implementazione. 
+  Non definisci requisiti di prestazione chiari e misurabili, come tempi di risposta, throughput e obiettivi di scalabilità. 
+  Esegui test con scenari di carico non realistici o insufficienti e non esegui test per picchi di carico, picchi improvvisi e carico elevato sostenuto. 
+  Non solleciti il carico di lavoro superando i limiti di carico previsti. 
+  Utilizzi strumenti di test di carico e di profiling delle prestazioni inadeguati o inappropriati. 
+  Non disponi di sistemi di monitoraggio e di avviso completi per monitorare le metriche delle prestazioni e rilevare anomalie. 

 **Vantaggi dell'adozione di questa best practice:** 
+  I test di carico aiutano a identificare i potenziali colli di bottiglia delle prestazioni del sistema prima del passaggio in produzione. Quando simuli il traffico e i carichi di lavoro a livello di produzione, puoi identificare le aree in cui il sistema può avere difficoltà a gestire il carico, come tempi di risposta lenti, vincoli delle risorse o errori di sistema. 
+  Testando il sistema in varie condizioni di carico, puoi comprendere meglio i requisiti delle risorse necessari per supportare il carico di lavoro. Queste informazioni possono aiutarti a prendere decisioni informate sull'allocazione delle risorse e a prevenire l'eccesso o il difetto di provisioning di risorse. 
+  Per identificare i potenziali punti di errore, puoi osservare come si comporta il carico di lavoro in condizioni di carico elevato. Queste informazioni aiutano a migliorare l'affidabilità e la resilienza del carico di lavoro implementando meccanismi di tolleranza agli errori, strategie di failover e misure di ridondanza, a seconda dei casi. 
+  Identifichi e risolvi tempestivamente i problemi di prestazioni, evitando così le costose conseguenze di interruzioni del sistema, tempi di risposta lenti e utenti insoddisfatti. 
+  I dati dettagliati sulle prestazioni e le informazioni di profiling raccolte durante i test possono aiutarti a risolvere i problemi correlati alle prestazioni che potrebbero sorgere in produzione. Questo può portare a una risposta e a una risoluzione più rapida degli incidenti, riducendo l'impatto sugli utenti e sulle operazioni dell'organizzazione. 
+  In alcuni settori, il test proattivo delle prestazioni può aiutare il carico di lavoro a soddisfare gli standard di conformità, riducendo il rischio di sanzioni o problemi legali. 

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

## Guida all'implementazione
<a name="implementation-guidance"></a>

 Il primo passo consiste nel definire una strategia di test completa che copra tutti gli aspetti dei requisiti di dimensionamento e prestazioni. Per iniziare, definisci chiaramente gli obiettivi di livello di servizio (SLO) del carico di lavoro in base alle esigenze aziendali, come il throughput, l'istogramma della latenza e il tasso di errore. Quindi, progetta una suite di test in grado di simulare vari scenari di carico che vanno dall'utilizzo medio a picchi improvvisi e a carichi di picco sostenuti, e verifica che il comportamento del carico di lavoro soddisfi gli SLO. Questi test devono essere automatizzati e integrati nella pipeline di integrazione e implementazione continua per individuare le regressioni delle prestazioni nelle prime fasi del processo di sviluppo. 

 Per testare efficacemente il dimensionamento e le prestazioni, investi negli strumenti e nell'infrastruttura corretti. Ciò include strumenti di test di carico in grado di generare un traffico utente realistico, strumenti di profiling delle prestazioni per identificare i colli di bottiglia e soluzioni di monitoraggio per tracciare le metriche chiave. È importante verificare che gli ambienti di test corrispondano fedelmente all'ambiente di produzione in termini di infrastrutture e condizioni ambientali, in modo da ottenere risultati il più possibile accurati. Per rendere più facile replicare e scalare in modo affidabile le configurazioni simili a quelle di produzione, utilizza infrastructure as code e le applicazioni basate su container. 

 I test di dimensionamento e sulle prestazioni sono un processo continuo, non un'attività una tantum. Implementa il monitoraggio completo e gli avvisi per monitorare le prestazioni dell'applicazione in produzione e utilizza questi dati per perfezionare continuamente le strategie di test e gli sforzi di ottimizzazione. Analizza regolarmente i dati sulle prestazioni per identificare i problemi emergenti, testare nuove strategie di dimensionamento e implementare ottimizzazioni per migliorare l'efficienza e l'affidabilità dell'applicazione. Quando adotti un approccio iterativo e impari costantemente dai dati di produzione, puoi verificare che l'applicazione è in grado di adattarsi alle richieste variabili degli utenti e mantenere la resilienza e le prestazioni ottimali nel tempo. 

### Passaggi dell'implementazione
<a name="implementation-steps"></a>

1.  Stabilisci requisiti di prestazioni chiari e misurabili, come tempi di risposta, throughput e obiettivi di scalabilità. Questi requisiti devono essere basati sui modelli di utilizzo del carico di lavoro, sulle aspettative degli utenti e sulle esigenze aziendali. 

1.  Seleziona e configura uno strumento di test del carico in grado di simulare accuratamente i modelli di carico e il comportamento degli utenti nell'ambiente di produzione. 

1.  Per migliorare la precisione dei risultati dei test, configura un ambiente di test che corrisponde strettamente all'ambiente di produzione, comprese le condizioni dell'infrastruttura e dell'ambiente. 

1.  Crea una suite di test che copre un'ampia gamma di scenari, dai modelli di utilizzo medio ai picchi di carico, ai picchi rapidi e ai carichi elevati sostenuti. Integra i test nelle pipeline di implementazione e distribuzione continua per individuare regressioni delle prestazioni fin dalle prime fasi del processo di sviluppo. 

1.  Esegui test di carico per simulare il traffico reale degli utenti e capire come si comporta l'applicazione in diverse condizioni di carico. Per sollecitare l'applicazione, supera il carico previsto e osserva il suo comportamento, come il degrado dei tempi di risposta, l'esaurimento delle risorse o gli errori di sistema. Ciò aiuta a identificare il punto di rottura dell'applicazione e a informare le strategie di dimensionamento. Valuta la scalabilità del carico di lavoro aumentandolo progressivamente e misura l'impatto sulle prestazioni per identificare i limiti di dimensionamento e pianificare le esigenze di capacità future. 

1.  Implementa monitoraggio completo e avvisi per tracciare le metriche delle prestazioni, rilevare le anomalie e avviare azioni di dimensionamento o notifiche quando vengono superate le soglie. 

1.  Monitora e analizza costantemente i dati sulle prestazioni per identificare le aree di miglioramento. Itera le strategie di test e gli sforzi di ottimizzazione. 

## Risorse
<a name="resources"></a>

 **Best practice correlate:** 
+  [REL01-BP04 Monitoraggio e gestione delle quote](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_manage_service_limits_monitor_manage_limits.html) 
+  [REL06-BP01 Monitoraggio di tutti i componenti per il carico di lavoro (generazione)](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_monitor_resources.html) 
+  [REL06-BP03 Invio di notifiche (elaborazione e avvisi in tempo reale)](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_monitor_aws_resources_notification_monitor.html) 

 **Documenti correlati:** 
+  [Load testing applications](https://docs.aws.amazon.com/prescriptive-guidance/latest/load-testing/welcome.html) 
+  [Test del carico distribuito su AWS](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/) 
+  [Monitoraggio delle prestazioni delle applicazioni](https://aws.amazon.com/what-is/application-performance-monitoring/) 
+  [Amazon EC2 Testing Policy](https://aws.amazon.com/ec2/testing/) 

 **Esempi correlati:** 
+  [Distributed Load Testing on AWS (GitHub)](https://github.com/aws-solutions/distributed-load-testing-on-aws) 

 **Strumenti correlati:** 
+  [Profilatore Amazon CodeGuru](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) 
+  [Amazon CloudWatch RUM](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM.html) 
+  [Apache JMeter](https://jmeter.apache.org/) 
+  [K6](https://k6.io/) 
+  [Vegeta](https://github.com/tsenart/vegeta) 
+  [Hey](https://github.com/rakyll/hey) 
+  [ab](https://httpd.apache.org/docs/2.4/programs/ab.html) 
+  [wrk](https://github.com/wg/wrk) 
+ [ Test del carico distribuito su AWS](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/)