delete

Contattaci

back to resources

Introduzione a Serverless: non solo Lambda Function

data
13/3/2023
data progetto
autore
Antonio D'Amore
cliente
partnership
url
No items found.

Un errore comune, quando si parla di serverless, è quello di pensare che esso voglia dire solo Lambda Function o Azure Function. Questi sono servizi Function as a Service (FaaS) e sono certamente servizi serverless, ma il termine serverless apre le porte di un mondo molto più vasto.

In ogni caso, se questi vocaboli vi sono nuovi, non temete, perché in questo articolo partiremo dalle radici di serverless: scopriremo di cosa si tratta, cosa si può fare, i suoi vantaggi e svantaggi e cercheremo di sciogliere un po’ di dubbi.

Cos’è - e cosa non è - Serverless

Andiamo dritti al sodo: serverless è un modello di Cloud Computing in cui l’approvvigionamento e la manutenzione dei server è delegata ad un cloud provider. A differenza di quel che il nome suggerisce, quindi, serverless non vuol dire davvero “senza server”. In realtà i server ci sono, solo che non li compriamo, non li installiamo, non li gestiamo. Dunque, i server spariscono dai nostri pensieri.

Un ruolo centrale è quello del cloud provider, che ci offre i servizi serverless e che gestisce l’infrastruttura fisica al posto nostro. In questo articolo faremo riferimento ai public cloud provider, tra cui spiccano i nomi di Amazon AWS e Microsoft Azure.

I servizi serverless messi a disposizione sono pre-confezionati, ma configurabili, e permettono un’alta produttività. Quando li utilizziamo, il provider allocherà per conto nostro le risorse necessarie, per il tempo necessario. I costi sono proporzionali all’effort richiesto al provider. Quindi, se non utilizziamo risorse, allora non abbiamo spese.

Due proprietà fondamentali

Serverless rappresenta una delle più alte espressioni del Cloud Computing di oggi, da cui possiamo beneficiare di due importanti proprietà: la scalabilità e la disponibilità. Prima di scendere nei dettagli di serverless è importante comprendere questi concetti. Per farlo, immedesimiamoci nei gestori di un e-commerce.

Scalabilità

Ci saranno periodi dell’anno in cui il traffico sarà basso e il nostro sistema non avrà problemi a gestire tutte le richieste. In altri periodi, ad esempio durante il BlackFriday, gli sconti succulenti potrebbero attirare più visitatori del solito. La scalabilità è la proprietà che ci permette di sostenere la richiesta crescente e magari improvvisa di risorse. Nelle sue forme più sofisticate, essa permette di allocare e deallocare componenti infrastrutturali (es: macchine virtuali) a seconda delle necessità in modo automatico.

Disponibilità

Il nostro e-commerce è ciò che genera il guadagno, perciò non possiamo permettere che ci siano dei down. Eppure, server e reti falliscono continuamente per miriadi di ragioni che non dipendono necessariamente da noi. La disponibilità è la proprietà che permette di avere un’alta probabilità che il nostro servizio sia operativo. Una tecnica basilare consiste nel replicare le applicazioni su più server, in modo che, se uno di essi dovesse andare giù, ce ne sia un altro che permette al servizio di essere ancora fruibile. Ciò riguarda anche i dati, che sono replicati su più server in modo da evitare perdite di informazioni.

Cosa possiamo fare

Function as a Service

Sebbene serverless non sia soltanto FaaS, quest’ultimo rappresenta uno dei modelli più interessanti per il computing. Consiste nell’eseguire del codice on-demand, senza dover gestire server (installazione, configurazione, aggiornamento, patching, ecc). Le risorse necessarie all’esecuzione sono allocate a run-time, per il tempo necessario, e questo consente di adottare un modello di prezzi pay-per-use.

Object Storage

Servizio di storage che consente di salvare qualunque tipo di file in un archivio virtuale, senza dover gestire server o sistemi operativi. Semplicemente inviamo file nel cloud, un’operazione che sembra banale, ma che dietro le quinte nasconde un’infrastruttura ad alte performance, scalabile, affidabile e durevole (AWS S3 ha una durabilità a 119’s, ossia del 99,999999999%, fenomenale).

Static Site Hosting

Si tratta di una caratteristica che usa l’object storage come hosting di un’applicazione frontend, ad esempio in React. Non è necessario gestire webserver o sistemi operativi, pensare all’affidabilità o alla scalabilità. Carichiamo semplicemente l’applicazione. È inoltre possibile abbinare un servizio di CDN (es: AWS CloudFront) per ottimizzare tempi e costi. Una soluzione che a seconda dei casi può essere non solo l’ideale, ma anche gratuita. Sembra troppo bello per essere vero, ma è così.

