

# Best practice
<a name="perf-bp"></a>

**Topics**
+ [Scelta dell'architettura](perf-arch.md)
+ [Calcolo e hardware](perf-compute.md)
+ [Gestione dati](perf-data.md)
+ [Reti e distribuzione di contenuti](perf-networking.md)
+ [Processo e cultura](perf-process.md)

# Scelta dell'architettura
<a name="perf-arch"></a>

 La soluzione ottimale per un determinato carico di lavoro può variare e le soluzioni spesso combinano molteplici approcci. I carichi di lavoro Well-Architected utilizzano soluzioni multiple e impiegano funzionalità diverse per migliorare le prestazioni. 

 Le risorse AWS sono disponibili in diverse configurazioni e tipologie, il che semplifica la ricerca di un approccio che soddisfi appieno le tue esigenze. Inoltre, puoi trovare opzioni che non sono facili da trovare nelle infrastrutture in locale. Ad esempio, un servizio gestito come Amazon DynamoDB offre un database NoSQL interamente gestito, con una latenza di pochissimi millisecondi, indipendentemente dalle dimensioni. 

 Le seguenti domande si concentrano su queste considerazioni relative all'efficienza delle prestazioni. (Per l'elenco completo delle domande e delle best practice relative all'efficienza delle prestazioni, consulta l' [Appendix](a-performance-efficiency.md).). 


| PERF 1:  How do you select appropriate cloud resources and architecture patterns for your workload? | 
| --- | 
|  Often, multiple approaches are required for more effective performance across a workload. Well-Architected systems use multiple solutions and features to improve performance.  | 

# Calcolo e hardware
<a name="perf-compute"></a>

 La soluzione ottimale di elaborazione per un determinato sistema potrebbe variare in base alla progettazione dell'applicazione, ai modelli di utilizzo e alle impostazioni di configurazione. Le architetture possono utilizzare diverse soluzioni di calcolo per vari componenti e impiegare funzionalità diverse per migliorare le prestazioni. Selezionare la soluzione di elaborazione sbagliata per un'architettura può ridurre l'efficienza delle prestazioni. 

 In AWS, l'elaborazione è disponibile in tre forme: istanze, container e funzioni. 
+  Le **istanze** sono server virtualizzati che consentono di modificare le loro funzionalità con un pulsante o una chiamata API. Poiché nel cloud le decisioni relative alle risorse non sono cristallizzate nel tempo, è possibile sperimentare vari tipi di server. In AWS, tali istanze di server virtuali sono disponibili in famiglie e dimensioni diverse e offrono un'ampia gamma di funzionalità, tra cui unità a stato solido (SSD) e unità di elaborazione grafica (GPU). 
+  I **container** sono un metodo di virtualizzazione del sistema operativo che consente di eseguire un'applicazione e le relative dipendenze in processi isolati dalle risorse. Puoi scegliere AWS Fargate, un servizio di elaborazione serverless per container, oppure Amazon EC2, se hai bisogno di controllare l'installazione, la configurazione e la gestione del tuo ambiente di elaborazione. Puoi anche scegliere tra diverse piattaforme di orchestrazione di container: Amazon Elastic Container Service (ECS) o Amazon Elastic Kubernetes Service (EKS). 
+  Le **funzioni** astraggono l'ambiente di esecuzione dal codice che si desidera applicare. Ad esempio, AWS Lambda consente di eseguire codice senza eseguire un'istanza. 

 Le seguenti domande si concentrano su queste considerazioni relative all'efficienza delle prestazioni. 


| PERF 2:  How do you select and use compute resources in your workload? | 
| --- | 
| The more efficient compute solution for a workload varies based on application design, usage patterns, and configuration settings. Architectures can use different compute solutions for various components and turn on different features to improve performance. Selecting the wrong compute solution for an architecture can lead to lower performance efficiency. | 

# Gestione dati
<a name="perf-data"></a>

 La soluzione ottimale per la gestione dei dati in un sistema specifico varia in base al tipo di dati (blocco, file o oggetto), agli schemi di accesso (casuali o sequenziali), alla velocità di trasmissione effettiva necessaria, alla frequenza di accesso (online, offline, archivio), alla frequenza di aggiornamento (WORM, dinamico) e ai vincoli di disponibilità e durata. I carichi di lavoro Well-Architected utilizzano archivi dati appositamente progettati che impiegano diverse funzionalità per migliorare le prestazioni. 

 In AWS, lo storage è disponibile in tre forme: oggetto, blocco e file: 
