
Serverless nie je o fyzickej absencii serverov. Nie je to ‚zabijak‘ kontajnerov ani prechodný trend. Je to nový prístup k budovaniu systémov v cloude. V dnešnom článku sa zameriame na architektúru Serverless aplikácií, pozrieme sa, akú úlohu zohráva poskytovateľ Serverless služieb a open-source projekty. Na konci sa porozprávame o otázkach použitia Serverless.
Chcem napísať serverovú časť aplikácie (aj keď aj internetového obchodu). Môže to byť aj chat, služba na publikovanie obsahu alebo vyvažovač záťaže. V každom prípade ma čaká množstvo starostí: budem musieť pripraviť infraštruktúru, určiť závislosti aplikácie a zamyslieť sa nad operačným systémom hostiteľa. Potom bude potrebné aktualizovať malé komponenty, ktoré nezasahujú do fungovania ostatného monolitu. A nezabudneme ani na škálovanie pod záťažou.
A čo ak vezmeme efemérne kontajnery, v ktorých sú požadované závislosti už predinštalované a samotné kontajnery sú izolované jeden od druhého a od OS hostiteľa? Monolit rozdelíme na mikroservisy, z ktorých každý sa môže aktualizovať a škálovať nezávisle od ostatných. Umiestnením kódu do takého kontajnera ho môžem spustiť na akejkoľvek infraštruktúre. Už je to lepšie.
A čo ak sa mi nechce nastavovať kontajnery? Nechce sa mi myslieť na škálovanie aplikácie. Nechce sa mi platiť za nečinnosť spustených kontajnerov, keď je záťaž na službu minimálna. Chcem písať kód. Sústreďte sa na podnikateľskú logiku a uvádzajte produkty na trh rýchlosťou svetla.
Tieto myšlienky ma priviedli k bezserverovým výpočtom. Serverless v tomto prípade znamená nie fyzickú neprítomnosť serverov, ale absenciu starostí o správu infraštruktúry.
Idea spočíva v tom, že logika aplikácie sa rozdelí na nezávislé funkcie. Majú event-driven štruktúru. Každá z funkcií vykonáva jednu "mikroúlohu". Všetko, čo od vývojára vyžaduje, je nahrať funkcie do poskytnutej konzoly cloudovým poskytovateľom a zosúladiť ich so zdrojmi udalostí. Kód sa bude vykonávať na požiadanie v automaticky pripravenom kontajneri a zaplatím iba za čas vykonania.
Poďme si objasniť, ako bude teraz vyzerať proces vývoja aplikácie.
Z pohľadu vývojára
Predtým sme začali hovoriť o aplikácii pre internetový obchod. V tradičnom prístupe hlavnú logiku systému vykonáva monolitná aplikácia. A server s aplikáciou je spustený nepretržite, aj keď nie je záťaž.
Aby sme prešli na serverless, rozdelíme aplikáciu na mikroúlohy. Pre každú z nich napíšeme svoju funkciu. Funkcie sú nezávislé od seba a neuchovávajú informácie o stave (stateless). Môžu byť napísané aj v rôznych jazykoch. Ak jedna z nich «spadne», aplikácia sa úplne nezastaví. Architektúra aplikácie bude vyzerať takto:

Rozdelenie na funkcie v Serverless pripomína prácu s mikroservisami. Ale mikroservis môže vykonávať viacero úloh, zatiaľ čo funkcia v ideálnom prípade by mala vykonávať len jednu. Predstavme si, že je úloha zbierať štatistiky a zobraziť na požiadanie používateľa. V prístupe mikroservisov úlohu vykonáva jeden servis s dvoma vstupnými bodmi: na zápis a na čítanie. V bezserverových výpočtoch to budú dve rôzne funkcie, ktoré nie sú navzájom prepojené. Vývojár šetrí výpočtové zdroje, ak sa napríklad štatistika aktualizuje častejšie než sa vyžaduje.
Serverless funkcie by sa mali vykonávať za krátky časový úsek (timeout), ktorý určuje poskytovateľ služby. Napríklad pre AWS je timeout 15 minút. To znamená, že dlhodobé funkcie (long-lived) bude treba prispôsobiť požiadavkám — týmto sa Serverless odlišuje od iných populárnych technológií dnes (kontajnerov a Platform as a Service).
Každej funkcii priradíme udalosť. Udalosť — to je spúšťač akcie:
Udalosť
Akcia, ktorú funkcia vykonáva
Do úložiska bola nahraná obrázok produktu
Zmenšiť obrázok a nahrať do adresára
V databáze sa aktualizovala adresa fyzickej predajne
Na mape načítať novú polohu
Zákazník platí za tovar
Spustiť spracovanie platby
Udalosťami môžu byť HTTP požiadavky, streamingové dáta, správy v frontách a podobne. Zdrojmi udalostí sú zmena alebo vznik dát. Okrem toho môžu byť funkcie spúšťané podľa časového plánu.
Architektúru sme spracovali a aplikácia sa takmer stala serverless. Pokračujeme k poskytovateľovi služby.
Z pohľadu poskytovateľa
Bežne bezserverové výpočty ponúkajú poskytovatelia cloudových služieb. Nazývajú ich rôzne: Azure Functions, AWS Lambda, Google Cloud Functions, IBM Cloud Functions.
Na službu budeme používať cez konzolu alebo osobný účet poskytovateľa. Kód funkcií môžeme nahrať jedným z nasledujúcich spôsobov:
- napísať kód vo vstavaných editoroch cez webovú konzolu,
- nahrať archív s kódom,
- pracovať s verejnými alebo súkromnými git repozitármi.
Tu si nastavujeme udalosti, ktoré vyvolávajú funkciu. Rôzni poskytovatelia môžu mať odlišné sady udalostí.

