Architettura serverless
Le architetture serverless possono essere la piattaforma di distribuzione ideale per gli sviluppatori con risorse limitate

Cos'è l'architettura serverless?
L'architettura serverless è un modello di cloud computing in cui gli sviluppatori creano ed eseguono applicazioni senza gestire server tradizionali. I server esistono ancora, ma si trovano nel cloud, dove i provider cloud gestiscono automaticamente l'infrastruttura, la scalabilità e l'allocazione delle risorse.
Per le applicazioni serverless, gli sviluppatori scrivono tipicamente il codice come funzioni isolate che vengono eseguite in risposta a eventi o trigger, e 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 orientate agli eventi.
Questa pagina copre:
- Come funziona l'architettura serverless
- Concetti chiave nell'architettura serverless
- Quando utilizzare un'architettura serverless
- Vantaggi dell'architettura serverless
- Limitazioni dell'architettura serverless
- Strumenti di cloud computing serverless
- Conclusione
Come funziona l'architettura serverless
L'architettura serverless astrae la gestione dei server dagli sviluppatori e si affida ai provider cloud per gestire l'infrastruttura sottostante. Ecco come funziona di solito:
1. Creazione di funzioni Gli sviluppatori scrivono codice come singole funzioni, con ciascuna funzione progettata per eseguire un compito o un servizio specifico. L'architettura serverless viene talvolta definita Function-as-a-Service o FaaS.
2. Implementazione delle funzioni: Le funzioni vengono inserite in un pacchetto e distribuite su una piattaforma serverless fornita da un provider di servizi cloud. Le piattaforme serverless più comuni sono AWS Lambda, Azure Functions e Google Cloud Functions.
3. Condizioni di attivazione: 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 ai dati (ad esempio, aggiornamenti del database), timer, caricamenti di file o altro. Il provider cloud gestisce le fonti degli eventi e richiama automaticamente le funzioni associate.
4. Scalabilità automatica: Man mano che si verificano gli eventi, la piattaforma serverless scala automaticamente le risorse sottostanti per far fronte al carico di lavoro. Se la tua funzione subisce un picco improvviso di richieste, il provider cloud provvederà a史上 provisionare (provision) più risorse. Man mano che si verificano gli eventi, la piattaforma serverless scala automaticamente le risorse sottostanti per far fronte al carico di lavoro. Se la tua funzione subisce un picco improvviso di richieste, il provider cloud provisioningerà più risorse. Man mano che si verificano gli eventi, la piattaforma serverless scala automaticamente le risorse sottostanti per gestire il carico di lavoro. Se la tua funzione sperimenta un picco improvviso di richieste, il provider cloud provvederà a fornire ulteriori risorse.
5. Esecuzione: Quando un evento attiva una funzione, la piattaforma serverless inizializza un contenitore o un ambiente di esecuzione 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 attivo 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. Il costo viene addebitato per ogni esecuzione e per le risorse di calcolo, quali CPU e memoria, allocate durante l'esecuzione.
7. Apolidia: Le funzioni serverless sono in genere senza stato, il che significa che non conservano informazioni tra una chiamata e l'altra. Qualsiasi stato o dato necessario deve essere memorizzato esternamente, spesso in un database o in un servizio di archiviazione.
8. Log e monitoraggio: Le piattaforme serverless offrono solitamente strumenti integrati di registrazione e monitoraggio, che consentono agli sviluppatori di monitorare le prestazioni e risolvere i problemi nelle loro funzioni.
Concetti chiave nell'architettura serverless
Poiché lo sviluppo serverless rappresenta un'alternativa allo sviluppo tradizionale, è opportuno acquisire familiarità con i seguenti termini e concetti per comprendere appieno 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 di database o un timer programmato.
Durata: Il tempo di esecuzione di una funzione serverless, che è un fattore nel calcolo del costo di esecuzione.
Avvio a freddo: La prima esecuzione di una funzione serverless, in cui il provider cloud effettua il provisioning delle risorse e configura l'ambiente di runtime. I cold start introducono una latenza aggiuntiva rispetto ai warm start.
Avvio a caldo Esecuzioni successive di una funzione serverless quando l'ambiente di esecuzione è già pronto, con conseguenti tempi di risposta più rapidi rispetto ai cold start.
Limite di concorrenza: Il numero massimo di esecuzioni di funzioni simultanee consentito dalla piattaforma serverless. Questo limite può influire sulla capacità di gestire richieste o eventi concorrenti.
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. Tra le fonti di eventi figurano, ad esempio, i bucket Amazon S3, gli API Gateway, le code di messaggi e gli aggiornamenti dei database.
Apolidia: Le funzioni serverless sono tipicamente stateless, il che significa che non conservano i dati tra un'invocazione e l'altra. Qualsiasi stato necessario deve essere memorizzato esternamente in database o servizi di archiviazione.
Assegnazione delle risorse: La specifica delle risorse di calcolo come CPU o memoria per una funzione serverless. Queste risorse vengono spesso scelte dagli sviluppatori quando definiscono la funzione.
Scalabilità automatica: La regolazione automatica delle risorse serverless da parte del cloud provider per adattarsi ai carichi di lavoro variabili e garantire prestazioni ottimali.
Database serverless: I database serverless sono database con scalabilità elastica che non espongono l'infrastruttura su cui operano Couchbase Capella™ DBaaS è un esempio di database serverless gestito.
Quando utilizzare un'architettura serverless
Sebbene l'architettura serverless sia versatile, non è la scelta migliore per ogni caso d'uso: le applicazioni con attività a esecuzione prolungata, elevate esigenze di calcolo o carichi di lavoro continui spesso traggono maggiori vantaggi dalle tradizionali architetture basate su server. Assicurati di considerare i requisiti specifici e i punti di forza unici del serverless quando decidi se sia la scelta giusta per la tua applicazione.
Casi d'uso dell'architettura serverless
Alcuni dei casi d'uso più comuni e adatti per l'architettura serverless includono:
Applicazioni Web e mobili: Gestire i backend di applicazioni web e mobili, servire contenuti, elaborare le richieste degli utenti e gestire l'autenticazione degli utenti.
API: Ridimensiona automaticamente le tue API RESTful e GraphQL e integrale facilmente con altri servizi.
IoT: Gestire in modo efficiente l'elaborazione e l'analisi dei dati provenienti da dispositivi IoT che attivano eventi con dati dei sensori.
Elaborazione dei dati in tempo reale: Elabora flussi di dati in tempo reale come analisi dei flussi di clic, elaborazione dei log e analisi basate su eventi.
Elaborazione in batch: Eseguire processi batch periodici o su richiesta come ETL di dati (estrazione, trasformazione e caricamento), generazione di report e pulizia dei dati.
Attività relative all'archiviazione di file e dati: Interagire con i servizi di archiviazione cloud per gestire il caricamento e il download dei file, nonché la manipolazione dei dati.
Autenticazione e autorizzazione degli utenti: I servizi di gestione delle identità e degli accessi (IAM) per l'autenticazione e l'autorizzazione degli utenti sono particolarmente adatti alle funzioni serverless.
Servizi di notifica: Invia notifiche e avvisi come e-mail, SMS o notifiche push in risposta a eventi o trigger specifici.
Chatbot e assistenti virtuali: Realizza interfacce conversazionali in cui le funzioni elaborano richieste in linguaggio naturale e generano risposte.
Elaborazione dei dati e delle immagini: Esegui attività come il ridimensionamento delle immagini, la conversione di formato e la trasformazione dei dati che richiedono una minima interazione da parte dell'utente.
Attività programmate: Automatizza attività periodiche come backup dei dati, generazione di report e manutenzione del database.
Microservizi: Creare e gestire singoli microservizi all’interno di un’applicazione più ampia, consentendo una facile scalabilità e un’implementazione indipendente.
Servizi di sicurezza e conformità: Implementare funzioni relative alla sicurezza, quali 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à, il serverless è piuttosto distinto da entrambe e spiegheremo cosa le rende diverse.
Cosa contenitori e serverless hanno in comune il fatto che entrambi consentono agli sviluppatori di distribuire il codice delle applicazioni a livello di astrazione dell'ambiente host. Tuttavia, una delle differenze chiave è che il serverless astrae completamente la 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 racchiudono le applicazioni e le loro dipendenze in ambienti isolati e coerenti che vengono eseguiti come istanze indipendenti su un sistema operativo condiviso. I container offrono un modo per garantire che le applicazioni funzioni in modo coerente in vari ambienti, dallo sviluppo alla produzione, e offrono un modo standardizzato per pacchettizzare e distribuire il software. I container sono tipicamente a lunga esecuzione e possono includere più processi all'interno di un singolo container.
In sintesi, il serverless computing elimina la necessità di gestire i server ed è ideale per attività di breve durata e guidate dagli eventi, mentre i container offrono un maggiore controllo sull’ambiente server e sono più adatti a processi di lunga durata e carichi di lavoro costanti. La scelta tra le due opzioni dipende dai requisiti specifici della vostra applicazione e dal vostro livello di controllo sull’infrastruttura sottostante. In alcuni casi, all’interno di una singola applicazione viene utilizzata una combinazione di entrambe le tecnologie per componenti diversi.
Serverless contro microservizi
Microservizi sono un modello di architettura software che struttura un'applicazione come un insieme di piccoli servizi implementabili in modo indipendente, che comunicano tramite API e collaborano per fornire funzionalità complesse e modulari. La confusione tra microservizi e architettura serverless nasce spesso dal fatto che entrambi pongono l'accento sulla modularità e sulla scalabilità. A rendere ancora più labile il confine è il fatto che spesso vengono utilizzati insieme, con le funzioni serverless che fungono da microservizi all’interno di un’applicazione più ampia basata sui microservizi.
Nonostante le loro somiglianze, il serverless e i microservizi presentano caratteristiche distintive nei seguenti ambiti che li differenziano:
Gestione delle infrastrutture
- Microservizi – gli sviluppatori mantengono il controllo sul server e sull'orchestrazione dei container.
- Senza server la gestione del server è completamente astratta e gli sviluppatori non si occupano dell'infrastruttura sottostante.
Modello di esecuzione
- Microservizi – funzionano ininterrottamente 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, poiché le applicazioni serverless possono essere soggette a avviamenti a freddo.
Modello di costo
- Microservizi – richiede di allocare e mantenere risorse per il server. Ciò può comportare costi continui anche durante i periodi di basso utilizzo.
- Senza server segue un modello pay-as-you-go basato sull'effettiva esecuzione delle funzioni. Questo può essere più conveniente per carichi di lavoro sporadici.
Modularità
- Microservizi – un'applicazione è divisa in piccoli servizi indipendenti.
- Senza server Gli sviluppatori scrivono codice come singole unità di funzionalità.
Scalabilità
- Microservizi – consentire la scalabilità indipendente di ciascun servizio.
- Senza server scala automaticamente le singole funzioni.
Vantaggi dell'architettura serverless
L'architettura serverless offre una vasta gamma di vantaggi che la rendono una scelta attraente per molte applicazioni e casi d'uso. I vantaggi più convincenti sono:
Scalabilità automatica: Le piattaforme di architettura serverless scalano automaticamente le risorse verso l'alto o verso il basso in base al carico di lavoro in arrivo. Ciò garantisce che la tua applicazione possa gestire livelli variabili di traffico, offrendo elevata disponibilità e prestazioni senza intervento manuale.
Efficienza dei costi: Con il serverless, paghi solo per 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 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 anziché sulla manutenzione dell'infrastruttura. Ciò riduce la necessità di interventi DevOps e semplifica la distribuzione e la scalabilità.
Sviluppo più rapido: Serverless accelera il processo di sviluppo eliminando la necessità di gestire server e infrastruttura. Gli sviluppatori possono iterare e rilasciare codice rapidamente, ottenendo un time-to-market più rapido per le applicazioni.
Resilienza Le funzioni serverless sono tipicamente senza stato, promuovendo un design che si affida a servizi di archiviazione esterni o database per la persistenza dei dati. Questo può portare a9 applicazioni più resilienti e tolleranti agli errori.
Registrazione e monitoraggio integrati: Le piattaforme serverless offrono spesso strumenti integrati per il monitoraggio e la registrazione, consentendo agli sviluppatori di monitorare le prestazioni, risolvere i problemi e ottenere informazioni sul comportamento dell'applicazione.
Minore dipendenza dai fornitori: Molte funzioni possono essere progettate per essere relativamente indipendenti dai vendor, facilitandone la migrazione o l'integrazione di servizi provenienti da diversi provider cloud. Non è sempre così, come vedrai nella prossima sezione sui limiti del serverless.
Alta disponibilità: Le piattaforme serverless sono progettate per essere altamente disponibili, con meccanismi di ridondanza e failover integrati. Ciò contribuisce a garantire che la tua 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
Sebbene l'architettura serverless offra molti vantaggi, presenta anche i suoi limiti. Alcune caratteristiche del serverless possono manifestarsi come benefici o sfide. Quando si valuta il serverless per un'applicazione specifica, considerare i requisiti o i vincoli relativi a quanto segue:
Avviamenti a freddo: Le funzioni serverless possono subire un ritardo quando la funzione viene invocata per la prima volta perché il provider cloud deve inizializzare un nuovo ambiente di esecuzione. Questa latenza può essere problematica per le applicazioni che richiedono tempi di risposta costantemente rapidi.
Vincoli di risorse: Le piattaforme serverless impongono limitazioni sulle risorse, come limiti di memoria e di tempo di esecuzione. Questi vincoli possono essere limitanti per attività ad alta intensità di calcolo o per applicazioni che richiedono processi di lunga durata.
Apolidia: Le funzioni serverless sono in genere senza stato, il che significa che non conservano i dati tra un'invocazione e l'altra. Sebbene ciò possa contribuire a migliorare la resilienza (come spiegato sopra), l'utilizzo di database esterni o di servizi di archiviazione per la persistenza dei dati può aggiungere complessità ad alcune applicazioni.
Vendor lock-in: Sebbene molte funzioni possano essere progettate per essere relativamente indipendenti dal fornitore, la vostra applicazione potrebbe presentare alcune configurazioni e integrazioni specifiche per la piattaforma che rendono difficile il passaggio a un provider cloud diverso.
Debugging complesso Il debug e la risoluzione dei problemi delle applicazioni serverless possono essere più complessi in un'architettura serverless, poiché la natura distribuita delle funzioni e la mancanza di accesso diretto al server possono rendere difficile identificare e risolvere i problemi.
Test locale limitato: Lo sviluppo e il test di funzioni serverless in locale possono essere difficili perché il testing locale potrebbe non replicare completamente l'ambiente di esecuzione sul cloud. Gli sviluppatori spesso devono distribuire le funzioni sulla piattaforma serverless per un test approfondito.
Strumenti di cloud computing serverless
Esistono numerose piattaforme e strumenti di cloud computing senza server che consentono agli sviluppatori di creare, distribuire e gestire applicazioni serverless utilizzando i loro linguaggi di programmazione e fornitori di servizi cloud preferiti. Ecco alcuni dei più popolari:
Piattaforme
AWS Lambda di Amazon supporta vari linguaggi di programmazione e si integra perfettamente con altri servizi AWS. AWS fornisce anche un API gateway per la creazione di API RESTful e l'attivazione di funzioni Lambda.
Azure Functions di Microsoft è un'offerta serverless all'interno dell'ecosistema cloud di Azure. Supporta più linguaggi e offre l'integrazione con i servizi di Azure, rendendolo una scelta forte per le applicazioni basate su Windows.
Cloud Functions di Google supporta più 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.
IBM Cloud Functions si basa 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 di Alibaba Cloud e di integrarsi con altri servizi di Alibaba Cloud utilizzando più linguaggi.
Strumenti
Netlify è una piattaforma nota soprattutto per l'hosting di siti Web statici, ma offre anche funzioni serverless per la creazione di servizi di backend, API e flussi di lavoro.
OpenFaaS è un framework serverless open source per funzioni basate su container. Consente di creare ed eseguire funzioni serverless utilizzando container Docker.
Fissione è un altro framework serverless nativo di Kubernetes, open source, che supporta più linguaggi ed è progettato per una facile distribuzione su cluster Kubernetes.
Conclusione
L'architettura serverless è popolare per le applicazioni web e mobili, l'IoT, l'elaborazione di dati in tempo reale e altri casi d'uso comuni perché consente agli sviluppatori di concentrarsi sulla scrittura del codice anziché sulla gestione dei server. La responsabilità della gestione viene delegata a provider cloud come AWS Lambda, Azure Functions o Google Cloud Functions, in modo che possano gestire l'infrastruttura sottostante e scalare automaticamente le risorse per far fronte alle variazioni del carico di lavoro. Tuttavia, il serverless non è ideale per tutti i casi d'uso e determinati carichi di lavoro o attività a lungo termine potrebbero essere più adatti ai tradizionali approcci basati su server.
Per saperne di più sull'architettura serverless e sulle relative tecnologie, consulta queste risorse:
Architettura Serverless con Cloud Computing
Previsioni Couchbase 2023: Edge Computing, Serverless e altro
Servizi app Capella (BaaS)
Visitate il nostro Hub dei concetti per saperne di più su altri argomenti relativi ai database.