Database non relazionale

Tipologia di servizio che permette di avere un NoSql performante, scalabile, affidabile, senza avere un’infrastruttura da gestire. Tuttavia, ci sono delle nozioni riguardo all’infrastruttura interna che è importante conoscere per poter progettare le collection nel modo corretto.

Integrazione di servizi

Esistono molte tipologie di servizio per supportare la comunicazione asincrona, come service bus, message queue, event stream. Queste soluzioni si basano su un’infrastruttura ridondante e ad alte performance e quindi è possibile costruire applicazioni altamente scalabili e affidabili.

Tanto, tanto altro

Appartengono alla categoria serverless molti servizi fully-managed che consentono di coprire numerosissimi casi d’uso. Possiamo addestrare modelli di Machine Learning o flussi ETL clusterizzati, ma senza gestire davvero un cluster. Possiamo utilizzare servizi di gestione, autenticazione e autorizzazione scalabili su milioni di utenti, ancora una volta senza gestire un’infrastruttura, e così via.

Vantaggi

Abbattimento della TCO

Possiamo abbattere o addirittura azzerare le spese derivanti dal possesso (Total Cost of Ownership). Non abbiamo spese di acquisto, né costi fissi. Vengono meno i costi delle licenze e di manutenzione dell’hardware. Grazie alla scalabilità automatica e cucita sulle necessità reali, nessun abbiamo costi di over-provisioning.

Focus sul prodotto

Serverless offre l’opportunità di concentrare le energie dell’azienda su ciò che porta valore, ossia ciò che permette al business di progredire.

Basso Time-to-market

Non dobbiamo occuparci della gestione delle risorse e ci affidiamo ai servizi gestiti del provider, per cui l’effort per l’approvvigionamento, ma anche per l’auditing di sicurezza e pen-test che di solito precedono un go-live, sono attività di gran lunga più snelle.

Alta scalabilità, flessibilità e alta disponibilità

L’infrastruttura è in grado di espandersi e contrarsi automaticamente per accogliere qualsiasi portata di elaborazione. Inoltre, applicazioni e dati sono replicati su più server, su più reti, in più datacenter e in più zone di disponibilità per evitare downtime.

Sicuro by design e by default

Il provider provvede alla sicurezza dell’infrastruttura fisica, della virtualizzazione, dei sistemi operativi. Il cliente ha comunque delle responsabilità, ma applicare le buone pratiche è semplice, perché generalmente si tratta di una semplice configurazione testuale.

Costi basati sul consumo

I costi sono relativi alle risorse che la nostra applicazione richiede. Perciò, nessun consumo vuol dire nessun costo. Inoltre, il provider può sfruttare l’economia di scala per tenere i prezzi bassi.

Green

In Orbyta sappiamo bene quanto l’argomento sia ampio e delicato; perciò, siamo consapevoli del fatto che non potremo essere esaustivi in così poche righe.

A differenza di altri modelli, in serverless l’over-provisioning è bassissimo. Da un lato, questo vuol dire che il provider può condensare più applicazioni su un minor numero di macchine fisiche. Dall’altro vuol dire che, essendo il consumo di energia giustificato da una necessità reale, gli sprechi sono minori.

Applicazione non serverless con autoscaling
Applicazione serverless

Si prendano in esame i due grafici, che riguardano un’applicazione non-serverless e una serverless. La parte evidenziata in rosso rappresenta l’over-provisioning, ovvero l’allocazione in eccesso e che quindi si può interpretare come spreco e come occupazione delle risorse del server. Come si può osservare, nel caso di serverless l’over-provisioning è molto più contenuto.

Svantaggi

Observability

Sebbene la gestione dei server sia assente, serverless non vuol dire NoOps. Le operations non scompaiono, anzi, sono fondamentali per quanto riguarda l’osservabilità, la monitorabilità, le reti, il debugging, il deployment. Queste, tuttavia, sono problematiche costanti nei sistemi distribuiti, perciò dobbiamo semplicemente imparare ad affrontarle.

Lock-In

Utilizzando i servizi di un vendor, indubbiamente dipendiamo da esso. Questo potrebbe portare non poche difficoltà nel caso in cui volessimo migrare ad un altro cloud provider. Il nostro consiglio è quello di scrivere codice nel modo più opportuno, in particolare separando bene la logica di integrazione dalla logica di dominio. In tal modo la logica di business sarebbe preservata e non compromessa in caso di migrazione.

Sviluppo in locale

I servizi del provider sono sul cloud, perciò non c’è molto che possiamo fare per eseguire del codice completamente in locale. Esistono dei tool di emulazione, ma ad essere onesti non sempre funzionano bene e non sempre implementano le feature di cui abbiamo bisogno.Quello che possiamo consigliare è di scrivere test unitari, idealmente in TDD: in questo modo potrete testare localmente la business logic e ridurre il numero di deployment non necessari.

