Serverless nel cloud: AWS, Google Cloud e Microsoft Azure

Se sei mai stato svegliato alle 3 del mattino perché un server è andato in tilt, capirai il fascino di una parola d'ordine come "serverless". La configurazione delle macchine può richiedere ore, giorni o talvolta anche settimane, quindi è necessario aggiornarle costantemente per correggere bug e falle di sicurezza. Questi aggiornamenti di solito portano problemi perché i nuovi aggiornamenti causano incompatibilità che costringono altri aggiornamenti o almeno così sembra all'infinito.

L'infinita catena di grattacapi derivanti dall'esecuzione di un server è uno dei motivi per cui le principali società cloud hanno adottato l'architettura "serverless". Sanno che il capo ha sentito le scuse - il server questo, il server quello - per troppo tempo. Se solo potessimo sbarazzarci di quei server, deve pensare il capo.

È un meraviglioso termine di vendita con l'unico problema che non è del tutto vero. Queste app sono senza server nello stesso modo in cui i ristoranti sono senza cucina. Se quello che vuoi è nel menu e ti piace come lo prepara il cuoco, sedersi in un ristorante è fantastico. Ma se vuoi un piatto diverso, se vuoi spezie diverse, beh, è ​​meglio che tu abbia la tua cucina.

Amazon, Google e Microsoft sono tre delle aziende più grandi che stanno combattendo per ospitare le applicazioni del futuro, quelle che sperano vengano scritte sulla loro API serverless e gestite attraverso il loro livello di automazione. Se le piattaforme fanno quello che vuoi e i nuovi modelli sono piuttosto generici, possono essere il modo più semplice e veloce per creare la tua app web unicorno multimiliardaria. Scrivi solo i bit cruciali della logica e la piattaforma gestisce tutti i dettagli.

Le funzioni serverless stanno diventando il collante o il linguaggio di scripting che collega tutte le funzionalità del cloud. Gli strumenti di mappatura o AI che una volta erano abbastanza indipendenti sono ora collegati tramite le funzioni serverless guidate dagli eventi. Ora più del tuo lavoro può essere risolto da richieste che si increspano e rimbalzano attraverso i vari angoli di ogni nuvola, innescandosi e innescandosi da un flusso di eventi. Se vuoi esplorare il machine learning e utilizzarlo per analizzare i tuoi dati, uno dei modi più veloci per farlo è creare un'app serverless e iniziare a inviare eventi all'angolo del machine learning del cloud.

La promessa implicita è che affettare tutto più sottile semplifica la condivisione delle risorse nel cloud. In passato, tutti creavano freneticamente nuove istanze con, diciamo, Ubuntu Server in esecuzione nella propria macchina virtuale. Tutti usavano lo stesso sistema operativo ed è stato duplicato un milione di volte sulla stessa scatola reale che fingeva di essere una dozzina o più scatole virtuali di Ubuntu. Le operazioni senza server evitano tutte queste duplicazioni, rendendo il cloud computing notevolmente più economico, soprattutto per i lavori che vengono eseguiti sporadicamente e che non hanno mai bloccato la vecchia scatola nella tua sala server climatizzata.

Ovviamente tutta questa comodità ha un costo nascosto. Se vuoi lasciare o spostare il tuo codice su un altro sito, probabilmente sarai bloccato a riscrivere la maggior parte dello stack. Le API sono diverse e, sebbene esista una certa standardizzazione attorno a linguaggi popolari come JavaScript, sono piuttosto simili a quelle proprietarie. Ci sono molte opportunità per il lock-in.

Per capire l'attrattiva delle opzioni serverless, ho passato un po 'di tempo a sviluppare alcune funzioni e curiosare tra le pile. Non ho scritto molto codice, ma questo era il punto. Ho passato più tempo a fare clic sui pulsanti e a digitare nei moduli Web per configurare tutto. Ti ricordi quando abbiamo configurato tutto con XML e poi JSON? Ora compiliamo un modulo web e il cloud lo fa per noi. Devi ancora pensare come un programmatore, però, per capire cosa sta succedendo dietro le quinte e al di fuori del tuo controllo.

AWS Lambda

AWS Lambda sta diventando il livello di script di shell per l'intero cloud di Amazon. È un sistema di base che ti consente di incorporare funzioni che rispondono a eventi che potrebbero essere generati da quasi tutte le parti della vasta infrastruttura cloud di Amazon. Se un nuovo file viene caricato su S3, potresti fare in modo che attivi una funzione che fa qualcosa di interessante con esso. Se alcuni video vengono transcodificati da Amazon Elastic Transcoder, potresti avere una funzione Lambda in attesa di essere attivata al termine. Queste funzioni, a loro volta, possono attivare altre operazioni Lambda o forse semplicemente inviare un aggiornamento a qualcuno.

