Caratteristiche e Differenza tra SaaS, Container e FaaS

Caratteristiche e Differenza tra SaaS, Container e FaaS

Il cloud rappresenta l’accesso ad un insieme di risorse condivise, adoperabili con il minimo sforzo. I provider cloud offrono diversi servizi, principalmente divisi per livello di astrazione offerto, ed è possibile scegliere in base alle diverse necessità di controllo ed ottimizzazione che le aziende richiedono. Il cloud offre numerosi benefici, tra cui la riduzione dei costi di amministrazione IT, la maggiore flessibilità nella gestione dei servizi offerti, e le garanzie di qualità offerte dai provider cloud.
Oltre alle comodità offerte dal cloud, è importante offrire un certo livello di sicurezza, diverso per ogni organizzazione. Per queste ragioni, è possibile effettuare il deployment dei servizi sia su infrastrutture pubbliche condivise da più utenti, come nel caso dei più comuni servizi di AWS o Google Cloud offerti sul Web, sia in infrastrutture private di proprietà dell’azienda, spesso gestite da enti terzi o dalla società stessa.

Caratteristiche essenziali

Il NIST definisce le caratteristiche essenziali del cloud, elencando cinque aspetti imprescindibili che ogni infrastruttura deve possedere:

  1. On-demand self-service: il consumatore può accedere a qualsiasi risorsa cloud senza richiedere alcun intervento umano;
  2. Broad network access: le risorse cloud sono disponibili sulla rete e accessibili a chiunque, grazie all’utilizzo di protocolli standard per permettere la fruizione a qualsiasi client;
  3. Resource pooling: le risorse sono assegnate secondo politiche di frequenza delle richieste ricevute, e sono condivise a più utenti secondo un modello a multi-tenant. Tipicamente, il consumatore non ha conoscenza della locazione delle risorse, e non possiede alcun controllo sull’allocazione di quest’ultime, anche se esistono astrazioni per definire il data center in cui i servizi vengono eseguiti;
  4. Rapid elasticity: le risorse possono essere assegnate e rilasciate rapidamente, spesso anche automaticamente, per scalare di fronte a qualsiasi quantità di richieste ricevute; inoltre, per l’utente il cloud presenta una quantità illimitata di risorse, accessibile ovunque ed in qualsiasi momento;
  5. Measured service: il cloud ottimizza l’utilizzo di risorse grazie alla rilevazione di metriche, che permettono inoltre il monitoring ed il reporting delle risorse consumate.

I modelli di servizio

Come già accennato, i servizi del cloud computing divergono per livello di astrazione offerto:

  1. Infrastructure-as-a-Service (IaaS): permettono all’utente di generare, tramite tecniche di virtualizzazione, risorse computazionali basilari, quali virtual machine, storage e networking. I servizi IaaS sono pensati per utenti esperti, a causa delle importanti competenze richieste nell’ambito dei sistemi distribuiti. Con questo tipo di servizi, il customer può realizzare una rete di virtual machine in completa autonomia, avendo la possibilità di scegliere: il sistema operativo, i middleware relativi il deployment del servizio da eseguire, nonché la configurazione relativa al networking presente tra le macchine virtuali;
  2. Platform-as-a-Service (PaaS): offrono gli strumenti necessari per lo sviluppo di applicazioni cloud native, in quanto offrono all’utente librerie, linguaggi di programmazione, servizi ed utility pronti all’utilizzo. L’utente non gestisce la piattaforma sottostante, in quanto non possiede i diritti per scegliere il sistema operativo in cui vengono eseguiti i servizi, bensì possiede l’accesso alle API delle librerie disponibili per poter controllare le funzionalità offerte. Tipicamente, i servizi PaaS offrono componenti di supporto, quali database o message broker, per facilitare il cliente nello sviluppo di applicazioni modulari e complesse. Le risorse computazionali sono astratte, e l’utente non ha potere in relazione alle quantità di risorse da allocare, anche se è possibile trovare parametri di configurazione con cui andare ad ottimizzare, anche se limitatamente, l’utilizzo di quest’ultime;
  3. Software-as-a-Service (SaaS): rappresentano il più alto livello di astrazione offerto all’utente, in quanto consistono in applicazioni complete e pronte all’utilizzo. L’adozione di queste applicazioni è molto diffusa in ambiente industriale, e la sottoscrizione verso questi servizi richiede spesso il pagamento tramite abbonamento periodico. I SaaS sono i servizi più popolari tra quelli offerti in ambiente cloud, in quanto l’utilizzo non è limitato ad architetti e programmatori, bensì sono accessibili da chiunque, basti pensare ad applicazioni quali Office 365 di Microsoft, oppure Google Drive di Google. L’intera applicazione è gestita dal provider, e per questa ragione l’utente non deve preoccuparsi di effettuare nessuna operazione IT, offrendo potere computazionale praticamente illimitato a fronte di costi molto limitati.

Differenza tra IaaS, PaaS e SaaS

Oltre le virtual machine: i container

I servizi IaaS offrono al cliente la possibilità di generare macchine virtuali, lasciando la libertà di scegliere e di configurare il sistema operativo e i middleware adottati da ognuna di queste. Le virtual machine offrono un elevato grado di isolamento, in quanto in ogni macchina viene istanziato un nuovo sistema operativo, con tutto l’overhead che questo comporta. Si può dire che la virtual machine è la completa simulazione di un computer, soprattutto perché ad ogni computer è richiesta la presenza di un sistema operativo capace di comunicare con l’hardware sottostante. In ogni caso, le macchine virtuali sono componenti pesanti, che produco un importante overhead e che richiedono diversi minuti per potersi avviare.

