Cos'è serverless? Spiegazione dell'informatica serverless

Gli sviluppatori trascorrono innumerevoli ore a risolvere i problemi aziendali con il codice. Quindi è il turno del team operativo di trascorrere innumerevoli ore, prima a capire come ottenere il codice che gli sviluppatori scrivono e farlo funzionare su tutti i computer disponibili, e in secondo luogo assicurarsi che quei computer funzionino senza problemi. La seconda parte è davvero un compito senza fine. Perché non lasciare quella parte a qualcun altro?

Molte innovazioni nell'IT negli ultimi due decenni - macchine virtuali, cloud computing, container - si sono concentrate sull'assicurarsi di non dover pensare molto alla macchina fisica sottostante su cui viene eseguito il codice. Il serverless computing è un paradigma sempre più popolare che porta questo desiderio alla sua logica conclusione: con il serverless computing, non devi sapere nulla dell'hardware o del sistema operativo su cui gira il tuo codice, poiché tutto si prende cura di te da un fornitore di servizi .

Cos'è il serverless computing?

Il serverless computing è un modello di esecuzione per il cloud in cui un provider di cloud alloca in modo dinamico, e quindi addebita all'utente, solo le risorse di elaborazione e lo storage necessari per eseguire un particolare pezzo di codice. Naturalmente, ci sono ancora server coinvolti, ma il loro provisioning e manutenzione sono interamente curati dal provider. Chris Munns, sostenitore del serverless di Amazon, ha affermato in una conferenza del 2017 che, dal punto di vista del team che scrive e distribuisce il codice, "non ci sono server da gestire o fornire. Ciò non include nulla che sia bare metal, niente che sia virtuale, niente che sia un contenitore: tutto ciò che implica la gestione di un host, l'applicazione di patch a un host o la gestione di qualsiasi cosa a livello di sistema operativo, non è qualcosa che dovresti fare nel mondo senza server ". 

Come spiega lo sviluppatore Mike Roberts, il termine era usato una volta per i cosiddetti scenari back-end-as-a-service , in cui un'app mobile si connetteva a un server back-end ospitato interamente nel cloud. Ma oggi quando le persone parlano di elaborazione senza server o architettura senza server, intendono offerte di funzione come servizio , in cui un cliente scrive codice che affronta solo la logica aziendale e lo carica su un provider. Quel provider si occupa di tutto il provisioning dell'hardware, la gestione di macchine virtuali e container e persino attività come il multithreading che spesso sono incorporate nel codice dell'applicazione.

Le funzioni senza server sono guidate dagli eventi, il che significa che il codice viene richiamato solo quando attivato da una richiesta. Il provider addebita solo il tempo di elaborazione utilizzato da tale esecuzione, anziché una tariffa mensile fissa per la manutenzione di un server fisico o virtuale. Queste funzioni possono essere collegate tra loro per creare una pipeline di elaborazione oppure possono fungere da componenti di un'applicazione più ampia, interagendo con altro codice in esecuzione in contenitori o su server convenzionali.

Vantaggi e svantaggi dell'elaborazione serverless

Da questa descrizione, dovrebbero essere chiari due dei maggiori vantaggi dell'elaborazione senza server: gli sviluppatori possono concentrarsi sugli obiettivi di business del codice che scrivono, piuttosto che su questioni infrastrutturali; e le organizzazioni pagano solo per le risorse di elaborazione che effettivamente utilizzano in modo molto granulare, invece di acquistare hardware fisico o affittare istanze cloud che per lo più rimangono inattive.

