Dai servizi serverless all’edge computing: 16 irresistibili innovazioni cloud
Quando pensiamo al cloud pubblico, spesso la prima considerazione che viene in mente è quella finanziaria: lo spostamento dei carichi di lavoro dai data center con capacità ridotta al cloud riduce le spese in conto capitale (CapEx), ma aumenta quelle operative (OpEx). Questo può essere interessante o meno per un CFO, ma non è esattamente ideale per sviluppatori, operazioni o coloro che combinano i due sotto forma di devops.
Per queste persone il cloud computing offre molte opportunità che semplicemente non sono disponibili quando nuovi servizi software richiedono l’acquisto di un nuovo hardware o suite software aziendali. Ciò che richiede sei mesi per la distribuzione in locale a volte può richiedere 10 minuti nel cloud. Ciò che richiede firme da tre livelli di gestione per essere creato in locale può essere addebitato su una carta di credito nel cloud.
Non è però solo una questione di tempo e comodità. Il cloud consente infatti anche una maggiore velocità di sviluppo del software, che spesso porta a una riduzione del time-to-market. Il cloud può anche consentire una maggiore sperimentazione, che spesso porta a una maggiore qualità del software. Inoltre, ci sono autentiche innovazioni nel cloud che possono fornire vantaggi immediati e risolvere problemi di vecchia data relativi all’elaborazione on-premise. Di seguito riportiamo 16 di queste interessanti funzionalità legate al cloud.
Istanze di elaborazione su richiesta
Avete bisogno di un nuovo database sul vostro server locale? Mettetevi in fila e preparatevi ad aspettare mesi se non anni. Se invece non vi tocca più di tanto avere una macchina virtuale (VM) in loco invece di un server fisico e la vostra azienda utilizza VMware o tecnologie simili, l’attesa potrebbe richiedere solo settimane. Ma se volete creare un’istanza del server su un cloud pubblico, potete eseguirne il provisioning e l’esecuzione in circa 15 minuti, ridimensionarla in base alle vostre esigenze e disattivarla quando non la utilizzate.
Immagini di macchine virtuali predefinite
Essere in grado di far apparire una VM con il sistema operativo di vostra scelta è conveniente, ma dovete comunque installare e concedere in licenza le applicazioni di cui avete bisogno. Essere in grado di lanciare una VM con il sistema operativo e le applicazioni di vostra scelta pronti per l’esecuzione non ha prezzo.
Servizi serverless
Serverless significa che un servizio o un pezzo di codice verrà eseguito su richiesta per un breve periodo, di solito in risposta a un evento, senza che sia necessaria una VM dedicata su cui eseguirlo. Se un servizio è serverless, in genere non è necessario preoccuparsi affatto del server sottostante; le risorse vengono allocate da un pool gestito dal provider cloud.
I servizi serverless, attualmente disponibili su tutti i principali cloud pubblici, in genere dispongono di scaling automatico, alta disponibilità integrata e un modello di fatturazione pay-per-value. Se volete un’app serverless senza il lock-in all’interno di un cloud pubblico specifico, potete utilizzare un framework serverless indipendente dal fornitore come Kubeless, che richiede solo un cluster Kubernetes.
Container su richiesta
Un container è un’unità di software eseguibile leggera, molto più leggera di una VM. Un container racchiude il codice dell’applicazione e le sue dipendenze, ad esempio le librerie. I container condividono inoltre il kernel del sistema operativo della macchina host e possono essere eseguiti su Docker Engine o su un servizio Kubernetes. L’esecuzione di container su richiesta presenta tutti i vantaggi dell’esecuzione di macchine virtuali su richiesta, oltre al fatto di richiedere meno risorse e di avere un costo inferiore.
Immagini del container predefinite
Un container Docker è un’istanza eseguibile di un’immagine Docker, specificata da un Dockerfile. Un Dockerfile contiene le istruzioni per la creazione di un’immagine e spesso è basato su un’altra immagine. Ad esempio, un’immagine contenente Apache HTTP Server potrebbe essere basata su un’immagine Ubuntu. Potete trovare Dockerfile predefiniti nel registro Docker o crearne uno vostro. Potete anche eseguire le immagini Docker nell’installazione locale di Docker o in qualsiasi cloud con supporto per container. Come con le immagini di macchine virtuali predefinite, un Dockerfile può aprire rapidamente un’applicazione completa, ma a differenza delle immagini di macchine virtuali i Dockerfile sono indipendenti dal fornitore.
Kubernetes
Kubernetes (K8s) è un sistema open source per automatizzare la distribuzione, la scalabilità e la gestione delle applicazioni containerizzate. I cluster K8s sono costituiti da un insieme di macchine worker, chiamate nodi, che eseguono applicazioni containerizzate. I nodi di lavoro ospitano pod, che contengono applicazioni; un piano di controllo gestisce i nodi di lavoro e i pod. K8s funziona ovunque e scala senza limiti. Tutti i principali cloud pubblici dispongono di servizi K8s; potete anche eseguire K8s sulla vostra macchina di sviluppo.
Server di scalabilità automatica
Non dovete containerizzare le vostre applicazioni ed eseguirle in Kubernetes per ridimensionarle automaticamente nel cloud. La maggior parte dei cloud pubblici consente infatti di aumentare (o diminuire) automaticamente le macchine virtuali e i servizi in base all’utilizzo, aggiungendo (o sottraendo) istanze o aumentando (o diminuendo) la dimensione dell’istanza.
Database planetari
I principali cloud pubblici e diversi fornitori di database hanno implementato database distribuiti su scala planetaria e basati su data fabric, interconnessioni ridondanti e algoritmi di consenso distribuito che consentono loro di lavorare in modo efficiente e con un’affidabilità fino a cinque 9 (tempo di attività del 99,999%). Esempi specifici del cloud includono Google Cloud Spanner (relazionale), Azure Cosmos DB (multimodello), Amazon DynamoDB (valore-chiave e documento) e Amazon Aurora (relazionale). Esempi di fornitori includono CockroachDB (relazionale), PlanetScale (relazionale), Fauna (relazionale/serverless), Neo4j (grafico), MongoDB Atlas (documento) e Couchbase Cloud (documento).
Servizi ibridi
Le aziende con ingenti investimenti nei data center spesso desiderano estendere le applicazioni e i servizi esistenti nel cloud anziché sostituirli con servizi cloud. Tutti i principali fornitori di cloud offrono ora modi per farlo sia, utilizzando sia servizi ibridi specifici (ad esempio database che possono estendersi su data center e cloud), sia server locali e risorse cloud perimetrali che si connettono al cloud pubblico.
Formazione e previsione di machine learning scalabili
Il training in ambito machine learning, in particolare il deep learning, richiede spesso notevoli risorse di calcolo per ore o settimane. La previsione basata su machine learning, d’altra parte, ha bisogno delle sue risorse di calcolo per secondi per singola previsione, a meno che non stiate eseguendo previsioni in batch. L’utilizzo delle risorse cloud è spesso il modo più conveniente per eseguire il training e le previsioni del modello.
Cloud GPU, TPU e FPGA
Il deep learning con modelli di grandi dimensioni e ingenti set di dati necessari per un training accurato può spesso richiedere molto più di una settimana su cluster di CPU. GPU, TPU e FPGA possono ridurre significativamente i tempi di training e la loro disponibilità nel cloud ne semplifica l’utilizzo quando necessario.
Servizi di intelligenza artificiale pre-addestrati
Molti servizi di intelligenza artificiale possono essere eseguiti bene da modelli pre-addestrati, ad esempio traduzione linguistica, sintesi vocale e identificazione di immagini. Tutti i principali servizi cloud offrono servizi di intelligenza artificiale pre-addestrati basati su modelli robusti.
Servizi di intelligenza artificiale personalizzabili
A volte però i servizi di intelligenza artificiale pre-addestrati non fanno esattamente ciò di cui avete bisogno. Il transfer learning, che addestra solo pochi livelli di rete neurale su un modello esistente, può fornire un servizio personalizzato in tempi relativamente brevi rispetto all’addestramento di un modello da zero. Ancora una volta, tutti i principali fornitori di servizi cloud offrono il transfer learning, anche se non tutti lo chiamano con lo stesso nome.
Servizi di monitoraggio
Tutti i cloud supportano almeno un servizio di monitoraggio e semplificano la configurazione dei servizi cloud per il monitoraggio. I servizi di monitoraggio spesso mostrano una dashboard grafica e possono essere configurati per notificarvi eccezioni e indicatori di prestazioni insoliti.
Servizi distribuiti
I database non sono gli unici servizi che possono trarre vantaggio dall’esecuzione in modo distribuito. Il problema è la latenza. Se le risorse di calcolo sono lontane dai dati o dai processi gestiti, ci vuole troppo tempo per inviare e ricevere istruzioni e informazioni. Se la latenza è troppo alta in un loop di feedback, il loop può facilmente andare fuori controllo. Se la latenza è troppo alta tra il machine learning e i dati, il tempo necessario per eseguire il training del modello può aumentare. Per risolvere questo problema, i fornitori di servizi cloud offrono dispositivi connessi che possono estendere i propri servizi ai data center di un cliente (cloud ibrido) o vicino alle fabbriche di un cliente (edge computing).
Edge computing
La necessità di avvicinare geograficamente l’analisi dei dati e il machine learning ai macchinari di produzione e ad altri oggetti del mondo reale (l’Internet delle cose o IoT) ha portato alla nascita di dispositivi specializzati, come dispositivi di calcolo in miniatura con GPU e sensori, e di architetture per supportarli, come server perimetrali, piattaforme di automazione e reti di distribuzione dei contenuti. Alla fine tutti questi elementi si riconnettono al cloud, ma la possibilità di eseguire analisi all’edge può ridurre notevolmente il volume di dati inviati al cloud e ridurre la latenza.