Bez serverov na stojanoch

Bez serverov na stojanoch
Serverless nie je o fyzickej absencii serverov. Toto nie je zabíjač kontajnerov ani prechodný trend. Ide o nový prístup k budovaniu systémov v cloude. V dnešnom článku sa dotkneme architektúry bezserverových aplikácií, pozrime sa, akú úlohu zohráva poskytovateľ bezserverových služieb a open-source projekty. Nakoniec si pohovorme o problémoch používania Serverless.

Chcem napísať serverovú časť aplikácie (alebo dokonca internetový obchod). Môže to byť chat, služba publikovania obsahu alebo nástroj na vyrovnávanie zaťaženia. V každom prípade bude veľa bolesti hlavy: budete musieť pripraviť infraštruktúru, určiť závislosti aplikácií a premýšľať o hostiteľskom operačnom systéme. Potom budete musieť aktualizovať malé komponenty, ktoré neovplyvňujú činnosť zvyšku monolitu. No, nezabudnime na škálovanie pri záťaži.

Čo ak vezmeme efemérne kontajnery, v ktorých sú už predinštalované požadované závislosti a samotné kontajnery sú izolované od seba a od hostiteľského OS? Monolit rozdelíme na mikroslužby, pričom každú je možné aktualizovať a škálovať nezávisle od ostatných. Umiestnením kódu do takéhoto kontajnera ho môžem spustiť na akejkoľvek infraštruktúre. Už lepšie.

Čo ak nechcete konfigurovať kontajnery? Nechcem premýšľať o škálovaní aplikácie. Nechcem platiť za nečinné kontajnery, keď je zaťaženie služby minimálne. Chcem napísať kód. Zamerajte sa na obchodnú logiku a uveďte produkty na trh rýchlosťou svetla.

Takéto myšlienky ma priviedli k počítaču bez servera. Bez servera v tomto prípade znamená nie fyzická absencia serverov, ale absencia bolesti hlavy pri správe infraštruktúry.

Myšlienkou je, že aplikačná logika je rozdelená do nezávislých funkcií. Majú štruktúru udalostí. Každá funkcia vykonáva jednu „mikroúlohu“. Všetko, čo sa od vývojára vyžaduje, je načítať funkcie do konzoly poskytovanej poskytovateľom cloudu a korelovať ich so zdrojmi udalostí. Kód bude vykonaný na požiadanie v automaticky pripravenom kontajneri a zaplatím iba čas vykonania.

Pozrime sa, ako bude teraz vyzerať proces vývoja aplikácie.

Zo strany developera

Už dávnejšie sme sa začali baviť o aplikácii pre internetový obchod. V tradičnom prístupe je hlavná logika systému vykonávaná monolitickou aplikáciou. A server s aplikáciou beží neustále, aj keď nie je zaťažený.

Ak chcete prejsť na bez servera, rozdelíme aplikáciu na mikroúlohy. Pre každú z nich napíšeme vlastnú funkciu. Funkcie sú na sebe nezávislé a neukladajú stavové informácie (bezstavové). Môžu byť dokonca napísané v rôznych jazykoch. Ak jeden z nich „spadne“, celá aplikácia sa nezastaví. Architektúra aplikácie bude vyzerať takto:

Bez serverov na stojanoch
Rozdelenie na funkcie v Serverless je podobné práci s mikroslužbami. Mikroslužba však môže vykonávať niekoľko úloh a funkcia by v ideálnom prípade mala vykonávať jednu. Predstavme si, že úlohou je zbierať štatistiky a zobrazovať ich na žiadosť používateľa. V mikroservisnom prístupe úlohu vykonáva jedna služba s dvoma vstupnými bodmi: zápis a čítanie. V bezserverových počítačoch to budú dve rôzne funkcie, ktoré spolu nesúvisia. Vývojár šetrí výpočtové zdroje, ak sa napríklad štatistiky aktualizujú častejšie ako sťahujú.

