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

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.

Modularity

  • Microservizi – an application is divided into small independent services.
  • Senza server developers write code as individual units of functionality.

Scalabilità

  • Microservizi – allow for independent scaling of each service.
  • Senza server automatically scales individual functions.

Vantaggi dell'architettura serverless

Serverless architecture offers a wide range of benefits that make it an attractive choice for many applications and use cases. The most compelling advantages are:

Automatic scaling: Serverless architecture platforms automatically scale resources up or down based on the incoming workload. This ensures that your application can handle varying levels of traffic, providing high availability and performance without manual intervention.

Efficienza dei costi: With serverless, you only pay for the actual compute resources used during function execution. There are no costs associated with idle time, making it cost-effective, particularly for workloads with unpredictable or sporadic traffic.

Reduced operational overhead: Serverless abstracts server management tasks, allowing developers to focus on code rather than infrastructure maintenance. This reduces the need for DevOps efforts and simplifies deployment and scaling.

Faster development: Serverless accelerates the development process by eliminating the need to manage servers and infrastructure. Developers can quickly iterate and deploy code, resulting in faster time-to-market for applications.

Resilience: Serverless functions are typically stateless, promoting a design that relies on external storage services or databases for data persistence. This can lead to more resilient and fault-tolerant applications.

Built-in logging and monitoring: Serverless platforms often provide built-in tools for monitoring and logging, enabling developers to track performance, troubleshoot issues, and gain insights into application behavior.

Reduced vendor lock-in: Many functions can be designed to be relatively vendor-agnostic, making it easier to migrate them or to integrate services from different cloud providers. This is not always the case, as you’ll see in the next section on serverless limitations.

Alta disponibilità: Serverless platforms are designed to be highly available, with redundancy and failover mechanisms built in. This helps ensure that your application remains accessible and responsive even in the face of failures.

Energy and resource efficiency: The automatic scaling and resource management of serverless platforms can lead to improved energy efficiency and resource utilization, reducing environmental impact.

Limitazioni dell'architettura serverless

While serverless architecture offers many advantages, it also has its limitations. Certain characteristics of serverless may manifest as benefits or challenges. When evaluating serverless for a specific application, consider your requirements or constraints related to the following:

Cold starts: Serverless functions may experience a delay when the function is first invoked because the cloud provider needs to initialize a new execution environment. This latency can be problematic for applications that require consistently fast response times.

Resource constraints: Serverless platforms impose resource constraints, such as memory and execution time limits. These constraints can be limiting for compute-intensive tasks or applications that require long-running processes.

Apolidia: Serverless functions are typically stateless, meaning they don’t retain data between invocations. While this can help improve resilience (as explained above), using external databases or storage services for data persistence can add complexity to some applications.

Vendor lock-in: While many functions can be designed to be relatively vendor-agnostic, your application may have some platform-specific configurations and integrations that make it challenging to move to a different cloud provider.

Complex debugging: Debugging and troubleshooting serverless applications can be more challenging in a serverless architecture because the distributed nature of functions and the lack of direct server access can make it difficult to identify and resolve issues.

Limited local testing: Developing and testing serverless functions locally can be challenging because local testing may not fully replicate the execution environment in the cloud. Developers often need to deploy functions to the serverless platform for thorough testing.

Strumenti di cloud computing serverless

There are numerous serverless computing platforms and tools that enable developers to build, deploy, and manage serverless applications using their favorite coding languages and cloud service providers. Here are some of the most popular ones:

Platforms

Amazon’s AWS Lambda supports various programming languages and integrates seamlessly with other AWS services. AWS also provides an API gateway for creating RESTful APIs and triggering Lambda functions.

Microsoft’s Azure Functions is a serverless offering within the Azure cloud ecosystem. It supports multiple languages and offers integration with Azure services, making it a strong choice for Windows-based applications.

Google’s Cloud Functions supports multiple programming languages and integrates well with other Google Cloud services, making it suitable for building applications within the Google Cloud ecosystem.

IBM Cloud Functions is based on the Apache OpenWhisk framework and allows you to integrate with IBM Cloud services using various languages.

Alibaba Cloud Function Compute allows developers to build applications in the Alibaba Cloud ecosystem and integrate with other Alibaba Cloud services using multiple languages.

Tools

Netlify is a platform best known for hosting static websites, but it also offers serverless functions for building backend services, APIs, and workflows.

OpenFaaS is an open source serverless framework for container-based functions. It allows you to build and run serverless functions using Docker containers.

Fission is another open source Kubernetes-native serverless framework that supports multiple languages and is designed for easy deployment on Kubernetes clusters.

Conclusione

Serverless architecture is popular for web and mobile applications, IoT, real-time data processing, and other common use cases because it allows developers to focus on writing code rather than managing servers. The management responsibility is offloaded to cloud providers like AWS Lambda, Azure Functions, or Google Cloud Functions so they can handle the underlying infrastructure and scale resources automatically to accommodate changes in workload. Serverless is not ideal for all use cases, however, and certain workloads or long-running tasks may be better suited for traditional server-based approaches.

To learn more about serverless architecture and related technologies, check out these resources:

Serverless Architecture With Cloud Computing
Couchbase 2023 Predictions – Edge Computing, Serverless, and More
Servizi app Capella (BaaS)
Visitate il nostro Hub dei concetti to learn about other topics related to databases.

Iniziare a costruire

Scopri il nostro portale per sviluppatori per esplorare NoSQL, consultare risorse e iniziare con i tutorial.

Utilizzare Capella gratuitamente

Per iniziare a lavorare con Couchbase bastano pochi clic. Capella DBaaS è il modo più semplice e veloce per iniziare.

Contattaci

Volete saperne di più sulle offerte di Couchbase? Lasciatevi aiutare.