+  Lo **storage di oggetti** fornisce una piattaforma scalabile e durevole che rende i dati accessibili da qualsiasi posizione Internet per contenuti generati dagli utenti, archivi attivi, elaborazione serverless, archiviazione di Big Data o backup e ripristino. Amazon Simple Storage Service (Amazon S3) è un servizio di storage di oggetti che offre scalabilità, disponibilità dei dati, sicurezza e prestazioni leader di settore. Amazon S3 è progettato per garantire una durabilità del 99,999999999% (11 nove) e memorizza i dati per milioni di applicazioni per aziende in tutto il mondo. 
+  Lo **storage a blocchi** fornisce archiviazione a blocchi a disponibilità elevata, costante e a bassa latenza per ogni host virtuale ed è analogo allo storage collegato direttamente (DAS) o a una rete SAN (Storage Area Network). Amazon Elastic Block Store (Amazon EBS) è stato progettato per carichi di lavoro che richiedono archiviazione persistente accessibile dalle istanze EC2 e consente di ottimizzare le applicazioni con capacità di archiviazione, prestazioni e costi ottimali. 
+  Lo **storage di file** fornisce accesso a un file system condiviso tra più sistemi. Le soluzioni di storage di file come Amazon Elastic File System (Amazon EFS) sono ideali per casi d'uso come repository di contenuti di grandi dimensioni, ambienti di sviluppo, store multimediali o home directory. Amazon FSx rende più semplice e conveniente l'avvio e l'esecuzione di file system diffusi in modo da sfruttare le funzionalità avanzate e le prestazioni rapide dei file system open source più utilizzati e con licenza commerciale. 

 Le seguenti domande si concentrano su queste considerazioni relative all'efficienza delle prestazioni. 


| PERF 3:  How do you store, manage, and access data in your workload? | 
| --- | 
|  The more efficient storage solution for a system varies based on the kind of access operation (block, file, or object), patterns of access (random or sequential), required throughput, frequency of access (online, offline, archival), frequency of update (WORM, dynamic), and availability and durability constraints. Well-architected systems use multiple storage solutions and turn on different features to improve performance and use resources efficiently.  | 

# Reti e distribuzione di contenuti
<a name="perf-networking"></a>

 La soluzione di rete ottimale per un carico di lavoro varia in base a latenza, requisiti di velocità di trasmissione effettiva, jitter e larghezza di banda. I vincoli fisici, ad esempio le risorse utente o in locale, determinano le opzioni di posizione. Questi vincoli possono essere compensati con le edge location o la collocazione delle risorse. 

 In AWS, le reti sono virtualizzate e vengono fornite in molti tipi e configurazioni diversi. In questo modo puoi soddisfare le tue esigenze di rete più facilmente. AWS offre caratteristiche di prodotto (ad esempio reti avanzate, istanze Amazon EC2 ottimizzate per la rete, accelerazione del trasferimento Amazon S3 e Amazon CloudFront dinamico) pensate per l'ottimizzazione del traffico di rete. AWS offre anche funzionalità di rete (ad esempio instradamento in base alla latenza di Amazon Route 53, endpoint Amazon VPC, AWS Direct Connect e AWS Global Accelerator) per ridurre la distanza di rete o il jitter. 

 Le seguenti domande si concentrano su queste considerazioni relative all'efficienza delle prestazioni. 


| PERF 4:  How do you select and configure networking resources in your workload? | 
| --- | 
|  This question includes guidance and best practices to design, configure, and operate efficient networking and content delivery solutions in the cloud.  | 

# Processo e cultura
<a name="perf-process"></a>

 Durante la fase di progettazione dei carichi di lavoro, esistono principi e pratiche che è possibile adottare per gestire al meglio carichi di lavoro cloud efficienti e ad alte prestazioni. Per adottare una cultura che promuova l'efficienza delle prestazioni dei carichi di lavoro cloud, prendi in considerazione questi principi e pratiche fondamentali. 

 Per sviluppare questa cultura, considera questi principi chiave: 
+  **Infrastruttura come codice:** definisci la tua infrastruttura come codice tramite approcci come i modelli di AWS CloudFormation. L'uso dei modelli ti consente di collocare la tua infrastruttura nel controllo sorgente, insieme al codice e alle configurazioni dell'applicazione. Ciò ti premette di applicare le stesse procedure di sviluppo software all'infrastruttura, in modo da accelerare l'iterazione. 
+  **Pipeline di distribuzione:** usa una pipeline di integrazione continua/distribuzione continua (CI/CD) (ad esempio repository del codice sorgente, sistemi di sviluppo, distribuzione e automazione dei test) per distribuire la tua infrastruttura. Ciò ti consente di effettuare l'implementazione in modo ripetibile, coerente ed economicamente vantaggioso nel corso dell'iterazione. 
+  **Metriche ben definite:** configura e monitora le metriche per raccogliere gli indicatori chiave di prestazione (KPI). Ti consigliamo di adottare parametri tecnici e aziendali. Per i siti Web o le app mobili, le metriche principali sono il tempo di acquisizione al primo byte o il rendering. Gli altri parametri generalmente validi includono il numero di thread, il tasso di raccolta di dati superflui e gli stati di attesa. I parametri aziendali, come il costo cumulativo aggregato per richiesta, possono indicarti due modi per ridurre i costi. Valuta attentamente il modo in cui prevedi di interpretare i parametri. Ad esempio, potresti scegliere il 99° percentile o quello massimo anziché il valore medio. 
+  **Automatizza i test delle prestazioni:** nell'ambito del processo di implementazione, avvia automaticamente i test delle prestazioni dopo che i test di esecuzione più rapidi hanno dato esito positivo. L'automazione deve creare un nuovo ambiente, configurare le condizioni iniziali come i dati del test ed eseguire una serie di benchmark e test di carico. I risultati dei test devono essere confrontati con la build, in modo da monitorare le variazioni delle prestazioni nel corso del tempo. Per i test di lunga durata, puoi inserirli nella pipeline in maniera asincrona rispetto al resto della build. In alternativa, puoi eseguire i test delle prestazioni negli orari notturni, tramite le istanze Spot di Amazon EC2. 
+  **Generazione del carico:** crea una serie di script di test che replichino i percorsi utente sintetici o pre-registrati. Tali script devono essere idempotenti e non devono essere associati in coppie. Inoltre, potrebbe essere necessario includere script *preliminari* per garantire risultati validi. Testa gli script il più possibile, per assicurarti che replichino le abitudini di utilizzo in produzione. Puoi usare soluzioni software o SaaS (Software-as-a-Service) per generare il carico. Valuta se utilizzare le soluzioni [Marketplace AWS](https://aws.amazon.com/marketplace/) e le [istanze spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html): possono essere modi convenienti per generare il carico. 
+  **Visibilità delle prestazioni:** i parametri principali devono essere visibili dal team, in particolar modo quelli relativi a ciascuna versione della build. Ciò ti consente di rilevare tendenze positive o negative rilevanti nel corso del tempo. Dovresti anche visualizzare i parametri sul numero di errori o eccezioni per assicurarti di testare un sistema funzionante. 
+ **Visualizzazione:** sfrutta le tecniche di visualizzazione che indicano in modo chiaro i punti in cui si verificano problemi di prestazioni, hot spot, stati di attesa o utilizzo ridotto. Sovrapponi i parametri delle prestazioni ai diagrammi architetturali: i grafici delle chiamate o il codice possono aiutarti a individuare più rapidamente i problemi. 
+  **Processo di revisione regolare:** le prestazioni scarse delle architetture sono in genere il risultato di un processo di revisione delle prestazioni inesistente o incompleto. Se la tua architettura offre prestazioni insufficienti, l'implementazione di un processo di revisione delle prestazioni ti consente di favorire il miglioramento delle iterazioni. 
+  **Ottimizzazione continua:** adotta una cultura per ottimizzare continuamente l'efficienza delle prestazioni del tuo carico di lavoro cloud. 

 Le seguenti domande si concentrano su queste considerazioni relative all'efficienza delle prestazioni. 


| PERF 5:  What process do you use to support more performance efficiency for your workload?  | 
| --- | 
|  When architecting workloads, there are principles and practices that you can adopt to help you better run efficient high-performing cloud workloads. To adopt a culture that fosters performance efficiency of cloud workloads, consider these key principles and practices.  | 