Suggerimenti per l'ottimizzazione dei costi dell'ambiente

Si applica a questa raccomandazione per l'ottimizzazione dei costi di Azure Well-Architected Framework:

CO:08 Ottimizzare i costi dell'ambiente. Allineare la spesa per classificare in ordine di priorità gli ambienti di preproduzione, produzione, operazioni e ripristino di emergenza. Per ogni ambiente, prendere in considerazione la disponibilità, le licenze, le ore e le condizioni operative necessarie e la sicurezza. Gli ambienti non di produzione devono emulare l'ambiente di produzione. Implementare compromessi strategici in ambienti non di produzione.

Questa guida descrive le raccomandazioni per l'ottimizzazione dei costi degli ambienti del carico di lavoro. Ogni ambiente deve essere personalizzato per lo scopo specifico e ottimizzato per l'efficienza dei costi. È importante fare compromessi strategici e allocare risorse dove sono più importanti, senza compromettere i componenti critici. Trattando gli ambienti in modo diverso e ottimizzandoli di conseguenza, è possibile ottenere un equilibrio tra ottimizzazione dei costi e soddisfare gli obiettivi necessari.

Definizioni

Termine Definizione
Obiettivo del punto di ripristino (RPO) Durata massima accettabile della perdita di dati durante un evento imprevisto.
Obiettivo del tempo di ripristino (RTO) Il tempo massimo accettabile in cui un'applicazione può rimanere non disponibile dopo un evento imprevisto.
Contratto di servizio Contratto contrattuale tra il provider di servizi e il cliente del servizio. Il contratto definisce gli obiettivi del livello di servizio . Il mancato rispetto del contratto potrebbe avere conseguenze finanziarie per il provider di servizi.

Strategie di progettazione chiave

L'obiettivo di ottimizzare i costi dell'ambiente è trovare il giusto equilibrio tra valore, costo e rischio per ogni ambiente, inclusi ambienti di produzione, preproduzione e ripristino di emergenza. Personalizzare ogni ambiente per un uso specifico per risparmiare denaro e usare in modo efficiente le risorse. Determinare i vantaggi di ogni ambiente, ad esempio efficienza o soddisfazione dei clienti. Si vuole valutare il ritorno sugli investimenti (ROI) per l'ambiente, anche se non crea un profitto diretto. Spendere più denaro in ambienti ad alto rischio per ridurre i problemi e risparmiare denaro in ambienti a basso rischio. Mirare a bilanciare valore, costo e rischio in ogni ambiente.

Valutare il valore dell'ambiente

Valutare il valore di ogni ambiente significa comprendere il suo effetto più ampio sull'azienda, valutare la soddisfazione degli utenti e determinare in che modo si allinea agli obiettivi organizzativi generali. Questa valutazione consente di prendere decisioni informate sull'allocazione delle risorse e di allineare i costi alle priorità ambientali. L'essenza del valore si estende oltre la quantità di ricavi generati da un ambiente. Quando si valuta il valore di un ambiente, è necessario classificare in ordine di priorità la spesa in modo che restituisca gli obiettivi del carico di lavoro. Per valutare il valore di ogni ambiente, considerare i fattori seguenti:

  • Si consideri l'utente: prendere in considerazione chi usa ogni ambiente e ciò di cui ha bisogno. Ad esempio, i clienti usano l'ambiente di produzione, che deve essere affidabile e soddisfare contratti di servizio specifici per prestazioni e tempi di attività.

    D'altra parte, l'ambiente di sviluppo è principalmente per il team del carico di lavoro, ad esempio sviluppatori e tester. Questo ambiente non deve soddisfare i contratti di servizio rivolti ai clienti, ma deve avere gli strumenti e le risorse necessari per il team per lavorare in modo efficace.

    Quando si comprendono le esigenze specifiche degli utenti in ogni ambiente, è possibile allocare meglio le risorse ed evitare costi aggiuntivi. Questo evitamento garantisce che ogni ambiente sia funzionale e conveniente.

  • Allinearsi alle misure organizzative di valore: allineare le attività di riduzione dei costi alle priorità dell'organizzazione, ad esempio profitto o soddisfazione dei dipendenti. Per ogni ambiente, comprendere come viene definito l'esito positivo, in modo da poter mantenere le azioni di destinazione. Ad esempio, se l'organizzazione si concentra sulla massimizzazione dei profitti o sulla soddisfazione dei dipendenti, allineare le decisioni di spesa a tali metriche.

