Seleziona una pagina

Da VM ad applicazioni serverless: il lungo viaggio nel cloud.

Le applicazioni serverless non sono che l’ultimo passaggio all’interno di un mondo che chiamiamo cloud computing, mondo che ha visto molti cambiamenti, tanto che il cloud di oggi è profondamente diverso da ciò che chiamavamo “cloud” solo pochi anni fa.

La continua esigenza di tutto l’ecosistema IT di semplificare, ottimizzare e rendere più efficiente la distribuzione e la gestione delle applicazioni ha portato a diverse evoluzioni, un “lungo viaggio” del cloud che ovviamente non è ancora terminato (e che non terminerà mai…).

Da VM ad applicazioni serveless: il lungo viaggio del cloud…

All’inizio furono le VM…

Il viaggio inizia con le Virtual Machines (VMs) emulazioni virtuali di computer fisici, concetto che ha rivoluzionato il mondo IT, creando le condizioni per l’esplosione del cloud.

Questo approccio ha permesso di ottimizzare l’uso delle risorse hardware, l’isolamento delle applicazioni e la creazione di ambienti di test replicabili.

Tuttavia, per il fatto che ogni VM richiede una copia dell’intero sistema operativo, uno spazio disco dedicato, RAM e CPU assegnate, sono spesso uno spreco di risorse e di complessità.

Questi problemi hanno portato all prima evoluzione: i containers.

… poi arrivarono i containers…

Con la crescente necessità di efficienza, portabilità e scalabilità, è nata la tecnologia dei container.

I container sono più leggeri rispetto alle VMs e condividono lo stesso sistema operativo dell’host, ma con processi e applicazioni isolate tra loro.

Questa struttura riduce lo spreco di risorse poiché non c’è bisogno di un sistema operativo separato per ogni applicazione.

Inoltre, per gli sviluppatori diventa tutto più semplice, in quanto possono “impacchettare” un’applicazione con tutte le sue dipendenze in un formato standardizzato, non curandosi troppo di quanto c’è “sotto” e garantendo l’esecuzione, la portabilità e la scalabilità dell’applicazione in qualsiasi ambiente che supporti la tecnologia dei container.

Poteva bastare ?

Evidentemente no…

Ma non basta… ecco le applicazioni Serverless!

Nonostante i container abbiano risolto molti problemi delle VMs, gestirli su larga scala può essere complicato, e per semplificare ancora di più la vita ai nostri sviluppatori e garantire ambienti più leggeri e sviluppi più veloci, era necessario un altro passaggio, un ulteriore livello di astrazione rispetto all’infrastruttura sottostante.

Qui entra in gioco il concetto di applicazioni serverless.

Con il serverless, gli sviluppatori non si preoccupano dell’infrastruttura sottostante.

Invece di gestire, scalare e mantenere server e/o container, possono concentrarsi esclusivamente sul codice disinteressandosi completamente dell’infrastruttura, che viene gestita completamente dal cloud provider che mette a disposizioni strumenti chiamati application manager (oppure functions manager), che gestiscono automaticamente l’esecuzione, la scalabilità e la manutenzione delle applicazioni.

applicazioni serveless

 

Perché c’è stata l’evoluzione verso le applicazioni Serverless?

La transizione da VM a container e da container a serverless non significa che un concetto sostituisce l’altro: sebbene il modello delle applicazioni serverless rappresenti un passo avanti in termini di semplificazione e gestione, ci sono scenari in cui l’uso di container oppure delle “vecchie” VM può avere ancora senso, specialmente quando si desidera avere una migrazione il più semplice possibile verso il cloud.

Ecco alcune ragioni di questa evoluzione:

  1. Semplificazione dell’Infrastruttura: Anche se i container hanno ridotto la complessità rispetto alle macchine virtuali tradizionali, la gestione, l’orchestrazione e la scalabilità dell’infrastruttura rimane a carico dei sistemisti e degli sviluppatori. Serverless va oltre, astraendo completamente l’infrastruttura, permettendo agli sviluppatori di concentrarsi unicamente sul codice.
  2. Ambienti più semplici e leggeri: Con serverless, la parte operativa tradizionale (come la gestione dei server, la scalabilità e l’uptime) sono gestite dal provider di servizi, semplificando ed alleggerendo le architetture tradizionali.
  3. Modello Economico: Serverless ha introdotto un modello di prezzo “pay-as-you-go”, dove si paga solo per le risorse effettivamente consumate durante l’esecuzione del codice.
  4. Velocità di Deployment orientato agli eventi: La capacità di distribuire funzioni singole può accelerare il time-to-market per nuove applicazioni.
  5. Innovazione dei Providers di Cloud: Grandi attori del cloud, come AWS, Google Cloud e Azure, hanno investito pesantemente nella tecnologia serverless, spingendo questa innovazione.

Functions As A Service ed Applicazioni Serverless

Nell’ambito delle applicazioni serverless, il concetto di “Function as a Service” (FaaS) gioca un ruolo cruciale.

Ma prima di lanciarci a capire questo meglio il concetto di FaaS, cerchiamo di capire cosa è una funzione in ambito serveless…

Funzioni in ambito serverless: alcuni esempi.

Le applicazioni serverless sono progettate intorno all’idea di eseguire codice in risposta a specifici eventi, eventi che possono variare ampiamente, dal caricamento di un file in uno storage cloud alla ricezione di una richiesta HTTP.

Ecco alcuni esempi concreti di funzioni per applicazioni serveless:

  • Elaborazione di pagamenti Al completamento di un acquisto su un sito web, una funzione serverless può gestire il processo di pagamento, interagendo con gateway di pagamento, registrando la transazione e inviando e-mail di conferma
  • Notifiche in tempo reale Se, ad esempio, un articolo viene aggiunto a un database, una funzione serverless potrebbe inviare notifiche push ai dispositivi degli utenti o inviare e-mail di aggiornamento ai sottoscrittori.
  • Elaborazione di log Ogni volta che un servizio genera un log, una funzione serverless può essere attivata per analizzare, filtrare e archiviare quel log, o per inviare avvisi in caso di attività sospette.
  • Interazioni con bot In risposta a domande degli utenti via chat o assistenti virtuali, le funzioni serverless possono essere utilizzate per elaborare la richiesta dell’utente, interagire con i database e fornire risposte in tempo reale.
  • Validazione e trasformazione dei dati Quando i dati vengono inviati attraverso un’API, una funzione serverless può verificare, pulire e trasformare questi dati prima di archiviarli, assicurando che siano nel formato corretto.

Functions as a service (spiegato facile)

Queste funzioni sono gestite da piattaforme specifiche che si prendono cura di tutti gli aspetti operativi, come la scalabilità, il monitoraggio e la manutenzione.

Queste piattaforme vengono definite “Functions Manager” , e siccome i principali cloud providers mettono a disposizione queste piattaforme già pronte sotto forma di servizio, nasce la definizione di Function As A Service (FaaS).

Per capire meglio il concetto di FaaS la tabella sotto può esserci di aiuto:

  • I livelli più bassi (gestione a carico dello sviluppatore/sistemista) sono di colore verde mentre i livelli superiori (gestione a carico del provider/cloud provider) sono di colore blu.
  • Quando si utilizzano server fisici, è necessario gestire l’hardware e tutti i livelli superiori, man mano che si “sale”, ecco che la gestione passa progressivamente dallo sviluppatore/sistemista al cloud provider.
  • In caso di  Function as a Service (FaaS), lo sviluppatore deve solo inserire il codice nell’interfaccia fornita dal cloud provider e si astrae da tutto il resto.
  • Il modello FaaS non è confondere con SaaS (Software as a Service), quest’ultimo consente solo di utilizzare applicazioni già pronte (realizzate da fornitori terzi) utilizzando solo un browser web.

Principali caratteristiche di un Functions manager

Un buon Functions Manager in ambito applicazioni serverless offre una suite di strumenti e servizi che permettono agli sviluppatori di concentrarsi sulla scrittura del codice, garantendo al contempo che le funzioni siano sicure, scalabili e ben monitorate.

  • Distribuzione e Versionamento: Ogni funzione può avere diverse versioni e alias. Questo permette agli sviluppatori di testare nuove caratteristiche in produzione oppure effettuare il roll-back a versioni precedenti
  • Monitoraggio e Logging: Gli strumenti di gestione delle funzioni offrono integrazioni con servizi di monitoraggio e logging per tracciare le esecuzioni delle funzioni, identificare errori, monitorare la latenza e raccogliere statistiche utili.
  • Scaling: Un buon Functions Manager è in grado di eseguire più istanze di una funzione in risposta a un aumento del carico.
  • Sicurezza: È essenziale proteggere le funzioni serverless da minacce esterne. Questo include la definizione di ruoli e permessi, la protezione delle chiavi API e l’integrazione con sistemi di identità.

Alcuni dei principali provider cloud come AWS, Azure e Google Cloud offrono servizi e strumenti specifici per gestire funzioni serverless, vediamoli ora…

I principali Functions manager sul mercato

Ecco alcuni dei principali Functions Manager offerti dai fornitori di cloud:

  1. AWS Lambda (Amazon Web Services):
  2. Azure Functions (Microsoft Azure):
    • E’ la risposta di Microsoft al bisogno di calcolo serverless.
    • Si integra con l’ecosistema Azure e supporta vari linguaggi e modelli di sviluppo.
  3. Google Cloud Functions (Google Cloud Platform):
    • Permette di eseguire codice in risposta a eventi su GCP.
    • Supporta principalmente Python, Node.js e Go.

Applicazioni serverless: principali criticità.

Giunti a questo punto è bene capire che non è tutto ora ciò che luccica, e sebbene l’architettura serverless offra numerosi vantaggi, presenta anche alcune limitazioni, ed è essenziale esserne consapevoli.

Ecco alcune delle principali criticità delle applicazioni serverless:

  • Inizio a freddo (Cold Start) Una delle criticità più discusse nel contesto serverless è il cosiddetto “cold start”. Quando una funzione serverless non viene utilizzata per un determinato periodo di tempo, viene “congelata”. Al successivo trigger, ci può volere un po’ di tempo per “scongelarla” e renderla nuovamente operativa, causando ritardi nell’esecuzione.
  • Complessità nella gestione dello stato Le funzioni serverless sono stateless per definizione, il che significa che non mantengono informazioni tra le diverse esecuzioni. Questo può complicare la gestione dello stato dell’applicazione e richiedere l’integrazione con servizi esterni per la persistenza dei dati.
  • Monitoraggio e debugging A causa della natura effimera delle funzioni serverless, il monitoraggio e il debugging delle applicazioni possono essere più complessi rispetto agli approcci tradizionali.

Compagni di viaggio ?

La tua azienda è ancora all’inizio del viaggio ?

…oppure ha già percorso molta strada nel cloud?

Il competence center di FASTWEB dedicato al cloud e multicloud, insieme all’ecosistema di partner tecnologici possono accompagnarti in questo viaggio, di certo complesso ma molto, molto affascinante…

Vogliamo fare un pezzo di strada insieme?