Comprensione dell’elaborazione serverless per principianti

Comprensione del Calcolo Serverless: Una Guida Completa

Quando parliamo di elaborazione “serverless”, molti pensano erroneamente che questo modello non utilizzi affatto server per l’esecuzione del codice o per altre operazioni di sviluppo. Questo è un equivoco comune.

Una volta sfatato questo mito, ci si potrebbe chiedere quale sia la logica dietro al termine “serverless”.

Ecco un indizio: non si tratta di “nessun server”, ma di COME i server vengono gestiti e implementati. Questo è il vero significato di “Serverless”.

Può sembrare complicato, vero?

Niente paura, esploreremo a fondo il concetto di serverless e i termini correlati per chiarire ogni dubbio. Il serverless sta guadagnando sempre più popolarità. Si prevede che il mercato serverless raggiungerà i 7,7 miliardi di dollari entro il 2021, rispetto agli 1,9 miliardi del 2016.

Approfondiamo quindi il tema del serverless e cerchiamo di capire le ragioni del suo successo.

Cos’è l’elaborazione serverless?

L’elaborazione serverless, o “senza server”, è un modello di esecuzione basato sul cloud in cui i fornitori di servizi cloud forniscono risorse di calcolo on-demand e si occupano della gestione dei server, sollevando i clienti e gli sviluppatori da questo compito. Questo approccio unisce servizi, strategie e pratiche per agevolare gli sviluppatori nella creazione di applicazioni basate sul cloud, consentendo loro di concentrarsi unicamente sul codice anziché sulla gestione dei server.

Il fornitore di servizi cloud (come AWS o Google Cloud Platform) si fa carico di tutte le responsabilità legate alla gestione dell’infrastruttura, dalla allocazione delle risorse alla pianificazione della capacità, dalla gestione alla configurazione, dal ridimensionamento alle patch, dagli aggiornamenti alla programmazione e alla manutenzione. In questo modo, gli sviluppatori possono dedicare i loro sforzi e il loro tempo alla logica aziendale dei loro processi e applicazioni.

In un’architettura di elaborazione serverless, le risorse di calcolo non vengono mai conservate nella memoria volatile. L’elaborazione avviene per brevi segmenti. Ad esempio, se un’applicazione non è in uso, non le vengono allocate risorse. Pertanto, si paga solo per le risorse effettivamente consumate.

L’obiettivo principale del modello serverless è semplificare il processo di distribuzione del codice in produzione. Spesso, si integra con stili tradizionali come i microservizi. Una volta implementato il serverless, le applicazioni che ne usufruiscono rispondono rapidamente alle richieste e si ridimensionano automaticamente in base alle necessità.

L’elaborazione serverless utilizza un modello basato su eventi per definire i requisiti di scalabilità. Gli sviluppatori non devono più prevedere l’utilizzo di un’applicazione per decidere quanti server o quanta larghezza di banda sono necessari. È possibile richiedere più server e larghezza di banda in base alle crescenti esigenze senza dover effettuare prenotazioni preventive, e si può ridimensionare il tutto senza problemi.

Come si è evoluto il serverless?

I sistemi tradizionali presentavano problemi legati alla scalabilità e all’agilità nei processi di sviluppo e distribuzione delle applicazioni. Con la crescente domanda di app di alta qualità e tempi di lancio rapidi, è emersa la necessità di un sistema migliore in grado di offrire maggiore scalabilità e agilità, portando all’evoluzione del cloud computing e dei modelli serverless.

