Programovanie

Bez servera v cloude: AWS vs. Google Cloud vs. Microsoft Azure

Ak vás niekedy zobudili o tretej ráno, pretože server pokazil cestu, pochopíte príťažlivosť módneho slova typu „bez servera“. Konfigurácia strojov môže trvať hodiny, dni alebo niekedy aj týždne a potom ich treba neustále aktualizovať, aby opravili chyby a bezpečnostné diery. Tieto aktualizácie zvyčajne prinášajú svoje vlastné ťažkosti, pretože nové aktualizácie spôsobujú nekompatibilitu, ktorá si vynúti ďalšie aktualizácie, alebo sa to zdá ad infinitum.

Nekonečný reťazec bolesti hlavy pri spustení servera je jedným z dôvodov, prečo sa veľké cloudové spoločnosti rozhodli pre architektúru „bez servera“. Vedia, že šéf už príliš dlho počul výhovorky - server to, server that. Ak by sme sa mohli zbaviť iba týchto serverov, šéf musí myslieť.

Je to úžasný termín predaja, jediným problémom je, že to nie je úplne pravda. Tieto aplikácie sú bez serverov rovnakým spôsobom ako reštaurácie bez kuchyne. Ak je v ponuke to, čo chcete, a páči sa vám, ako to kuchár pripravuje, je skvelé posedieť si v reštaurácii. Ale ak chcete iné jedlo, ak chcete iné korenie, dobre, radšej si zaobstarajte vlastnú kuchyňu.

Amazon, Google a Microsoft sú tri z väčších spoločností, ktoré bojujú s hostením aplikácií budúcnosti, a dúfajú, že budú napísané na ich bezserverové API a spravované prostredníctvom ich automatizačnej vrstvy. Ak platformy robia to, čo chcete - a nové modely sú celkom všeobecné - môže to byť najjednoduchší a najrýchlejší spôsob, ako vytvoriť svoju vlastnú webovú aplikáciu Unicorn v hodnote niekoľkých miliárd dolárov. Píšete iba rozhodujúce časti logiky a platforma zvláda všetky podrobnosti.

Funkcie bez servera sa stávajú lepiacim alebo skriptovacím jazykom, ktorý spája všetky cloudové funkcie. Nástroje na mapovanie alebo AI, ktoré boli kedysi dosť nezávislé, sú teraz prepojené prostredníctvom funkcií bez serverov riadených udalosťami. Teraz môžete viac svojej práce vyriešiť požiadavkami, ktoré sa vlnia a odrážajú sa v rôznych rohoch každého cloudu, čo sa spúšťa a spúšťa na základe toku udalostí. Ak chcete preskúmať strojové učenie a použiť ho na analýzu svojich údajov, jedným z najrýchlejších spôsobov, ako to urobiť, je vytvoriť aplikáciu bez servera a začať odosielať udalosti do rohu strojového učenia v cloude.

Implicitným prísľubom je, že krájanie všetkého tenšieho na plátky uľahčuje zdieľanie zdrojov v cloude. V minulosti by každý zúrivo vytváral nové inštancie, napríklad so serverom Ubuntu, ktorý beží na jeho vlastnom virtuálnom stroji. Každý používal rovnaký OS a bol duplikovaný mnohokrát na rovnakom skutočnom boxe, ktorý predstieral, že je tucet alebo viac virtuálnych boxov Ubuntu. Operácie bez servera sa vyhnú všetkej tejto duplikácii, čo výrazne zlacní cloudové výpočty, najmä pre úlohy, ktoré fungujú sporadicky a nikdy skutočne nezaseknú starú schránku vo vašej klimatizovanej serverovej miestnosti.

Všetky tieto výhody majú samozrejme skryté náklady. Ak niekedy budete chcieť opustiť alebo presunúť svoj kód na iný web, pravdepodobne by ste uviazli pri prepisovaní väčšiny zásobníka. Rozhrania API sú rôzne. Aj keď v prípade populárnych jazykov, ako je JavaScript, existuje určitá štandardizácia, k vlastníctvu majú dosť blízko. Je tu veľa príležitostí na uzamknutie.

