Serverless: Zkuste to bez serverů

30. 11. 2019

Sdílet

 Autor: © boscorelli - Fotolia.com
Architektura serverless představuje nový programovací model, který výrazně odstraňuje složitosti nasazení a nabízí skvělou ekonomiku – v cloudu, nebo dokonce i na vašich vlastních serverech. Co byste o tom měli vědět?

Starý vtip říká, že cloud je jen počítač někoho jiného. Je to pravda, ale s výjimkou, že je to počítač, který se pravděpodobně lépe provozuje a záplatuje než ten váš.

Nemuseli jste za něj zaplatit, můžete si ho pronajmout ve vteřině a nabízí služby, které vám umožňují pracovat na mnohem vyšší úrovni, než kdybyste měli server svůj a instalovali na něj software sami.

Cloud je vhodný způsob škálování a úspor nákladů, ale ještě důležitější jsou abstrakce, které představuje: služby úložišť a datové služby namísto pevných disků, aplikační služby namísto virtuálních počítačů a softwarově řízené sítě namísto fyzických karet a kabelů, které byste museli propojovat.

Jak se cloud přesouvá z oblasti IaaS na SaaS a PaaS, přidávají se monitorování, analýzy dat a strojové učení stejně jako vývojářská prostředí a aplikační služby, úroveň abstrakce stále roste.

 

Přístup serverless

IaaS odstraňuje potřebu mít fyzické datové centrum, ale ne celou infrastrukturu, uvádí technologický ředitel platformy Azure Mark Russinovich.

„Stále musíte vybrat operační systém, nasadit ho, vytvořit vhodné virtuální servery, nakonfigurovat síť na virtuálních serverech, škálovat virtuální server, zjistit, jak nasadit software do serverů, aktualizovat software, monitorovat tento software...“

Dokonce i v případě PaaS „většina služeb vyžaduje, abyste požadovali úroveň provisioningu s nějak dimenzovanou jednotkou, což mohou být dokonce i servery, a stále musíte zjistit, kolik jich potřebujete a jak je můžete nejúčinněji použít – musíte se zabývat škálováním. Pořád zde existují úkoly, které se netýkají přímo toho, co opravdu chcete dělat – vaše aplikace má obsluhovat požadavky.“

Přístup serverless pokračuje v abstrakci ještě dále. Ano, váš kód stále běží na serverech, ale jsou to servery, o které se nemusíte starat.

Russinovich považuje tento přístup za „novou generaci využívání počítačů, kde se bude už všechno zajišťovat, protože z toho plyne maximální hodnota pro organizaci, která chce vyvíjet řešení a nemusí se starat o všechny tyto detaily, o něž se postará platforma.“

 

Principy fungování

Serverless přístup je programování založené na událostech s mikrofakturací, nebo  jinak vyjádřeno, programování založené na událostech nebo funkcích v podobě služby.

Například AWS Lambda jsou anonymní funkce, které mohou slučovat a vytvářet další funkce. Ekvivalentem jsou IBM OpenWhisk, Microsoft Azure Functions nebo Google Cloud Functions.

„Serverless doslova znamená, že se nestaráte o servery,“ vysvětluje Russinovich, ale dodává, že definice musí obsahovat také programovací model a mikrofakturaci. „Odstranil jsem servery. Neříkám, kolik serverů nebo jednotek chci, jednoduše používám prostředky a platím za ně. Neplatím předem, platím za zdroje, když je používám.“

„Přístup serverless je založený na událostech, je to využívání počítačů na základě spouštěčů a vyžaduje to, aby zahájení odezvy na spouštěč nebo událost bylo velmi rychlé, jinak by mohl zdroj běžet stále,“ tvrdí Russinovich.

Protože se platforma serverless stará o provisioning a škálování automaticky, budete-li chtít optimalizovat využívání zdrojů, uděláte to zefektivněním svého kódu. To je velmi odlišný ekonomický model od IaaS, a dokonce i od většiny PaaS.

 

Spouštěče mění přístup

Kód serverless neběží stále. Jen když se spustí událostí, která odpovídá vámi nastavenému pravidlu. Spouštěč, jenž nastavujete, může být jiným kódem volajícím vaši serverless funkci jako například webová aplikace, ale může to být také něco, co se stane v připojené službě – „vše od souboru uloženého do účtu úložiště přes tiket otevřený v systému CRM až po zprávu, která se objevila v systému,“ vysvětluje Russinovich.

