Funkce Cloud vs Kubernetes Engine

Aktualizováno srpna 2019.

Počítačová sestava společnosti Google nabízí spoustu skvělých možností. Dvě z nejlepších technologií na GCP jsou Kubernetes Engine a Cloud Functions. Oba jsou výkonní a jako vývojář je snadné nastavení funkcí Cloud Functions, protože z mých rukou to vyžaduje hodně administrativní práce. Tato administrativní práce, i když deklarativní soubory yaml, je důležitým aspektem při konfiguraci modulu Kubernetes Engine.

Původním předpokladem pro tento článek byl vývojář, který se mě jednoduše ptal: „Kdy byste si vybrali Kubernetes před cloudovými funkcemi?“. Je to otázka, kterou jsem od té doby s oběma těmito otázkami hodně zvažoval, a proto si myslím, že nejlepším způsobem, jak to zvládnout, je výchozí nastavení cloudových funkcí a vysvětlit případy, kdy by byl Kubernetes Engine lepší volbou. I když nemám katalogizovat každý důvod, zde je několik nejlepších, kteří hrají při výběru Kubernetes.

3 jazyky to neřežou

Při používání cloudových funkcí v tuto chvíli máte na výběr pouze tři vývojová prostředí, a to Node.js, Python a Go. Jedná se o neuvěřitelnou technologii a je výkonná.

Kubernetes Engine vám nabízí svobodu, protože moduly, které vytváříte, jsou izolovaná prostředí, která mohou spouštět jakýkoli jazyk a runtime. Možná jste obchod .NET a potřebujete využít C #. Bavil jsem myšlenku používat knihovny Core Foundation od společnosti Apple ve službě. Tato služba bude muset být napsána ve Swift. To jsou jen některé z případů, které mohou zahrnovat použití jiného jazyka a sady rámců. V budoucnu bude Cloud Functions podporovat více těchto technologií, ale to bude trvat docela několik let, než bude ve výrobě.

Rychlost

Rychlost a myslím hned teď, ne za 200 ms. To je zásadní rozdíl. Jsou případy, kdy chcete pouze získat data a někam je posunout. Pokud se funkce Cloud někdy nepoužívá, jsou všechny instance této funkce vypnuty. To je dobrá věc, neplatíte nic, pokud ji nepoužíváte. Mohou však nastat případy, kdy nechcete čekat na studený čas začátku. Pokud to není možnost, pak Kubernetes bude mít záda, jste již klastr a můžete mít pro každou konkrétní službu spuštěno několik lusků připravených k tomu, aby v případě potřeby skočili do akce.

Těžké zpracování a velké pracovní zatížení

Funkce jsou skvělé pro propojení různých služeb dohromady. Nejsou však určeny pro těžké nebo dlouhodobé úkoly. Ve srovnání s programy Compute, Kubernetes a App Engine mají málo CPU a paměti. Mají mnohem rychlejší časový limit po 5 minutách, což znamená, že práce musí být provedena rychle a musíte se z funkce rychle vrátit.

Navíc s těžkými břemeny nezvládne dobře. Pokud se chystáte dělat velké množství zpracování obrazu nebo analýzy velkých dat v cloudové funkci, narazíte na potíže. S Kubernetes Engine máte možnost škálovat lusky na základě různých parametrů, jako je vysoký procesor, paměť atd. U cloudových funkcí nemáte možnost vybrat CPU a alokace paměti je ve srovnání s ostatními výpočetními službami docela nízká.

Invocation Madness

Kolikrát vyvoláváte funkci? Je to sto nebo stotisíckrát denně? Je to jiné, pokud se vaše cloudová funkce spoléhá na spouštěč databáze firebase, v tomto okamžiku se vyplatí vypořádat se s funkcí Cloud. Pokud se však pokoušíte vytvořit službu, která bude ověřovat e-maily nebo jednoduše přijímat obrovské množství dat, stojí za zvážení Kubernetes. Nejprve můžete mít vždy spuštěno několik lusků, takže snižujete latenci služby. Zadruhé, u Cloud Functions je součástí ceny kolikrát je funkce vyvolána. S Kubernetes můžete během špičky škálovat až na více případů, než měřítko zpět dolů. Nezáleží na tom, zda je vaše služba vyvolána deset tisíckrát, v tomto okamžiku platíte za počet spuštěných uzlů a modulů, což sníží vaše celkové náklady.

Mikroservisní komunikace

Konečně máme komunikaci mezi jednotlivými službami. Cloudové funkce mají některé opravdu silné spouštěče pro Firebase i GCP. Můžete například nastavit spouštěč Cloud Pub / Sub nebo spustit jinou funkci odesíláním souborů do cloudového úložiště. Kromě toho máme spouštěče HTTP, které jsou užitečné při vytváření webových háčků.

Co když však máte několik služeb, které nemusí být spouštěny, ale chcete, aby spolu mluvily? V tuto chvíli není mluvení a komunikace mezi službami při používání cloudových funkcí skutečně efektivním přístupem. Přemýšlejte o samotném procesu nasazení. U cloudových funkcí je to těžkopádné, když začnete aktualizovat spoustu služeb na Google Cloud. Mezitím s Kubernetes jednoduše nahráváte své konfigurace a Kubernetes zajišťuje, že prostředí pro vás běží správně. Ano, před vytvořením souborů yaml je ještě mnohem více práce, ale pak je velmi snadné udržovat tuto infrastrukturu v provozu.

Nakonec to záleží na tom, co stavíte a jaké jsou vaše potřeby. Pokud však žonglujete s myšlenkou zavolat více spouštěčů funkcí HTTP založených na jednom volání do cloudových funkcí, měli byste ustoupit a zeptat se sami sebe, zda je Kubernetes lepší volbou. pro 90% komunikaci, která se vyskytuje.

Tento seznam není vyčerpávající a je rozhodně otevřen k výkladu. Opět je to založeno na vašich potřebách jako společnosti a organizace. Kubernetes stále roste rychlým tempem a ne každý má po ruce vývojáře / týmy, kteří pro ně mohou řídit projekt Kubernetes Engine. Na druhou stranu, možná máte spoustu .NET Core služeb, které chcete nasadit, a Cloud Functions to prostě nezastaví, protože musíte použít Node.js, Python nebo Go. Vždy stojí za to ustoupit a přemýšlet o různých technologiích ve hře ao tom, jak je můžeme využít, aby byly co nejproduktivnější.

James Wilson je vývojář budující distribuované systémy využívající Go a Google Cloud. Je také autorem Pluralsight a jeho kurzy si můžete prohlédnout zde.