Determinare i costi dell'ambiente

Determinare i costi dell'ambiente consiste nel conoscere i costi dell'infrastruttura, dei servizi, delle licenze e delle spese operative in ogni ambiente del carico di lavoro. Gli strumenti di gestione dei costi sono fondamentali per ottenere informazioni dettagliate sui modelli di spesa e sulle tendenze in tutti gli ambienti. Per determinare i costi dell'ambiente, prendere in considerazione queste strategie:

  • Identificare i driver dei costi: identificare i fattori chiave che determinano i costi in ogni ambiente. Questi fattori possono includere l'utilizzo delle risorse, l'utilizzo dell'archiviazione, la conservazione dei dati, il trasferimento dei dati e servizi specifici.

  • Valutare i rischi: valutare i rischi associati alle decisioni di spesa e il loro potenziale effetto sull'ambiente e sulle operazioni aziendali. Prendere in considerazione fattori come la sicurezza dei dati, la conformità, le prestazioni, i controlli e i requisiti del contratto di servizio.

  • Monitorare e regolare la spesa: monitorare e analizzare continuamente i modelli di spesa, il recapito dei valori e i fattori di rischio. Esaminare e modificare regolarmente le strategie di ottimizzazione della spesa man mano che le esigenze dell'ambiente e dell'azienda si evolvono.

Ottimizzare l'ambiente di produzione

L'ottimizzazione dei costi nell'ambiente di produzione comporta l'implementazione di strategie per ridurre le spese non necessarie e migliorare l'efficienza operativa. Concentrarsi sulla differenziazione delle distribuzioni di produzione e sulla conformità alle esigenze degli utenti. Ecco le raccomandazioni per ottimizzare l'ambiente di produzione:

  • Differenziare le aree: spendere meno nelle aree che servono meno clienti. Ad esempio, è consigliabile investire di più in un'area che serve il 90% degli utenti rispetto a un'area che serve il 10% degli utenti. Modificare la strategia di distribuzione per soddisfare i requisiti di ogni area e segmento di utenti.

  • Differenziare il ridimensionamento: implementare strategie di scalabilità orizzontale e verticale. Ridimensionare le risorse in modo efficiente per soddisfare la domanda senza effettuare il provisioning eccessivo.

  • Differenziare l'infrastruttura: scegliere soluzioni di infrastruttura e hardware convenienti che soddisfino le prestazioni e la scalabilità necessarie. Considerare fattori quali prestazioni, costi, affidabilità e scalabilità.

  • Ottimizzare i modelli di tenant: personalizzare l'ambiente in base al modello di tenant. Ad esempio, spendere di più per servizi e funzionalità per tenant a pagamento e spendere meno per i tenant senza pagamento.

Ottimizzare gli ambienti di ripristino di emergenza

Un ambiente di ripristino di emergenza si riferisce all'infrastruttura e ai processi usati da un carico di lavoro per il ripristino dopo un evento di interruzione. Gli eventi di interruzione includono calamità naturali, attacchi informatici e errori hardware. Bilanciare il costo della gestione di un ambiente di ripristino di emergenza e il potenziale impatto di un evento di interruzione. Considerare le strategie seguenti:

  • Valutare la criticità dei sistemi e dei dati: valutare l'importanza dei sistemi e dei dati per determinare il livello di protezione e risorse necessario per ogni componente.

  • Determinare gli obiettivi RTO e RPO: per determinare la progettazione dell'ambiente di ripristino di emergenza, definire i limiti di tempo di inattività e perdita di dati accettabili per ogni sistema o applicazione.

  • Ottimizzare un ambiente di ripristino di emergenza a freddo: un ambiente di ripristino di emergenza sporadico ha un'infrastruttura o nessuna infrastruttura o servizi in esecuzione. È possibile usare l'infrastruttura come codice (IaC) per distribuire rapidamente l'infrastruttura durante un evento di interruzione. I criteri di backup e archiviazione devono soddisfare gli obiettivi RPO e gli oggetti RTO dell'ambiente. Assicurarsi che la quantità e la frequenza dei backup dei dati non siano più affidabili del necessario.

    Compromesso: un ambiente di ripristino di emergenza sporadico è un'opzione conveniente, ma potrebbero essere presenti tempi di ripristino lunghi.

  • Ottimizzare un ambiente di ripristino di emergenza frequente: tutti i servizi e l'infrastruttura vengono eseguiti in un ambiente di ripristino di emergenza frequente. I dati rispecchiano il sito primario in tempo reale. Fornisce un failover quasi istantaneo e una perdita minima di dati in caso di emergenza. Prendere in considerazione una distribuzione attiva-attiva per ottimizzare i costi.

  • Ottimizzare un ambiente di ripristino di emergenza ad accesso frequente: un approccio di ripristino di emergenza frequente è un mezzo tra un ambiente di ripristino di emergenza sporadico e un ambiente di ripristino di emergenza frequente. Un ambiente caldo è parzialmente attivo e si sincronizza periodicamente con il sito primario. Offre un equilibrio tra il tempo di costo e il tempo di ripristino. Tuttavia, si tratta dell'approccio meno ottimizzato per i costi. Prendere in considerazione un approccio ad accesso sporadico o frequente per ottimizzare i costi.