Výstup funkce lze také odeslat do jiné služby, takže byste ji mohli použít ke spuštění rozpoznávání snímků či videí a odesílání výsledků do databáze nebo k odeslání upozornění zákaznickému servisu pomocí analýzy nálad na Twitteru či k řízení chatbota.

„Například chci zahájit pracovní postup, když někdo řekne, že chce naplánovat schůzku. Azure Functions lze integrovat se službami cloudu, s databázemi a službami pro ukládání dat, se zprávami, se středisky událostí a také s gateway konektory, které umožňují integraci do vašeho SQL serveru ve vaší infrastruktuře,“ tvrdí Russinovich.

Používání funkcí serverless k transformaci dat a připojení různých služeb je ideální pro provoz mobilních aplikací. Například Azure Logic Apps (pro vývojáře) a Flows and Power Apps (pro pokročilé uživatele) využívají Azure Functions, funkce AWS Lambda zase lze volat přes Amazon Mobile SDK pro iOS a Android.

Je to také jednosměrný způsob, jak kombinovat služby z různých cloudů a lepit rozličné systémy dohromady pomocí serverless funkcí, ať už je to stahování souborů z Dropboxu do prostředí Dynamics 365 nebo přesun souborů pomocí AWS Lambda z úložiště Amazon S3 do Google App Engine prostřednictvím rozhraní Cloud Endpoints API.

Velkým přínosem pro vývojáře je rychlost a jednoduchost, která umožní rychlejší vývoj a dobře se hodí k přechodu na prostředí DevOps či pro nepřetržitou integraci a nasazování.

„Serverless zajišťuje, že se vývojáři ohledně svého kódu musejí starat jen o logiku aplikace,“ upozorňuje Russinovich. „Mohou se zaměřit jen na logiku a psaní svého kódu.“

Neexistuje žádný další podpůrný kód, který by souvisel s provozem virtuálních počítačů nebo prostředím PaaS. Tím může firma získat například rychlejší uvedení řešení na trh. Lze napsat kus kódu, nasadit ho a mít ho v provozu doslova za několik sekund nebo minut od vytvoření.

 

Serverless mimo cloud

Serverless nabídky jako Lambda nebo Functions však nejsou jediným místem, kde toto na událostech založené programování přinese užitek.

„Programovací model založený na událostech je velmi mocný a bude existovat i mimo tento svět bez serverů a mikrofakturací,“ tvrdí Russinovich. Podle něj s dozráváním tohoto modelu bude možné používat stejný kód serverless funkcí napsaný v rámci nabídek PaaS, či dokonce IaaS, nebo až přímo ve firemní infrastruktuře.

Například v případě Microsoftu to bude přes Azure Stack, anebo to dnes lze udělat pomocí runtimu Functions ve Windows Containeru.

„Uvnitř Azure Functions ale ztratíte určitou kontrolu,“ vysvětluje Russinovich. „Existují některé scénáře, kde může být tento model mikrofakturací plateb za využití nákladnější. Pokud jsou počáteční náklady na spuštění kódu vysoké, protože využívá velké množství kódu, který nelze poskytnout pomocí Functions, potom je čas spouštění dlouhý.“

Řešením může být použití PaaS a zpřístupnění tohoto kódu, tak aby událostmi spouštěný kód mohl reagovat velmi rychle.

Zatím je serverless nejefektivnější v cloudu, protože pod kapotou jsou virtuální stroje a další infrastruktura, která musí být zajištěná.

Poskytovatelé hyperškálovaných cloudů, jako jsou Azure a AWS, to mají tak dobře zautomatizované, že pro ně neexistují žádné skutečné náklady při využití pro úlohy serverless, které se mohou provozovat v rámci zdrojů virtuálních počítačů, jež se aktuálně nepoužívají pro jiné cloudové služby.

Mohli byste zjistit, že je těžší dosáhnout stejného přínosu, pokud byste se pokusili provozovat prostředí serverless u sebe (pravděpodobně nebudete mít takovou kapacitu a stále budete muset zajistit fungování infrastruktury), ale časem se tento model pravděpodobně rozšíří.

Serverless je poměrně nová myšlenka, ale již se používá ve velkých společnostech, jako je například Coca-Cola, která využívá AWS Lambda a open source Serverless Framework ke snížení nákladů na IT.