Il modello serverless si è evoluto attraverso diverse fasi, passando dalle architetture monolitiche ai microservizi e fino all’architettura serverless o Function-as-a-Service (FaaS).

  • L’architettura monolitica è un approccio unificato e tradizionale allo sviluppo software. Si tratta di un modello strettamente accoppiato in cui ogni componente e i suoi sottocomponenti compilano o eseguono codice. Se un servizio ha un malfunzionamento, l’intero server delle applicazioni e i servizi in esecuzione possono bloccarsi.
  • L’architettura dei microservizi è una raccolta di servizi più piccoli all’interno di una singola applicazione di grandi dimensioni. Questi servizi vengono distribuiti in modo indipendente per eseguire una funzione specifica. Questo modello consente la rapida distribuzione di app su larga scala, offrendo agli sviluppatori flessibilità attraverso l’uso di Infrastructure-as-a-Service (IaaS) e Platform-as-a-Service (PaaS). Tuttavia, la scelta tra PaaS e IaaS in questo modello può essere complessa.
  • L’architettura serverless si è evoluta grazie al cloud computing, offrendo maggiore scalabilità e agilità aziendale. Invece di IaaS e PaaS, utilizza FaaS e Backend-as-a-Service (BaaS). In questo modello, le app vengono distribuite solo quando necessario, insieme alle risorse correlate. Non è necessario gestire il server ed è possibile smettere di pagare al termine dell’esecuzione del codice.

Caratteristiche dell’elaborazione serverless

Di seguito sono riportate alcune caratteristiche dell’elaborazione serverless:

  • La maggior parte delle applicazioni che utilizzano il serverless sono composte da singole funzioni e piccole porzioni di codice.
  • Il codice viene eseguito solo su richiesta, generalmente in un contenitore software senza stato, e si ridimensiona senza problemi in base alla domanda.
  • I clienti non devono gestire alcun server.
  • L’esecuzione è basata su eventi: l’ambiente di calcolo viene creato quando una funzione viene attivata o quando si riceve un evento per elaborare la richiesta.
  • La scalabilità è flessibile, consentendo un facile aumento o diminuzione delle risorse. Una volta eseguito un codice, l’infrastruttura si disattiva e i costi vengono risparmiati. Allo stesso modo, se la funzione continua ad essere eseguita, le risorse possono essere ridimensionate all’infinito a seconda delle esigenze.
  • È possibile utilizzare servizi cloud gestiti per gestire attività complesse quali archiviazione di file, accodamento, database e altro.

Come funziona il serverless?

L’architettura serverless unisce due concetti principali: Function-as-a-Service (FaaS) e Backend-as-a-Service (BaaS). Si basa principalmente su FaaS, che consente ai servizi cloud di eseguire il codice senza la necessità di istanze con provisioning completo. FaaS è composto da funzioni stateless, guidate da eventi, scalabili e lato server, che i servizi cloud gestiscono in modo completo.

Questo modello permette ai team DevOps di scrivere codice focalizzato sulla loro logica aziendale. Successivamente, definiscono un evento che può attivare la funzione, come le richieste HTTP, per l’esecuzione. Di conseguenza, il fornitore di servizi cloud esegue la funzione e invia i risultati alle app che gli utenti possono visualizzare.

In questo modo, il modello serverless offre praticità ed economicità grazie alle funzionalità di ridimensionamento automatico, on-demand e pay-as-you-go. Pertanto, molte aziende e team DevOps stanno passando al serverless.

Chi utilizza il serverless e perché?

Il serverless è tra le tecnologie più in rapida crescita nello sviluppo software. Potrebbe eliminare la necessità di gestione e provisioning dell’infrastruttura in futuro.

È utile per:

  • Organizzazioni che cercano maggiore scalabilità e flessibilità, e una migliore testabilità delle app.
  • Sviluppatori che desiderano ridurre il time-to-market creando app agili e ad alte prestazioni.
  • Aziende che non hanno bisogno che i server siano sempre in funzione. Possono richiamare funzioni basate su moduli utilizzando le applicazioni quando necessario, per risparmiare sui costi.
  • Organizzazioni che vogliono creare app basate sul cloud in modo efficiente e semplificare la migrazione al cloud.
  • Sviluppatori che cercano modi per ridurre la latenza offrendo agli utenti un accesso rapido a determinate funzioni o app.
  • Aziende che non dispongono di risorse sufficienti per gestire la manutenzione e la complessità dell’infrastruttura IT possono optare per l’elaborazione serverless per risolvere automaticamente i problemi, senza la necessità di manutenzione da parte loro.

