Tipy a zdroje na vytváranie aplikácií bez servera

Tipy a zdroje na vytváranie aplikácií bez servera
Hoci technológie bez serverov si v posledných rokoch rýchlo získali na popularite, stále je s nimi spojených veľa mylných predstáv a obáv. Závislosť od dodávateľa, nástroje, riadenie nákladov, studený štart, monitorovanie a životný cyklus vývoja sú veľmi diskutované témy, pokiaľ ide o technológie bez serverov. V tomto článku preskúmame niektoré zo spomínaných tém, ako aj zdieľame tipy a odkazy na užitočné zdroje, ktoré začiatočníkom pomôžu vytvárať výkonné, flexibilné a nákladovo efektívne aplikácie bez servera.

Mylné predstavy o bezserverových technológiách

Mnoho ľudí verí, že bezserverové a bezserverové spracovanie údajov (Funguje ako služba, FaaS) sú takmer to isté. To znamená, že rozdiel nie je príliš veľký a oplatí sa predstaviť nový produkt. Hoci AWS Lambda bola jednou z hviezd vzostupu technológie bez servera a jedným z najpopulárnejších prvkov architektúry bez servera, v tejto architektúre je viac ako FaaS.

Základným princípom serverless je, že sa nemusíte starať o správu alebo škálovanie vašej infraštruktúry; platíte len za to, čo používate. Mnohé služby spĺňajú tieto kritériá - AWS DynamoDB, S3, SNS alebo SQS, Graphcool, Auth0, Now, Netlify, Firebase a mnoho ďalších. Vo všeobecnosti znamená bezserverové využitie všetkých možností cloud computingu bez potreby spravovať a optimalizovať infraštruktúru kvôli škálovaniu. Znamená to tiež, že bezpečnosť na úrovni infraštruktúry už nie je vaším problémom, čo je obrovská výhoda vzhľadom na náročnosť a zložitosť plnenia bezpečnostných štandardov. Nakoniec nemusíte kupovať poskytnutú infraštruktúru.

Bez serverov možno považovať za „stav mysle“: určitú mentalitu pri navrhovaní riešení. Vyhnite sa prístupom, ktoré vyžadujú údržbu akejkoľvek infraštruktúry. Vďaka bezserverovému prístupu trávime čas riešením problémov, ktoré priamo ovplyvňujú projekt a prinášajú hodnotu našim používateľom: vytváranie robustnej obchodnej logiky, vývoj používateľských rozhraní a vývoj citlivých a spoľahlivých rozhraní API.

Napríklad, ak je možné vyhnúť sa správe a údržbe bezplatnej platformy na vyhľadávanie textu, potom to urobíme. Tento prístup k budovaniu aplikácií môže dramaticky urýchliť čas uvedenia na trh, pretože už nemusíte myslieť na správu komplexnej infraštruktúry. Osloboďte sa od zodpovednosti a nákladov na správu infraštruktúry a zamerajte sa na vytváranie aplikácií a služieb, ktoré vaši zákazníci potrebujú. Patrick Debois nazval tento prístup 'servisný', tento výraz je akceptovaný v komunite bez serverov. Funkcie by sa mali považovať za lepidlo, ktoré spája služby dohromady ako nasaditeľné moduly (namiesto nasadzovania celej knižnice alebo webovej aplikácie). To poskytuje neuveriteľnú granularitu pre správu nasadení a zmien v aplikácii. Ak nemôžete nasadiť funkcie týmto spôsobom, môže to znamenať, že funkcie robia príliš veľa vecí a je potrebné ich prerobiť.

