coldwa.st
Tutte le guideProgrammazioneWebDatiStrumentiDatabaseHaskellConcettiCabal e buildToolchainCompilatorePrestazioniEditor e HLS

serverless · cloud · architettura

Serverless cos'è, esattamente

By ColdwastUpdated Aug 5, 20267 min read#serverless#cloud#architettura
Vista dal basso attraverso il traliccio in acciaio di un pilone elettrico contro un cielo azzurro
Vista verso l'alto dentro il traliccio di un pilone dell'alta tensione. La rete è enorme, qualcuno la mantiene, e tu la tocchi solo attraverso una presa.

La parola è un termine di marketing che è rimasto, e la prima volta inganna quasi tutti. Serverless non vuol dire che non ci sia un server. Vuol dire che non ne vedi mai uno: non ne scegli la dimensione, non installi i suoi aggiornamenti, non decidi quanti farne girare. Se ne occupa qualcun altro, e a te viene addebitato ciò che il tuo codice ha davvero fatto.

Che cosa toglie davvero

Su un VPS affitti una macchina. Esiste che arrivi qualcuno o no, ne scegli RAM e vCPU, ne aggiorni il kernel e decidi quando aggiungerne una seconda. Ognuna di quelle decisioni è tua, e lo è anche ogni ora della fattura.

Il serverless toglie la macchina come unità di ragionamento. Consegni alla piattaforma un pezzo di codice e un innesco: una richiesta HTTP, un messaggio in una coda, un file che arriva in uno storage. La piattaforma fa in modo che quel codice giri quando l'innesco scatta. Quante copie girano, e su che cosa, non è un tuo problema né una tua decisione.

È tutto qui lo scambio, detto senza giri: cedi il controllo del runtime in cambio del non doverlo mai gestire.

Le due famiglie

Function as a Service è la parte a cui si pensa per prima. Distribuisci una funzione, la piattaforma la esegue per evento, e sparisce. AWS Lambda, Google Cloud Functions e Azure Functions sono gli esempi noti.

I servizi gestiti serverless sono la metà più ampia e meno discussa: database, code, storage a oggetti e ricerca, fatturati a richiesta o a unità di lavoro invece che a istanza provisionata. La maggior parte dei sistemi serverless reali è fatta soprattutto di questo, con una quantità modesta di codice di funzione a tenere insieme i pezzi.

Primo piano di un contatore elettrico dietro il coperchio di vetro, con etichetta a codice a barre e display digitale
Un contatore elettrico dietro il suo coperchio di vetro. La fatturazione serverless funziona allo stesso modo: ti viene addebitato ciò che ha girato, non la macchina che stava in attesa.

La fatturazione, e perché lo scale to zero è il titolo

Una macchina affittata si paga a tempo. Costa uguale alle tre di notte senza visitatori e nel picco. Il serverless fattura a invocazione più le risorse che quell'invocazione ha consumato mentre girava.

La conseguenza è lo scale to zero: senza traffico non gira nulla e non c'è nulla da pagare. Per un progetto personale, uno strumento interno usato due volte a settimana o un carico a picchi fermo quasi sempre, questo è il vantaggio vero, ed è grosso.

Lo stesso meccanismo lavora al contrario sotto carico. La piattaforma avvia tante copie concorrenti quante gli eventi richiedono, senza che tu configuri un autoscaler, ed è il secondo vantaggio reale.

I vincoli che la presentazione omette

Avvii a freddo. Quando nessuna copia della tua funzione è calda, la prima richiesta paga l'inizializzazione del runtime e delle tue dipendenze prima ancora che il tuo codice parta. Bundle più piccoli e runtime più leggeri lo riducono. I fornitori vendono capacità preriscaldata, che funziona e che annulla in silenzio lo scale to zero, perché preriscaldato significa pagato mentre è fermo.

Assenza di stato. Niente di ciò che tieni in memoria o su disco locale è garantito la volta dopo. Due invocazioni possono finire su istanze diverse, e un'istanza sparisce quando lo decide la piattaforma. Lo stato va in un database o in uno storage a oggetti, sempre.

Limiti di esecuzione. Un'invocazione ha una durata massima e un tetto di memoria. I lavori batch lunghi e tutto ciò che tiene una connessione aperta per ore si adattano male, e toccare il limite non è un avviso ma un fallimento.

Accoppiamento. Il corpo della funzione di solito è portabile. Le forme degli eventi, il modello di identità e i servizi gestiti attorno non lo sono, ed è lì che andarsene dopo costa davvero.

Dove la curva dei costi si incrocia

La fatturazione a invocazione è economica quando la macchina sarebbe stata ferma e cara quando sarebbe stata occupata. Sotto un certo carico stabile, il serverless vince facilmente. Sopra, paghi un sovrapprezzo per unità di lavoro per un'elasticità che non usi più, e un server sempre acceso, anche modesto, costa meno ed è più prevedibile.

La regola onesta è guardare la forma del traffico più che il suo volume. A picchi, occasionale e imprevedibile: vantaggio serverless. Stabile e continuo: vantaggio macchina affittata al mese, e a quel punto il lavoro operativo che ti riprendi è un prezzo giusto per una fattura che smette di sorprendere.

Se il tuo carico risulta dal lato stabile, un VPS è la risposta semplice, e Docker più un po' di disciplina ti restituisce gran parte della riproducibilità che rendeva attraente il serverless all'inizio.

Consigliato

Un server per il lato stabile della curva

Quando il traffico smette di essere a picchi, la fatturazione a invocazione costa più di una macchina che sarebbe stata comunque occupata. DigitalOcean offre VPS e server cloud con controllo root completo, fatturati al mese e non a chiamata.

Scopri DigitalOcean Cloud →

Link di affiliazione - sostiene queste guide gratuite.

In breve

Serverless significa che i server sono un problema di qualcun altro, non che non esistano. Guadagni scale to zero, concorrenza automatica e zero patch. Accetti avvii a freddo, assenza di stato, limiti di esecuzione e una fattura che segue l'uso invece del tempo. Si adatta al lavoro a picchi e intermittente, e smette di adattarsi quando il traffico diventa abbastanza stabile perché una macchina affittata sarebbe stata comunque occupata.