

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

**Topics**
+ [

# Scelta dell'architettura
](perf-arch.md)
+ [

# Calcolo e hardware
](perf-compute.md)
+ [

# Gestione dei 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 forniscono funzionalità diverse per migliorare le prestazioni. 

 AWS le risorse sono disponibili in molti tipi e configurazioni, il che rende più facile trovare un approccio che corrisponda strettamente alle proprie esigenze. Inoltre, puoi trovare opzioni che non sono facili da trovare nelle infrastrutture on-premises. Ad esempio, un servizio gestito come Amazon DynamoDB fornisce un database SQL No completamente gestito con latenza di un millisecondo su qualsiasi scala. 

 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'[Appendice](a-performance-efficiency.md). 


| PERF1: Come selezionate le risorse cloud e i modelli di architettura appropriati per il vostro carico di lavoro? | 
| --- | 
|  Spesso sono necessari molteplici approcci per ottenere prestazioni più efficienti in un carico di lavoro. I sistemi Well-Architected utilizzano più soluzioni e funzionalità per migliorare le prestazioni.  | 

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

 La soluzione ottimale in termini di calcolo per un determinato carico di lavoro 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 calcolo sbagliata per un'architettura può ridurre l'efficienza delle prestazioni. 

 In AWS, il calcolo è disponibile in tre forme: istanze, contenitori e funzioni: 
+  Le **istanze** sono server virtualizzati che consentono di modificarne le 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. Attualmente AWS, queste istanze di server virtuali sono disponibili in famiglie e dimensioni diverse e offrono un'ampia varietà di funzionalità, tra cui unità a stato solido (SSDs) e unità di elaborazione grafica (). GPUs 
+  **I container** sono un metodo di virtualizzazione del sistema operativo che consente di eseguire un'applicazione e le sue dipendenze in processi con risorse isolate. AWS Fargate è un'elaborazione serverless per contenitori oppure Amazon EC2 può essere utilizzato se hai bisogno di controllare l'installazione, la configurazione e la gestione del tuo ambiente di elaborazione. Puoi anche scegliere tra più piattaforme di orchestrazione dei container: Amazon Elastic Container Service (ECS) o Amazon Elastic Kubernetes Service (). EKS 
+  Le **funzioni** astraggono l'ambiente di esecuzione dal codice che desideri eseguire. 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. 


| PERF2: Come selezionate e utilizzate le risorse di calcolo nel vostro carico di lavoro? | 
| --- | 
| La soluzione di calcolo più efficiente per un determinato carico di lavoro varia in base alla progettazione dell'applicazione, ai modelli di utilizzo e alle impostazioni di configurazione. Le architetture possono utilizzare diverse soluzioni di elaborazione per vari componenti e attivare funzionalità diverse per migliorare le prestazioni. Selezionare la soluzione di calcolo sbagliata per un'architettura può portare a una riduzione dell'efficienza delle prestazioni. | 

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

 La soluzione di gestione dei dati ottimale per un particolare sistema varia in base al tipo di dati (blocco, file o oggetto), ai modelli di accesso (casuale o sequenziale), alla velocità effettiva richiesta, alla frequenza di accesso (online, offline, di archiviazione), alla frequenza di aggiornamento (WORMdinamica) e ai vincoli di disponibilità e durabilità. 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 a oggetti** fornisce una piattaforma scalabile e durevole per rendere i dati accessibili da qualsiasi posizione Internet per contenuti generati dagli utenti, archivi attivi, computing serverless, storage di big data o backup e ripristino. Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione di oggetti che offre scalabilità, disponibilità dei dati, sicurezza e prestazioni tra le migliori del settore. Amazon S3 è progettato per garantire una durabilità del 99,999999999% (11 9) e memorizza i dati per milioni di applicazioni per aziende in tutto il mondo. 
+  **Lo storage a blocchi** offre uno storage a blocchi ad alta disponibilità, coerente e a bassa latenza per ogni host virtuale ed è analogo allo storage collegato direttamente (DAS) o allo Storage Area Network (). SAN Amazon Elastic Block Store (AmazonEBS) è progettato per carichi di lavoro che richiedono uno storage persistente accessibile da EC2 istanze che consente di ottimizzare le applicazioni con la capacità di storage, le prestazioni e i costi corretti. 
+  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 (AmazonEFS) sono ideali per casi d'uso come archivi di contenuti di grandi dimensioni, ambienti di sviluppo, negozi multimediali o home directory degli utenti. Amazon FSx rende efficiente ed economico il lancio e l'esecuzione dei file system più diffusi in modo da poter sfruttare i ricchi set di funzionalità e le prestazioni rapide dei file system open source e con licenza commerciale ampiamente utilizzati. 

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


| PERF3: Come archiviate, gestite e accedete ai dati del vostro carico di lavoro? | 
| --- | 
|  La soluzione di storage più efficiente per un sistema varia in base al tipo di operazione di accesso (blocco, file o oggetto), ai modelli di accesso (casuale o sequenziale), al throughput richiesto, alla frequenza di accesso (online, offline, di archiviazione), alla frequenza di aggiornamento (WORMdinamica) e ai vincoli di disponibilità e durata. I sistemi Well-Architected utilizzano più soluzioni di storage e attivano funzionalità diverse per migliorare le prestazioni e utilizzare le risorse in modo efficiente.  | 

# 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 throughput, jitter e larghezza di banda. I vincoli fisici, ad esempio le risorse utente o on-premises, determinano le opzioni di posizione. Questi vincoli possono essere compensati con le posizioni edge o la collocazione delle risorse. 

 On AWS, la rete è virtualizzata ed è disponibile in diversi tipi e configurazioni. In questo modo è più facile soddisfare le esigenze di rete. AWS offre funzionalità di prodotto (ad esempio Enhanced Networking, istanze ottimizzate per la EC2 rete Amazon, accelerazione del trasferimento Amazon S3 e CloudFront Amazon dinamico) per ottimizzare il traffico di rete. AWS offre anche funzionalità di rete (ad esempio, routing di latenza Amazon Route 53 AWS Direct Connect, VPC endpoint Amazon 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. 


| PERF4: Come selezionate e configurate le risorse di rete nel vostro carico di lavoro? | 
| --- | 
|  Questa domanda comprende linee guida e best practice per progettare, configurare e gestire soluzioni di rete e distribuzione di contenuti nel cloud in maniera efficiente.  | 

# 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 l'infrastruttura come codice utilizzando approcci come i AWS CloudFormation modelli. 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 implementazione:** usa una pipeline di integrazione continua/implementazione 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 acquisire gli indicatori chiave di prestazione (). KPIs Ti consigliamo di adottare parametri tecnici e aziendali. Per i siti Web o le app mobili, le metriche chiave sono l'acquisizione o il rendering. time-to-first-byte Gli altri parametri generalmente validi includono il numero di thread, il tasso di rimozione di oggetti inutili (garbage collection) 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 quelli dall'esecuzione più rapida 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 test delle prestazioni durante la notte utilizzando Amazon EC2 Spot Instances. 
+  **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. È possibile utilizzare soluzioni software o software-as-a-service (SaaS) per generare il carico. Valuta se l'utilizzo delle 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. 
+  **Revisione regolare dei processi:** 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. 


| PERF5: Quale processo utilizzate per supportare una maggiore efficienza delle prestazioni per il vostro carico di lavoro?  | 
| --- | 
|  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.  | 