Programovanie

Čo je to serverless? Vysvetlenie výpočtov bez servera

Vývojári trávia nespočetné hodiny riešením obchodných problémov s kódom. Potom je na rade operačný tím, aby strávil nespočetné množstvo hodín, najskôr zistil, ako získať kód, ktorý vývojári napíšu a spustili na ľubovoľných počítačoch, ktoré sú k dispozícii, a potom zaistil bezproblémový chod týchto počítačov. Druhá časť je skutočne nikdy sa nekončiacou úlohou. Prečo túto časť nenechať na niekoho iného?

Mnoho inovácií v oblasti IT za posledné dve desaťročia - virtuálne stroje, cloudové výpočty, kontajnery - sa sústredilo na to, aby ste nemuseli myslieť príliš na základný fyzický stroj, na ktorom beží váš kód. Výpočty bez servera sú čoraz obľúbenejšou paradigmou, ktorá vedie túto túžbu k logickému záveru: Pri výpočtoch bez servera nemusíte vedieť čokoľvek o hardvéri alebo operačnom systéme, na ktorom beží váš kód, pretože o všetko sa postará poskytovateľ služieb.

Čo je to výpočet bez servera?

Výpočty bez servera sú modelom spustenia pre cloud, v ktorom poskytovateľ cloudu dynamicky prideľuje - a potom účtuje používateľovi - iba výpočtové zdroje a úložisko potrebné na vykonanie konkrétnej časti kódu. Prirodzene stále existujú servery, ale o ich zabezpečenie a údržbu sa v plnej miere stará poskytovateľ. Chris Munns, obhajca spoločnosti Amazon pre server, na konferencii v roku 2017 uviedol, že z pohľadu tímu, ktorý píše a nasadzuje kód, „neexistujú vôbec žiadne servery, ktoré by bolo možné spravovať alebo poskytovať. To nezahŕňa nič, čo by bolo číre, nič, čo by bolo virtuálne, nič, čo by bolo kontajnerom - nič, čo by zahŕňalo správu hostiteľa, opravu hostiteľa alebo čokoľvek s operáciou na úrovni operačného systému, nie je v tomto prípade potrebné robiť. svet bez serverov. “

Ako vysvetľuje vývojár Mike Roberts, tento pojem sa kedysi používal pre tzv back-end-as-a-service scenáre, kedy by sa mobilná aplikácia pripojila k serveru typu back-end hostenému výlučne v cloude. Ale dnes, keď ľudia hovoria o výpočte bez servera alebo bezserverová architektúra, majú na mysli funkcia ako služba ponuky, do ktorých zákazník napíše tento kód iba rieši obchodnú logiku a nahráva ju poskytovateľovi. Tento poskytovateľ sa stará o všetky poskytovanie hardvéru, správu virtuálnych strojov a kontajnerov a dokonca aj úlohy ako multithreading, ktoré sú často zabudované do aplikačného kódu.

Funkcie bez servera sú udalosťami riadené, čo znamená, že kód je vyvolaný, iba ak je vyvolaný požiadavkou. Poskytovateľ účtuje iba paušálny mesačný poplatok za údržbu fyzického alebo virtuálneho servera, ktorý spotrebuje dané spustenie. Tieto funkcie možno vzájomne prepojiť a vytvoriť tak spracovateľský kanál alebo môžu slúžiť ako komponenty väčšej aplikácie pri interakcii s iným kódom bežiacim v kontajneroch alebo na bežných serveroch.

Výhody a nevýhody výpočtov bez servera

Z tohto popisu by mali byť zrejmé dve z najväčších výhod výpočtov bez servera: vývojári sa môžu sústrediť na obchodné ciele kódu, ktorý napíšu, a nie na otázky infraštruktúry; a organizácie platia za výpočtové zdroje, ktoré skutočne používajú, veľmi granulárnym spôsobom, namiesto nákupu fyzického hardvéru alebo prenájmu cloudových inštancií, ktoré väčšinou nečinne fungujú.