Niektorí ľudia sú pri vývoji cloudových aplikácií zmätení závislosťou od dodávateľa. To isté platí pre technológie bez serverov a je nepravdepodobné, že by to bol výsledok mylnej predstavy. Podľa našich skúseností je budovanie bezserverových aplikácií na AWS spolu so schopnosťou AWS Lambda agregovať ďalšie služby AWS súčasťou toho, čo robí bezserverové architektúry tak skvelými. Toto je dobrý príklad synergie, keď je výsledok kombinácie väčší ako len súčet jej častí. Snaha vyhnúť sa blokovaniu dodávateľov môže viesť k ešte väčším problémom. Pri práci s kontajnermi je jednoduchšie spravovať vlastnú abstrakciu medzi poskytovateľmi cloudu. Ale pokiaľ ide o bezserverové riešenia, toto úsilie sa nevyplatí, najmä ak od začiatku zvažujete nákladovú efektívnosť. Nezabudnite zistiť, ako predajcovia poskytujú služby. Niektoré špecializované služby sa spoliehajú na integračné body s inými dodávateľmi a môžu poskytovať pripojenie typu plug-and-play hneď po vybalení. Je jednoduchšie poskytnúť volanie Lambda z koncového bodu rozhrania API brány, než zadávať požiadavku do nejakého kontajnera alebo inštancie EC2. Graphcool umožňuje jednoduchú konfiguráciu pomocou Auth0, čo je jednoduchšie ako používanie autentifikačných nástrojov tretích strán.

Výber správneho dodávateľa pre vašu aplikáciu bez servera je rozhodnutím na úrovni architektúry. Keď vytvoríte aplikáciu, neočakávate, že sa jedného dňa vrátite k správe serverov. Výber dodávateľa cloudu sa nelíši od výberu použitia kontajnerov alebo databázy alebo dokonca programovacieho jazyka.

Zvážte:

  • Aké služby potrebujete a prečo.
  • Aké služby poskytujú poskytovatelia cloudu a ako ich môžete kombinovať pomocou vami zvoleného riešenia FaaS.
  • Aké programovacie jazyky sú podporované (dynamicky alebo staticky typované, kompilované alebo interpretované, aké sú benchmarky, aký je výkon studeného štartu, aký je open source ekosystém atď.).
  • Aké sú vaše bezpečnostné požiadavky (SLA, 2FA, OAuth, HTTPS, SSL atď.).
  • Ako spravovať cykly vývoja CI/CD a softvéru.
  • Ktoré riešenia infraštruktúry vo forme kódu môžete využiť?

Ak rozširujete existujúcu aplikáciu a pridávate funkcie bez servera postupne, môže to do istej miery obmedziť dostupné možnosti. Takmer všetky bezserverové technológie však poskytujú nejaký druh rozhrania API (cez REST alebo zaraďovanie správ), ktoré vám umožňuje vytvárať rozšírenia nezávislé od jadra aplikácie a s jednoduchou integráciou. Hľadajte služby s prehľadnými API, dobrou dokumentáciou a silnou komunitou a nemôžete sa pokaziť. Ľahká integrácia môže byť často kľúčovou metrikou a je pravdepodobne jedným z hlavných dôvodov, prečo bol AWS úspešný od uvedenia Lambda v roku 2015.

Kedy je bezserver užitočné?

Bezserverové technológie možno použiť takmer kdekoľvek. Ich výhody sa však neobmedzujú len na spôsoby aplikácie. Prekážka vstupu pre cloud computing je dnes taká nízka práve kvôli bezserverovým technológiám. Ak vývojári majú nápad, ale nevedia, ako spravovať cloudovú infraštruktúru a optimalizovať náklady, nemusia hľadať inžiniera, ktorý by to urobil. Ak chce startup vybudovať platformu, ale obáva sa, že náklady sa môžu vymknúť kontrole, môže sa jednoducho obrátiť na bezserverové riešenia.

Vďaka úsporám nákladov a jednoduchému škálovaniu sú bezserverové riešenia rovnako použiteľné pre interné aj externé systémy, až po webovú aplikáciu s multimiliónovým publikom. Účty sa merajú v centoch a nie v eurách. Prenájom najjednoduchšej inštancie AWS EC2 (t1.micro) na mesiac bude stáť 15 €, aj keď s tým nič neurobíte (kto to kedy zabudol vypnúť?!). Na porovnanie, na dosiahnutie tejto úrovne výdavkov za rovnaké časové obdobie by ste potrebovali spustiť 512 MB Lambda na 1 sekundu približne 3 milióny krát. A ak túto funkciu nevyužijete, nič neplatíte.