Come sottolinea Bernard Golden, quest'ultimo punto è particolarmente vantaggioso per le applicazioni guidate dagli eventi. Ad esempio, potresti avere un'applicazione che è inattiva la maggior parte del tempo ma in determinate condizioni deve gestire molte richieste di eventi contemporaneamente. Oppure potresti avere un'applicazione che elabora i dati inviati da dispositivi IoT con connettività Internet limitata o intermittente. In entrambi i casi, l'approccio tradizionale richiederebbe il provisioning di un server robusto in grado di gestire le capacità di lavoro di punta, ma quel server sarebbe sottoutilizzato per la maggior parte del tempo. Con un'architettura serverless, pagheresti solo per le risorse del server che utilizzi effettivamente. L'elaborazione serverless sarebbe utile anche per tipi specifici di elaborazione in batch.Uno degli esempi canonici di un caso d'uso dell'architettura serverless è un servizio che carica ed elabora una serie di singoli file di immagine e li invia a un'altra parte dell'applicazione.

Forse lo svantaggio più ovvio delle funzioni serverless è che sono intenzionalmente effimere e, come dice AlexSoft, "inadatte per attività a lungo termine". La maggior parte dei provider serverless non consente l'esecuzione del codice per più di pochi minuti e quando si avvia una funzione, non vengono conservati dati con stato da istanze eseguite in precedenza. Un problema correlato è che il codice senza server può impiegare diversi secondi per avviarsi, non è un problema per molti casi d'uso, ma se la tua applicazione richiede una bassa latenza, tieni presente.

Molti degli altri aspetti negativi, come sottolineato da Rohit Akiwatkar e Gary Arora, hanno a che fare con il blocco dei venditori. Sebbene siano disponibili opzioni open source, il mercato serverless è dominato dai grandi fornitori di cloud commerciali, come vedremo tra poco. Ciò significa che gli sviluppatori spesso finiscono per utilizzare gli strumenti dei loro fornitori, il che rende difficile cambiare se diventano insoddisfatti. E poiché gran parte dell'elaborazione senza server avviene, per definizione, sull'infrastruttura del fornitore, può essere difficile integrare il codice senza server nelle pipeline di sviluppo e test interne.

Fornitori serverless: AWS Lambda, Funzioni di Azure e Google Cloud Functions

L'era moderna del computing serverless è iniziata con il lancio di AWS Lambda, una piattaforma basata sul servizio cloud di Amazon, nel 2014. Microsoft ha seguito l'esempio con Azure Functions nel 2016. Google Cloud Functions, che era in versione beta dal 2017, ha finalmente raggiunto lo stato di produzione a luglio 2018. I tre servizi presentano limitazioni, vantaggi, lingue supportate e modalità di esecuzione leggermente diverse. Rohit Akiwatkar ha una buona e dettagliata carrellata sulle distinzioni tra i tre. Anche in esecuzione è IBM Cloud Functions, che si basa sulla piattaforma open source Apache OpenWhisk.

Tra tutte le piattaforme di elaborazione serverless, AWS Lambda è la più importante e ovviamente ha avuto più tempo per evolversi e maturare. ha una copertura di aggiornamenti e nuove funzionalità aggiunte ad AWS Lambda nell'ultimo anno.

Stack serverless

Come nel caso di molti regni software, il mondo senza server ha visto l'evoluzione di pile di software, che riuniscono diversi componenti necessari per creare un'applicazione senza server. Ogni stack è costituito da un linguaggio di programmazione in cui scrivere il codice, un framework dell'applicazione che fornisce una struttura per il codice e un set di trigger che la piattaforma comprenderà e utilizzerà per avviare l'esecuzione del codice.

Sebbene sia possibile combinare e abbinare diverse offerte specifiche in ciascuna di queste categorie, esistono limitazioni a seconda del fornitore utilizzato, con alcune sovrapposizioni. Ad esempio, per i linguaggi, puoi usare Node.js, Java, Go, C # e Python su AWS Lambda, ma solo JavaScript, C # e F # funzionano in modo nativo sulle funzioni di Azure. Quando si tratta di trigger, AWS Lambda ha l'elenco più lungo, ma molti di essi sono specifici per la piattaforma AWS, come Amazon Simple Email Service e AWS CodeCommit; Google Cloud Functions, nel frattempo, può essere attivato da richieste HTTP generiche. Paul Jaworski ha uno sguardo approfondito agli stack per ciascuna delle tre grandi offerte.

