Programmazione per il cloud
Per la progettazione di programmi destinati al cloud sono necessarie alcune considerazioni particolari. A seconda del tipo di applicazione e del carico previsto, gli sviluppatori possono sfruttare alcune delle funzionalità offerte dai provider di servizi cloud per migliorare la scalabilità e la gestibilità dei programmi. L'uso di sistemi di ridimensionamento automatico e di bilanciamento del carico consente agli sviluppatori di aumentare o ridurre dinamicamente l'infrastruttura in base all'utilizzo dell'hardware o a un fattore di carico calcolato dal programma.
Uno sviluppatore deve tenere in considerazione diversi aspetti durante lo sviluppo o la migrazione di un'applicazione nel cloud, soprattutto in relazione alle prestazioni e alla sicurezza.
Fattori relativi alle prestazioni per le applicazioni nel cloud
L'ambiente in un data center incentrato sul cloud è diverso da quello a cui sono abituati gli sviluppatori quando progettano e distribuiscono applicazioni in un'infrastruttura di proprietà. Alcuni sviluppatori hanno difficoltà a ottimizzare o migliorare le prestazioni delle applicazioni perché non hanno accesso alle specifiche o al layout dell'hardware fisico sui cloud pubblici. In questa unità sono elencati alcuni dei principali problemi riscontrati, con particolare attenzione ai fattori che influiscono sulle prestazioni delle applicazioni nel cloud:
Larghezza di banda e latenza delle risorse
Un problema particolarmente importante riscontrato durante lo sviluppo e la distribuzione di applicazioni cloud è dato dalla latenza. Gli sviluppatori devono pianificare le applicazioni rispettando requisiti di latenza rigorosi. Un approccio consiste nel compilare la distribuzione delle posizioni dei client. In questo modo, gli sviluppatori possono trovare il set ottimale di posizioni dei data center che è possibile usare per ottimizzare le prestazioni e la velocità di risposta degli utenti finali. Ciò si verifica in particolare nelle applicazioni Web, in cui le singole richieste HTTP di contenuto Web statico possono rappresentare una frazione importante dei tempi di caricamento delle pagine Web.
Oltre alla latenza, le applicazioni possono avere anche requisiti di larghezza di banda rigorosi, in particolare quelli che riguardano i contenuti multimediali, come audio e video. Molti provider di servizi cloud consentono agli sviluppatori di soluzioni cloud di specificare i parametri delle prestazioni durante il provisioning, sotto forma di requisiti di IOPS per le risorse di calcolo e archiviazione, e anche di configurare reti virtuali. L'implementazione e l'adozione di soluzioni di rete e archiviazione software-defined (che verranno trattate nei moduli successivi) forniscono informazioni aggiuntive sulle tecniche più recenti usate dai data center per gestire il traffico da più client, gestendo al tempo stesso i singoli requisiti in base a quanto specificato negli SLO dei client.
Le tecniche appena descritte sono destinate principalmente al contenuto statico. Un problema molto più complesso è quello di ottimizzare la latenza di accesso ai sistemi di archiviazione dei dati distribuiti, in particolare quelli che devono gestire operazioni di scrittura e aggiornamento. Per altre informazioni su questi aspetti, vedere i moduli successivi.
Multi-tenancy
Le applicazioni nei data center pubblici vengono in genere eseguite nell'infrastruttura condivisa. Questo aspetto dei servizi cloud presenta diversi problemi importanti. Sebbene le tecnologie di virtualizzazione moderne offrano l'isolamento dell'ambiente per quanto riguarda la sicurezza e l'ambiente dell'applicazione, in genere non possono garantire l'isolamento delle prestazioni. Pertanto, le risorse virtualizzate nei cloud non possono garantire sempre prestazioni coerenti. Le prestazioni di una risorsa in un determinato momento sono una funzione del carico totale sulle risorse di tutti i tenant, ovvero dell'interferenza riscontrata da altri tenant che condividono lo stesso hardware.
Alcuni provider di servizi cloud, ad esempio Azure, offrono ai client la possibilità di effettuare il provisioning di determinati tipi di risorse, ad esempio le macchine virtuali, su hardware dedicato. Questa soluzione consente di proteggere da fluttuazioni estese delle prestazioni delle risorse, offrendo prestazioni abbastanza coerenti per le risorse. Le istanze di hardware dedicate, tuttavia, sono molto più costose delle normali istanze su richiesta, poiché Azure deve assegnare un server esclusivamente per le risorse.
Un aspetto correlato delle configurazioni multi-tenancy consiste nel problema di variazione del provisioning, che si verifica quando richieste identiche di risorse virtuali nei cloud pubblici non sono mappate in modo identico alle risorse fisiche, causando così una variazione delle prestazioni.1 Ad esempio, due richieste identiche di macchine virtuali (VM1 e VM2) potrebbero essere instradate a due computer fisici diversi (A e B). Il computer fisico A potrebbe avere quattro altri tenant che competono per le risorse nello stesso computer, mentre il computer B potrebbe averne solo due. In tal caso, al client verrebbe addebitato lo stesso importo per le macchine virtuali VM1 e VM2, ma i due computer potrebbero offrire prestazioni diverse.
impostazioni di sicurezza
I cloud pubblici sono soggetti a vettori di attacco sempre più importanti, come si è visto nell'unità 1. Gli sviluppatori devono prestare estrema attenzione a rispettare le procedure consigliate, i protocolli e le procedure per la distribuzione e la gestione delle applicazioni nel cloud. Possono pertanto verificarsi sovraccarichi delle prestazioni aggiuntivi a causa dell'adozione dei protocolli di sicurezza richiesti dai cloud pubblici.
Questi protocolli sono già stati esaminati in un modulo precedente e non è pertanto necessario descriverli di nuovo in dettaglio. Qualsiasi codice distribuito in un cloud pubblico dovrebbe essere sottoposto a un processo rigoroso di revisione e analisi statica del codice sorgente, in modalità manuale e automatizzata, nonché a un processo di analisi dinamica delle vulnerabilità e a test di penetrazione. Nella pagina successiva verranno presentate le linee guida per la distribuzione sicura di applicazioni.
Riferimenti
- Rehman, M.S e Sakr, M.F (2010). Initial Findings for Provisioning Variation in Cloud Computing Seconda conferenza internazionale IEEE 2010 sulla tecnologia e la scienza del cloud computing (CloudCom)