Tra i principali utilizzatori del modello serverless si trovano Slack, Coca-Cola, NetFlix e altre aziende.

Grazie alle sue caratteristiche uniche, il modello serverless si adatta a molti casi d’uso, come:

  • Applicazioni web: è possibile creare applicazioni web rapide e scalabili in grado di rispondere rapidamente alle richieste degli utenti. È ideale per la creazione di app stateless che possono essere avviate istantaneamente e app in grado di gestire picchi di richieste degli utenti imprevisti o poco frequenti.
  • Backend API: nelle piattaforme serverless, qualsiasi funzione può essere facilmente trasformata in un endpoint HTTP pronto per l’uso da parte dei client. Queste funzioni o azioni sono note come azioni web quando abilitate sul web. Una volta abilitate, l’assemblaggio delle funzioni in un’API completa diventa semplice. È anche possibile utilizzare un gateway API per offrire maggiore sicurezza, supporto per il dominio, limitazione della velocità e supporto OAuth.
  • Microservizi: il serverless è ampiamente utilizzato nel modello dei microservizi, che si concentra sulla creazione di piccoli servizi in grado di eseguire una singola funzione e comunicare tra loro tramite API. Sebbene sia possibile creare microservizi utilizzando container software e PaaS, il serverless risulta più efficiente, in quanto facilita la creazione di blocchi di codice più piccoli in grado di eseguire una singola operazione. Inoltre, offre provisioning rapido, scalabilità automatica e prezzi flessibili che non addebitano costi ai clienti quando le risorse non sono in uso.
  • Elaborazione dei dati: il serverless è perfetto per lavorare con dati contenenti video, audio, immagini e testo strutturato. È utile anche per diverse attività come la convalida dei dati, la trasformazione, l’arricchimento, la pulizia, la normalizzazione dell’audio e l’elaborazione di PDF. Può essere sfruttato per l’elaborazione delle immagini, includendo attività quali nitidezza, rotazione, generazione di miniature e riduzione del rumore. Altri usi del serverless nell’elaborazione dei dati sono la transcodifica video e il riconoscimento ottico dei caratteri (OCR).
  • Elaborazione di flussi/batch: è possibile creare potenti app di streaming e pipeline di dati utilizzando FaaS e un database con Apache Kafka. Il modello serverless è adatto a diversi tipi di acquisizione di flussi, inclusi i dati per i registri delle app, i sensori IoT, la logica aziendale e i mercati finanziari.
  • Calcolo parallelo: il serverless è ottimo per le attività di calcolo parallelo, in cui ogni attività viene eseguita in parallelo per svolgere un compito specifico, ad esempio la ricerca di dati, l’elaborazione, le operazioni sulle mappe, lo scraping web, l’elaborazione del genoma e l’ottimizzazione degli iperparametri.
  • Altri usi: il serverless è utilizzato anche per diverse altre applicazioni, come la gestione delle relazioni con i clienti (CRM), la finanza, i chatbot, la business intelligence e l’analisi, per citarne alcune.

Nota: Il serverless potrebbe non essere ideale per tutti i casi. Ad esempio, le app di grandi dimensioni con carichi di lavoro prevedibili e quasi costanti potrebbero trarre maggiori benefici da un’architettura di sistema tradizionale. In questi casi, si può optare per server dedicati, gestiti o autogestiti. Inoltre, se un’organizzazione dispone di configurazioni tradizionali complete con sistemi e applicazioni legacy, il passaggio a un’architettura completamente nuova potrebbe risultare costoso e impegnativo.

Vantaggi e svantaggi dell’elaborazione serverless

Ogni medaglia ha due facce, così come l’architettura serverless, che presenta sia vantaggi che svantaggi. Prima di scegliere se utilizzarla o meno, è importante conoscere entrambe le facce della medaglia.

Vantaggi 👍

Ecco alcuni dei vantaggi dell’architettura serverless:

Efficienza dei costi