Framework serverless

Vale la pena soffermarsi un po 'sulla parte del framework dell'equazione, poiché ciò definirà molto su come si finisce per costruire la propria applicazione. Amazon ha una propria offerta nativa, il Serverless Application Model (SAM) open source, ma ce ne sono anche altre, la maggior parte delle quali sono multipiattaforma e anche open source. Uno dei più popolari si chiama, piuttosto genericamente, Serverless e sottolinea che fornisce la stessa esperienza su ciascuna piattaforma supportata, ovvero AWS Lambda, Azure Functions, Google Cloud Functions e IBM OpenWhisk. Un'altra offerta popolare è Apex, che può aiutare a portare nella mischia alcune lingue altrimenti non disponibili su determinati provider.

Database senza server

Come abbiamo notato sopra, una particolarità del lavoro con codice serverless è che non ha uno stato persistente, il che significa che i valori delle variabili locali non persistono tra le istanze. Tutti i dati persistenti a cui il codice ha bisogno per accedere devono essere archiviati altrove e i trigger disponibili negli stack per i principali fornitori includono tutti i database con cui le funzioni possono interagire.

Alcuni di questi database vengono definiti a loro volta serverless. Ciò significa che si comportano in modo molto simile alle altre funzioni serverless di cui abbiamo discusso in questo articolo, con l'ovvia eccezione che i dati vengono archiviati a tempo indeterminato. Ma gran parte del sovraccarico di gestione coinvolto nel provisioning e nella manutenzione di un database viene messo da parte. Come afferma lo sviluppatore Jeremy Daly, "Tutto quello che devi fare è configurare un cluster, quindi tutta la manutenzione, l'applicazione di patch, i backup, la replica e il ridimensionamento vengono gestiti automaticamente per te". Come con le offerte di funzione come servizio, paghi solo per il tempo di elaborazione effettivamente utilizzato e le risorse vengono aumentate e diminuite secondo necessità per soddisfare la domanda.

I tre grandi provider serverless offrono ciascuno i propri database serverless: Amazon ha Aurora Serverless e DynamoDB, Microsoft ha Azure Cosmos DB e Google ha Cloud Firestore. Questi non sono gli unici database disponibili, però. Nemanja Novkovic ha informazioni su ulteriori offerte.

Elaborazione serverless e Kubernetes

I contenitori aiutano a potenziare la tecnologia serverless sotto il cofano, ma l'overhead della loro gestione è a carico del fornitore e quindi invisibile all'utente. Molti vedono l'elaborazione senza server come un modo per ottenere molti dei vantaggi dei microservizi containerizzati senza dover affrontare la loro complessità e stanno persino iniziando a parlare di un mondo post-container.

In verità, contenitori e elaborazione serverless quasi certamente coesisteranno per molti anni a venire, e in effetti le funzioni serverless possono esistere nella stessa applicazione dei microservizi containerizzati. Kubernetes, la piattaforma di orchestrazione dei container più popolare, può gestire anche l'infrastruttura serverless. Con Kubernetes, infatti, puoi integrare diversi tipi di servizi su un unico cluster.  

Serverless offline

Potresti trovare la prospettiva di iniziare con l'elaborazione serverless un po 'intimidatoria, dal momento che sembra che dovresti registrarti con un fornitore per giocare e vedere come funziona. Ma non temere: ci sono modi per eseguire codice senza server offline sul tuo hardware locale. Ad esempio, AWS SAM fornisce una funzionalità locale che ti consente di testare il codice Lambda offline. E se stai utilizzando il framework dell'applicazione Serverless, controlla serverless-offline, un plug-in che ti consente di eseguire codice localmente. Buona sperimentazione!