In questo articolo, primo di una serie, descriverò "formalmente" un'architettura Cloud partendo dallo stack e definendo i ruoli di chi vi opera e sviluppa.
Stack Cloud
Da quando buona parte dell'Informatica si è spostata verso lo sviluppo web, assistiamo ad un boom di sviluppo di framework e di tools. Se da una parte questo è segno di un settore vivo e sempreverde, dall'altra c'è evidenza di una frammentazione esasperata dove ogni team persegue una strada autonoma per pure scelte "politiche". Chi è utente GNU/Linux troverà questo discorso perfettamente adattabile alla fenomeno distribuzioni: ne esistono una miriade.
Anche se questo è stato il leitmotiv degli ultimi anni, possiamo dire che nelle architetture di rete dei sistemi distribuiti si è verificato l'opposto. Il mondo è andato verso una standardizzazione dei modelli di sviluppo ed ha creato un formalismo per definirne i differenti approcci alla materia.
L'immagine qui sopra rappresenta la composizione dell'architettura Cloud attraverso i vari elementi e, a seconda dell'approccio che si intende avere, viene fornita una ulteriore definizione per le proprie responsabilità.
On Premise
In questo scenario la responsabilità è spalmata sull'intero stack. Occorre gestire un datacenter in modo tale che possa ospitare i server in totale affidabilità, ponendo particolare attenzione alla sicurezza e ridondanza di servizi. Chi intende avere questo approccio dovrà dotarsi di uno spazio fisico protetto da controllo accessi e sistemi di sicurezza, dovrà stipulare contratti con differenti provider di rete elettrica e di banda internet per garantire la tolleranza ai guasti.
Per standardizzare gli elementi che contribuiscono all'affidabilità di un datacenter lo Uptime Institute ha previsto una classificazione che, a seconda del "Tier" di riferimento, permette di valutare le potenzialità della struttura in base a performance e uptime.
A livello superiore, sempre nello stack, troviamo la gestione della virtualizzazione. Tale componente è fondamentale in quanto, nelle moderne architetture, è possibile far girare più di una macchina virtuale su ciascuna macchina fisica. In questo scenario occorre valutare e scegliere quale hypervisor usare per poter gestire le proprie macchine virtuali, tenendo conto che si avrà bisogno di arrestare, riavviare ma anche di migrare i sistemi virtualizzati.
Chi gestisce l'approccio On Premise dovrà occuparsi anche del livello superiore: IaaS.
Infrastructure as a Service (IaaS)
In questo caso si inizia a fare affidamento su "altri" che gestiranno i livelli su cui si poggia la nostra infrastruttura. I "mattoncini" a disposizione, a questo livello, sono le macchine virtuali, se ne possono creare centinaia, si possono definire rotte di instradamento delle connessioni e quanti e quali IP pubblici referenziano i nostri servizi. In queste macchine verranno installati dei sistemi operativi che dovranno essere manutenuti tramite aggiornamenti di sicurezza (richiesti dal fornitore) e aggiornamenti software (richiesti dagli sviluppatori).
Chi sceglie questo livello dovrà occuparsi anche di sviluppare il software che gestisce il servizio, caratteristica fondamentale del livello superiore: PaaS.
Platform as a Service (PaaS)
Gli elementi dello stack su cui dobbiamo far affidamento aumentano di numero e di imporanza, ed il tutto è in mano agli "altri". Ad ogni modo chi sviluppa a questo livello sarà estremamente facilitato, in quanto potrà iniziare a scrivere immediatamente la propria applicazione avendo a disposizione una vasta scelta di linguaggi di programmazione e di framework.
Definizione dei ruoli
In questa struttura formale è facile poter definire di quali e quante figure professionali si ha bisogno per poter sviluppare lo stack cloud indipendentemente dall'approccio scelto.
Datacenter
Per gestire un datacenter occorrono degli specialisti IT capaci di gestire server su spazi rack, connessioni e apparecchiature di rete. Il personale IT deve essere in grado di risolvere problemi legati a guasti hardware ed intervenire prontamente per il ripristino.
Virtualizzazione e amministazione di sistema
E' il lavoro dei sistemisti che si preoccupano di monitorare lo stato delle macchine virtuali, di migrarle in caso di guasti e di gestirne le risorse a seconda delle esigenze degli sviluppatori. Sono responsabili della manutenzione dei sistemi operativi, degli aggiornamenti di sicurezza e del middleware necessario per le applicazioni ad alto livello.
Servizi backend
E' compito degli sviluppatori backend di progettare i servizi di rete direttamente connessi a periferiche e/o a database. I loro linguaggi di programmazione possono essere Java, Python, C#, Go (personalmente uso Go, in futuro gli dedicherò un articolo), ecc. Dovendo gestire anche connessioni a database devono conoscere anche SQL ed i principali DB relazionali e NoSQL.
Servizi frontend
Sono sviluppatori web che sfruttano il livello di backend per offrire un'interfaccia all'utente. Si dividono in: sviluppatori HTML, grafici CSS, e sviluppatori Javascript. Molte volte queste caratteristiche sono concentrate in un'unica figura professionale. Altri sviluppatori frontend possono essere identificati con gli sviluppatori di interfacce per dispositivi mobile e quindi App Android e iOS.
Altri
A completare ed integrare il panorama delle figure professionali ci sono:
- Sviluppatori full-stack: si occupano dello sviluppo backend e frontend contemporaneamente.
- DevOps: sono sia sviluppatori che sistemisti
- Cloud architect: si occupano delle architetture cloud, progettano quanti e quali servizi compongono l'infrastruttura.
Conclusioni
Questo primo articolo, sebbene affronti l'argomento in maniera introduttiva, sarà il primo di una serie dedicata al Cloud e allo sviluppo di architetture di rete. Non mancherà, quindi, occasione di approfondire argomenti anche molto tecnici.