Il serverless può offrire una maggiore efficienza in termini di costi rispetto all’acquisto o al noleggio di server, dove si pagano le risorse anche quando non vengono utilizzate.

Il modello serverless si basa sul principio “pay-as-you-go”, in cui si paga solo per le risorse effettivamente consumate. Il fornitore serverless addebiterà solo la memoria allocata e il tempo di esecuzione del codice, senza costi per i tempi di inattività.

Di conseguenza, si risparmiano i costi operativi legati ad attività quali installazione, licenze, manutenzione, applicazione di patch, supporto ecc. Non avendo hardware del server, si risparmiano anche i costi della manodopera.

Scalabilità

I sistemi serverless offrono un elevato livello di scalabilità, consentendo di aumentare o diminuire le dimensioni delle risorse in base alle richieste. Per questo motivo, vengono anche definiti “elastici”.

Gli sviluppatori non devono dedicare tempo all’impostazione dei sistemi o delle policy di scalabilità automatica o alla loro ottimizzazione. Il fornitore di servizi cloud scelto si occupa di tutto ciò. Inoltre, gli sviluppatori di piccoli team possono eseguire il proprio codice senza la necessità di ingegneri di supporto o infrastruttura.

Ridotta latenza

Poiché le app non sono ospitate su un singolo server di origine, è possibile eseguire il codice da qualsiasi luogo. Se il fornitore di servizi cloud scelto lo supporta, è possibile eseguire le funzioni dell’app su un server vicino agli utenti finali. Pertanto, la latenza sarà inferiore a causa della minore distanza tra le richieste dell’utente e il server.

Produttività

Il modello serverless aiuta a migliorare la produttività degli sviluppatori, in quanto non devono occuparsi della gestione del server. Inoltre, non devono pensare direttamente alla gestione delle richieste HTTP o al multithreading nel loro codice.

Di conseguenza, lo sviluppo back-end viene semplificato, soprattutto grazie a FaaS, in cui il codice esposto è costituito da funzioni guidate da eventi. Tutto questo permette di risparmiare tempo, che può essere dedicato al miglioramento del codice e dell’applicazione.

Distribuzione più rapida dell’app

Con il serverless, gli sviluppatori non devono effettuare la configurazione del back-end o caricare il codice sul server per distribuire una versione dell’app. Possono anche caricare rapidamente il codice in blocchi per rilasciare nuovi prodotti.

Hanno anche la flessibilità di distribuire il codice contemporaneamente o di eseguirlo uno dopo l’altro, poiché non si tratta di un’architettura monolitica. Inoltre, è possibile correggere, aggiornare, aggiungere funzionalità o risolvere rapidamente gli errori in un’app.

Altri vantaggi includono il green computing grazie al ridotto consumo energetico con server on-demand, la creazione di app che diventa più semplice grazie alle integrazioni predefinite, un time-to-market più rapido e molto altro ancora.

Svantaggi 👎

Diamo ora uno sguardo agli svantaggi dell’elaborazione serverless:

Prestazioni

In alcuni casi, il codice serverless utilizzato meno di frequente può presentare una latenza di risposta maggiore rispetto al codice in esecuzione continua su server dedicati, container software o macchine virtuali (VM). Questo perché potrebbe essere necessario più tempo per riavviare e creare ulteriore latenza.

Difficoltà di debug e test

È necessario sapere come si comporta il codice una volta distribuito. Per questo, è necessario testarlo, operazione che risulta complicata in un ambiente serverless. Inoltre, poiché gli sviluppatori non hanno visibilità su tutti i processi di back-end e le app sono suddivise in funzioni più piccole, il debug diventa complesso.

Problemi di sicurezza

I problemi di sicurezza informatica stanno crescendo, diventando sempre più complessi. Tuttavia, non è possibile conoscere o valutare completamente la sicurezza del fornitore di servizi cloud. Quindi, quando si gestisce l’intero back-end con dati sensibili memorizzati nelle applicazioni, il rischio è elevato.

Non adatto ai processi applicativi di lunga durata

