Il Cloud spiegato a Nonna Pina: l’alta affidabilità
Noi nerd soffriamo di una patologia che spesso ci porta a dare per scontato che chiunque abbia ben chiaro ciò che, al contrario, è chiaro solo a noi.
Io non sono un nativo delle nuvole: so cosa sono i server, so cosa sono i RAID, e so anche dove si nascondono le birre in datacenter. Nelle mie frequentazioni risalenti a quell’era geologica ho una completa rappresentazione delle idee sbagliate che i sistemisti, gli sviluppatori o gli IT manager hanno in tema di cloud computing.
…e non sono poche: complici sicuramente campagne di marketing di compagnie “wannabe” traboccanti di buzzword (da #cloud a #blockchain passando per #ai), la confusione e quindi l’incomprensione è sempre in agguato. Da qui l’idea di una serie di post, scritti in modo (quasi) semplice, che abbiano lo scopo di spiegare (anche a Nonna Pina, per l’appunto) i fondamenti di questo, per qualcuno, nuovo mondo.
Partiamo da un tema molto caldo: l’alta affidabilità nel cloud. Quello che insomma spinge in media ogni due giorni un sistemista a lamentarsi nel suo gruppo Facebook di fiducia di qualcosa del tipo “…mi avevate detto che il cloud è super affidabile, ci ho spostato la mia macchina virtuale e dopo tre mesi era già down!”.
Questo è senza dubbio il salto concettuale più complesso: nel mondo pre-cloud l’alta affidabilità veniva implementata negli strati più bassi della piramide: si usavano server con componenti ultra ridondati, fatti per non guastarsi mai, collocati in datacenter sotterranei (o con scudi esterni in acciaio), progettati per resistere a qualunque attacco o avversa condizione esterna e, in sostanza, non spegnersi mai.
Un approccio sicuramente molto comodo per chi si occupa dell’applicativo che in questo resta totalmente agnostico perchè pensa a tutto l’infrastruttura sottostante, ma con un numero importante di problemi al seguito. Iniziando dal fatto che un simile modello è sostenibile solo su un singolo datacenter o al massimo un paio, a patto che siano molto vicini geograficamente: i costi crescono in modo sproporzionato, e si arriva comunque ad una situazione sub-ottimale sia di latenza per gli utenti finali (se i DC sono vicini tra loro non possono essere anche vicini agli utenti) che di rischio (sarebbero soggetti alle stesse minacce di tipo metereologico e geologico). Come se questo non bastasse, la scalabilità viene limitata in modo importante, richiedendo di fatto che ogni componente della vostra infrastruttura sia rinchiuso in una ed una sola VM.
Siamo di fronte ad uno dei cambiamenti di paradigma più radicali che il cloud abbia portato: l’alta affidabilità si sposta sugli strati più alti della piattaforma e si basa sul presupposto che ogni componente dell’infrastruttura possa fallire in qualunque momento, sia esso una VM, un datacenter o un intero campus. Notate il salto? Ci siamo evoluti dall’usare componenti indistruttibili pur sapendo non fosse possibile considerare ogni casistica al dare per scontato che tutto ciò che può succedere succederà, e quindi al pianificare reazioni automatiche a qualunque tipo di guasto. Si è passati da un paradigma molto costoso che non poteva considerare ogni eventualità ad un paradigma molto più economico, in cui si progetta tenendo sempre in considerazione il peggiore caso possibile.
Questo vi farà sicuramente riflettere: NukeMap alla mano, con una sola bomba nucleare in un punto strategico un attaccante potrebbe cancellare dalla faccia della terra i vostri conti correnti e infrastrutture critiche nazionali (in Italia ed in Europa, non conosco le leggi/pratiche comuni nel resto del mondo), ma non potrebbe scalfire minimamente le vostre playlist Spotify o i vostri post su Facebook. Quello che alcuni definirebbero “evento catastrofico” è per altri “ordinaria amministrazione”. Se non vogliamo guardare a casi così catastrofici, scommetto che almeno una volta nell’ultimo anno non siete riusciti ad accedere all’home banking della vostra banca a causa di una manutenzione programmata. Vi è mai capitato lo stesso su Snapchat o su Netflix? No? Esattamente.
A riprova del fatto che il focus si sia spostato dall’evitare gli imprevisti al gestirli, ci siamo addirittura inventati il Chaos Engineering: l’idea, anzi, la pratica di causare artificialmente guasti e disastri in produzione per verificare che le nostre piattaforme siano in grado di gestirli senza che gli utenti finali ne risentano.
Ricapitolando, quindi, l’alta affidabilità nei sistemi IT tradizionali si fonda sull’implementare infrastrutture sotto vari aspetti sub-ottimali usando componenti, costosi e complessi, progettati per non fallire mai. Nel paradigma cloud, al contrario, si implementano infrastrutture utilizzando componenti semplici e quindi economici, consci del fatto che questi prima o poi si romperanno e quindi progettando le applicazioni per gestire senza impatto le situazioni avverse.
…chiaro?
[nel prossimo capitolo a Nonna Pina spiegheremo invece i fondamenti di scalabilità]