Ako zdôrazňuje Bernard Golden, tento posledný bod je obzvlášť výhodný pre aplikácie založené na udalostiach. Napríklad môžete mať aplikáciu, ktorá je väčšinu času nečinná, ale za určitých podmienok musí zvládnuť veľa žiadostí o udalosti naraz. Alebo môžete mať aplikáciu, ktorá spracováva údaje odosielané zo zariadení IoT s obmedzeným alebo prerušovaným pripojením na internet. V obidvoch prípadoch by tradičný prístup vyžadoval zabezpečenie mohutného servera, ktorý by zvládol špičkové pracovné kapacity - ale tento server by bol väčšinu času nedostatočne využívaný. Pri architektúre bez servera platíte iba za prostriedky servera, ktoré skutočne používate. Výpočty bez servera by boli dobré aj pre konkrétne druhy dávkového spracovania. Jedným z kanonických príkladov prípadu použitia architektúry bez servera je služba, ktorá nahrá a spracuje sériu jednotlivých obrazových súborov a odošle ich spolu s inou časťou aplikácie.

Asi najzrejmejšou nevýhodou funkcií bez servera je to, že sú úmyselne pominuteľné a, ako hovorí AlexSoft, „nevhodné na dlhodobé úlohy“. Väčšina poskytovateľov bez servera nenechá váš kód spustiť dlhšie ako pár minút a pri zapnutí funkcie nezachová žiadne stavové údaje z predtým spustených inštancií. Súvisiacim problémom je, že roztočenie kódu bez servera môže trvať až niekoľko sekúnd - to nie je problém pre mnoho prípadov použitia, ale ak vaša aplikácia vyžaduje nízku latenciu, budete varovaní.

Mnoho ďalších negatívnych stránok, ako zdôraznili Rohit Akiwatkar a Gary Arora, súvisí so zablokovaním predajcu. Aj keď sú k dispozícii možnosti otvoreného zdroja, na trhu bez serverov dominujú veľkí poskytovatelia komerčného cloudu, o čom si ešte niečo povieme. To znamená, že vývojári často používajú nástroje od svojich dodávateľov, čo sťažuje ich výmenu, ak sú nespokojní. A pretože toľko serverových výpočtov sa deje, samozrejme, na infraštruktúre dodávateľa, môže byť ťažké integrovať kód bez servera do interného vývojového a testovacieho kanálu.

Predajcovia bez servera: AWS Lambda, Azure Functions a Google Cloud Functions

Moderná doba výpočtov bez serverov sa začala spustením AWS Lambda, platformy založenej na cloudovej službe Amazonu, v roku 2014. Spoločnosť Microsoft nasledovala v roku 2016 funkciou Azure Functions. Google Cloud Functions, ktorá je v beta verzii od roku 2017, konečne dosiahla produkčný stav v júli 2018. Tieto tri služby majú mierne odlišné obmedzenia, výhody, podporované jazyky a spôsoby konania. Rohit Akiwatkar má dobrý a podrobný prehľad o rozdieloch medzi týmito tromi. V prevádzke je aj IBM Cloud Functions, ktorá je založená na open source platforme Apache OpenWhisk.

Medzi všetkými bezserverovými výpočtovými platformami je AWS Lambda najvýznamnejšia a zjavne mala najviac času na vývoj a vývoj. obsahuje informácie o aktualizáciách a nových funkciách pridaných do AWS Lambda za posledný rok.

Stohy bez serverov

Ako je to v mnohých softvérových sférach, svet bez serverov zaznamenal vývoj komíny softvéru, ktoré spájajú rôzne komponenty potrebné na zostavenie aplikácie bez servera. Každý stoh pozostáva z a programovanieJazyk že napíšete kód, aplikačný rámec , ktorá poskytuje štruktúru vášho kódu a množinu spúšťa platforma to pochopí a použije na zahájenie vykonávania kódu.

Aj keď v každej z týchto kategórií môžete kombinovať rôzne konkrétne ponuky, existujú určité obmedzenia, ktoré sa prekrývajú v závislosti od toho, ktorého dodávateľa používate. Napríklad pre jazyky môžete na AWS Lambda používať Node.js, Java, Go, C # a Python, ale na funkciách Azure natívne fungujú iba JavaScript, C # a F #. Pokiaľ ide o spúšťače, AWS Lambda má najdlhší zoznam, ale veľa z nich je špecifických pre platformu AWS, ako napríklad Amazon Simple Email Service a AWS CodeCommit; Funkcie Google Cloud Functions sa zatiaľ dajú spustiť pomocou všeobecných požiadaviek HTTP. Paul Jaworski podrobne skúma hromady každej z troch veľkých ponúk.