Keďže serverless je primárne riadený udalosťami, je pomerne jednoduché pridať infraštruktúru bez servera do starších systémov. Napríklad pomocou AWS S3, Lambda a Kinesis môžete vytvoriť analytickú službu pre starší maloobchodný systém, ktorý môže prijímať údaje prostredníctvom rozhrania API.

Väčšina platforiem bez servera podporuje viacero jazykov. Najčastejšie ide o Python, JavaScript, C#, Java a Go. Všetky jazyky zvyčajne nemajú žiadne obmedzenia na používanie knižníc, takže môžete použiť svoje obľúbené knižnice s otvoreným zdrojovým kódom. Odporúča sa však nepreháňať závislosti, aby vaše funkcie fungovali optimálne a nerušili výhody obrovskej škálovateľnosti vašich aplikácií bez servera. Čím viac balíkov je potrebné naložiť do kontajnera, tým dlhšie bude studený štart trvať.

Studený štart je, keď musíte najskôr inicializovať kontajner, runtime a obslužný program chýb pred ich použitím. Z tohto dôvodu môže byť oneskorenie pri vykonávaní funkcií až 3 sekundy, čo nie je najlepšia voľba pre netrpezlivých používateľov. K studeným štartom však dochádza pri prvom hovore po niekoľkých minútach nečinnosti. Mnohí to teda považujú za malú nepríjemnosť, ktorú je možné obísť pravidelným pingovaním funkcie, aby bola v nečinnosti. Alebo tento aspekt úplne ignorujú.

Hoci AWS vydal Bezserverová databáza SQL Serverless AuroraSQL databázy však nie sú ideálne na tento typ použitia, pretože sa pri vykonávaní transakcií spoliehajú na pripojenia, ktoré sa môžu rýchlo stať prekážkou, keď je na AWS Lambda veľká prevádzka. Áno, vývojári neustále vylepšujú Serverless Aurora a mali by ste s tým experimentovať, ale dnes sa riešeniam NoSQL páčia DynamoDB. Niet však pochýb, že táto situácia sa čoskoro zmení.

Sada nástrojov tiež prináša mnohé obmedzenia, najmä v oblasti lokálneho testovania. Hoci existujú riešenia ako Docker-Lambda, DynamoDB Local a LocalStack, vyžadujú si starostlivú prácu a značné množstvo konfigurácie. Všetky tieto projekty sa však aktívne rozvíjajú, takže je len otázkou času, kedy nástroje dosiahnu úroveň, ktorú potrebujeme.

Vplyv bezserverových technológií na vývojový cyklus

Keďže vaša infraštruktúra je len konfigurácia, môžete definovať a nasadiť kód pomocou skriptov, ako sú skripty shellu. Alebo sa môžete uchýliť k riešeniam triedy konfigurácie ako kódu, napr AWS CloudFormation. Hoci táto služba neposkytuje konfiguráciu pre všetky oblasti, umožňuje vám definovať špecifické zdroje na použitie ako funkcie Lambda. To znamená, že tam, kde vám CloudFormation zlyhá, môžete napísať svoj vlastný zdroj (funkcia Lambda), ktorý túto medzeru uzavrie. Týmto spôsobom môžete robiť čokoľvek, dokonca aj konfigurovať závislosti mimo vášho prostredia AWS.

Pretože je to všetko len konfigurácia, môžete svoje skripty nasadenia parametrizovať pre konkrétne prostredia, oblasti a používateľov, najmä ak používate riešenia typu infraštruktúra ako kód, ako je CloudFormation. Môžete napríklad nasadiť kópiu infraštruktúry pre každú vetvu v úložisku, takže ich môžete počas vývoja otestovať úplne izolovane. Toto radikálne urýchľuje čas, ktorý vývojári dostávajú spätnú väzbu, keď chcú pochopiť, či ich kód funguje primerane v živom prostredí. Manažéri sa nemusia obávať nákladov na nasadenie viacerých prostredí, pretože platia len za skutočné používanie.