Abstrakce jako serverless jsou částečně důvodem, proč společnost Atlassian přesouvá své služby jako Jira a Confluence ze svých datových center do AWS.

„Příslibem je, že je můžeme využít ke zrychlení našeho vývoje, a hodláme využít více těchto služeb. Lambda je velmi atraktivní pro případy, kdy máte cokoliv, co je asynchronní, kde musíte spouštět nějakou úlohu,“ vysvětluje Sri Viswanath, technologický ředitel společnosti Atlassian.

Vlastnosti přístupu serverless se stále vyvíjejí, poznamenává Viswanath. „Lambda zatím nedisponuje plnou výbavou, ale už se hodí pro malé služby, které běží několik milisekund. Mikroslužby však musejí běžet déle, takže v prostředí Lambda k tomu musíte spustit virtuální počítač. Je to dobré pro asynchronní události, jež musíte zpracova, a které přicházejí jedna za druhou.“

Na těchto omezeních se pracuje (Azure Functions umožňují dedikovaným aplikacím hosting pro déle trvající funkce) a Viswanath věří, že jednoduchost tohoto modelu bude stále atraktivnější.

„Domnívám se, že časem se tento koncept nestarání se o servery stane velmi důležitým. Serverless umožňuje nezajímat se o nasazování na server. Napíšete svůj kód, uložíte ho a je hotovo,“ uzavíráViswanath.

 

Jak serverless mění vývoj aplikací

Existuje mnoho různých definic pojmu serverless. Je to známka časné fáze životního cyklu této technologie, ale obecně řečeno, většina lidí zapojených do tohoto hnutí by souhlasila s tím, že „serverless“ odkazuje na architekturu, zatímco FaaS popisuje klíčový mechanismus, kterým vývojář implementuje byznys logiku v této architektuře.

Ve službě AWS S3 například můžete spustit statickou webovou stránku HTML, která by se kvalifikovala jako serverless (architektura). Bez byznys logiky, která by reagovala na interakce uživatelů s přizpůsobenými daty, by však taková stránka nic moc nedělala.

To je místo, kde se dostávají ke slovu runtime řešení FaaS od cloudových poskytovatelů velké čtyřky (AWS, IBM, Microsoft a Google) a některých hráčů open source (například Iron.io a Fission).

Schopnost vytvářet mikroslužby, které reagují na události, automaticky se škálují, platíte je podle provozu a využívají větší ekosystém služeb, jako jsou například Amazon DynamoDB nebo IBM Watson, je to, co platformy FaaS poskytují vývojářům.

Některé z těchto lahůdek, zejména ekosystém a mikroslužby, sdílejí platformy FaaS se světem kontejnerů.  Jakmile se podíváte dovnitř a pochopíte, jak fungují platformy FaaS, začne vám být jasné, proč tyto podobnosti existují.

 

Vnitřní fungování FaaS

Je užitečné se zamyslet nad runtimem FaaS v historickém kontextu a smyslu toho, jak dlouho trvá zpřístupnění výpočetní jednotky pro vykonání kódu. Na počátku devadesátých let jsme měli k dispozici ke spouštění našeho kódu jen holý hardware a získání nového počítače trvalo měsíce.

S vynálezem hypervizoru to virtualizace zkrátila na minuty. Při použití různých metod separace zdrojů jádra Linuxu, které nevyžadují režii hypervizoru, nám kontejnery nyní poskytnou další výpočetní jednotku během sekund.

Jak to tedy platformy FaaS zkrátí na milisekundy? Představte si řadu již spuštěných kontejnerů, které v sobě mají jazykové moduly runtime, jako například Node.js nebo Python, ale ještě žádný kód byznys logiky.

Když dojde ke spuštění události, a jen tehdy, se funkce obsahující byznys logiku vámi napsaná tak, aby reagovala na takovou událost, přečte z disku a vloží do „předehřátého“ kontejneru s příslušným jazykem, který je již uvnitř.

Vaše funkce se vykoná, váš kód se odstraní a stejný kontejner je k dispozici pro opětovné použití pro další událost.

Samozřejmě existují variace tohoto postupu včetně uchování kódu v plně „zahřátém“ kontejneru pro další příležitost, kdy by se zpracovávala stejná událost.

Klíčová koncepce však spočívá v tom, že platformy FaaS používají kontejnery kreativním způsobem a umožňují mapovat vykonání funkcí pro konkrétní události.