Aby som pochopil príťažlivosť možností bez servera, strávil som nejaký čas zostavením niekoľkých funkcií a prehrabávaním sa v hromádkach. Nenapísal som veľa kódu, ale o to išlo. Strávil som viac času klikaním na tlačidlá a písaním do webových formulárov, aby som všetko nakonfiguroval. Pamätáte si, keď sme všetko konfigurovali pomocou XML a potom JSON? Teraz vyplníme webový formulár a cloud to urobí za nás. Stále musíte myslieť ako programátor, aby ste pochopili, čo sa deje v zákulisí a mimo vašu kontrolu.

AWS Lambda

AWS Lambda rastie do vrstvy shell skriptu pre celý cloud spoločnosti Amazon. Je to základný systém, ktorý vám umožní vložiť funkcie, ktoré reagujú na udalosti, ktoré môžu byť generované takmer ľubovoľnou časťou rozsiahlej cloudovej infraštruktúry Amazonu. Ak sa na S3 nahrá nový súbor, môžete ho nechať spustiť funkciou, ktorá s ním urobí niečo zaujímavé. Ak sa niektoré video transkóduje pomocou Amazon Elastic Transcoder, môžete mať funkciu Lambda, ktorá čaká na spustenie po dokončení. Tieto funkcie zase môžu spustiť ďalšie operácie Lambda alebo možno iba niekomu poslať aktualizáciu.

Funkcie Lambda môžete písať v jazykoch JavaScript (Node.js), Python, Java, C # a Go. Vzhľadom na to, že do týchto jazykov je možné vložiť mnoho ďalších jazykov, je celkom možné spustiť ďalší kód, napríklad Haskell, Lisp alebo dokonca C ++. (Pozrite si tento príbeh na kompiláciu starších jazykov C ++ do knižnice, ktorá sa má použiť s AWS Lambda.)

Písanie funkcií Lambda sa často zdá oveľa zložitejšie, ako čakáte, pretože Amazon ponúka toľko možností konfigurácie a optimalizácie. Aj keď je technicky pravda, že môžete napísať iba pár riadkov kódu a dokázať veľké veci, mal som pocit, že som potom musel venovať viac času konfigurácii fungovania kódu. Veľa z toho sa dosiahne vyplnením formulárov v prehliadači namiesto zadávania do textových súborov. Občas sa zdá, že sme práve vymenili textový editor za formu prehliadača, ale to je cena za zachovanie všetkej flexibility, ktorú Amazon poskytuje používateľovi Lambda.

Niektoré z ďalších krokov spočívajú v tom, že spoločnosť Amazon vystavila používateľovi viac možností a očakáva viac od prvého autora funkcií. Po dokončení písania funkcie v spoločnosti Google alebo Microsoft som mohol prehliadač nasmerovať na správnu adresu URL a okamžite ju otestovať. Amazon ma nechal kliknúť, aby som nakonfiguroval bránu API a otvoril pravú dieru vo firewalle.

Nakoniec všetko toto kliknutie pridá vrstvu držania, ktorá robí prácu o niečo ľahšou ako začatie textového súboru. Keď som vytváral jednu funkciu, prehliadač dostal varovanie: „Táto funkcia obsahuje externé knižnice.“ V časoch čistého uzla to bolo niečo, od čoho by som len čakal, že sa to dozviem, alebo by som sa to naučil googlením chybovej správy pri prekrížení prstov v nádeji, že odpoveď bude vonku. Teraz sa rúti mrak, aby pomohol.

Amazon má množstvo ďalších možností, ktoré sú takmer rovnako „bez servera“ ako AWS Lambda, ak znamená bez servera, že vás odbremení od práce so správou servera. Má elastické nástroje, ako sú Amazon EC2 Auto Scaling a AWS Fargate, ktoré otáčajú a vypínajú servery, a AWS Elastic Beanstalk, ktorý prevezme váš nahraný kód, nasadí ho na webové servery a spravuje vyvažovanie a zmenu mierky. S mnohými z týchto automatizačných nástrojov samozrejme zodpovedáte za vytvorenie obrazu servera.