Testability

Lavorando su sistemi distribuiti, dove le integrazioni asincrone la fanno da padrone, testare non è la cosa più semplice. È fondamentale implementare una buona strategia di integration/e2e testing, che può consistere nel costruire ambienti di testing, magari temporanei. Ricordate che con serverless si paga in base al consumo e che molti provider offrono margini di utilizzo gratuiti, perciò tale infrastruttura avrebbe praticamente costo nullo.

Costi?

Ammettiamolo, non sapere a quanto ammonterà la spesa a fine mese potrebbe essere destabilizzante. Inoltre, il modello di prezzi pay-per-use sembra affascinante quando i flussi di elaborazione sono sporadici, ma come la mettiamo con le applicazioni più avide di risorse? La fattura a fine mese potrebbe farci chiedere se non sarebbe stato meglio avere tre server sempre attivi, ma la verità è che in quest’ultimo caso ci sono molti più costi nascosti di cui tener conto: amministrazione e gestione di server e reti, TCO altissima, debito tecnico accumulato, audit di sicurezza lunghi e complessi, velocità di innovazione più bassa. Sicuri che ne valga la pena?

Obiezioni ricorrenti

Serverless, come tutte le novità, porta con sé un certo scetticismo. L’obiezione ricorrente è che la comunicazione event-driven è complessa e spesso basterebbe un semplicissimo server: in fondo l’applicazione su cui lavoriamo non ha la complessità di Spotify.

Questi sono degli appunti legittimi, guai a non mettere mai in dubbio gli strumenti che adottiamo! Dal nostro punto di vista, però, ci sono altre domande che è necessario porsi: siamo pronti a sacrificare la scalabilità dell’applicazione? Siamo pronti a rischiare dei down? Siamo pronti a rischiare la perdita di dati? Siamo pronti ad immolarci della configurazione, gestione e manutenzione dei server, siano essi virtuali o fisici?

Non c’è motivo per cui serverless debba essere una soluzione adatta solo a grandi progetti enterprise. Anzi, il fatto che permetta di delegare task complessi, ma che non portano valore al business, come la gestione dei server, e il fatto che il modello di prezzi sia abbastanza democratico da adattarsi alle tasche di tutti fanno di serverless una soluzione non solo adatta, ma ideale per molte startup e PMI. Vuol dire avere l’opportunità di costruire dal giorno 1un’architettura senza costi, che permette di porre tutte le energie sulla crescita e che è già sicura, scalabile e affidabile by design, senza futuri rework.

Conclusioni

Non è detto che serverless vada bene per ogni caso d’uso, ma dati gli enormi vantaggi che queste soluzioni possono portare, è bene imparare a pensare serverless first, senza essere necessariamente serverless only.

Vogliamo concludere con una perla estrapolata dal blog del grande software developer Martin Fowler:

“lo sviluppo software è una disciplina recente e oggi stiamo ancora imparando a farlo in modo efficiente”.

Risultati

resources

Le nuove linee guida per la sicurezza delle password aziendali

Le nuove linee guida per la sicurezza delle password aziendali

Password aziendali

Linee guida Garante Privacy

Garante Privacy

GDPR

6 motivi per scegliere Flutter nel 2024

6 motivi per scegliere Flutter nel 2024

App Development

Google

React Native

AI, sistemi esperti e rappresentazione della conoscenza

AI, sistemi esperti e rappresentazione della conoscenza

Sistemi esperti

Rappresentazione della conoscenza

Tradurre la Lingua Italiana dei Segni - il Progetto LIS2Speech

Tradurre la Lingua Italiana dei Segni - il Progetto LIS2Speech

LIS2SPEECH

Traduzione LIS

User Experience Design tra accessibilità e inclusività

User Experience Design tra accessibilità e inclusività

User Experience

Accessibilità

Inclusività

Assitech.Net entra nella galassia Orbyta Technologies

Assitech.Net entra nella galassia Orbyta Technologies

Orbyta Technologies

Orbyta Group

Acquisizione

News

Programmazione Funzionale Java

Programmazione Funzionale Java

Functional Programming

Java

Software Development

Reactive Programming: parallelizzare con Project Reactor

Reactive Programming: parallelizzare con Project Reactor

Programmazione Reattiva

Reactive Programming

Project Reactor

Piattaforme E-commerce Wholesale per il settore B2B

Piattaforme E-commerce Wholesale per il settore B2B

Wholesale

B2B

Antipattern nello sviluppo software: altri errori da evitare

Antipattern nello sviluppo software: altri errori da evitare