Funkcie bez servera musia byť spustené v krátkom čase (timeout), ktorý určuje poskytovateľ služby. Napríklad pre AWS je časový limit 15 minút. To znamená, že dlhotrvajúce funkcie budú musieť byť zmenené, aby vyhovovali požiadavkám - to je to, čo odlišuje Serverless od iných populárnych technológií súčasnosti (kontajnery a Platforma ako služba).

Každej funkcii priradíme udalosť. Udalosť je spúšťačom akcie:

udalosť
Akcia, ktorú funkcia vykonáva

Obrázok produktu bol nahraný do úložiska.
Komprimujte obrázok a nahrajte ho do adresára

Adresa fyzického obchodu bola aktualizovaná v databáze
Načítať nové miesto do máp

Za tovar zaplatí klient
Spustite spracovanie platby

Udalosti môžu byť požiadavky HTTP, streamované údaje, fronty správ atď. Zdroje udalostí sú zmeny alebo výskyty údajov. Okrem toho možno funkcie spúšťať časovačom.

Architektúra bola vypracovaná a aplikácia sa takmer stala bez servera. Ďalej prejdeme k poskytovateľovi služby.

Zo strany poskytovateľa

Poskytovatelia cloudových služieb zvyčajne ponúkajú výpočtovú techniku ​​bez servera. Nazývajú sa inak: Azure Functions, AWS Lambda, Google Cloud Functions, IBM Cloud Functions.

Službu budeme používať prostredníctvom konzoly alebo osobného účtu poskytovateľa. Funkčný kód je možné stiahnuť jedným z nasledujúcich spôsobov:

  • písať kód vo vstavaných editoroch cez webovú konzolu,
  • stiahnite si archív s kódom,
  • pracovať s verejnými alebo súkromnými git repozitármi.

Tu nastavíme udalosti, ktoré volajú funkciu. Súbory udalostí sa môžu u rôznych poskytovateľov líšiť.

Bez serverov na stojanoch

Poskytovateľ vybudoval a zautomatizoval systém Function as a Service (FaaS) na svojej infraštruktúre:

  1. Funkčný kód skončí v úložisku na strane poskytovateľa.
  2. Keď nastane udalosť, kontajnery s pripraveným prostredím sa automaticky nasadia na server. Každá inštancia funkcie má svoj vlastný izolovaný kontajner.
  3. Z úložiska sa funkcia odošle do kontajnera, vypočíta sa a vráti výsledok.
  4. Počet paralelných akcií rastie - počet kontajnerov rastie. Systém sa automaticky prispôsobí. Ak používatelia nemajú prístup k funkcii, bude neaktívna.
  5. Poskytovateľ nastavuje čas nečinnosti pre kontajnery - ak sa počas tohto času v kontajneri neobjavia funkcie, je zničený.

Týmto spôsobom dostaneme Serverless z krabice. Za službu zaplatíme priebežným modelom a len za tie funkcie, ktoré sú využívané, a to len za čas, kedy boli využívané.

Na zoznámenie vývojárov so službou ponúkajú poskytovatelia až 12 mesiacov bezplatného testovania, no obmedzujú celkový čas výpočtu, počet požiadaviek za mesiac, finančné prostriedky či spotrebu energie.

Hlavnou výhodou spolupráce s poskytovateľom je možnosť nestarať sa o infraštruktúru (servery, virtuálne stroje, kontajnery). Poskytovateľ môže implementovať FaaS pomocou vlastného vývoja aj pomocou nástrojov s otvoreným zdrojovým kódom. Povedzme si o nich ďalej.

Zo strany open source

Komunita open source už niekoľko rokov aktívne pracuje na nástrojoch bez serverov. K rozvoju bezserverových platforiem prispievajú aj najväčší hráči na trhu:

  • Google ponúka vývojárom svoj open-source nástroj - Nožom. Na jeho vývoji sa podieľali IBM, RedHat, Pivotal a SAP;
  • IBM pracoval na platforme Serverless OpenWhisk, ktorý sa potom stal projektom nadácie Apache;
  • Microsoft čiastočne otvoril kód nástupišťa Funkcie Azure.