Bezserverové rámce

Stojí za to trochu sa zdržiavať na rámec časť rovnice, pretože to bude veľa definovať o tom, ako nakoniec zostavíte svoju aplikáciu. Amazon má svoju vlastnú natívnu ponuku, open source Serverless Application Model (SAM), existujú však aj ďalšie, z ktorých väčšina je multiplatformová a tiež otvorená. Jeden z najpopulárnejších sa nazýva skôr Serverless a zdôrazňuje, že poskytuje rovnaký zážitok pre každú podporovanú platformu, tj AWS Lambda, Azure Functions, Google Cloud Functions a IBM OpenWhisk. Ďalšou populárnou ponukou je Apex, ktorý môže pomôcť dostať do konfliktu niektoré jazyky, ktoré sú pre niektorých poskytovateľov inak nedostupné.

Databázy bez servera

Ako sme už uviedli vyššie, jedným z problémov pri práci s kódom bez servera je skutočnosť, že nemá trvalý stav, čo znamená, že hodnoty miestnych premenných nepretrvávajú v rámci inštancií. Všetky trvalé údaje, ku ktorým váš kód potrebuje, musia byť uložené inde a spúšťače dostupné v zásobníkoch pre hlavných dodávateľov zahŕňajú všetky databázy, s ktorými môžu vaše funkcie interagovať.

Niektoré z týchto databáz sa označujú ako bez servera. To znamená, že sa správajú podobne ako iné funkcie bez servera, o ktorých sme hovorili v tomto článku, so zjavnou výnimkou, že údaje sa ukladajú na neurčito. Ale veľká časť réžie riadenia, ktorá sa týka zabezpečenia a údržby databázy, je odložená bokom. Ako hovorí vývojár Jeremy Daly: „Všetko, čo musíte urobiť, je nakonfigurovať klaster a potom bude za vás automaticky spracovaná všetka údržba, oprava, zálohovanie, replikácia a zmena mierky.“ Rovnako ako v prípade ponúk fungujúcich ako služba platíte iba za výpočtový čas, ktorý skutočne použijete, a zdroje sa podľa potreby roztáčajú a znižujú podľa potreby.

Všetci traja veľkí poskytovatelia bez serverov ponúkajú svoje vlastné databázy bez serverov: Amazon má Aurora Serverless a DynamoDB, Microsoft má Azure Cosmos DB a Google má Cloud Firestore. Toto však nie sú jediné dostupné databázy. Nemanja Novkovic má informácie o ďalších ponukách.

Výpočty bez servera a Kubernetes

Kontajnery pomáhajú napájať technológiu bez servera pod kapotou, ale o ich správu sa stará predajca, a preto je pre používateľa neviditeľná. Mnohí vidia výpočty bez serverov ako spôsob, ako získať mnoho výhod kontajnerovaných mikroslužieb bez toho, aby sa museli zaoberať ich zložitosťou, a dokonca začínajú hovoriť o svete po kontajneri.

V skutočnosti budú kontajnery a výpočty bez serverov takmer určite koexistovať ešte veľa rokov a v skutočnosti môžu funkcie bez serverov existovať v rovnakej aplikácii ako kontajnerové mikroslužby. Kubernetes, najobľúbenejšia platforma na orchestráciu kontajnerov, môže tiež spravovať infraštruktúru bez servera. S Kubernetes môžete skutočne integrovať rôzne typy služieb do jedného klastra.

Bez servera offline

Možno budete mať nádej, že začnete pracovať s výpočtami bez serverov, trochu zastrašujúco, pretože sa zdá, že by ste sa museli zaregistrovať u dodávateľa, aby ste sa pohrali a zistili, ako to funguje. Ale nebojte sa: Existujú spôsoby, ako spustiť kód bez servera offline na vašom vlastnom lokálnom hardvéri. Napríklad AWS SAM poskytuje miestnu funkciu, ktorá vám umožňuje testovať kód Lambda offline. A ak používate aplikačný rámec Serverless, vyskúšajte serverless-offline, doplnok, ktorý vám umožní lokálne spustiť kód. Šťastné experimentovanie!

$config[zx-auto] not found$config[zx-overlay] not found