DevOps majú menej starostí, pretože sa musia len uistiť, že vývojári majú správnu konfiguráciu. Už žiadne spravovanie inštancií, balancerov alebo bezpečnostných skupín. Preto sa čoraz častejšie používa pojem NoOps, aj keď je stále dôležité vedieť nakonfigurovať infraštruktúru, najmä pokiaľ ide o konfiguráciu IAM a optimalizáciu cloudových zdrojov.

Existujú veľmi výkonné nástroje na monitorovanie a viditeľnosť ako Epsagon, Thundra, Dashbird a IOPipe. Umožňujú vám monitorovať aktuálny stav bezserverových aplikácií, poskytovať protokoly a stopy, zachytávať metriky výkonu a architektonické úzke miesta, vykonávať analýzu nákladov a prognózy a oveľa viac. Nielenže poskytujú inžinierom, vývojárom a architektom DevOps komplexný pohľad na výkon aplikácií, ale tiež umožňujú manažérom získať prehľad o výdavkoch zdrojov a prognózach nákladov v reálnom čase po sekundách. Je oveľa ťažšie to zorganizovať so spravovanou infraštruktúrou.

Navrhovanie aplikácií bez servera je oveľa jednoduchšie, pretože nemusíte nasadzovať webové servery, spravovať virtuálne stroje alebo kontajnery, záplatovacie servery, operačné systémy, internetové brány atď. Abstrahovanie všetkých týchto povinností umožňuje architektúre bez servera zamerať sa na to, na čom najviac záleží: na riešenie obchodné a zákaznícke potreby.

Zatiaľ čo nástroje by mohli byť lepšie (každým dňom sa zlepšujú), vývojári sa môžu zamerať na implementáciu obchodnej logiky a na to, ako čo najlepšie rozdeliť zložitosť aplikácie medzi rôzne služby v rámci architektúry. Správa aplikácií bez servera je založená na udalostiach a abstrahuje ju poskytovateľ cloudu (napríklad udalosti SQS, S3 alebo streamy DynamoDB). Preto vývojárom stačí napísať obchodnú logiku, aby reagovali na určité udalosti a nemusia sa starať o to, ako čo najlepšie implementovať databázy a fronty správ, alebo ako optimálne pracovať s dátami v konkrétnych hardvérových úložiskách.

Kód je možné spúšťať a ladiť lokálne, ako pri každom vývojovom procese. Testovanie jednotiek zostáva rovnaké. Možnosť nasadiť celú aplikačnú infraštruktúru pomocou vlastnej konfigurácie zásobníka umožňuje vývojárom rýchlo získať dôležitú spätnú väzbu bez toho, aby sa museli obávať nákladov na testovanie alebo dopadu na drahé spravované prostredia.

Nástroje a techniky na vytváranie aplikácií bez servera

Neexistuje žiadny konkrétny spôsob vytvárania aplikácií bez servera. Rovnako ako súbor služieb pre túto úlohu. Lídrom medzi výkonnými bezserverovými riešeniami je dnes AWS, ale venujte pozornosť Google Cloud, čas и Firebase. Ak používate AWS, potom môžeme odporučiť ako prístup k zhromažďovaniu aplikácií Bezserverový aplikačný model (SAM), najmä pri používaní C#, pretože Visual Studio má skvelé nástroje. SAM CLI dokáže všetko, čo dokáže Visual Studio, takže nič nestratíte, ak prejdete na iné IDE alebo textový editor. SAM samozrejme funguje aj s inými jazykmi.