Ottimizzare gli ambienti di preproduzione

L'ottimizzazione degli ambienti di preproduzione comporta la gestione strategica delle risorse all'interno di aree di sviluppo, test e gestione temporanea per simulare attentamente la produzione riducendo i costi non necessari. Gli ambienti di preproduzione non richiedono la scalabilità completa e la disponibilità degli ambienti di produzione. La maggior parte delle opportunità consiste nel personalizzare questi ambienti in base a specifiche esigenze di test e sviluppo senza duplicare esattamente la produzione. Le aree di riduzione dei costi includono l'uso di risorse a basso costo, la disattivazione dei servizi non necessarie e l'applicazione di sconti offerti per l'utilizzo della preproduzione. Considerare le strategie seguenti per ottimizzare gli ambienti di preproduzione:

Valutare gli ambienti di preproduzione

L'allocazione insufficiente o non corretta degli ambienti di preproduzione potrebbe causare il provisioning eccessivo o il sottoprovisioning delle risorse. Per valutare gli ambienti di preproduzione per il carico di lavoro, prendere in considerazione le indicazioni seguenti:

  • Comprendere i tipi di ambiente: identificare i tipi di ambienti di preproduzione, ad esempio sviluppo, test e gestione temporanea, necessari per il carico di lavoro. Ogni ambiente deve avere un ruolo definito e una funzione specifica per garantire un'allocazione efficiente delle risorse.

  • Allinea ai requisiti degli utenti: prima di configurare gli ambienti di preproduzione, comprendere i requisiti e le aspettative degli utenti. Adattare le caratteristiche e le specifiche in base alle proprie esigenze per evitare spese inutili di funzionalità o risorse.

  • Consolidare l'ambiente: determinare se è possibile combinare gli ambienti senza compromettere la funzionalità. Combinare gli ambienti con funzioni che non si sovrappongono. Ad esempio, è possibile unire un ambiente di accettazione utente con un ambiente di controllo qualità. Le funzioni sono distinte e un ambiente è in genere inattiva quando l'altro è in uso.

    Rischio: prestare attenzione quando si combinano gli ambienti per assicurarsi di non introdurre conflitti o compromettere i processi di test o sviluppo.

La tabella seguente fornisce esempi di ambienti di preproduzione comuni.

Esempio di ambiente di preproduzione Descrizione
Ambiente di sviluppo Gli sviluppatori usano questo ambiente per scrivere e testare il codice. Fornisce uno spazio sandbox, in modo che gli sviluppatori possano sperimentare, compilare e integrare le modifiche al codice.
Ambiente di controllo della qualità Questo ambiente è dedicato alle attività di controllo della qualità. Per i test per identificare e correggere bug o problemi prima della distribuzione nell'ambiente di produzione.
Ambiente di sicurezza Questo ambiente è destinato ai test di sicurezza. È per garantire che un'applicazione sia sicura dalle minacce e dalle vulnerabilità.
Ambiente di test di accettazione utente In questo ambiente, gli utenti finali e gli stakeholder testano un'applicazione per convalidarne la funzionalità e assicurarsi che soddisfi i requisiti e le aspettative.
Ambiente di gestione temporanea Questo ambiente è simile all'ambiente di produzione. È per i test finali e la convalida prima della distribuzione nell'ambiente di produzione.

