Funzioni cloud vs Kubernetes Engine

Aggiornato agosto 2019.

La line-up di calcolo di Google offre molte ottime scelte. Due delle migliori tecnologie su GCP sono Kubernetes Engine e le funzioni cloud. Entrambi sono potenti e come sviluppatore è facile impostare le funzioni cloud come predefinite perché mi prende molto lavoro amministrativo dalle mie mani. Questo lavoro amministrativo, sebbene i file dichiarativi yaml sia un aspetto importante per la configurazione di Kubernetes Engine.

La premessa originale di questo articolo era uno sviluppatore che mi chiedeva semplicemente "quando sceglieresti Kubernetes rispetto alle funzioni cloud?". È una domanda che ho preso molto in considerazione da quando lavoro con entrambi, e quindi penso che il modo migliore per gestirlo sia di default alle funzioni cloud e spiegare i casi in cui Kubernetes Engine sarebbe una scelta migliore. Anche se non catalogo tutti i motivi, ecco i primi che giocano nella scelta di Kubernetes.

3 lingue non lo taglieranno

Al momento, quando si utilizzano le funzioni cloud, sono disponibili solo tre ambienti di sviluppo tra cui Node.js, Python e Go. Questa è una tecnologia incredibile ed è potente.

Kubernetes Engine ti offre la libertà perché i pod che stai creando sono ambienti isolati in grado di eseguire qualsiasi lingua e runtime. Potresti essere un negozio .NET e devi sfruttare C #. Ho intrattenuto l'idea di utilizzare le librerie Core Foundation di Apple in un servizio. Tale servizio dovrà essere scritto in Swift. Questi sono solo alcuni dei casi che potrebbero comportare l'utilizzo di una lingua e di una serie di framework diversi. In futuro, le funzioni cloud supporteranno molte di queste tecnologie, ma ci vorranno alcuni anni prima che sia in produzione.

Velocità

Velocità, e intendo proprio ora, non tra 200 ms. Questa è una differenza fondamentale. Ci sono casi in cui vuoi solo ottenere dati e spingerli da qualche parte. Se per qualche tempo una funzione cloud non viene utilizzata, tutte le istanze di tale funzione vengono chiuse. Questa è una buona cosa, non stai pagando nulla se non lo stai usando. Tuttavia, potrebbero esserci casi in cui non vuoi aspettare l'ora di inizio a freddo. Se questa non è un'opzione, Kubernetes avrà le spalle, sei già un cluster e puoi avere un paio di pod in esecuzione per quel particolare servizio pronto a entrare in azione quando se ne presenta la necessità.

Elaborazione pesante e grandi carichi di lavoro

Le funzioni sono ottime per connettere vari servizi insieme. Tuttavia, non sono pensati per compiti pesanti o di lunga durata. Sono a corto di CPU e memoria rispetto a Compute, Kubernetes e App Engine. Hanno un tempo di timeout molto più rapido a 5 minuti, il che significa che il lavoro deve essere svolto rapidamente ed è necessario tornare rapidamente dalla funzione.

Inoltre, non gestisce bene i carichi pesanti. Se hai intenzione di eseguire molte elaborazioni di immagini o analisi di big data su una funzione cloud, avrai dei problemi. Con Kubernetes Engine hai la possibilità di ridimensionare i pod in base a vari parametri come CPU elevata, memoria, ecc. Con le funzioni cloud non hai la possibilità di selezionare la CPU e l'allocazione della memoria è piuttosto bassa rispetto agli altri servizi di calcolo.

Invocazione Follia

Quante volte stai invocando la funzione? Sono cento o centomila volte in un giorno? È diverso se la funzione cloud si basa su un trigger di database firebase, a quel punto vale la pena accontentarsi della funzione cloud. Tuttavia, se stai cercando di creare un servizio che sta per convalidare le email o semplicemente ingerire una grande quantità di dati, vale la pena considerare Kubernetes. Innanzitutto, puoi sempre avere alcuni pod in esecuzione in modo da ridurre la latenza nel servizio. In secondo luogo, con le funzioni cloud parte del prezzo è quante volte viene invocata una funzione. Con Kubernetes puoi ridimensionare più istanze durante le ore di punta piuttosto che ridimensionarle. Non importa se il tuo servizio viene invocato diecimila volte, a questo punto stai pagando il numero di nodi e pod in esecuzione che ridurranno i costi complessivi.

Microservice Communication

Infine, abbiamo una comunicazione da servizio a servizio. Le funzioni cloud hanno alcuni trigger davvero potenti sia per Firebase che GCP. Ad esempio, è possibile impostare un trigger Cloud Pub / Sub o attivare un'altra funzione caricando i file su Cloud Storage. Inoltre, abbiamo trigger HTTP utili per la creazione di hook Web.

Tuttavia, cosa succede se hai diversi servizi che non hanno bisogno di essere attivati, ma vuoi solo che parlino tra loro? Al momento, parlare e comunicare tra i servizi non è davvero un approccio efficace quando si utilizzano le funzioni cloud. Pensa solo al processo di distribuzione. Con le funzioni cloud questo è complicato quando inizi ad aggiornare un sacco di servizi su Google Cloud. Nel frattempo, con Kubernetes stai semplicemente caricando le tue configurazioni e Kubernetes ti assicura che l'ambiente funzioni correttamente per te. Sì, c'è molto altro da fare in anticipo per creare i file yaml, ma è semplicissimo mantenere l'infrastruttura attiva e funzionante.

In definitiva, dipende da cosa stai costruendo e da quali sono le tue esigenze, ma se stai manipolando l'idea di chiamare più trigger di funzioni HTTP basati su una chiamata nelle tue funzioni cloud, dovresti fare un passo indietro e chiederti se Kubernetes è un'opzione migliore per l'intercomunicazione al 90% che si sta verificando.

Questo elenco non è esaustivo ed è sicuramente aperto all'interpretazione. Ancora una volta, si basa sulle tue esigenze come azienda e organizzazione. Kubernetes sta ancora crescendo a un ritmo rapido e non tutti hanno a disposizione uno sviluppatore / team in grado di gestire un progetto di Kubernetes Engine per loro. D'altra parte, forse hai molti servizi .NET Core che vuoi distribuire e le funzioni cloud non lo taglieranno perché devi usare Node.js, Python o Go. Vale sempre la pena fare un passo indietro e pensare alle diverse tecnologie in gioco e al modo in cui possiamo sfruttarle per essere il più produttive possibile.

James Wilson è uno sviluppatore che sviluppa sistemi distribuiti utilizzando Go e Google Cloud. È anche autore di Pluralsight e puoi vedere i suoi corsi qui.