Ak píšete v iných jazykoch, Serverless Framework je vynikajúci nástroj s otvoreným zdrojovým kódom, ktorý vám umožňuje konfigurovať čokoľvek pomocou veľmi výkonných konfiguračných súborov YAML. Serverless Framework podporuje aj rôzne cloudové služby, preto ho odporúčame tým, ktorí hľadajú multi-cloudové riešenie. Má obrovskú komunitu, ktorá vytvorila množstvo doplnkov pre akúkoľvek potrebu.

Na lokálne testovanie sú vhodné open source nástroje Docker-Lambda, Serverless Local, DynamoDB Local a LocalStack. Bezserverové technológie sú stále v ranom štádiu vývoja, rovnako ako ich nástroje, takže pri nastavovaní zložitých testovacích scenárov budete musieť tvrdo pracovať. Jednoduché nasadenie zásobníka do prostredia a jeho otestovanie sa však ukazuje ako neuveriteľne lacné. A nemusíte vytvárať presnú lokálnu kópiu svojich cloudových prostredí.

Použite vrstvy AWS Lambda na zníženie veľkosti nasadených balíkov a zrýchlenie času načítania.

Pre konkrétne úlohy používajte správne programovacie jazyky. Rôzne jazyky majú svoje výhody a nevýhody. Existuje veľa benchmarkov, ale JavaScript, Python a C# (.NET Core 2.1+) sú lídrami z hľadiska výkonu AWS Lambda. AWS Lambda nedávno predstavila Runtime API, ktoré vám umožňuje špecifikovať požadovaný jazyk a runtime prostredie, takže experimentujte.

Udržujte malé veľkosti balíkov nasadenia. Čím sú menšie, tým rýchlejšie sa načítajú. Vyhnite sa používaniu veľkých knižníc, najmä ak z nich používate niekoľko funkcií. Ak programujete v JavaScripte, použite nástroje na zostavovanie, ako je Webpack, aby ste optimalizovali zostavu a zahrnuli len to, čo skutočne potrebujete. .NET Core 3.0 obsahuje QuickJit a Tied Compilation, ktoré zlepšujú výkon a výrazne pomáhajú pri studených štartoch.

Závislosť bezserverových funkcií na udalostiach môže spočiatku sťažiť koordináciu obchodnej logiky. Fronty správ a stavové automaty môžu byť v tomto smere neuveriteľne užitočné. Funkcie lambda sa môžu navzájom volať, ale robia to iba vtedy, ak neočakávate odpoveď ("vypáľ a zabudni") - nechcete dostávať poplatky za čakanie na dokončenie inej funkcie. Fronty správ sú užitočné na izoláciu častí obchodnej logiky, správu úzkych miest aplikácií a spracovanie transakcií (pomocou frontov FIFO). Funkcie AWS Lambda možno priradiť k frontom SQS ako zaseknuté fronty správ, ktoré sledujú neúspešné správy pre neskoršiu analýzu. AWS Step Functions (stavové automaty) sú veľmi užitočné na riadenie zložitých procesov, ktoré vyžadujú reťazenie funkcií. Namiesto funkcie Lambda volajúcej inú funkciu môžu funkcie Step koordinovať prechody stavov, odovzdávať údaje medzi funkciami a spravovať globálny stav funkcií. To vám umožňuje definovať podmienky opakovania alebo čo robiť, keď sa vyskytne špecifická chyba – za určitých podmienok je to veľmi výkonný nástroj.

Záver

V posledných rokoch sa bezserverové technológie vyvíjajú bezprecedentným tempom. S touto zmenou paradigmy sú spojené určité mylné predstavy. Abstrahovaním infraštruktúry a riadením škálovateľnosti ponúkajú riešenia bez serverov významné výhody, od zjednodušeného vývoja a procesov DevOps až po veľké zníženie prevádzkových nákladov.
Aj keď bezserverový prístup nie je bez svojich nedostatkov, existujú spoľahlivé návrhové vzory, ktoré možno použiť na vytváranie robustných bezserverových aplikácií alebo integráciu bezserverových prvkov do existujúcich architektúr.

Zdroj: hab.com

Pridať komentár