Il computing serverless e i container sono entrambe architetture che riducono il sovraccarico per le applicazioni web ospitate nel cloud, ma differiscono per alcuni aspetti determinanti. I container sono più leggeri delle macchine virtuali, ma le distribuzioni serverless sono ancora più leggere e possono essere scalate più facilmente rispetto alle architetture basate su container.
Dopo aver letto questo articolo sarai in grado di:
Argomenti correlati
Che significa serverless?
Function as a Service (FaaS)
Edge computing
Perché impiegare la modalità serverless?
Platform as a Service (PaaS)
Abbonati a theNET, il riepilogo mensile di Cloudflare sulle tematiche più discusse in Internet.
Copia link dell'articolo
Sia l'elaborazione serverless che i container consentono agli sviluppatori di creare applicazioni con un overhead notevolmente inferiore e una maggiore flessibilità rispetto alle applicazioni ospitate su server tradizionali o su macchine virtuali. La scelta dell'architettura da parte di uno sviluppatore dipende dalle esigenze dell'applicazione, ma le applicazioni serverless sono più scalabili e generalmente più convenienti sotto il profilo economico.
Un container 'contiene' sia un'applicazione che tutti gli elementi di cui quest'ultima necessita per funzionare correttamente, tra cui le librerie di sistema, le impostazioni di sistema e altre dipendenze. Proprio come un risotto liofilizzato a cui basta aggiungere acqua e scaldato per essere servito, i container hanno bisogno solo di una cosa per funzionare, ovvero essere ospitati ed eseguiti.
In un container è possibile eseguire qualunque tipo di applicazione. Un'applicazione "containerizzata" gira sempre nello stesso modo, indipendentemente da dove sia ospitata. I container possono essere facilmente spostati e distribuiti ovunque sia necessario, proprio come i container fisici per spedizioni, che grazie alle loro dimensioni standard possono essere trasportati ovunque tramite diversi mezzi (navi, camion, treni, ecc.), indipendentemente dal loro contenuto.
In termini tecnici, i container sono un metodo per partizionare una macchina, o un server, in ambienti di spazio utente separati, in modo tale che ogni ambiente esegua una sola applicazione e non interagisca con altre sezioni partizionate sulla macchina. Ogni container condivide il kernel della macchina con altri container (il kernel è la base del sistema operativo, e interagisce con l'hardware del computer), ma funziona come se fosse l'unico sistema presente su di essa.
Una macchina virtuale è un software che simula un sistema informatico completo. È isolato dal resto della macchina che lo ospita e si comporta come se fosse l'unico sistema operativo presente, kernel compreso. Le macchine virtuali sono un altro modo diffuso per ospitare più ambienti su un singolo server, ma richiedono molta più potenza di elaborazione rispetto ai container.
Le applicazioni serverless sono suddivise in funzioni e sono ospitate da un fornitore terzo, che addebita i costi allo sviluppatore dell'applicazione solo in base alla quantità di tempo di esecuzione usato da ciascuna funzione. Per ulteriori informazioni sull'elaborazione serverless, consulta Che cos'è il computing serverless?
L'elaborazione "serverless" viene effettivamente eseguita su server, ma è compito del fornitore serverless fornire lo spazio server necessario all'applicazione; non vengono assegnate macchine specifiche per una determinata funzione o applicazione. D'altra parte, ogni container risiede su una macchina alla volta e utilizza il sistema operativo di quella macchina, sebbene possa essere spostato facilmente su un'altra, se lo si desidera.
In un'architettura basata su container, il numero di container distribuiti viene determinato in anticipo dallo sviluppatore. Al contrario, in un'architettura serverless, il backend si adatta automaticamente e in modo intrinseco per soddisfare la domanda.
Per continuare con la metafora del container di spedizione, una compagnia di spedizioni potrebbe cercare di prevedere un aumento della domanda per un determinato prodotto e spedire più container alla destinazione per soddisfare tale domanda; tuttavia, non potrebbe schioccare le dita e produrre più container pieni di merci se la domanda dovesse superare le aspettative.
L'architettura serverless è un metodo che consente di fare esattamente questo. Quando si tratta di potenza di calcolo, l'elaborazione serverless è simile alla fornitura idrica in una casa moderna: aprendo il rubinetto, i consumatori possono acquisire e utilizzare tutta l'acqua di cui hanno bisogno in qualsiasi momento, e pagano solo per quella che effettivamente utilizzano. Questo metodo è decisamente più "scalabile" rispetto all'acquistare acqua un secchio (o un container) alla volta.
I container sono costantemente in esecuzione, pertanto i provider di servizi cloud devono addebitare lo spazio server anche se nessuno sta usando l'applicazione in quel momento.
In un'architettura serverless non ci sono costi applicati su base continuativa, perché il codice dell'applicazione non viene eseguito a meno che non esista una richiesta effettiva. Invece, agli sviluppatori viene addebitata solo la capacità del server che la loro applicazione utilizza realmente.
I container sono ospitati nel cloud, ma i provider non li aggiornano né eseguono la manutenzione. Sono gli sviluppatori che devono gestire e aggiornare ogni container che distribuiscono.
Dal punto di vista di uno sviluppatore, un'architettura serverless non ha un backend da gestire. Il fornitore si occupa di tutti gli aggiornamenti di gestione e di software per i server che eseguono il codice.
La configurazione iniziale dei container richiede più tempo rispetto alle funzioni serverless, poiché è necessario configurare le impostazioni di sistema, le librerie e così via. Una volta configurati, i container impiegano solo pochi secondi per essere distribuiti. Tuttavia, poiché le funzioni serverless sono più piccole dei microservizi in container e non includono dipendenze di sistema, la loro implementazione richiede solo pochi millisecondi. Le applicazioni serverless possono essere attive non appena il loro codice viene caricato.
È difficile testare le applicazioni web serverless perché l'ambiente di backend è difficile da replicare in locale. Al contrario, i container funzionano allo stesso modo, indipendentemente da dove vengono distribuiti, rendendo relativamente semplice testare un'applicazione basata su container prima di distribuirla in produzione.
Per Cloudflare Workers, che abilita le architetture serverless, abbiamo creato un ambiente di test virtuale per migliorare il processo di sviluppo.
Entrambi sono basati su cloud ed entrambi riducono notevolmente il sovraccarico dell'infrastruttura. Questo vale soprattutto per l'elaborazione serverless. In entrambi i tipi di architettura, le applicazioni sono suddivise e distribuite in componenti più piccoli. In un'architettura basata su container, ogni container eseguirà un microservizio.
I microservizi sono dei segmenti di una data applicazione. Ogni microservizio esegue una funzione, e più microservizi integrati si combinano per formare l'applicazione. Sebbene il nome possa far pensare che i microservizi siano di dimensioni minuscole, non è detto che lo siano effettivamente.
Uno dei vantaggi della creazione di un'applicazione come insieme di microservizi è che quando si tratta di apportare delle modifiche gli sviluppatori possono aggiornare un microservizio alla volta invece di aggiornare l'intera applicazione. La creazione di un'applicazione strutturata come una raccolta di funzioni, come in un'architettura serverless, offre gli stessi vantaggi, ma a un livello più granulare.
Gli sviluppatori che scelgono un'architettura serverless possono rilasciare e iterare rapidamente nuove applicazioni, senza doversi preoccupare della scalabilità dell'applicazione. Inoltre, se un'applicazione non registra traffico o utilizzo costanti, l'elaborazione serverless risulterà più efficiente in termini di costi rispetto ai container, poiché non è necessario che il codice sia in esecuzione continua.
I container offrono agli sviluppatori un maggiore controllo sull'ambiente in cui l'applicazione viene eseguita (sebbene questo comporti anche una maggiore manutenzione), nonché sui linguaggi e sulle librerie utilizzati. Per questo motivo, i container sono estremamente utili per la migrazione di applicazioni legacy al cloud, poiché è possibile replicare più fedelmente l'ambiente di esecuzione originale dell'applicazione.
Infine, è possibile utilizzare un'architettura ibrida, con alcune funzioni serverless e alcune funzioni distribuite in container. Ad esempio, se una funzione applicativa richiede più memoria di quella allocata dal fornitore serverless, se una funzione è troppo grande o se alcune funzioni, ma non tutte, devono girare per un tempo prolungato, un'architettura ibrida consente agli sviluppatori di sfruttare i vantaggi del serverless, continuando a utilizzare i container per le funzioni che il serverless non può supportare.
Cloudflare consente agli sviluppatori di creare applicazioni serverless ad alte prestazioni tramite Cloudflare Workers.
I container impacchettano un'applicazione con tutte le sue dipendenze. L'elaborazione serverless suddivide le applicazioni in singole funzioni che vengono eseguite solo quando necessario, con il fornitore di servizi cloud che si occupa di tutta la gestione e la scalabilità del backend.
L'architettura serverless si adatta automaticamente e istantaneamente alla domanda. Con i container, gli sviluppatori devono prevedere la domanda e decidere in anticipo il numero di container da distribuire.
Le soluzioni serverless sono in genere più convenienti perché si paga solo per l'effettiva capacità del server utilizzata durante l'esecuzione del codice. Poiché i container sono sempre in esecuzione, i fornitori di servizi cloud addebitano lo spazio server che occupano anche quando nessuno sta utilizzando l'applicazione.
I container richiedono un maggiore impegno pratico perché gli sviluppatori sono responsabili della gestione e dell'aggiornamento di ogni container che distribuiscono. In un modello serverless, lo sviluppatore non deve gestire il backend: il fornitore si occupa di tutti gli aggiornamenti del software e della gestione del server, consentendo allo sviluppatore di concentrarsi esclusivamente sulla scrittura del codice backend.
I container offrono un maggiore controllo sull'ambiente operativo, inclusi linguaggi e librerie specifici. Ciò li rende una scelta popolare per spostare le applicazioni legacy nel cloud.
Molti sviluppatori utilizzano un'architettura ibrida. Questo approccio consente loro di utilizzare il serverless per la maggior parte delle attività, ricorrendo ai container per funzioni specifiche che il serverless potrebbe non supportare, come ad esempio attività che richiedono memoria aggiuntiva, file di grandi dimensioni o codice che deve essere eseguito per un lungo periodo di tempo.
Le funzioni serverless possono essere attive quasi istantaneamente perché non includono ingombranti dipendenze di sistema. Anche i container sono veloci, ma richiedono un po' più di tempo per essere distribuiti dopo la configurazione iniziale delle impostazioni di sistema e delle librerie.