Per queste ragioni, nel corso degli anni si è notata la mancanza di flessibilità offerta da questa tecnologia, e nuove soluzioni sono arrivate in soccorso per superare le limitazioni appena citate. L’alternativa più importante alle macchine virtuali sono i container, ovvero unità di esecuzione, dove all’interno sono presenti codice, dipendenze ed ambiente dell’intera applicazione. La presenza di ogni dipendenza richiesta dal software rende i container estremamente portatili, in quanto l’esecuzione di ognuno di questi non è influenzata in nessun modo dal sistema in cui viene eseguito, né dai componenti con cui interagisce. Un container è un package leggero, standalone, ed eseguibile, e l’overhead generato dal deployment è estremamente meno influente rispetto a quello di una virtual machine. La principale motivazione di questa differenza è dovuta dalla possibilità di istanziare più container sopra lo stesso sistema operativo, in quanto questi necessitano unicamente di eseguire librerie e dipendenze, e non di avvalersi di un sistema operativo personale.

La tecnologia a container è resa possibile da alcuni moduli presenti nel sistema operativo Linux, che permettono di astrarre una certa quantità di risorse, andando ad isolare i diversi ambienti richiesti dal deployment dei container. I vantaggi derivati dall’adozione di questa tecnologia sono numerosi:

  • Distribuzione immediata: è possibile fare il deployment di container in pochi secondi, se non addirittura in millisecondi. Prestazioni così importanti permettono di liberare le risorse nel cloud, e, quando necessario, generare un nuovo container ed offrire il servizio, cosa impossibile da effettuare con le virtual machine;
  • Alta disponibilità: i servizi eseguiti su container possono essere replicati con estrema semplicità su più nodi, mentre le macchine virtuali richiedono una quantità di risorse non trascurabili;
  • Elevato grado di scalabilità: i container rendono semplice la possibilità di scalare orizzontalmente i servizi, permettendo di generare milioni di container;
  • Performance migliori: la granularità offerta dai container rispetto alle virtual machine permette di scalare in maniera più efficiente ed ottimizzata.
    Nonostante i numerosi vantaggi presentati dai container, le virtual machine sono una tecnologia ancora apprezzata in scenari industriali, soprattutto per l’isolamento offerto, dato che più container condividono lo stesso sistema operativo, al contrario delle macchine virtuali. Inoltre, alcune applicazioni funzionano meglio con sistemi operativi dedicati, soprattutto nel caso di applicazioni stateful dove è necessario aggregare importanti quantità di dati.

Function-as-a-Service (FaaS)

Le FaaS (Function-as-a-Service) rappresentano un tipo di servizio cloud che permette all’utilizzatore di eseguire codice in risposta ad eventi, senza la necessità di dover gestire complesse infrastrutture, sforzo tipicamente richiesto durante lo sviluppo e l’esecuzione di applicazioni a microservizi. Con i servizi FaaS: hardware, sistemi operativi, web server ed altri middleware sono gestiti completamente dal provider cloud, permettendo allo sviluppatore di focalizzarsi unicamente sullo sviluppo del codice applicativo.

L’utilizzo di questi servizi porta importanti benefici, soprattutto relativi al risparmio economico derivante dall’adozione delle funzioni:

  1. Più codice, meno infrastruttura: con i servizi FaaS, è possibile dividere i server in funzioni, le quali sono scalate automaticamente ed indipendentemente dalla piattaforma, evitando di dover gestire le risorse allocate;
  2. Addebito costi in base al tempo di esecuzione: il costo dell’adozione di servizi FaaS è calcolato unicamente in base al tempo di esecuzione delle funzioni. Non esiste nessun server in idle da pagare, in quanto la piattaforma genera e termina le funzioni invocate. Per queste ragioni, il costo complessivo derivante da queste soluzioni può essere molto più basso rispetto a quello di altri servizi;
  3. Scalabilità automatica: i servizi FaaS scalano automaticamente, senza alcun intervento richiesto;
  4. Affidabilità delle infrastrutture cloud: le funzioni vengono replicate automaticamente tra i diversi data center offerti dal provider cloud, garantendo disponibilità e tolleranza ai guasti.

Le funzioni, per garantire le massime prestazioni, dovrebbero essere leggere e limitate, in modo da generarsi ed eseguirsi nel minor tempo possibile. Infatti, l’idea generale alla base dell’adozione di queste soluzioni è quella di migrare i propri servizi in funzioni isolate, leggere ed indipendenti, per offrire gradi di scalabilità non raggiungibili dalle soluzioni a microservizi.
Le FaaS sono soluzioni adatte principalmente per grandi carichi di lavoro e per algoritmi massicciamente paralleli, data la facilità di questi servizi di generare migliaia di repliche in pochi secondi. Questi servizi possono essere utilizzati per sviluppare servizi di backend mantendo i costi relativamente bassi, ad esempio per lo sviluppo di servizi per stream e data processing, o soluzioni per dispositivi IoT. Infatti, AWS Lambda, servizio FaaS di AWS, e IBM Cloud Functions, servizio FaaS di IBM, addebitano i costi di esecuzione delle funzioni ogni cento millisecondi, permettendo notevoli risparmi rispetto ai servizi basati su virtual machine o a semplici container.

Caratteristiche e Differenza tra SaaS, Container e FaaS

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *