Diventa Autore per CoreTech | Scopri di più
02/07/20 CoreTech Blog
di Carlo Parodo
Una panoramica sulle funzionalità principali delle architetture in cloud con un’introduzione all’interpretazione che Google ne fa nella sua Google Cloud Platform (GCP).
Google e cloud computing. La multinazionale di Mountain View e la tecnologia che fa da locomotiva alla produttività delle imprese. Il rapporto tra i due ha dato vita alla Google Cloud Platform, chiamata anche con l’acronimo “GCP”. Si tratta del prodotto concorrente di AWS, Amazon Web Services. Fornisce servizi su larga scala tra cui spiccano per importanza machine learning e intelligenza artificiale. Nell’articolo esploriamo la piattaforma Google e il cloud computing di cui diamo una panoramica per districarne i nodi fondamentali: Object Storage, database e analisi, cloud per developer, server e migrazioni.
Sommario
Google Cloud Platform: che cos’è la GCP
Infrastruttura Google Cloud Platform: regioni e zone
Le reti in GCP: Virtual Private Cloud
Organizzazione delle risorse in Google GCP
IAM policy in Google Cloud Platform
Creare macchine virtuali in GCP
Che cos’è la piattaforma Google GCP? La Google platform per il cloud è una suite di servizi che si appoggia all’infrastruttura che la multinazionale di Mountain View dedica agli utenti. È destinata principalmente alle imprese, ma permette di collegarsi a servizi tipici del mercato consumer. Questo aspetto è uno dei principali benefici per enti e aziende che utilizzano Google GCP.
La Google platform per il cloud permette di utilizzare funzioni di software e hardware senza fare investimenti per avere le risorse internamente in azienda. Gli strumenti diventano servizi, grazie al modello Software as a service, che è sviluppato in questo caso particolare come Platform as a service.
Prepariamoci a scoprire tutte le caratteristiche del cloud di Google, come funziona e com’è fatta l’infrastruttura che lo costituisce. Spieghiamo quali sono le soluzioni offerte da GCP, i comandi come gcloud e come funzionano.
Per iniziare, ecco la nostra panoramica sul cloud computing.
Il cloud computing è un insieme di servizi tecnologici che vengono forniti tramite un servizio web. Permette di avere a disposizione sistemi software e hardware sotto forma di servizi distribuiti, flessibili e scalabili.
Nel cloud, i server sono:
Il cloud è conveniente per 2 ragioni principali:
Una delle più grandi invenzioni del cloud è Object Storage. In Google Cloud Platform (GCP) è Cloud Storage, in Amazon Web Services (AWS) è S3, in Azure è Blob. Da essa derivano soluzioni come Dropbox, OneDrive e Google Drive.
Nota anche come archiviazione basata sugli oggetti, Object Storage è un'architettura di archiviazione dei dati che gestisce i dati stessi come oggetti. Altre architetture di archiviazione funzionano in modo differente: i file system gestiscono i dati come una gerarchia di file, mentre l'archiviazione a blocchi gestisce i dati come blocchi all'interno di settori e tracce.
Spieghiamo brevemente come funziona Object Storage. La sua architettura permette di immagazzinare, condividere e archiviare file non eseguibili, in modo sicuro, ridondante, condiviso, con molte funzionalità, a un costo minimo.
I dati sono gestiti come oggetti. Questo significa che sono archiviati in unità separate. A ciascuna unità, definita anche “oggetto”, corrisponde un identificatore univoco, detto anche “chiave”. Così è possibile individuare ciascun oggetto, cioè ciascuna unità contenente un dato, indipendentemente dalla sua posizione nel sistema distribuito.
Ogni oggetto, in genere, include i dati stessi, una quantità variabile di metadati e un identificatore univoco.
Un altro concetto importante nel cloud è legato a database e analisi. Il cloud supporta in modo efficiente questi elementi dell’infrastruttura offrendo servizi con elevati standard di sicurezza, spazio illimitato e failover immediato.
Il failover interviene in caso di guasto o interruzione anomala nel funzionamento di un server, un componente hardware o una rete. È la tecnica che prevede la commutazione automatica a una struttura analoga ridondante o in standby, così che il nuovo dispositivo rimpiazzi quello non funzionante.
Nel cloud, i tempi di inattività, in caso di guasti o interruzioni, possono essere estremamente ridotti, sino quasi ad annullarsi.
Qual è il punto di vista dello sviluppatore di applicazioni per il cloud? È necessario che renda il codice veloce e scalabile, oltre a sorvegliare gli elementi classici della buona programmazione (algoritmi efficienti, codice ben strutturato, etc.).
La necessità è, infatti, poter utilizzare il codice prodotto ovunque nel mondo, da milioni di utenti, senza perdere performance di velocità e disponibilità.
Questo si traduce in scalabilità.
Il valore del codice è misurato dal numero di utenti (attuali e potenziali). Per sopportare un numero enorme di potenziali utenti, il programma deve essere eseguito in molti casi contemporaneamente. Ciò significa che l'utente può parlare, nella stessa sessione di lavoro, con macchine virtuali diverse. Tutto senza errori o anomalie.
Pertanto, il codice deve essere sessionless, ovvero non deve archiviare i dati della sessione in memoria.
Nel cloud un server è una qualcosa di virtuale, chiamato anche VM o Instance. È costituito da un insieme di risorse che possono essere aggregate e disaggregate dinamicamente. Il concetto monolitico di hardware diventa elastico (più gomma che ferro).
Si possono avere macchine virtuali minuscole o enormi e si possono modificare le loro dimensioni al volo. E nel mentre, tutto continua a funzionare, anche le app. Le VM vengono controllate frequentemente e, in caso di guasti, non vengono riparate.
Vengono, invece, migrate su nuovo hardware, praticamente senza interruzioni del servizio (questo può variare a seconda della configurazione).
Abbiamo due possibilità per ospitare le nostre applicazioni su un server in cloud:
È possibile semplificare ulteriormente, con maggior delega al Cloud Provider, senza alcuna infrastruttura (Server, rete, IP). Il modo principale per farlo è con un PaaS, ovvero la modalità classica di un sistema Serverless.
Platform as a service (PaaS) è un'attività economica che consiste nel servizio di messa a disposizione di piattaforme di elaborazione (Computing platform) e di solution stack.
Gli elementi del PaaS permettono di sviluppare, sottoporre a test, implementare e gestire applicazioni aziendali senza i costi e la complessità associati ad acquisto, configurazione, ottimizzazione e gestione dell'hardware e del software di base (oneri del server).
A questo punto non ci resta che scoprire Google App Engine, cos’è e come funziona. Infatti, ora sappiamo che cosa significa “Platform as a service”. Il PaaS in GCP è App Engine e consente di caricare il solo codice (Standard Edition) o un container (Flexible Edition):
App Engine è progettato appositamente per l'app con microservizi, gestisce versioni e distribuzioni speciali, che consentono di aggiornare l'app senza tempi di inattività.
Vediamo ora una panoramica dei prodotti GCP.
Le soluzioni di computing ci consentono di eseguire il codice che sviluppiamo. Troviamo:
Con le soluzioni per lo storage, andremo ad immagazzinare i nostri dati, che verranno direttamente o indirettamente utilizzati dalle nostre applicazioni. Abbiamo:
Infine, troviamo tutte le soluzioni per i Big Data e il Machine Learning. Per i Big Data abbiamo:
Per il Machine Learning abbiamo:
Alla base di tutta l’infrastruttura GCP ci sono i data center. Le singole aree geografiche in cui Google è presente con i suoi data center vengono chiamate regioni. Le regioni sono lontane almeno 100 miglia (circa 160 Km) l'una dall'altra.
Ciascuna regione è poi suddivisa in zone. Le zone rappresentano i data center veri e propri, intesi come ambienti isolati, a volte edifici completamente separati, ma all'interno di una stessa area geografica.
Le zone di una stessa regione non condividono point of failure, cioè parti del sistema, hardware o software, il cui malfunzionamento comprometterebbe il sistema intero. Le zone sono cioè concepite affinché un guasto a una zona non possa comprometterne un'altra.
Grazie all’infrastruttura Google divisa in regioni e zone, ci basterà eseguire l’applicazione in due o tre zone differenti nella stessa regione, per avere un'applicazione resiliente. Se una zona si ferma per qualche motivo, l'applicazione continuerà comunque a funzionare nelle altre due.
Se invece la nostra è un'applicazione globale, potremmo eseguirla contemporaneamente in diverse regioni. Saremo così più vicini ai nostri utenti, in modo da diminuire la latenza di rete e contemporaneamente essere al riparo dalla perdita di un'intera regione (disaster recovery, cioè l'abilità di far fronte a disastri naturali o altri eventi catastrofici).
Quello che fa da collante e che caratterizza la robustezza dell'infrastruttura di GCP è la rete: data center e risorse che vi installiamo comunicano attraverso la rete e le risorse zonali, regionali e globali. Se ne avvalgono per il loro funzionamento.
Le reti in GCP sono chiamate VPC, cioè Virtual Private Cloud (reti private virtuali in cloud). Come tutte le risorse di GCP, appartengono a un progetto e sono isolate tra loro anche quando stanno nello stesso progetto.
Le reti di VPC sono concetti astratti e sono globali, esistono cioè in tutte le regioni del mondo. Ogni rete di VPC (VPC network) è composta da una serie di sottoreti (subnet), che sono invece regionali ed hanno un intervallo di indirizzi IP concreti. Macchine virtuali e altre risorse GCP vengono assegnate a una sottorete da cui ricevono un indirizzo IP nell'intervallo corrispondente.
Una rete VPC è quindi fatta di sottoreti che possono essere in regioni diverse, ma sono collegate tra loro e accessibili l'una all'altra. Le sottoreti che appartengano a reti VPC differenti non sono accessibili l'una all'altra neanche se si trovano nella stessa regione.
Questo è il potere di isolamento che ci offrono le VPC. Per quanto riguarda l'accesso da Internet alle reti interne VPC, basta creare IP pubblici, che verranno mappati sugli indirizzi interni delle risorse che vogliamo esporre.
Le app come Amazon o Ebay, con milioni di visitatori ogni giorno, utilizzate in tutto il mondo, vengono gestite tramite svariati Web Server, pronti a elaborare ogni richiesta.
Un load balancer in GCP è chiamato Google Cloud Load Balancer e indicato spesso con l’acronimo “GCLB”. Si tratta di un servizio erogato dal software che permette di bilanciare il carico delle richieste e redistribuirle su scala globale.
La singola richiesta viene inviata a un load balancer, non direttamente all'applicazione, che sceglierà la VM che elaborerà la risposta.
I load balancer sono come smistatori o classificatori di un ufficio postale. Ci possono essere molti livelli di load balancer:
I load balancer non hanno bisogno di alcun intervento diretto, occorre solo configurare e monitorare il processo. Essi si riferiscono a servizi avanzati in grado di gestire le macchine virtuali che sono effettivamente necessarie (avviarle, arrestarle, sostituirle).
Quando le nostre applicazioni sono installate in diverse zone o regioni, abbiamo bisogno di presentarle attraverso un unico indirizzo IP, in grado di fare bilanciamento del carico. L’indirizzo IP permette a strumenti, come lo scaling automatico delle risorse, di operare attraverso regioni e zone in cui si trova l’applicazione da scalare.
Questa è la funzione del cloud load balancing: offre un singolo indirizzo IP a livello globale, che reindirizza le richieste a una serie di indirizzi IP interni, su diverse zone, in diverse regioni.
Una caratteristica apprezzata dei load balancer di Google è che non richiedono pre-warming. Questo significa che non c'è bisogno di prepararli o configurarli per picchi di accesso o carichi particolarmente elevati in momenti di punta: si adattano da soli automaticamente.
Per risorse intendiamo una macchina virtuale, un cloud storage bucket, un'istanza di Cloud SQL, i nostri dati o il nostro codice eseguito su App Engine. Tutte queste risorse vengono organizzate in progetti.
Ogni risorsa che creiamo deve essere associata a uno e un solo progetto. Quindi, prima di cominciare a utilizzare Google Cloud Platform, dovremo per forza creare un progetto. I progetti possono essere a loro volta organizzati in cartelle e al di sopra di tutto potremmo avere un'organizzazione. Organizzazione e cartelle sono facoltativi ed è quindi possibile avere un intero sistema GCP fatto solo di progetti, senza livelli superiori.
In Google GCP i progetti vengono usati per:
Hanno anche un'altra funzione molto importante: abilitare e gestire la fatturazione.
I progetti, infatti, vengono fatturati singolarmente e possono avere billing account differenti. In pratica, tengono traccia delle risorse utilizzate e permettono di stabilire delle quote d'uso con notifica quando vengono sforate.
I progetti vengono identificati da tre attributi:
L'obiettivo di questa struttura gerarchica è darci la possibilità di trasferire e riflettere su GCP la nostra struttura aziendale con tutta la sua complessità.
Potremmo quindi usare le cartelle per raggruppare dipartimenti, uffici, team di lavoro, ognuno con i propri progetti, le proprie risorse e specifici livelli di accesso.
GCP ha un insieme di ruoli e autorizzazioni che definiscono chi ha accesso a quali risorse. Utilizziamo il servizio IAM (Cloud Identity and Access Management) per ispezionare e modificare ruoli e autorizzazioni, tramite la voce di menu IAM e amministrazione -> IAM.
Una IAM policy si compone di tre elementi:
Come destinatario della policy (chi), una IAM policy può essere assegnata a:
La parte del “cos’è possibile fare con la policy” specifica quali permessi vogliamo dare al destinatario della stessa. In GCP i permessi non vengono assegnati direttamente: si utilizzano i ruoli.
Abbiamo tre tipi di ruoli:
Gli IAM primitive roles sono quelli originariamente previsti dalla piattaforma. Sono generici e una volta assegnati hanno effetto su tutte le risorse all'interno di un progetto. Esistono 4 primitive roles GCP:
I ruoli predefiniti (IAM predifined roles) sono associati a specifici prodotti e servizi e definiscono quindi, oltre a permessi assegnati, anche su quali risorse applicarli.
Gli IAM custom roles, infine, non possono essere assegnati a livello di cartella, ma solo a progetti e organizzazioni. La gestione o l'aggiornamento dei custom roles è totalmente in capo a noi, inclusa la validità ed efficacia della selezione di permessi effettuata. Occorre quindi sempre valutare bene se e quando utilizzarli.
La caratteristica del “su quale risorsa la policy sarà valida” dipende da:
In generale, una policy si applica a tutte le istanze di una risorsa, ma in alcuni casi vengono applicate policy anche a livello più granulare. È il caso, per esempio, dei bucket e degli oggetti di Cloud Storage o anche dei dataset di Big Query.
Per interagire con GCP abbiamo a disposizione 4 strumenti:
La Console Web è probabilmente lo strumento di amministrazione di GCP usato più comunemente. È un'interfaccia interattiva che permette di completare la stragrande maggioranza delle operazioni amministrative sulla piattaforma.
Offre pagine che guidano nella selezione delle opzioni disponibili senza bisogno di ricordarsi nomi e relativi valori. Ci consente di:
Nella console Web GCP notiamo in alto sulla sinistra un pannello che racchiude nome, ID e numero del progetto su cui stiamo lavorando. Questi identificatori vengono spesso utilizzati durante l'interazione con i servizi GCP.
Il menu di navigazione è un componente importante della console GCP. Offre un rapido accesso a tutti i servizi della piattaforma. È composto da sette categorie di servizi GCP:
La console web si presta all'uso interattivo dell'amministrazione quotidiana dei prodotti GCP, in cui si accede via browser e si completano le operazioni necessarie in una sessione.
Il Google Cloud SDK è un set di comandi per terminale che permettono di gestire risorse e applicazioni ospitate in GCP.
Contiene i seguenti comandi:
Il Cloud SDK è indirizzato a un uso specializzato rispetto alla Console Web. Permette di creare script complessi e parametrizzati che possono essere invocati quando necessario, oppure aggiunti ad un crontab per l'esecuzione in terminali stabiliti.
Approfondiamo brevemente le caratteristiche del comando gcloud. Come funziona? Si tratta di un’interfaccia a riga di comando che permette di portare a termine i più comuni compiti assegnati alla piattaforma Google di cloud computing. Utilizza comandi testuali che assolvono a funzioni come per esempio la gestione di istanze e risorse della macchina virtuale Compute Engine. Altre operazioni possibili con gcloud, per capire come funziona, sono:
La Cloud Shell è un terminale interattivo accessibile da console web.
Consente di utilizzare il Cloud SDK direttamente dal Web sull'istanza di Compute Engine. Quest’ultima dà 5 gb di spazio gratuito su un disco persistente, che viene montato come nostra home directory.
Cloud Shell è una macchina Linux che possiamo utilizzare in ogni momento, per accedere all’SDK, ma anche ad altri strumenti : Git, Docker, Python, Java, Go, Node JS.
L’API RESTful è un'interfaccia di programmazione su HTTPS, secondo il paradigma RESTful (Representational State Transfer). Le informazioni tra client e server sono scambiate attraverso JSON e l'autenticazione avviene via OAuth. Le API RESTful sono alla base degli strumenti amministrativi: console web e Cloud SDK utilizzano queste API per portare avanti le istruzioni date dagli utenti. L'uso di queste API è legato per lo più all'uso programmatico, cioè come parte dello sviluppo di software amministrativi che includono creazione e gestione di risorse o servizi GCP, come parte della propria logica di esecuzione.
Google Compute Engine consente di creare macchine virtuali che eseguono sull'infrastruttura di Google diversi sistemi operativi, tra cui Windows Server e più versioni di Linux (Debian, Ubuntu, Suse, Red Hat, CoreOS). È possibile eseguire migliaia di CPU virtuali su un sistema che è stato progettato per essere veloce e offrire una forte coerenza delle prestazioni.
Google Compute Engine (GCE) è il componente IaaS (Infrastructure as a Service) di Google Cloud Platform che gestisce il motore di ricerca di Google, Gmail, YouTube e altri servizi. Consente agli utenti di avviare macchine virtuali (VM) su richiesta.
Le macchine virtuali possono essere avviate dalle immagini standard o dalle immagini personalizzate create dagli utenti. Alcune risorse di Compute Engine vivono in regioni o zone. Una regione è una posizione geografica specifica in cui è possibile eseguire le risorse.
Ogni regione ha una o più zone. Per esempio, la regione us-central1 denota una regione centrale degli Stati Uniti che ha zone us-central1-a, us-central1-b, us-central1-c, e us-central1-f.
Le risorse che vivono in una zona sono denominate risorse zonali. Istanze di macchine virtuali e dischi permanenti vivono in una zona.
Per collegare un disco persistente a un'istanza di macchina virtuale, entrambe le risorse devono trovarsi nella stessa zona. Allo stesso modo, se si desidera assegnare un indirizzo IP statico a un'istanza, l'istanza deve trovarsi nella stessa zona dell'IP statico.
Per creare una VM, nel menu della console GCP:
Per accedere via SSH alla macchina virtuale, clicchiamo su SSH (pulsante in alto a destra nella console). Questo avvia un client SSH direttamente dal browser.
Riferimenti sitografici: