Funcții Cloud față de motorul Kubernetes

Actualizat august 2019.

Linia de calcul a Google oferă multe opțiuni grozave. Două dintre cele mai bune tehnologii de pe GCP sunt Kubernetes Engine și Cloud Functions. Ambele sunt puternice, iar în calitate de dezvoltator, este ușor de implicit la funcțiile Cloud, deoarece îmi ia multă muncă administrativă din mâinile mele. Această lucrare administrativă, deși fișierele yaml declarative este un aspect important pentru configurarea Kubernetes Engine.

Premisa originală pentru acest articol a fost un dezvoltator care mă întrebă pur și simplu, „când ai alege Kubernetes peste funcțiile Cloud?”. Este o întrebare pe care am considerat-o foarte mult de când am lucrat cu ambele, și, prin urmare, cred că cea mai bună modalitate de a face acest lucru este implicit la funcțiile Cloud și să explic cazurile în care Kubernetes Engine ar fi o alegere mai bună. Deși nu cataloghez fiecare motiv, iată câteva dintre cele mai importante care se joacă în alegerea Kubernetes.

3 limbi nu o vor tăia

Când utilizați funcțiile Cloud în momentul de față, aveți doar trei medii de dezvoltare din care să alegeți și acesta este Node.js, Python și Go. Aceasta este o tehnologie incredibilă și este puternică.

Kubernetes Engine îți oferă libertate, deoarece podurile pe care le creezi sunt medii izolate care pot rula orice limbă și timp de rulare. S-ar putea să fiți un magazin .NET și trebuie să folosiți C #. Mi-a plăcut ideea de a folosi bibliotecile Core Foundation de la Apple într-un serviciu. Acest serviciu va trebui să fie scris în Swift. Acestea sunt doar câteva dintre cazurile care ar putea implica utilizarea unui limbaj diferit și a unui set de cadre. În viitor, funcțiile Cloud vor susține mai multe dintre aceste tehnologii, dar asta va dura destul de câțiva ani înainte de a fi în producție.

Viteză

Viteză, și mă refer chiar acum, nu în 200 ms. Aceasta este o diferență fundamentală. Există cazuri când doriți doar să obțineți date și să le împingeți undeva. Dacă nu se folosește o funcție Cloud pentru ceva timp, toate instanțele acestei funcții sunt oprite. Acesta este un lucru bun, nu plătiți nimic dacă nu îl utilizați. Cu toate acestea, pot exista cazuri în care pur și simplu nu doriți să așteptați momentul acela de pornire rece. Dacă aceasta nu este o opțiune, atunci Kubernetes vă va avea spatele, sunteți deja un grup și puteți avea câteva câștiguri care funcționează pentru acel serviciu special, gata să intre în acțiune atunci când apare nevoia.

Prelucrare grea și sarcini mari de muncă

Funcțiile sunt excelente pentru conectarea diferitelor servicii. Cu toate acestea, acestea nu sunt destinate pentru sarcini de executare grele sau lungi. Acestea sunt scurte pentru CPU și memorie în comparație cu Calcul, Kubernetes și App Engine. Au un timp de timp mult mai rapid la 5 minute, ceea ce înseamnă că munca trebuie să fie făcută rapid și trebuie să reveniți din funcție rapid.

În plus, nu suportă bine sarcinile mari. Dacă veți face o mulțime de procesare de imagini sau analize de date mari pe o funcție de cloud, veți avea probleme. Cu Kubernetes Engine aveți capacitatea de a scala pod-urile pe baza diferiților parametri, cum ar fi procesorul înalt, memoria etc.

Invocare nebunie

De câte ori invocați funcția? Este o sută sau o sută de mii de ori într-o zi? Este diferit dacă funcția dvs. de cloud se bazează pe un declanșator al bazei de date pentru firebase, în acel moment merită să vă acordați pentru funcția Cloud. Cu toate acestea, dacă încercați să construiți un serviciu care va valida e-mailuri sau pur și simplu să ingerați o cantitate masivă de date, atunci merită să luați în considerare Kubernetes. În primul rând, puteți avea întotdeauna câteva pod-uri în funcție, astfel încât să reduceți latența la serviciu. În al doilea rând, cu funcțiile Cloud, o parte din preț este de câte ori este invocată o funcție. Cu Kubernetes puteți scala până la mai multe cazuri în timpul perioadei de vârf decât scala înapoi. Nu contează dacă serviciul dvs. este invocat de zece mii de ori, în acest moment plătiți pentru numărul de noduri și poduri pe care le executați, ceea ce vă va reduce costurile generale.

Comunicare microservice

În sfârșit, avem o comunicare de la serviciu la serviciu. Funcțiile Cloud au unele declanșatoare cu adevărat puternice atât pentru Firebase, cât și pentru GCP. De exemplu, puteți configura un declanșator Cloud Sub / Sub sau declanșa o altă funcție încărcând fișiere în Cloud Storage. În plus, avem declanșatoare HTTP care sunt utile pentru crearea de cârlige web.

Cu toate acestea, ce se întâmplă dacă aveți mai multe servicii care nu trebuie să fie declanșate, dar doriți doar să vorbească între ele? În prezent, discuțiile și comunicările între servicii nu sunt o abordare eficientă atunci când utilizați funcțiile Cloud. Gândiți-vă doar la procesul de implementare. Cu funcțiile Cloud, acest lucru este greoi pe măsură ce începeți să actualizați o grămadă de servicii pe Google Cloud. Între timp, cu Kubernetes încărcați pur și simplu configurațiile dvs. și Kubernetes vă asigură că mediul funcționează corect pentru dvs. Da, există mult mai multă lucrare în avans pentru a crea fișierele yaml, dar atunci este super simplu să menții acea infrastructură funcțională.

În cele din urmă, depinde de ceea ce construiți și care sunt nevoile dvs., dar dacă jucați ideea de a apela mai multe declanșatoare de funcții HTTP bazate pe un apel în funcțiile dvs. Cloud, ar trebui să faceți un pas înapoi și să vă întrebați dacă Kubernetes este o opțiune mai bună. pentru intercomunicarea de 90% care are loc.

Această listă nu este exhaustivă și este cu siguranță deschisă pentru interpretare. Din nou, se bazează pe nevoile dvs. de companie și organizație. Kubernetes continuă să crească într-un ritm rapid și nu toată lumea are un dezvoltator / echipă la îndemână care poate gestiona un proiect Kubernetes Engine pentru ei. Pe de altă parte, poate aveți o mulțime de servicii .NET Core pe care doriți să le implementați, iar funcțiile Cloud nu o vor tăia, deoarece trebuie să utilizați Node.js, Python sau Go. Merită întotdeauna să facem un pas înapoi și să ne gândim la diferitele tehnologii în joc și cum le putem susține pentru a fi cât mai productive.

James Wilson este un dezvoltator care construiește sisteme distribuite folosind Go și Google Cloud. Este, de asemenea, un autor Pluralsight și puteți vedea cursurile sale aici.