Jednou z užitočnejších ponúk je AWS Step Functions, akýsi nástroj na vývojové diagramy bez kódu na vytváranie stavových strojov na modelovanie toho, čo softvéroví architekti nazývajú pracovný tok. Súčasťou problému je, že všetky funkcie bez servera majú byť úplne bez stavu, niečo, čo funguje, keď presadzujete dosť základnú obchodnú logiku, ale to môže byť trochu nočná mora, keď prechádzate nejakého klienta cez kontrolný zoznam alebo vývojový diagram. Neustále chodíte do databázy, aby ste znova načítali informácie o klientovi. Krokové funkcie lepia dohromady funkcie Lambda so stavom.

Google Cloud Functions a Firebase

Ak je vaším cieľom zbavenie sa problémov s konfiguráciou serverov, Google Cloud má množstvo služieb, ktoré ponúkajú rôzne úrovne slobody od vecí, ako je potreba hesla root alebo dokonca vôbec použitie príkazového riadku.

Počnúc produktom Google App Engine v roku 2008 spoločnosť Google pomaly pridávala rôzne možnosti „bez servera“ s rôznymi kombináciami správ a transparentnosti údajov. Ten s názvom Google Cloud Pub / Sub pred vami skryje frontu správ, takže stačí napísať kód pre výrobcu a spotrebiteľa údajov. Google Cloud Functions ponúka výpočty založené na udalostiach pre mnoho hlavných produktov vrátane niektorých nástrojov na výber a API. A potom je tu Google Firebase, databáza steroidov, ktorá vám umožní primiešať kód JavaScript do vrstvy na ukladanie údajov, ktorá poskytuje údaje vášmu klientovi.

Z nich je pre mňa Firebase najzaujímavejší. Niektorí tvrdia, že databázy boli pôvodnou aplikáciou bez servera, ktorá odoberala dátové štruktúry a práce na diskových úložiskách a dodávala všetky informácie cez port TCP / IP. Firebase túto abstrakciu privádza do extrému pridaním kódu JavaScript a zasielania správ, vďaka ktorým urobíte takmer všetko, čo by ste chceli s infraštruktúrou na strane servera vrátane autentifikácie. Z technického hľadiska je to iba databáza, ale dokáže spracovať väčšinu obchodnej logiky a správ pre váš zásobník. Trochu klientskeho kódu HTML, CSS, JavaScript a Firebase sa skutočne dá prekonať.

Možno vás bude lákať nazývať vrstvy JavaScriptu Firebase „uložené procedúry“, rovnako ako to robila spoločnosť Oracle, ale to by chýbalo celému obrazu. Kód Firebase je napísaný v JavaScripte, takže bude bežať v lokálnej verzii Node.js. Do tejto vrstvy môžete vložiť veľkú časť obchodnej logiky, pretože svet uzla je už naplnený knižnicami na spracovanie tohto pracovného toku. Navyše si budete užívať potešenie z izomorfného kódu, ktorý beží na klientovi, serveri a teraz aj v databáze.

Časť, ktorá mi padla do oka, bola synchronizačná vrstva zabudovaná do Firebase. Bude synchronizovať kópie objektov z databázy v celej sieti. Trik spočíva v tom, že svoju klientsku aplikáciu môžete nastaviť iba ako ďalší databázový uzol, ktorý sa prihlási na odber všetkých zmien relevantných údajov (a iba relevantných údajov). Ak sa údaje menia na jednom mieste, menia sa všade. Môžete sa vyhnúť všetkým nepríjemnostiam pri zasielaní správ a sústrediť sa iba na zápis informácií do Firebase, pretože Firebase ich replikuje tam, kde to bude potrebné.

