Che cos'è l'architettura serverless?
L'architettura serverless è un modello di cloud computing in cui gli sviluppatori costruiscono ed eseguono applicazioni senza gestire i server tradizionali. I server esistono ancora, ma sono nel cloud, dove i fornitori di cloud gestiscono automaticamente l'infrastruttura, il ridimensionamento e l'allocazione delle risorse.
Per le applicazioni serverless, gli sviluppatori in genere scrivono il codice come funzioni isolate che vengono eseguite in risposta a eventi o trigger, mentre i provider cloud addebitano solo le risorse di calcolo effettivamente utilizzate. Questo approccio semplifica lo sviluppo delle applicazioni, riduce i costi operativi e consente una rapida scalabilità, rendendolo ideale per i microservizi e le applicazioni event-driven.
Questa pagina copre:
- Come funziona l'architettura serverless
- Concetti chiave dell'architettura serverless
- Quando utilizzare l'architettura serverless
- Vantaggi dell'architettura serverless
- Limitazioni dell'architettura serverless
- Strumenti di elaborazione serverless
- Conclusione
Come funziona l'architettura serverless
L'architettura serverless sottrae la gestione dei server agli sviluppatori e si affida ai fornitori di cloud per gestire l'infrastruttura sottostante. Ecco come funziona di solito:
1. Creazione di funzioni: Gli sviluppatori scrivono il codice come singole funzioni, ognuna delle quali è progettata per eseguire un compito o un servizio specifico. L'architettura serverless è talvolta indicata come Function-as-a-Service o FaaS.
2. Distribuzione delle funzioni: Le funzioni vengono confezionate e distribuite su una piattaforma serverless fornita da un fornitore di servizi cloud. Le piattaforme serverless più comuni sono AWS Lambda, Azure Functions e Google Cloud Functions.
3. Inneschi di eventi: Le funzioni sono configurate per essere eseguite in risposta a eventi o trigger specifici. Gli eventi possono includere richieste HTTP (ad esempio, API Gateway), modifiche dei dati (ad esempio, aggiornamenti del database), timer, upload di file o altro. Il cloud provider gestisce le fonti di eventi e invoca automaticamente le funzioni associate.
4. Ridimensionamento automatico: Quando si verificano gli eventi, la piattaforma serverless scala automaticamente le risorse sottostanti per soddisfare il carico di lavoro. Se la funzione subisce un improvviso picco di richieste, il provider cloud metterà a disposizione più risorse.
5. Esecuzione: Quando un evento attiva una funzione, la piattaforma serverless inizializza un contenitore o un ambiente di runtime per quella funzione. Il codice all'interno della funzione viene eseguito e può accedere a qualsiasi risorsa o dato richiesto. Dopo che la funzione ha completato il suo compito, il contenitore può rimanere caldo per un breve periodo, consentendo alle richieste successive di essere eseguite più rapidamente.
6. Fatturazione: La fatturazione si basa sul tempo di esecuzione effettivo e sulle risorse utilizzate dalle funzioni. L'addebito avviene per ogni esecuzione e per le risorse di calcolo, come CPU e memoria, allocate durante l'esecuzione.
7. L'apolidia: Le funzioni serverless sono tipicamente stateless, ovvero non conservano le informazioni tra un'invocazione e l'altra. Qualsiasi stato o dato necessario deve essere memorizzato esternamente, spesso in un database o in un servizio di archiviazione.
8. Registri e monitoraggio: Le piattaforme serverless di solito forniscono strumenti di registrazione e monitoraggio integrati, consentendo agli sviluppatori di monitorare le prestazioni e risolvere i problemi nelle loro funzioni.
Concetti chiave dell'architettura serverless
Poiché lo sviluppo serverless è un'alternativa allo sviluppo tradizionale, è necessario familiarizzare con i termini e i concetti seguenti per comprendere chiaramente come progettare, distribuire e gestire le applicazioni serverless:
Invocazione: Un evento che attiva l'esecuzione di una funzione serverless. Esempi sono una richiesta HTTP, un aggiornamento del database o un timer programmato.
Durata: Il tempo di esecuzione di una funzione serverless, che è un fattore di calcolo del costo di esecuzione.
Avvio a freddo: L'esecuzione iniziale di una funzione serverless, in cui il cloud provider mette a disposizione le risorse e imposta l'ambiente di runtime. Gli avvii a freddo introducono una latenza aggiuntiva rispetto agli avvii a caldo.
Partenza a caldo: Esecuzioni successive di una funzione serverless quando l'ambiente di runtime è già pronto, con conseguenti tempi di risposta più rapidi rispetto agli avvii a freddo.
Limite di concorrenza: Il numero massimo di esecuzioni simultanee di funzioni consentito dalla piattaforma serverless. Questo limite può avere un impatto sulla capacità di gestire richieste o eventi simultanei.
Timeout: La durata massima consentita per l'esecuzione di una funzione serverless. Se una funzione supera questo limite, viene terminata forzatamente e il suo risultato potrebbe non essere restituito.
Fonte dell'evento: L'origine di un evento che attiva una funzione serverless. Esempi di sorgenti di eventi sono i bucket Amazon S3, i gateway API, le code di messaggi e gli aggiornamenti dei database.
L'apolidia: Le funzioni serverless sono tipicamente stateless, ovvero non conservano i dati tra le invocazioni. Qualsiasi stato necessario deve essere memorizzato esternamente in database o servizi di archiviazione.
Allocazione delle risorse: La specifica delle risorse di calcolo, come CPU o memoria, per una funzione serverless. Queste risorse sono spesso scelte dagli sviluppatori al momento della definizione della funzione.
Ridimensionamento automatico: La regolazione automatica delle risorse serverless da parte del cloud provider per adattarsi a carichi di lavoro variabili e garantire prestazioni ottimali.
Database senza server: I database serverless sono database a scalabilità elastica che non espongono l'infrastruttura su cui operano. Couchbase Capella™ DBaaS è un esempio di database serverless completamente gestito.
Quando utilizzare l'architettura serverless
Sebbene l'architettura serverless sia versatile, non è la scelta migliore per tutti i casi d'uso: le applicazioni con attività di lunga durata, requisiti di calcolo elevati o carichi di lavoro costanti spesso beneficiano maggiormente delle architetture tradizionali basate su server. Assicuratevi di considerare i requisiti specifici e i punti di forza unici di serverless quando decidete se è la scelta giusta per la vostra applicazione.
Casi d'uso dell'architettura serverless
Alcuni dei casi d'uso più comuni e più adatti all'architettura serverless sono i seguenti:
Applicazioni web e mobile: Gestire i backend delle applicazioni web e mobili, servire i contenuti, elaborare le richieste degli utenti e gestire l'autenticazione degli stessi.
API: Scalate automaticamente le vostre API RESTful e GraphQL e integratele facilmente con altri servizi.
IoT: Gestire in modo efficiente l'elaborazione e l'analisi dei dati provenienti da dispositivi IoT che attivano eventi con i dati dei sensori.
Elaborazione dei dati in tempo reale: Elaborazione di flussi di dati in tempo reale, come l'analisi del flusso di clic, l'elaborazione dei log e l'analisi basata sugli eventi.
Elaborazione in batch: Esecuzione di lavori batch periodici o su richiesta, come l'ETL (estrazione, trasformazione, caricamento) dei dati, la generazione di report e la pulizia dei dati.
Attività di archiviazione di file e dati: Interagire con i servizi di cloud storage per gestire il caricamento e il download dei file e la manipolazione dei dati.
Autenticazione e autorizzazione degli utenti: I servizi di gestione dell'identità e dell'accesso (IAM) per l'autenticazione e l'autorizzazione degli utenti si adattano bene alle funzioni serverless.
Servizi di notifica: Inviate notifiche e avvisi come e-mail, SMS o notifiche push in risposta a eventi o fattori specifici.
Chatbot e assistenti virtuali: Costruire interfacce conversazionali in cui le funzioni elaborano richieste in linguaggio naturale e generano risposte.
Elaborazione di dati e immagini: Eseguite operazioni come il ridimensionamento delle immagini, la conversione del formato e la trasformazione dei dati che richiedono un'interazione minima da parte dell'utente.
Attività programmate: Automatizzate le attività periodiche come i backup dei dati, la generazione di report e la manutenzione del database.
Microservizi: Creare e gestire singoli microservizi all'interno di un'applicazione più grande, consentendo di scalare facilmente e di distribuire in modo indipendente.
Servizi di sicurezza e conformità: Implementare le funzioni di sicurezza come il rilevamento delle intrusioni, il monitoraggio e la verifica della conformità.
Serverless vs. container
A prima vista, l'architettura serverless viene talvolta confusa con l'architettura a container o con l'architettura a microservizi, perché condivide alcune somiglianze con ciascuna di esse. In realtà, serverless si distingue da entrambe e spiegheremo cosa le differenzia.
Cosa contenitori e serverless hanno in comune il fatto che entrambi consentono agli sviluppatori di distribuire il codice delle applicazioni astraendo dall'ambiente host. Tuttavia, una delle differenze principali è che serverless astrae completamente dalla gestione dei server, mentre i container consentono agli sviluppatori di gestire i propri ambienti server con un maggiore controllo sull'infrastruttura.
Come forma leggera di virtualizzazione, i container raggruppano le applicazioni e le loro dipendenze in ambienti isolati e coerenti che vengono eseguiti come istanze indipendenti su un sistema operativo condiviso. I container sono un modo per garantire che le applicazioni funzionino in modo coerente in vari ambienti, dallo sviluppo alla produzione, e offrono un modo standardizzato di pacchettizzare e distribuire il software. I container sono tipicamente di lunga durata e possono includere più processi all'interno di un singolo container.
In breve, il serverless computing astrae dalla gestione del server ed è ideale per attività guidate da eventi e di breve durata, mentre i container forniscono un maggiore controllo sull'ambiente del server e sono più adatti per processi di lunga durata e carichi di lavoro consistenti. La scelta dipende dai requisiti specifici dell'applicazione e dal livello di controllo sull'infrastruttura sottostante. In alcuni casi, all'interno di una stessa applicazione viene utilizzata una combinazione di entrambe le tecnologie per componenti diversi.
Serverless vs. microservizi
Microservizi sono un modello di architettura software che struttura un'applicazione come un insieme di piccoli servizi distribuibili in modo indipendente che comunicano tramite API e lavorano insieme per fornire funzionalità complesse e modulari. La confusione tra microservizi e architettura serverless nasce spesso dalla loro comune enfasi sulla modularità e sulla scalabilità. A rendere ancora più confusa la linea di demarcazione è il fatto che spesso vengono utilizzati insieme, con funzioni serverless che agiscono come microservizi all'interno di un'applicazione più ampia basata su microservizi.
Nonostante le loro somiglianze, serverless e microservizi presentano caratteristiche uniche nelle seguenti aree che li distinguono:
Gestione dell'infrastruttura
- Microservizi - Gli sviluppatori mantengono il controllo sull'orchestrazione di server e container.
- Senza server La gestione dei server è completamente astratta e gli sviluppatori non hanno a che fare con l'infrastruttura sottostante.
Modello di esecuzione
- Microservizi - eseguiti in modo continuativo su istanze di server dedicate.
- Senza server le funzioni vengono eseguite in risposta a eventi o trigger. Questa distinzione può comportare una differenza nei tempi di risposta, in quanto le applicazioni serverless possono essere avviate a freddo.
Modello di costo
- Microservizi - richiedono l'approvvigionamento e la manutenzione delle risorse del server. Ciò può comportare costi continui anche nei periodi di scarso utilizzo.
- Senza server segue un modello di pagamento a consumo basato sull'effettiva esecuzione delle funzioni. Questo modello può essere più conveniente per i carichi di lavoro sporadici.
Modularità
- Microservizi - un'applicazione è suddivisa in piccoli servizi indipendenti.
- Senza server Gli sviluppatori scrivono il codice come singole unità di funzionalità.
Scalabilità
- Microservizi - consentono di scalare in modo indipendente ciascun servizio.
- Senza server scala automaticamente le singole funzioni.
Vantaggi dell'architettura serverless
L'architettura serverless offre un'ampia gamma di vantaggi che la rendono una scelta interessante per molte applicazioni e casi d'uso. I vantaggi più interessanti sono:
Scala automatica: Le piattaforme di architettura serverless scalano automaticamente le risorse in base al carico di lavoro in entrata. In questo modo l'applicazione può gestire livelli di traffico variabili, garantendo alta disponibilità e prestazioni senza interventi manuali.
Efficienza dei costi: Con serverless, si pagano solo le risorse di calcolo effettivamente utilizzate durante l'esecuzione delle funzioni. Non ci sono costi associati al tempo di inattività, il che lo rende conveniente, in particolare per i carichi di lavoro con traffico imprevedibile o sporadico.
Riduzione dei costi operativi: Serverless astrae le attività di gestione dei server, consentendo agli sviluppatori di concentrarsi sul codice piuttosto che sulla manutenzione dell'infrastruttura. Questo riduce la necessità di sforzi DevOps e semplifica la distribuzione e la scalabilità.
Sviluppo più rapido: Serverless accelera il processo di sviluppo eliminando la necessità di gestire server e infrastrutture. Gli sviluppatori possono iterare e distribuire rapidamente il codice, con conseguente accelerazione del time-to-market delle applicazioni.
Resilienza: Le funzioni serverless sono tipicamente stateless e promuovono un design che si affida a servizi di archiviazione o database esterni per la persistenza dei dati. Questo può portare ad applicazioni più resilienti e tolleranti agli errori.
Registrazione e monitoraggio integrati: Le piattaforme serverless spesso forniscono strumenti integrati per il monitoraggio e la registrazione, consentendo agli sviluppatori di monitorare le prestazioni, risolvere i problemi e ottenere informazioni sul comportamento delle applicazioni.
Riduzione del vendor lock-in: Molte funzioni possono essere progettate in modo da essere relativamente indipendenti dal fornitore, rendendo più facile la migrazione o l'integrazione di servizi di diversi fornitori di cloud. Non è sempre così, come si vedrà nella prossima sezione sulle limitazioni di serverless.
Alta disponibilità: Le piattaforme serverless sono progettate per essere altamente disponibili, con meccanismi di ridondanza e failover integrati. Ciò contribuisce a garantire che l'applicazione rimanga accessibile e reattiva anche in caso di guasti.
Efficienza energetica e delle risorse: La scalabilità automatica e la gestione delle risorse delle piattaforme serverless possono portare a una maggiore efficienza energetica e a un migliore utilizzo delle risorse, riducendo l'impatto ambientale.
Limitazioni dell'architettura serverless
L'architettura serverless offre molti vantaggi, ma presenta anche dei limiti. Alcune caratteristiche di serverless possono manifestarsi come vantaggi o sfide. Quando si valuta serverless per un'applicazione specifica, si devono considerare i requisiti o i vincoli relativi a quanto segue:
Avviamento a freddo: Le funzioni serverless possono subire un ritardo quando la funzione viene invocata per la prima volta, perché il cloud provider deve inizializzare un nuovo ambiente di esecuzione. Questa latenza può essere problematica per le applicazioni che richiedono tempi di risposta sempre rapidi.
Vincoli di risorse: Le piattaforme serverless impongono vincoli sulle risorse, come i limiti di memoria e di tempo di esecuzione. Questi vincoli possono essere limitanti per le attività ad alta intensità di calcolo o per le applicazioni che richiedono processi di lunga durata.
L'apolidia: Le funzioni serverless sono tipicamente stateless, cioè non conservano i dati tra le invocazioni. Se da un lato questo può contribuire a migliorare la resilienza (come spiegato in precedenza), dall'altro l'utilizzo di database o servizi di storage esterni per la persistenza dei dati può aggiungere complessità ad alcune applicazioni.
Vendor lock-in: Sebbene molte funzioni possano essere progettate in modo da essere relativamente indipendenti dal fornitore, la vostra applicazione potrebbe avere alcune configurazioni e integrazioni specifiche della piattaforma che rendono difficile il passaggio a un altro fornitore di cloud.
Debug complesso: Il debug e la risoluzione dei problemi delle applicazioni serverless possono essere più impegnativi in un'architettura serverless, perché la natura distribuita delle funzioni e la mancanza di accesso diretto al server possono rendere difficile l'identificazione e la risoluzione dei problemi.
Test locali limitati: Sviluppare e testare le funzioni serverless in locale può essere impegnativo, perché i test locali potrebbero non replicare completamente l'ambiente di esecuzione nel cloud. Gli sviluppatori hanno spesso bisogno di distribuire le funzioni sulla piattaforma serverless per eseguire test approfonditi.
Strumenti di elaborazione serverless
Esistono numerose piattaforme e strumenti di serverless computing che consentono agli sviluppatori di creare, distribuire e gestire applicazioni serverless utilizzando i linguaggi di codifica e i fornitori di servizi cloud preferiti. Ecco alcune delle più popolari:
Piattaforme
AWS Lambda di Amazon supporta diversi linguaggi di programmazione e si integra perfettamente con altri servizi AWS. AWS fornisce anche un gateway API per creare API RESTful e attivare funzioni Lambda.
Funzioni Azure di Microsoft è un'offerta serverless all'interno dell'ecosistema cloud Azure. Supporta più lingue e offre l'integrazione con i servizi Azure, rendendola una scelta importante per le applicazioni basate su Windows.
Funzioni cloud di Google supporta diversi linguaggi di programmazione e si integra bene con altri servizi di Google Cloud, rendendolo adatto alla creazione di applicazioni all'interno dell'ecosistema di Google Cloud.
Funzioni IBM Cloud è basato sul framework Apache OpenWhisk e consente di integrarsi con i servizi IBM Cloud utilizzando vari linguaggi.
Alibaba Cloud Function Compute consente agli sviluppatori di creare applicazioni nell'ecosistema Alibaba Cloud e di integrarsi con altri servizi Alibaba Cloud utilizzando più lingue.
Strumenti
Netlify è una piattaforma nota soprattutto per l'hosting di siti web statici, ma offre anche funzioni serverless per la creazione di servizi backend, API e flussi di lavoro.
OpenFaaS è un framework serverless open source per funzioni basate su container. Permette di costruire ed eseguire funzioni serverless utilizzando i container Docker.
Fissione è un altro framework serverless open source nativo di Kubernetes che supporta più lingue ed è progettato per una facile distribuzione su cluster Kubernetes.
Conclusione
L'architettura serverless è popolare per le applicazioni web e mobili, l'IoT, l'elaborazione dei dati in tempo reale e altri casi d'uso comuni, perché consente agli sviluppatori di concentrarsi sulla scrittura del codice piuttosto che sulla gestione dei server. La responsabilità della gestione viene scaricata ai provider cloud come AWS Lambda, Azure Functions o Google Cloud Functions, che possono così gestire l'infrastruttura sottostante e scalare automaticamente le risorse per adattarsi alle variazioni del carico di lavoro. Tuttavia, Serverless non è ideale per tutti i casi d'uso e alcuni carichi di lavoro o attività di lunga durata possono essere più adatti ad approcci tradizionali basati su server.
Per saperne di più sull'architettura serverless e sulle tecnologie correlate, consultate queste risorse:
Architettura senza server con il cloud computing
Previsioni Couchbase 2023 - Edge Computing, Serverless e altro ancora
Servizi app Capella (BaaS)
Visitate il nostro Hub dei concetti per conoscere altri argomenti relativi ai database.