Il serverless è conveniente, ma non per tutti i tipi di applicazioni. Se si dispone di un’applicazione con processi di lunga durata, il costo per eseguirla in base al tempo e alle risorse allocate potrebbe essere molto elevato. In questi casi, potrebbe essere meglio utilizzare un server di hosting dedicato.

Altri svantaggi del serverless sono la difficoltà nel passare da un fornitore all’altro e i problemi di privacy.

Terminologia importante nell’architettura serverless

Il concetto di serverless non può prescindere da alcuni termini chiave ad esso correlati. FaaS e BaaS sono due delle idee fondamentali che hanno portato all’evoluzione del serverless come lo conosciamo oggi. Per costruire un sistema serverless, è necessario anche un database, un sistema di archiviazione, uno stack tecnologico, un framework e così via. Analizziamo quindi questi concetti.

Function-as-a-Service (FaaS)

FaaS è un concetto centrale nel serverless e funziona come suo sottoinsieme. Questo modello di esecuzione del codice basato su eventi (app in esecuzione in risposta a una richiesta) consente di scrivere logica distribuita in container software, eseguita su richiesta e gestita da una piattaforma cloud.

Rispetto a BaaS, FaaS offre agli sviluppatori maggiore controllo nella creazione di app personalizzate, anziché dipendere da librerie contenenti codice pre-compilato.

I container software in cui viene distribuito il codice sono stateless per semplificare l’integrazione dei dati. Il codice viene eseguito per un breve periodo di tempo. Gli sviluppatori possono richiamare le applicazioni serverless tramite API utilizzando FaaS, che i fornitori di servizi cloud gestiscono tramite un gateway API.

Backend-as-a-Service (BaaS)

BaaS è simile a FaaS, in quanto entrambi necessitano di un fornitore di servizi di terze parti. In questo modello, un fornitore di servizi cloud fornisce servizi di back-end come l’archiviazione dei dati, per aiutare gli sviluppatori a concentrarsi sulla scrittura del codice di front-end. Tuttavia, le applicazioni BaaS potrebbero non essere guidate da eventi o eseguite sull’edge come le app serverless.

Un buon esempio di BaaS è AWS Lambda. Gli sviluppatori utilizzano codice serverless in container con Lambda, che fornisce linee guida da seguire durante l’invio del codice. Automatizza anche i processi di inserimento del codice nei container software e offre un servizio gestito.

Stack serverless

Come per altre tecnologie software, anche l’architettura serverless ha il suo stack tecnologico, che riunisce diversi componenti fondamentali per la creazione di un sistema o di un’applicazione serverless.

Lo stack serverless include:

  • Un linguaggio di programmazione: è il linguaggio in cui gli sviluppatori scriveranno il codice. A seconda del fornitore, è possibile scegliere tra Java, JavaScript, Python, C#, Go, Node.js, F# e altri.
  • Un framework serverless: il framework fornisce la struttura o l’impalcatura del codice. Esistono molti framework serverless da cui partire. Questi consentono la creazione, il confezionamento e la compilazione del codice e, infine, la sua implementazione nel cloud. I framework serverless accelerano il processo di codifica e semplificano la scalabilità con tempi di configurazione ridotti. Esempi di framework server sono Apex e AWS Serverless Application Model.
  • Database serverless: questi vengono utilizzati per archiviare i dati a cui il codice richiede l’accesso. Sono anche necessari per l’interazione con le funzioni per i trigger. Questi database si comportano come funzioni serverless ma memorizzano i dati a tempo indeterminato. Esempi di database serverless sono DynamoDB, Azure Cosmos DB, Aurora Serverless e Cloud Firestore.
  • Una serie di trigger: aiutano ad avviare l’esecuzione del codice, come le richieste HTTP.
  • Container software: migliorano il modello serverless e offrono microservizi containerizzati senza complessità. Funzionano anche come repository per il codice e aiutano gli sviluppatori durante la scrittura di codice per più piattaforme, come desktop o iOS.
  • Gateway API: funzionano come proxy per le azioni web. Offrono routing HTTP, limiti di velocità, visualizzazione dell’utilizzo dell’API e registri di risposta, ID client ecc.