Software Development

Antipattern nello sviluppo software: definizione, ambiti di applicazione ed esempi

Antipattern nello sviluppo software: definizione, ambiti di applicazione ed esempi

Software Development

App tattiche di supporto alla gestione dei progetti reiterativi

App tattiche di supporto alla gestione dei progetti reiterativi

App Development

Power Platform

Low Code

DevOps

Introduzione a Power Pages, il servizio Microsoft per siti web low-code

Introduzione a Power Pages, il servizio Microsoft per siti web low-code

Microsoft

Low-code

Power Platform

Introduzione a Jupyter e Seaborn per Data Analysis e Visualization

Introduzione a Jupyter e Seaborn per Data Analysis e Visualization

Jupiter

Python

Data Analysis

Data Visualization

Come utilizzare Matplotlib per la Data Visualization in Python

Come utilizzare Matplotlib per la Data Visualization in Python

Python

Data Visualization

Data Science

Data Analysis

Introduzione alla libreria Dash per Python

Introduzione alla libreria Dash per Python

Python

Data Science

Data Visualization

Data Analysis

Prime Video passa al monolite: ma allora serverless è inutile? 

Prime Video passa al monolite: ma allora serverless è inutile? 

Tableau per la Business Intelligence: introduzione, tutorial e confronto

Tableau per la Business Intelligence: introduzione, tutorial e confronto

Introduzione a Qlik Sense, piattaforma di Business Intelligence avanzata

Introduzione a Qlik Sense, piattaforma di Business Intelligence avanzata

Applicazioni Cloud Native: definizione, vantaggi e tecnologie

Applicazioni Cloud Native: definizione, vantaggi e tecnologie

Power Apps Tutorial – Case Study: come costruire una business app da zero

Power Apps Tutorial – Case Study: come costruire una business app da zero

Il futuro del gaming tra F2P, GaaS, Crypto e Play to Earn

Il futuro del gaming tra F2P, GaaS, Crypto e Play to Earn

Power Apps Basics: interfacce, implementazione & vantaggi

Power Apps Basics: interfacce, implementazione & vantaggi

Strumenti di Business Intelligence: QlikSense & Power BI a confronto

Strumenti di Business Intelligence: QlikSense & Power BI a confronto

Introduzione a Serverless: non solo Lambda Function

Introduzione a Serverless: non solo Lambda Function

Metaverso: siamo pronti a cogliere l’opportunità?

Metaverso: siamo pronti a cogliere l’opportunità?

Recap Flutter Forward 2023: le 7 novità più interessanti

Recap Flutter Forward 2023: le 7 novità più interessanti

Let's Redux React to a Game

Let's Redux React to a Game

Introduzione a PowerShell

Introduzione a PowerShell

Pago con carta: i trend dei pagamenti digitali e il futuro delle carte di credito

Pago con carta: i trend dei pagamenti digitali e il futuro delle carte di credito

NFT World: il fenomeno NFT tra metaverso, business e GameFi

NFT World: il fenomeno NFT tra metaverso, business e GameFi

Quick Escape Room

Quick Escape Room

Orbyta Invaders Ignition

Orbyta Invaders Ignition

Il lancio della nuova Identity di Orbyta parte dal Metaverso!

Il lancio della nuova Identity di Orbyta parte dal Metaverso!

development

design

metaverse

brand identity

Database a grafo in SQL Server

Database a grafo in SQL Server

Data Science Job Roles: i 4 ruoli più richiesti nel settore

Data Science Job Roles: i 4 ruoli più richiesti nel settore

Teoria dei giochi: Propagazione delle strategie

Teoria dei giochi: Propagazione delle strategie

The chosen one: .NET 5

The chosen one: .NET 5

Network Science e Social Network Analysis

Network Science e Social Network Analysis

Isolation levels on SSMS

Isolation levels on SSMS

Teoria dei Grafi

Teoria dei Grafi

Creare un podcast in automatico a partire da audio vocali e musica

Creare un podcast in automatico a partire da audio vocali e musica

Teoria dei Giochi

Teoria dei Giochi

Recommender systems: principali metodologie degli algoritmi di suggerimento

Recommender systems: principali metodologie degli algoritmi di suggerimento

Introduction to Quantum Computing and Qiskit

Introduction to Quantum Computing and Qiskit

System Versioned Tables

System Versioned Tables

Vim o non Vim

Vim o non Vim

I vantaggi di un Message Broker

I vantaggi di un Message Broker

PlayStation 5 e l'accesso ai dati: un cambio architetturale?

PlayStation 5 e l'accesso ai dati: un cambio architetturale?

Protezione dei Web Services

Protezione dei Web Services

need more info?

contattaci