Puoi scrivere funzioni Lambda in JavaScript (Node.js), Python, Java, C # e Go. Dato che questi linguaggi possono incorporare molti altri linguaggi, è del tutto possibile eseguire altro codice come Haskell, Lisp o anche C ++. (Dai un'occhiata a questa storia sulla compilazione di legacy C ++ in una libreria da utilizzare con AWS Lambda.)

La scrittura di funzioni Lambda spesso sembra molto più complessa di quanto ti aspetti perché Amazon offre così tante opzioni per la configurazione e l'ottimizzazione. Sebbene sia tecnicamente vero che puoi scrivere solo poche righe di codice e realizzare grandi cose, mi sono sentito come se dovessi dedicare più tempo alla configurazione del modo in cui il codice viene eseguito. Gran parte di questo si ottiene compilando moduli nel browser invece di digitare in file di testo. A volte sembra che abbiamo appena scambiato un editor di testo per un modulo browser, ma questo è il prezzo per mantenere tutta la flessibilità che Amazon estende all'utente Lambda.

Alcuni dei passaggi aggiuntivi sono dovuti al fatto che Amazon espone più opzioni all'utente e si aspetta di più dal primo scrittore di funzioni. Una volta che ho finito di scrivere una funzione su Google o Microsoft, potevo puntare il mio browser all'URL corretto e testarlo immediatamente. Amazon mi ha fatto fare clic per configurare il gateway API e aprire il buco giusto nel firewall.

Alla fine, tutto questo clic aggiunge uno strato di presa per mano che rende il lavoro un po 'più semplice che iniziare con un file di testo. Quando stavo creando una funzione, il browser aveva un avviso: "Questa funzione contiene librerie esterne". Ai tempi del puro Nodo, quello era qualcosa che ci si aspettava di sapere, oppure lo avrei imparato cercando su Google il messaggio di errore mentre incrocio le dita e sperando che la risposta fosse là fuori. Ora il cloud si sta affrettando ad aiutare.

Amazon ha una serie di altre opzioni che sono quasi "serverless" come AWS Lambda, se serverless significa sollevarti dalle faccende di gestione del server. Dispone di strumenti elastici come Amazon EC2 Auto Scaling e AWS Fargate che avviano e arrestano i server e AWS Elastic Beanstalk, che prende il codice caricato, lo distribuisce ai server Web e gestisce il bilanciamento del carico e il ridimensionamento. Naturalmente, con molti di questi strumenti di automazione, sei ancora responsabile della creazione dell'immagine del server.

Una delle offerte più utili è AWS Step Functions, una sorta di strumento di diagramma di flusso senza codice per la creazione di macchine a stati per modellare ciò che gli architetti software chiamano flusso di lavoro. Parte del problema è che tutte le funzioni serverless sono pensate per essere completamente prive di stato, qualcosa che funziona quando stai applicando una logica aziendale piuttosto semplice ma può essere un po 'un incubo quando stai guidando un cliente attraverso un lista di controllo o un diagramma di flusso. Vai costantemente al database per ricaricare le informazioni sul client. Le funzioni Step associano le funzioni Lambda allo stato.

Google Cloud Functions e Firebase

Se il tuo obiettivo è sbarazzarti della seccatura della configurazione dei server, Google Cloud ha una serie di servizi che offrono vari livelli di libertà da cose come la necessità di una password di root o persino l'utilizzo di una riga di comando.

A partire da Google App Engine nel 2008, Google ha lentamente aggiunto diverse opzioni "serverless" con varie combinazioni di messaggistica e trasparenza dei dati. Uno chiamato Google Cloud Pub / Sub nasconde la coda dei messaggi, quindi tutto ciò che devi fare è scrivere il codice per il produttore e il consumatore di dati. Google Cloud Functions offre calcoli basati sugli eventi per molti dei principali prodotti, inclusi alcuni strumenti di selezione e API. E poi c'è Google Firebase, un database sugli steroidi che ti consente di combinare il codice JavaScript in un livello di archiviazione dati che fornisce i dati al tuo client.

Di questi, Firebase è il più intrigante per me. Alcuni suggeriscono che i database fossero l'app serverless originale, astraendo le strutture dei dati e le attività di archiviazione su disco per fornire tutte le informazioni attraverso una porta TCP / IP. Firebase porta questa astrazione all'estremo aggiungendo anche codice JavaScript e messaggistica per fare quasi tutto ciò che potresti voler fare con l'infrastruttura lato server, inclusa l'autenticazione. Tecnicamente è solo un database, ma è in grado di gestire gran parte della logica aziendale e della messaggistica per il tuo stack. Puoi davvero farla franca con un po 'di client HTML, CSS, JavaScript e Firebase.