Applicare la governance

L'applicazione della governance riguarda la limitazione delle opzioni di distribuzione negli ambienti di preproduzione per controllare le spese e attenuare i rischi. Nella preproduzione è possibile personalizzare le configurazioni e distribuire le risorse. Più l'ambiente di preproduzione devia dall'ambiente di produzione, maggiore è il rischio potenziale. Usare la governance per vincolare gli ambienti di preproduzione. Considerare le linee guida seguenti:

  • Limitare i livelli di prestazioni: valutare i requisiti di prestazioni degli ambienti di preproduzione. Scegliere i livelli di prestazioni che bilanciano i costi e le prestazioni. Un servizio ha spesso livelli di prestazioni diversi e alcuni di questi livelli sono più adatti per i test. Alcuni servizi hanno livelli che offrono funzionalità simili alla produzione, ma non sono dotate di un contratto di servizio. Questi servizi riducono i costi, ma forniscono comunque le funzionalità necessarie per il test e lo sviluppo.

  • Informazioni sugli SKU di preproduzione: alcuni SKU sono progettati per ambienti di sviluppo. Per ottimizzare i costi, valutare i servizi e i livelli. Scegliere i livelli a prestazioni ridotte se il carico di lavoro non richiede prestazioni elevate.

  • Controllare il numero di istanze e CPU: determinare il numero ottimale di istanze e risorse della CPU necessarie per l'ambiente di preproduzione in base alle esigenze del carico di lavoro. Evitare il over-provisioning delle risorse per ridurre al minimo i costi.

  • Limitare la conservazione e la registrazione: definire i criteri di conservazione per i log e i dati negli ambienti di pre-produzione. Prendere in considerazione la durata necessaria per conservare i log e i dati in base ai requisiti di conformità e alle considerazioni sui costi. Evitare un numero eccessivo di registrazione e conservazione per ridurre i costi di archiviazione.

  • Usare un'architettura della CPU coerente: usare la stessa architettura della CPU nella preproduzione e nell'ambiente di produzione. Ad esempio, le applicazioni x86 non vengono eseguite in modo nativo in Azure Resource Manager e viceversa. Usare la stessa architettura della CPU dell'ambiente di produzione per garantire la compatibilità e ridurre al minimo i potenziali problemi.

  • Usare lo stesso sistema operativo: evitare di modificare il sistema operativo (ad esempio da Windows a Linux) o kernel in ambienti di preproduzione. Il software creato per Windows spesso non viene eseguito in modo nativo in Linux senza un livello di compatibilità e viceversa. I file system e le strutture di directory sono diversi, che possono causare problemi di applicazione di patch. Gli ambienti coerenti consentono di ridurre il rischio di problemi di compatibilità e garantire distribuzioni uniformi.

  • Limitare il ridimensionamento: per ottimizzare i costi, è possibile vincolare l'automazione per ridurre l'automazione delle esecuzioni. Ad esempio, impostare un limite massimo di scalabilità a tre nell'ambiente di sviluppo e impostarlo su 10 nell'ambiente di produzione. Vincolare il ridimensionamento per controllare l'utilizzo delle risorse e i costi di automazione.

  • Disattiva le risorse non necessarie: disattiva le risorse quando non vengono usate attivamente, ad esempio durante gli orari di minore attività e i fine settimana. È possibile usare strumenti o script di automazione per pianificare l'arresto e l'avvio delle risorse. Alcuni fornitori forniscono API che è possibile usare per arrestare e avviare le risorse a livello di codice. Prendere in considerazione l'uso di IaC per creare ambienti temporanei che è possibile rimuovere quando non sono più necessari.

  • Limitare le aree disponibili: considerare il potenziale vantaggio dell'esecuzione di ambienti di preproduzione in aree diverse in cui le risorse di Azure potrebbero essere più economiche. Limitare le distribuzioni di preproduzione a queste aree per ottimizzare il costo di questi ambienti.

Bilanciare la somiglianza con la produzione