Vývoj prebieha aj v smere bezserverových rámcov. Kubeless и štiepenie nasadené vo vopred pripravených klastroch Kubernetes, OpenFaaS funguje s Kubernetes aj Docker Swarm. Framework funguje ako akýsi kontrolér – na požiadanie pripraví runtime prostredie vnútri klastra a následne tam spustí funkciu.

Rámce ponechávajú priestor na konfiguráciu nástroja tak, aby vyhovoval vašim potrebám. Takže v Kubeless môže vývojár nakonfigurovať časový limit vykonania funkcie (predvolená hodnota je 180 sekúnd). Fission v snahe vyriešiť problém so studeným štartom navrhuje ponechať niektoré kontajnery stále v prevádzke (hoci to so sebou prináša náklady na prestoje zdrojov). A OpenFaaS ponúka sadu spúšťačov pre každý vkus a farbu: HTTP, Kafka, Redis, MQTT, Cron, AWS SQS, NAT a ďalšie.

Pokyny na začiatok nájdete v oficiálnej dokumentácii rámcov. Práca s nimi si vyžaduje trochu viac zručností ako pri práci s poskytovateľom – to je aspoň možnosť spustiť klaster Kubernetes cez CLI. Maximálne zahrňte ďalšie nástroje s otvoreným zdrojovým kódom (napríklad správca frontov Kafka).

Bez ohľadu na to, ako pracujeme s Serverless – prostredníctvom poskytovateľa alebo pomocou open-source, získame množstvo 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, v ktorom môžu tímy pracovať vo viacjazyčnom režime bez toho, aby boli viazané na jednu platformu. Budovanie systému je zjednodušené a chyby sa ľahšie opravujú. Architektúra mikroservisov umožňuje pridávať do systému nové funkcie oveľa rýchlejšie ako v prípade monolitickej aplikácie.

Bez servera ešte viac skracuje čas vývoja, čo umožňuje vývojárovi sústrediť sa výlučne na obchodnú logiku a kódovanie aplikácie. V dôsledku toho sa skracuje čas uvedenia vývoja na trh.

Ako bonus získame automatické škálovanie pre zaťaženie, a platíme len za použité zdroje a len v čase, keď sú použité.

Ako každá technológia, aj Serverless má nevýhody.

Takouto nevýhodou môže byť napríklad čas studeného štartu (v priemere do 1 sekundy pre jazyky ako JavaScript, Python, Go, Java, Ruby).

Na jednej strane v skutočnosti čas studeného štartu závisí od mnohých premenných: jazyka, v ktorom je funkcia napísaná, počtu knižníc, množstva kódu, komunikácie s ďalšími zdrojmi (rovnaké databázy alebo autentifikačné servery). Keďže vývojár riadi tieto premenné, môže skrátiť čas spustenia. Ale na druhej strane vývojár nemôže kontrolovať čas spustenia kontajnera - všetko závisí od poskytovateľa.

Studený štart sa môže zmeniť na teplý, keď funkcia opätovne použije nádobu spustenú predchádzajúcou udalosťou. Táto situácia nastane v troch prípadoch:

  • ak klienti často využívajú službu a zvyšuje sa počet volaní do funkcie;
  • ak vám poskytovateľ, platforma alebo rámec umožňuje udržiavať niektoré kontajnery stále v prevádzke;
  • ak vývojár spúšťa funkcie na časovači (povedzme každé 3 minúty).

Pre mnohé aplikácie nie je studený štart problémom. Tu musíte stavať na type a úlohách služby. Sekundové oneskorenie spustenia nie je vždy kritické pre obchodnú aplikáciu, ale môže sa stať kritickým pre lekárske služby. V tomto prípade už pravdepodobne nebude vhodný prístup bez servera.