Come implementare il modello serverless e ottimizzarlo?

Il passaggio al serverless comporta cambiamenti significativi in termini di applicazioni, tecnologia, costi, sicurezza e benefici.

Se sei una start-up o una piccola impresa, questo passaggio accelererà il time-to-market e ti aiuterà a inviare rapidamente gli aggiornamenti con test semplificati, debug, raccolta di feedback e risoluzione dei problemi. In questo modo, potrai offrire un’applicazione raffinata agli utenti.

Le organizzazioni più grandi otterranno vantaggi come una maggiore scalabilità per soddisfare le esigenze degli utenti, ma potrebbero richiedere un significativo investimento di costi.

È quindi fondamentale valutare i pro e i contro del serverless in relazione al tipo di attività e alle tue esigenze specifiche, prima di procedere. Se sei determinato ad adottare il modello serverless, ecco i primi passi da compiere:

  • Definisci con precisione le tue esigenze e individua uno stack tecnologico serverless appropriato.
  • Scegli un fornitore serverless come Google Cloud Functions, Azure Functions, AWS Lambda o altro.
  • Fornisci al tuo team strumenti potenti per monitorare le prestazioni e le funzioni del sistema, tenendo d’occhio il numero totale di richieste, le limitazioni, il conteggio degli errori, le percentuali di successo, la durata delle richieste e la latenza.

Fornitori serverless

Esistono molti fornitori serverless o fornitori di servizi cloud tra cui scegliere. Alcuni dei più importanti sono:

  • AWS Lambda: è perfetto per le organizzazioni che già utilizzano i servizi AWS. Si integra con un’ampia gamma di servizi per l’archiviazione, lo streaming e i database.
  • Microsoft Azure Functions: se utilizzi Visual Studio Code, questo è il servizio ideale. Funziona senza problemi con DevOps e Azure Pipelines per CI/CD. Supporta anche le funzioni permanenti per le funzioni stateful e offre monitoraggio integrato.
  • Google Cloud Functions: se utilizzi i servizi Google, questo è il servizio giusto. Supporta le app JS, Go e Python, consente l’attivazione di funzioni tramite Google Assistant o GCP e offre ridimensionamento integrato.
  • IBM Cloud Functions: se vuoi optare per un modello serverless basato su Apache OpenWhisk, IBM Cloud Functions è la soluzione giusta. Include un ottimo monitoraggio delle prestazioni, l’attivazione di eventi da un’API REST o servizi cloud IBM e si integra con l’API Gateway di IBM per la gestione degli endpoint.
  • Knative: è l’ideale se stai eseguendo servizi su Kubernetes. È supportato da Google, Red Hat, IBM e altri.
  • Cloudflare Workers: è la soluzione giusta per le app che richiedono un’elevata reattività, in particolare le app JavaScript. Supporta Workers KV per l’archiviazione dei dati e WebAssembly per aiutarti a compilare e fornire più linguaggi. Inoltre, la sua rete di distribuzione con 193 data center migliora la latenza e la reattività.

Conclusione: il futuro del serverless

L’elaborazione serverless è in continua evoluzione, spinta dalla crescente domanda di applicazioni altamente scalabili. Offre molti vantaggi offerti dal cloud computing, tra cui maggiore praticità, efficienza dei costi, maggiore produttività e altro ancora.

Secondo un sondaggio di O’Reilly, il 40% degli intervistati lavora in aziende che hanno adottato l’architettura serverless.

Nonostante il serverless abbia ancora alcuni aspetti critici, come la latenza dovuta agli avvii a freddo, ai test, al debug e così via, i fornitori di servizi cloud stanno lavorando per risolverli. Presto potrebbe emergere una forma più raffinata di serverless, con maggiori vantaggi e problemi risolti. Si prevede quindi che la popolarità e l’utilizzo del modello serverless aumenteranno in futuro.

Potrebbe interessarti anche: 7 modi in cui il serverless computing è una tecnologia in ascesa