Poskytovateľ na svojej infraštruktúre postavil a automatizoval systém Function as a Service (FaaS):
- Kód funkcií sa dostáva do úložiska na strane poskytovateľa.
- Keď sa objaví udalosť, na serveri sa automaticky rozvinú kontajnery s pripraveným prostredím. Každej inštancii funkcie — vlastný izolovaný kontajner.
- Z úložiska sa funkcia posiela do kontajnera, vypočíta sa a vráti výsledok.
- Počet paralelných udalostí rastie — rastie aj počet kontajnerov. Systém sa automaticky škáluje. Ak sa používatelia na funkciu neobracajú, bude neaktívna.
- Poskytovateľ určuje čas nečinnosti kontajnerov — ak sa v tomto čase funkcie neobjavia v kontajneri, je zničený.
Takto získavame Serverless „z krabice“. Za službu budeme platiť podľa modelu pay-as-you-go, a to len za tie funkcie, ktoré sa používajú, a len za čas, počas ktorého boli použité.
Aby sa vývojári oboznámili so službou, poskytovatelia ponúkajú až 12 mesiacov bezplatného testovania, ale obmedzujú celkový čas výpočtov, počet požiadaviek za mesiac, finančné prostriedky alebo spotrebované zdroje.
Hlavná výhoda práce s poskytovateľom je možnosť nestarať sa o infraštruktúru (servery, virtuálne stroje, kontajnery). Z ich strany môže poskytovateľ implementovať FaaS buď na vlastných riešeniach, alebo pomocou open-source nástrojov. O tých sa budeme rozprávať ďalej.
Z pohľadu open source
Posledné dva roky komunita open-source aktívne pracuje na nástrojoch Serverless. Medzi nimi prispievajú k rozvoju bezserverových platforiem aj najväčší hráči na trhu:
- Google ponúka vývojárom svoj open-source nástroj ― . Na jeho vývoji sa podieľali IBM, RedHat, Pivotal a SAP;
- IBM pracovali na Serverless platforme , ktorá sa potom stala projektom Apache Foundation;
- Microsoft čiastočne otvorili kód platformy .
Práce prebiehajú aj v oblasti frameworkov bez servera. a sa nasadzujú vo vopred pripravených Kubernetes klastra, funguje s Kubernetes aj s Docker Swarm. Framework slúži ako akýsi kontrolér – pripraví prostredie na vykonávanie priamo v klastri na požiadanie a následne spustí funkciu.
Frameworky umožňujú široké možnosti prispôsobenia nástrojov podľa vlastných potrieb. Napríklad v Kubeless môže vývojár nastaviť timeout pre vykonávanie funkcie (predvolené nastavenie je 180 sekúnd). Fission sa pokúša vyriešiť problém studeného štartu tým, že niektoré kontajnery udržiava neustále spustené (aj keď to vedie k nákladom na nečinné zdroje). OpenFaaS ponúka množstvo spúšťačov na každú chuť: HTTP, Kafka, Redis, MQTT, Cron, AWS SQS, NATs a ďalšie.
Pokyny na začatie práce nájdete v oficiálnej dokumentácii frameworkov. Práca s nimi si vyžaduje o niečo viac zručností ako prostredníctvom poskytovateľa – to minimálne znamená vedieť spustiť Kubernetes klaster cez CLI. Maximálne sa to môže rozšíriť o zapojenie iných open-source nástrojov (napríklad správca frontov Kafka).
Bez ohľadu na to, akým spôsobom budeme pracovať so Serverless – prostredníctvom poskytovateľa alebo pomocou open-source, získame niekoľko výhod a nevýhod prístupu Serverless.
Z pohľadu výhod a nevýhod
Serverless rozvíja myšlienky kontajnerovej infraštruktúry a mikroservisného prístupu, pri ktorých môžu tímy pracovať v multijazyčnom režime, bez viazania sa na jednu platformu. Budovanie systému sa zjednodušuje a odstraňovanie chýb sa stáva jednoduchším. Mikroservisná architektúra umožňuje omnoho rýchlejší prídavok nových funkcií do systému ako pri monolitickej aplikácii.
Serverless ešte viac skracuje čas vývoja, čím umožňuje vývojárovi sústrediť sa výlučne na podnikateľskú logiku aplikácie a písanie kódu. Ako dôsledok sa skracuje čas uvedenia vývoja na trh.
Získať môžeme aj automatické škálovanie na zaťaženie, a platíme len za používané zdroje a iba v časoch, keď sú využívané.
Rovnako ako každá technológia, aj Serverless má nevýhody.
Jednou z takýchto nevýhod môže byť doba studeného štartu (v priemere do 1 sekundy pre také jazyky ako JavaScript, Python, Go, Java, Ruby).
Na jednej strane, skutočný čas studeného spustenia závisí od mnohých premenných: jazyka, v ktorom je funkcia napísaná, počtu knižníc, objemu kódu a interakcie s ďalšími zdrojmi (napríklad databázami alebo autentifikačnými servermi). Pretože vývojár má kontrolu nad týmito premennými, môže skrátiť čas spustenia. Na druhej strane, vývojár nemôže ovplyvniť čas spustenia kontajnera - to závisí len od poskytovateľa.
Studené spustenie sa môže zmeniť na teplé, keď funkcia znovu využíva kontajner, ktorý bol spustený predchádzajúcou udalosťou. K tejto situácii dôjde v troch prípadoch:
- ak zákazníci často používajú službu a počet dopytov na funkciu rastie;
- ak poskytovateľ, platforma alebo rámec umožňujú držať niektoré kontajnery neustále spustené;
- ak vývojár spúšťa funkcie na časovači (napríklad každé 3 minúty).
Pre mnohé aplikácie nie je studené spustenie problém. Je potrebné vychádzať z typu a úloh služby. Oneskorenie spustenia o sekundu nie je vždy kritické pre biznis aplikáciu, ale môže byť kritické pre zdravotnícke služby. Pravdepodobne v tomto prípade bezserverový prístup už nebude vhodný.
Ďalší nevýhodou Serverless je krátka doba životnosti funkcie (timeout, za ktorý sa funkcia musí vykonať).
Ak sa má pracovať so dlhožijúcimi úlohami, je možné použiť hybridnú architektúru - kombinovať Serverless s inou technológiou.
Nie všetky systémy budú schopné pracovať na schéme Serverless.
Niektoré aplikácie naďalej budú uchovávať dáta a stav počas vykonávania. Niektoré architektúry zostanú monolitné a niektoré funkcie budú dlhožijúce. Avšak (rovnako ako kedysi cloudové technológie a následne aj kontajnery), Serverless je technológia s veľkou budúcnosťou.
V tejto súvislosti by som rád plynulo prešiel k otázke aplikácie prístupu Serverless.
Z pohľadu aplikácie
V priebehu roku 2018 percento využívania Serverless . Medzi spoločnosťami, ktoré už implementovali technológiu do svojich služieb, sú obrovské trhové hráče ako Twitter, PayPal, Netflix, T-Mobile, Coca-Cola. Treba však pochopiť, že Serverless nie je všeliek, ale nástroj na riešenie určitých úloh:
- Znížiť nečinnosť zdrojov. Nie je potrebné neustále udržiavať virtuálny stroj pre služby, na ktoré sa málo obraciate.
- Spracovať dáta "na vás". Kompresovať obrázky, odstraňovať pozadie, meniť kódovanie videa, pracovať so senzormi IoT, vykonávať matematické operácie.
- "Spojiť" medzi sebou iné služby. Git-repozitár s internými programami, chatbot v Slacku s Jira a s kalendárom.
- Vyvažovať zaťaženie. Tu sa zastavíme podrobnejšie.
Predpokladajme, že existuje služba, na ktorú prichádza 50 ľudí. Pre ňu je nasadený virtuálny stroj so slabým hardvérom. Občas sa zaťaženie služby zvyšuje niekoľkonásobne. V takom prípade slabý hardvér nezvládne.
Môžete zapnúť v systéme vyvažovač, ktorý rozdelí zaťaženie, povedzme, na tri virtuálne stroje. V tomto štádiu nemôžeme presne predpovedať zaťaženie, takže nejaké množstvo zdrojov držíme zapnuté "na rezervu". A preplácame za nečinnosť.
V takejto situácii môžeme optimalizovať systém hybridným prístupom: za vyvažovačom zaťaženia necháme jeden virtuálny stroj a nasadíme odkaz na Serverless Endpoint s funkciami. Ak zaťaženie prekročí prah ― vyvažovač spustí inštancie funkcií, ktoré preberajú časť spracovania požiadaviek.

Takto sa dá Serverless využiť tam, kde je potrebné ne príliš často, ale intenzívne spracovávať veľké množstvo požiadaviek. V tomto prípade je výhodnejšie spustiť niekoľko funkcií na 15 minút, než neustále udržiavať virtuálny stroj alebo server.
Pri všetkých výhodách bezserverových výpočtov by ste pred zavedením mali najprv zhodnotiť logiku aplikácie a pochopiť, aké úlohy dokáže Serverless v konkrétnom prípade vyriešiť.
Serverless a Selectel
V Selectel sme už cez našu riadiacu pane. Teraz budujeme vlastnú FaaS platformu. Chceme, aby vývojári mohli riešiť svoje úlohy pomocou Serverless cez pohodlné, flexibilné rozhranie.
Ak máte nápady, aká by mala byť ideálna FaaS platforma a ako by ste chceli využiť Serverless vo svojich projektoch, podeľte sa o ne v komentároch. Zohľadníme vaše želania pri vývoji platformy.
Materiály použité v článku:
Zdroj: habr.com