Spesso non è necessario e costoso per gli ambienti di pre-produzione rispecchiare esattamente l'ambiente di produzione. L'obiettivo è garantire che ogni ambiente di preproduzione sia adeguatamente diverso dalla produzione per evitare costi non necessari. Tuttavia, quando la preproduzione e la produzione sono diverse, esiste il rischio di distribuire un bug nell'ambiente di produzione. Più sono diversi questi ambienti, maggiore è il rischio che ci sia. Personalizzare l'ambiente di preproduzione per soddisfare le proprie esigenze può aiutare a gestire i rischi ottimizzando i costi. Per bilanciare la somiglianza con la produzione, considerare le raccomandazioni seguenti:

  • Evitare repliche esatte: evitare di creare l'ambiente di preproduzione una copia esatta dell'ambiente di produzione. Può inutilmente aumentare i costi. Creare un ambiente di preproduzione conveniente, ma che consenta di individuare e risolvere i potenziali rischi prima della distribuzione.

  • Evitare deviazioni estreme: evitare una deviazione eccessiva dalla produzione, ad esempio l'uso di servizi diversi. Diversi servizi potrebbero non simulare accuratamente rischi reali. Determinare una soglia di rischio e non superare la soglia esclusivamente per risparmiare denaro.

  • Abbreviare i runtime: è consigliabile abbreviare i runtime dei processi nella fase di preproduzione per risparmiare denaro. Prestare attenzione alle nuove vulnerabilità che potrebbero verificarsi, ad esempio perdite di memoria non rilevate.

  • Esaminare le licenze: esaminare i piani di licenza per gli strumenti di sicurezza. Se il numero di nodi varia in modo significativo tra le configurazioni di produzione e di pre-produzione, rivaluta le esigenze per ottimizzare i costi senza compromettere la sicurezza.

Ottimizzare gli ambienti di sviluppo

Gli ambienti di sviluppo sono progettati per scopi di sviluppo, test e debug. Hanno cicli di vita più brevi e vengono spesso creati in base alle esigenze ed esistono per un breve periodo di tempo. Gli ambienti di sviluppo in genere hanno requisiti inferiori per l'affidabilità, la capacità e la sicurezza rispetto ad altri ambienti di preproduzione e produzione. Potrebbero avere meno funzionalità e possono accettare un utilizzo inferiore delle risorse. Per ottimizzare l'ambiente di sviluppo:

  • Valutare gli strumenti: valutare regolarmente l'efficacia della configurazione degli strumenti corrente, inclusi gli ambienti di sviluppo integrato (IDE), le licenze e gli strumenti correlati. Prendere in considerazione alternative gratuite o open source che offrono funzionalità simili senza compromettere la qualità. Rivalutare continuamente la necessità e l'efficienza di questi strumenti man mano che il panorama di sviluppo si evolve.

  • Prendere in considerazione l'hardware: valutare i costi e le prestazioni delle configurazioni hardware correnti. Investire in hardware migliore e più efficiente può migliorare la produttività e ridurre i costi a lungo termine. Invece di frequenti sostituzioni hardware, prendere in considerazione l'aggiornamento dei sistemi esistenti per prolungarne la durata e migliorare le prestazioni.

  • Ottimizzare il numero di ambienti: analizzare i vantaggi e gli svantaggi degli ambienti di sviluppo individualizzati rispetto a un ambiente condiviso. I singoli ambienti possono simulare le configurazioni di produzione, evitare interferenze tra gli sviluppatori e offrire configurazioni personalizzate. Tuttavia, il ridimensionamento diventa più costoso man mano che aumenta il numero di sviluppatori. Gli ambienti condivisi possono risparmiare sui costi, ma potrebbero verificarsi problemi di affidabilità se i problemi interessano l'intero team di sviluppo contemporaneamente. Trovare il giusto equilibrio in base ai costi, alla mitigazione dei rischi, all'efficienza e alla soddisfazione degli sviluppatori.

  • Pulire regolarmente: pulire e ottimizzare regolarmente l'ambiente di sviluppo per evitare l'accumulo di risorse orfane, dati inutilizzati e esperimenti di verifica. Implementare processi di pulizia o strumenti automatizzati per identificare e rimuovere le risorse inutilizzate. Mantenere solo i componenti essenziali e attivi. La pulizia regolare consente di ridurre i costi di archiviazione e garantisce un utilizzo efficiente delle risorse.

  • Implementare il ridimensionamento campionato: invece di ridimensionare tutti i componenti alla capacità massima, prendere in considerazione un approccio campionato in cui si ridimensionano in modo selettivo i componenti vitali. Questo approccio può essere conveniente riducendo al minimo i rischi. Valutare il rapporto rischio-vantaggio di non ridimensionare determinati elementi e considerare il potenziale effetto sull'ambiente.

  • Ottimizzare la gestione dei dati: gli ambienti di sviluppo potrebbero avere esigenze basse per la conservazione dei dati e la frequenza di backup.