Ďalšou nevýhodou Serverless je krátka životnosť funkcie (timeout, počas ktorého musí byť funkcia vykonaná).

Ak však musíte pracovať s dlhodobými úlohami, môžete použiť hybridnú architektúru – skombinovať Serverless s inou technológiou.

Nie všetky systémy budú môcť pracovať pomocou schémy Serverless.

Niektoré aplikácie budú počas vykonávania stále ukladať údaje a stav. Niektoré architektúry zostanú monolitické a niektoré prvky budú mať dlhú životnosť. Avšak (ako cloudové technológie a potom kontajnery), Serverless je technológia s veľkou budúcnosťou.

V tomto duchu by som chcel plynule prejsť k otázke používania bezserverového prístupu.

Zo strany aplikácie

Za rok 2018 percento používania bez servera rástli jeden a pol krát. Medzi spoločnosťami, ktoré už technológiu implementovali do svojich služieb, sú takí trhoví giganti ako Twitter, PayPal, Netflix, T-Mobile, Coca-Cola. Zároveň musíte pochopiť, že Serverless nie je všeliekom, ale nástrojom na riešenie určitého okruhu problémov:

  • Znížte prestoje zdrojov. Nie je potrebné neustále udržiavať virtuálny stroj pre služby, ktoré majú málo hovorov.
  • Spracúvajte údaje za behu. Komprimujte obrázky, vystrihujte pozadie, zmeňte kódovanie videa, pracujte so senzormi internetu vecí, vykonávajte matematické operácie.
  • „Zlepte“ ostatné služby dohromady. Úložisko Git s internými programami, chatovací robot v Slacku s Jirou a kalendár.
  • Vyvážte záťaž. Pozrime sa tu bližšie.

Povedzme, že existuje služba, ktorá priláka 50 ľudí. Pod ním sa nachádza virtuálny stroj so slabým hardvérom. Čas od času sa zaťaženie služby výrazne zvyšuje. Potom si slabý hardvér nedokáže poradiť.

Do systému môžete zahrnúť balancer, ktorý rozloží záťaž, povedzme, medzi tri virtuálne stroje. V tejto fáze nemôžeme presne predpovedať zaťaženie, takže určité množstvo zdrojov nechávame bežať „v zálohe“. A preplácame prestoje.

V takejto situácii môžeme optimalizovať systém hybridným prístupom: necháme jeden virtuálny stroj za vyrovnávačom záťaže a vložíme prepojenie na Serverless Endpoint s funkciami. Ak zaťaženie prekročí prah, balancer spustí inštancie funkcií, ktoré prevezmú časť spracovania požiadavky.

Bez serverov na stojanoch
Serverless je teda možné použiť tam, kde je potrebné nie príliš často, ale intenzívne spracovávať veľké množstvo požiadaviek. V tomto prípade je spustenie niekoľkých funkcií po dobu 15 minút výnosnejšie ako nepretržitá údržba virtuálneho počítača alebo servera.

So všetkými výhodami výpočtovej techniky bez servera by ste pred implementáciou mali najprv vyhodnotiť aplikačnú logiku a pochopiť, aké problémy môže serverless v konkrétnom prípade vyriešiť.

Bez servera a Selectel

V Selecteli už sme zjednodušená práca s Kubernetes cez náš ovládací panel. Teraz budujeme vlastnú platformu FaaS. Chceme, aby vývojári dokázali vyriešiť svoje problémy pomocou Serverless prostredníctvom pohodlného a flexibilného rozhrania.

Ak máte nápady, aká by mala byť ideálna platforma FaaS a ako chcete použiť Serverless vo svojich projektoch, podeľte sa o ne v komentároch. Pri vývoji platformy zohľadníme vaše želania.
 
Materiály použité v článku:

Zdroj: hab.com

Pridať komentár