Nemusíte sa sústrediť iba na Firebase. Základnejšia funkcia Google Cloud Functions je jednoduchší prístup k vkladaniu prispôsobeného kódu do celého cloudu Google. V súčasnosti je Cloud Functions do veľkej miery iba možnosťou písania kódu Node.js, ktorý bude bežať v predkonfigurovanom prostredí Node. Zatiaľ čo zvyšok platformy Google Cloud Platform podporuje širokú škálu jazykov - od Javy a C # po Go, Python a PHP - Cloud Functions je striktne obmedzený na JavaScript a Node. Objavili sa náznaky, že prichádzajú ďalšie jazykové možnosti, a nebol by som prekvapený, keby sa čoskoro objavili.

Funkcia Google Cloud Functions nesiaha tak hlboko do služby Google Cloud, ako AWS Lambda siaha do AWS, aspoň v tomto okamihu. Keď som sa popozeral pohľadom na vytváranie funkcie na interakciu s dokumentmi Google, zistil som, že asi budem musieť použiť REST API a napísať kód do niečoho, čo sa volá Apps Script. Inými slovami, svet služby Dokumenty Google má svoje vlastné rozhranie REST API, ktoré bolo bez servera dlho pred vytvorením módneho slova.

Stojí za zmienku, že Google App Engine je stále silný. Na začiatku ponúkal iba rozbehnutie aplikácií v jazyku Python, aby uspokojil dopyt každého, kto príde na webovú stránku. V priebehu rokov sa však rozšíril tak, aby zvládol množstvo rôznych jazykových runtime. Po zbalení kódu do spustiteľného súboru App Engine spracuje proces spustenia dostatočného počtu uzlov na spracovanie vašej premávky, pričom sa bude postupovať podľa toho, ako vaši používatelia odosielajú žiadosti.

Stále treba pamätať na niekoľko prekážok. Rovnako ako v prípade cloudových funkcií, aj váš kód musí byť napísaný relatívne bez štátnej príslušnosti a každú požiadavku musí dokončiť v obmedzenom čase. Ale App Engine neodhodí všetko lešenie alebo nezabudne na všetko medzi požiadavkami. App Engine bol veľkou súčasťou revolúcie bez serverov a zostáva najdostupnejšou pre tých, ktorí držia jednu nohu späť v starej školskej metóde budovania vlastného zásobníka v jazykoch Python, PHP, Java, C # alebo Go.

Funkcie Microsoft Azure

Spoločnosť Microsoft samozrejme pracuje rovnako tvrdo ako ostatní, aby sa ubezpečila, že ľudia môžu robiť všetky tieto chytré veci bez servera aj s cloudom Azure. Spoločnosť vytvorila svoje vlastné základné funkcie pre žonglovanie s udalosťami - Azure Functions - a vybudovala niekoľko sofistikovaných nástrojov, ktoré sú pre programátorov ešte prístupnejšie.

Najväčšou výhodou spoločnosti Microsoft môže byť jej zbierka aplikácií balíka Office, bývalých spustiteľných súborov pre počítače, ktoré pomaly, ale isto migrujú do cloudu. Jedno účtovanie výnosov z cloudu skutočne zvýhodnilo Microsoft pred Amazonom, čiastočne sústredením časti jeho výnosov z Office do prchavej rubriky „cloud“.

Jeden z najlepších príkladov z dokumentácie k Azure Functions ukazuje, ako je možné spustiť cloudovú funkciu, keď niekto uloží tabuľku na OneDrive. Zrazu malí škriatkovia v oblaku ožívajú a robia veci do tabuľky. Toto bude určite dar z nebies pre IT obchody podporujúce tímy, ktoré milujú svoje tabuľky Excel (alebo iné dokumenty balíka Office). Môžu písať Azure Functions, aby mohli robiť prakticky čokoľvek. Často si myslíme, že HTML a web sú jediným rozhraním pre cloud, ale nie je dôvod, prečo to nemôže byť prostredníctvom formátov dokumentov, ako sú Microsoft Word alebo Excel.

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