Cloud Functions proti Kubernetes Engine

Posodobljeno avgust 2019.

Googlova sestava računov ponuja veliko odličnih možnosti. Dve najboljši tehnologiji na GCP sta Kubernetes Engine in Cloud Functions. Oba sta močna in kot razvijalec je privzeto privzeto delovanje funkcij v oblaku, saj mi vzame veliko administrativnega dela. To administrativno delo, čeprav deklarativne datoteke yaml, je pomemben vidik pri konfiguriranju Kubernetes Engine.

Prvotna premisa tega članka me je razvijalca preprosto vprašala, "kdaj bi izbrali Kubernetes nad oblačnimi funkcijami?". To je vprašanje, o katerem sem že veliko razmišljal, odkar sem sodeloval z obema, zato mislim, da je najboljši način, da to rešim, da privzamete funkcije v oblaku in razložim primere, ko bi bil Kubernetes Engine boljša izbira. Čeprav ne katalogiziram vseh razlogov, je tu nekaj najboljših, ki igrajo izbiro Kubernetes.

3 jeziki ga ne bodo zmanjšali

Trenutno uporabljate funkcije v oblaku, med katerimi lahko izbirate le tri razvojna okolja in to so Node.js, Python in Go. To je neverjetna tehnologija in je močna.

Kubernetes Engine vam nudi svobodo, saj so stroki, ki jih ustvarjate, izolirana okolja, ki lahko izvajajo kateri koli jezik in čas izvajanja. Morda ste .NET trgovina in morate izkoristiti C #. Razvedril sem se o zamisli, da bi Apple uporabil knjižnice Core Foundation v storitvi. To storitev bo treba napisati v Swiftu. To je le nekaj primerov, ki bi lahko vključevali uporabo drugega jezika in nabora okvirov. Funkcije v oblaku bodo v prihodnosti podpirale več teh tehnologij, vendar bo minilo kar nekaj let, preden bo v proizvodnji.

Hitrost

Hitrost, in to trenutno mislim, ne v 200 ms. To je bistvena razlika. Obstajajo primeri, ko želite le dobiti podatke in jih nekam potisniti. Če funkcija oblaka ne uporablja nekaj časa, potem se vsi primeri te funkcije ustavijo. To je dobra stvar, nič ne plačujete, če je ne uporabljate. Lahko pa obstajajo primeri, ko ne želite čakati na ta hladni čas začetka. Če to ni možnost, vam bo Kubernetes na hrbtu, vi ste že grozd in boste lahko pripravili par podstavkov za to storitev, ki bo pripravljena začeti delovati, ko se pojavi potreba.

Močna predelava in velike delovne obremenitve

Funkcije so odlične za povezovanje različnih storitev skupaj. Vendar niso namenjene težkim ali dolgo tekaškim nalogam. V primerjavi s Compute, Kubernetes in App Engine imajo kratke CPU in pomnilnik. Imajo veliko hitrejši čas zakasnitve v 5 minutah, kar pomeni, da je treba delo opraviti hitro in hitro se morate vrniti s funkcije.

Poleg tega ne prenese dobro obremenitev. Če boste na oblačni funkciji opravili veliko obdelave slik ali analize velikih podatkov, boste naleteli na težave. S programom Kubernetes Engine lahko določite lestvico strokov na podlagi različnih parametrov, kot so visok CPU, pomnilnik itd. Z oblačnimi funkcijami nimate možnosti izbire CPU-ja, razporeditev pomnilnika pa je precej nizka v primerjavi z drugimi računskimi storitvami.

Poziv norost

Kolikokrat prikličete funkcijo? Ali je to sto ali sto tisočkrat na dan? Drugače je, če se vaša funkcija v oblaku opira na sprožilec baze podatkov ognjene baze, takrat se je vredno prilagoditi funkciji v oblaku. Če pa želite ustvariti storitev, ki bo potrjevala e-poštna sporočila ali preprosto zaužila ogromno količino podatkov, potem je vredno razmisliti o Kubernetesu. Prvič, vedno lahko deluje nekaj podstavkov, tako da zmanjšate zamude pri storitvi. Drugič, del funkcij v oblaku je del cene, kolikokrat se prikliče funkcija. S Kubernetesom lahko v času največjih pik spremenite velikost na več primerkov kot lestvica nazaj navzdol. Ni važno, ali se vaša storitev prikliče deset tisoč krat, v tem trenutku plačujete za število vozlišč in strokov, ki jih izvajate, kar bo zmanjšalo vaše splošne stroške.

Komunikacija mikroservisov

Končno imamo komunikacijo med uslugo. Oblačne funkcije imajo nekaj resnično močnih sprožilcev tako za Firebase kot za GCP. Na primer, lahko nastavite sprožilec Cloud / Sub ali sprožite drugo funkcijo z nalaganjem datotek v Cloud Storage. Poleg tega imamo sprožilce HTTP, ki so koristni za ustvarjanje spletnih kljuk.

Kaj pa, če imate več storitev, ki jih ni treba zagnati, ampak želite, da se med seboj pogovarjajo? Trenutno pogovarjanje in komuniciranje med storitvami res ni učinkovit pristop pri uporabi funkcij v oblaku. Pomislite samo na postopek uvajanja. Z Cloud Functions je to nerodno, ko začnete posodabljati kup storitev v Googlu Cloud. Medtem s Kubernetesom preprosto nalagate svoje konfiguracije in Kubernetes zagotavlja, da okolje deluje primerno za vas. Da, vnaprej je veliko več dela pri ustvarjanju datotek yaml, toda potem je zelo enostavno vzdrževati in delovati v tej infrastrukturi.

Navsezadnje je odvisno od tega, kaj gradite in kakšne so vaše potrebe, če pa žonglirate nad zamislijo, da na podlagi enega klica v vaše Cloud Functions pokličete več sprožilcev funkcij HTTP, potem se raje umaknite in se vprašajte, ali je Kubernetes boljša možnost za 90-odstotno medsebojno komuniciranje.

Ta seznam ni izčrpen in je vsekakor odprt za razlago. Ponovno temelji na vaših potrebah podjetja in organizacije. Kubernetes še vedno hitro raste in nima vsak pri roki razvijalca / ekipe, ki zanje lahko upravlja projekt Kubernetes Engine. Po drugi strani pa imate morda veliko .NET Core storitev, ki jih želite uvesti, oblačne funkcije pa jih preprosto ne bodo zmanjšale, ker morate uporabljati Node.js, Python ali Go. Vedno se splača narediti korak nazaj in razmisliti o različnih tehnologijah, ki jih igramo, in kako jim lahko omogočimo, da so čim bolj produktivni.

James Wilson je razvijalski gradnik distribuiranih sistemov z uporabo Go in Google Cloud. Je tudi avtor Pluralsight in njegove tečaje si lahko ogledate tukaj.