Prendere in considerazione l'emulazione degli endpoint

È possibile ottimizzare i costi in un ambiente di preproduzione usando l'emulazione degli endpoint o endpoint fittizi, in particolare per risorse costose come GPU. Identificare i componenti o i servizi nell'ambiente di preproduzione che sono i più costosi o a elevato utilizzo di risorse. Usare endpoint fittizi per simulare le risposte di questi componenti costosi senza richiamarli. Per simulare le risposte api, è possibile usare server di simulazione di API commerciali o open source o implementazioni personalizzate.

L'emulazione e gli endpoint fittizi consentono di risparmiare sui costi, ma è necessario assicurarsi che rappresentino l'ambiente di produzione a un livello sufficiente per i test. Trovare un equilibrio tra accuratezza e costo per evitare problemi futuri nell'ambiente di produzione. Ad esempio, se le GPU sono un fattore di costo importante, prendere in considerazione l'emulazione GPU per le attività che non richiedono una potenza di elaborazione GPU reale nelle fasi di preproduzione. L'emulazione potrebbe non rappresentare completamente le prestazioni o gli strani di GPU reali, quindi usarla quando il comportamento esatto della GPU non è critico per i test di preproduzione.

Facilitazione di Azure

Determinazione e ottimizzazione dei costi dell'ambiente: Gestione costi Microsoft è una suite di strumenti che consentono alle organizzazioni di monitorare, allocare e ottimizzare i costi dei carichi di lavoro di Microsoft Cloud. Gestione dei costi è disponibile per chiunque abbia accesso a un ambito di fatturazione o gestione delle risorse.

Azure Advisor è uno strumento che fornisce raccomandazioni per l'ottimizzazione dei costi, inclusa l'identificazione di aree di utilizzo delle macchine virtuali che richiedono l'ottimizzazione. Usare Advisor per prendere decisioni informate e ottimizzare i costi nell'ambiente Azure. Azure offre strumenti e funzionalità di gestione dei costi che consentono di classificare in ordine di priorità la spesa. È possibile usare questi strumenti per tenere traccia e analizzare i costi in ambienti diversi, impostare i budget e ricevere raccomandazioni per l'ottimizzazione dei costi.

Applicazione della governance: con Criteri di Azure è possibile limitare i tipi di risorse, gli SKU e le istanze definendo regole dei criteri che applicano restrizioni ai tipi di risorse che è possibile distribuire nell'ambiente Azure. È possibile mantenere il controllo sulle risorse di cui è stato effettuato il provisioning e garantire la conformità ai criteri e alle procedure consigliate dell'organizzazione.

Per limitare i tipi di risorse usando Criteri di Azure, è possibile definire regole dei criteri che specificano i tipi di risorse consentiti. Applicare tali regole alle sottoscrizioni o ai gruppi di risorse di Azure pertinenti. Criteri di Azure impedisce agli utenti di distribuire risorse non consentite.

Usare Azure Resource Manager per definire e gestire le risorse in modo dichiarativo. È possibile ottimizzare le risorse allocate a ogni ambiente in base ai requisiti specifici. Usare modelli e parametrizzare le configurazioni delle risorse per ottimizzare i costi.

Ottimizzazione degli ambienti di preproduzione: Azure offre opzioni di determinazione dei prezzi di sviluppo/test che offrono tariffe scontate per gli ambienti non di produzione. È possibile allocare più risorse e budget agli ambienti di produzione critici, ottimizzando i costi in ambienti non di produzione. È anche possibile usare l'offerta di licenza di Azure, Vantaggio Azure Hybrid.

È possibile usare Gestione API di Azure per la simulazione dell'API. Gestione API funge da facciata per i servizi back-end, che consente ai provider di API di astrarre le implementazioni api ed evolvere l'architettura back-end senza influire sui consumer di API.

Elenco di controllo per l'ottimizzazione dei costi

Fare riferimento al set completo di raccomandazioni.