Skutečný přínos vzniká, když takové události zřetězíte, jako například při zápisu do databáze nebo signálu zařízení IoT, a vytvoříte tak větší aplikaci z těchto mnohem menších součástí.

 

Kam to směřuje?

Při pohledu přes prizma Rogersovy křivky přijetí inovací je serverless stále mladý trh, pravděpodobně na začátku své fáze časných osvojitelů. Má však za sebou několik velkých hráčů (takže na to může osoba rozhodující o IT bez obav vsadit), zdravý počet alternativ open source a počátky trhu, kde start-upy poskytují doplňkové nástroje.

Jedním velmi zajímavým aspektem architektury serverless je její potenciál obrátit vzhůru nohama připoutanost k dodavateli. Předpokládejme, že se vám opravdu líbí Amazon Polly pro převod hlasu na text, ale preferujete platformu IBM Watson pro analýzu textového sentimentu.

Vaše aplikace zajišťující rozhraní může nahrávat mluvená slova, zasílat záznam funkci Polly na platformě AWS a výsledný text posílat ke zpracování platformě Watson.

Takže namísto toho, že budete připoutáni k ekosystému jednoho dodavatele, můžete hledat a použít nejvhodnější nástroje pro konkrétní úlohy. Když vytváříte řešení s využitím FaaS, jsou jednotlivé části dostatečně malé a volně spojené, abyste si mohli vybrat jakéhokoliv poskytovatele podle svých potřeb.

Na nedávné konferenci Serverlessconf firmy jako iRobot, Nordstrom nebo Capital One ukázaly, jak tuto technologii v současné době úspěšně využívají, což prokazuje, že není vhodná jen pro start-upy, ale hodí se i pro zralé podniky.

Přestože mnoho z těchto časných osvojitelů nepoužívá architekturu serverless pro zátěže spojené s uživateli, den, kdy budete interagovat se serverless aplikacemi, se blíží. Při rychlosti rozvoje této technologie to vlastně mohlo být už včera.

 

Nevýhody serverless computingu

Serverless computing není všelékem a má i své nevýhody. Zaprvé je to velmi nezralý trh. Správa případů použití architektury serverless ve velkém měřítku je obtížná, uvádí Craig Lowery, šéf výzkumu v Gartneru.

Je to nedostatek nástrojů správy pro koordinaci skupin funkcí. Software pro zabezpečení, monitorování a optimalizaci podporující tuto technologii se teprve začíná rodit. Možná nejdůležitější je, že vývojáři musejí psát aplikace jiným způsobem.

„Mnoho těchto omezení je vyvoláno tím, že je návrh softwaru omezen architektonicky,“ vysvětluje Lowery.

Je možné opakované použití, opakované spuštění, ale neukládá se stav – splní se úkol, a tím to končí. Dodavatelé zpoplatňují platformy FaaS (funkce jako služba) zlomkem koruny za milion vykonaných funkcí, což ilustruje, jak dodavatelé povzbuzují vývojáře. „Když máte hodně funkcí, začne vznikat nepořádek,“ prohlašuje Lowery.

Existují také obavy z připoutání k dodavateli. Není snadné vzít aplikaci vytvořenou ve FaaS a přenést ji na jinou platformu, ať už ve vlastní infrastruktuře nebo v jiném veřejném cloudu, poznamenává Lowery. Protože je tento trh tak mladý, jsou nástroje serverless platforem přizpůsobené prostředí, ve kterém fungují.

AWS Lambda nabízí hlubokou integraci s mnoha dalšími produkty AWS. Podporuje ale běžné programovací jazyky jako Node.js, Python a Java, takže lze takový kód přenést jinam, tvrdí Matt Wood, manažer pro strategii AWS. „Není tam žádný speciální jazyk Lambda,“ poznamenává.

Lowery popisuje serverless computing a FaaS jako velmi výkonnou edici existujících výpočetních paradigmat virtuálních strojů a kontejnerů.

„Myslím, že mnoho lidí úspěšně vytvoří celé aplikace založené na architektuře serverless. Zároveň však platí, že to není vhodné řešení pro úplně všechny aplikace. Pro databáze a další aplikace vyžadující uchovávání stavu není Lambda úplně vhodné řešení.“

ICTS24

 

Tento příspěvek vyšel v Computerworldu 4/2018. Časopis (starší čísla i předplatné těch nadcházejících) si můžete objednat na adrese našeho vydavatelství.