Potresti essere tentato di chiamare "stored procedure" i livelli JavaScript di Firebase, proprio come faceva Oracle, ma ciò mancherebbe il quadro più ampio. Il codice Firebase è scritto in JavaScript, quindi verrà eseguito in una versione locale di Node.js. Puoi incorporare gran parte della logica aziendale in questo livello perché il mondo di Node è già pieno di librerie per la gestione di questo flusso di lavoro. Inoltre ti godrai i piaceri del codice isomorfico che viene eseguito sul client, sul server e ora sul database.

La parte che ha attirato la mia attenzione è stato il livello di sincronizzazione integrato in Firebase. Sincronizzerà le copie degli oggetti dal database attraverso la rete. Il trucco è che puoi configurare la tua app client come un altro nodo di database che sottoscrive tutte le modifiche per i dati rilevanti (e solo i dati rilevanti). Se i dati cambiano in un punto, cambiano ovunque. Puoi evitare tutti i fastidi della messaggistica e concentrarti sulla semplice scrittura delle informazioni su Firebase perché Firebase le replicherà dove deve essere.

Non devi concentrarti solo su Firebase. Le funzioni Google Cloud più basilari rappresentano un approccio più semplice per incorporare codice personalizzato in tutto il cloud di Google. Al momento, Cloud Functions è in gran parte solo un'opzione per scrivere codice Node.js che verrà eseguito in un ambiente Node preconfigurato. Mentre il resto di Google Cloud Platform supporta un'ampia varietà di linguaggi, da Java e C # a Go, Python e PHP, Cloud Functions è strettamente limitato a JavaScript e Node. Ci sono stati accenni all'arrivo di altre opzioni linguistiche e non sarei sorpreso se apparissero presto.

Google Cloud Functions non raggiunge Google Cloud così profondamente come AWS Lambda raggiunge AWS, almeno a questo punto. Quando ho cercato di creare una funzione per interagire con Google Docs, ho scoperto che probabilmente avrei dovuto utilizzare l'API REST e scrivere il codice in qualcosa chiamato Apps Script. In altre parole, il mondo di Google Docs ha la sua API REST che era senza server molto prima che la parola d'ordine fosse coniata.

Vale la pena notare che Google App Engine continua ad andare forte. All'inizio, si offriva solo di avviare applicazioni Python per soddisfare la domanda di chiunque visiti il ​​sito Web, ma è stato esteso nel corso degli anni per gestire molti diversi runtime di linguaggio. Dopo aver raggruppato il codice in un eseguibile, App Engine gestisce il processo di avvio di un numero sufficiente di nodi per gestire il traffico, aumentando o diminuendo le dimensioni quando gli utenti inviano richieste.

Continuano a esserci alcuni ostacoli da tenere a mente. Come con Cloud Functions, il codice deve essere scritto in modo relativamente senza stato e deve completare ogni richiesta in un periodo di tempo limitato. Ma App Engine non getta via tutte le impalcature o dimentica tutto tra le richieste. App Engine è stato una parte importante della rivoluzione serverless e rimane il più accessibile a coloro che mantengono un piede indietro nel metodo della vecchia scuola di costruire il proprio stack in Python, PHP, Java, C # o Go.

Funzioni di Microsoft Azure

Microsoft, ovviamente, sta lavorando sodo come gli altri per assicurarsi che le persone possano fare tutte queste cose intelligenti senza server anche con il cloud di Azure. L'azienda ha creato le proprie funzioni di base per gli eventi di giocoleria, le Funzioni di Azure, e ha creato alcuni strumenti sofisticati che sono ancora più accessibili ai semi-programmatori.

Il più grande vantaggio che Microsoft potrebbe avere potrebbe essere la sua raccolta di applicazioni Office, gli ex eseguibili desktop che stanno migrando lentamente ma inesorabilmente nel cloud. In effetti, una contabilizzazione delle entrate del cloud ha messo Microsoft davanti ad Amazon, in parte concentrando parte delle entrate di Office nella rubrica effimera del "cloud".

Uno dei migliori esempi della documentazione di Funzioni di Azure mostra come è possibile attivare una funzione cloud quando qualcuno salva un foglio di calcolo in OneDrive. All'improvviso i piccoli elfi nella nuvola si animano e fanno le cose al foglio di calcolo. Questo è destinato a essere una manna dal cielo per i negozi IT che supportano i team che amano i loro fogli di calcolo Excel (o altri documenti di Office). Possono scrivere Funzioni di Azure per fare praticamente qualsiasi cosa. Spesso pensiamo che HTML e il Web siano l'unica interfaccia per il cloud, ma non c'è motivo per cui non possa avvenire tramite formati di documenti come Microsoft Word o Excel.