Programiranje

Brez strežnika v oblaku: AWS v primerjavi z Google Cloud v primerjavi z Microsoft Azure

Če so vas kdaj prebudili ob 3. uri zjutraj, ker je strežnik zašel, boste razumeli privlačnost modne besede, kot je »brez strežnika«. Naprave lahko trajajo ure, dneve ali včasih celo tedne, nato pa jih je treba nenehno posodabljati, da odpravijo napake in varnostne luknje. Te posodobitve ponavadi povzročajo lastne težave, ker nove posodobitve povzročajo nezdružljivosti, zaradi katerih so potrebne druge posodobitve ali pa se zdi tako neskončno.

Neskončna veriga preglavic pri zagonu strežnika je eden od razlogov, da so velika oblačna podjetja sprejela arhitekturo brez strežnika. Vedo, da je šef že predolgo slišal izgovore - strežnik ta, strežnik tisti. Če bi se lahko le znebili teh strežnikov, mora šef razmišljati.

To je čudovit prodajni izraz, edina težava je, da ni povsem resničen. Te aplikacije so brez strežnika na enak način kot restavracije brez kuhinje. Če je na meniju tisto, kar želite, in vam je všeč, kako ga kuhar pripravi, je posedanje v restavraciji super. Če pa želite drugačno jed, če želite drugačne začimbe, si raje priskrbite svojo kuhinjo.

Amazon, Google in Microsoft so tri večja podjetja, ki se borijo za gostovanje aplikacij prihodnosti, tista, za katera upajo, da bodo zapisana v njihov API brez strežnika in upravljana prek njihovega sloja avtomatizacije. Če platforme naredijo, kar želite - in so novi modeli precej splošni - so lahko najpreprostejši in najhitrejši način za ustvarjanje lastne spletne aplikacije za samoroge z več milijardami dolarjev. Napišete samo ključne logične koščke in platforma obravnava vse podrobnosti.

Brez strežniške funkcije postajajo lepilo ali skriptni jezik, ki povezuje vse funkcije oblaka. Orodja za preslikavo ali umetno inteligenco, ki so bila nekoč dokaj neodvisna, se zdaj povezujejo prek brez strežniških funkcij, ki jih vodijo dogodki. Zdaj je več vašega dela mogoče rešiti s prošnjami, ki se valijo in odbijajo skozi različne kote vsakega oblaka, sprožijo in sprožijo tok dogodkov. Če želite raziskati strojno učenje in ga uporabiti za analizo podatkov, je eden najhitrejših načinov to, da ustvarite aplikacijo brez strežnika in začnete pošiljati dogodke v kotiček za strojno učenje v oblaku.

Implicitna obljuba je, da rezanje vsega tanjšega olajša skupno rabo virov v oblaku. V preteklosti bi vsi mrzlično ustvarjali nove primerke z recimo strežnikom Ubuntu, ki se izvaja v svojem navideznem računalniku. Vsi so uporabljali isti operacijski sistem in bil je podvojen milijon krat na istem pravem polju, ki se je pretvarjalo, da je ducat ali več virtualnih polj Ubuntu. Brez strežniških operacij se izognemo vsemu podvajanju, zato je računalništvo v oblaku dramatično cenejše, zlasti za dela, ki delujejo občasno in nikoli niso zataknila stare škatle v vaši klimatizirani strežniški sobi.

Seveda ima vse to udobje skrite stroške. Če boste kdaj želeli zapustiti ali premakniti kodo na drugo spletno mesto, boste verjetno zataknili pri prepisovanju večine sklada. API-ji so različni in čeprav obstaja nekaj standardizacije okoli priljubljenih jezikov, kot je JavaScript, so zelo blizu lastniškim. Obstaja veliko priložnosti za zaklepanje.

Da bi razumel privlačnost brezstrežniških možnosti, sem nekaj časa gradil nekaj funkcij in se potepal po skladovnicah. Nisem napisal veliko kode, ampak to je bilo bistvo. Več časa sem porabil za klikanje gumbov in tipkanje v spletne obrazce, da sem vse konfiguriral. Se spomnite, kdaj smo vse konfigurirali z XML in nato JSON? Zdaj izpolnimo spletni obrazec in oblak to naredi namesto nas. Še vedno pa morate razmišljati kot programer, da boste razumeli, kaj se dogaja v zakulisju in zunaj vašega nadzora.

AWS Lambda

AWS Lambda prerašča v sloj lupine za celoten Amazonov oblak. Gre za osnovni sistem, ki vam omogoča vdelavo funkcij, ki se odzivajo na dogodke, ki bi jih lahko ustvaril skoraj kateri koli del obsežne Amazonove infrastrukture v oblaku. Če je nova datoteka naložena v S3, lahko sprožite funkcijo, ki z njo počne nekaj zanimivega. Če Amazon Elastic Transcoder transkodira nekaj videoposnetkov, lahko funkcija Lambda čaka, da se sproži, ko se konča. Te funkcije pa lahko sprožijo druge Lambda operacije ali morda preprosto pošljejo nekomu posodobitev.

Lambda funkcije lahko pišete v JavaScript (Node.js), Python, Java, C # in Go. Glede na to, da lahko ti jeziki vdelajo številne druge jezike, je povsem mogoče zagnati tudi druge kode, kot so Haskell, Lisp ali celo C ++. (Oglejte si to zgodbo o sestavljanju starega C ++ v knjižnico za uporabo z AWS Lambda.)

Pisanje Lambda funkcij se pogosto zdi veliko bolj zapleteno, kot pričakujete, ker Amazon ponuja toliko možnosti za konfiguracijo in optimizacijo. Čeprav je tehnično res, da lahko napišete le nekaj vrstic kode in dosežete odlične stvari, se mi je zdelo, da bi potem moral več časa nameniti konfiguriranju delovanja kode. Velik del tega se doseže z izpolnjevanjem obrazcev v brskalniku, namesto da se vnašajo v besedilne datoteke. Včasih se zdi, kot da smo pravkar zamenjali urejevalnik besedil za obrazec brskalnika, vendar je to cena ohranjanja vse prilagodljivosti, ki jo Amazon razširja na uporabnika Lambda.

Nekateri dodatni koraki so posledica tega, da Amazon uporabniku izpostavi več možnosti in pričakuje več od prvega zapisovalnika funkcij. Ko sem napisal funkcijo v Googlu ali Microsoftu, sem lahko brskalnik usmeril na pravi URL in ga takoj preizkusil. Amazon me je kliknil za konfiguracijo prehoda API in odpiranje prave luknje v požarnem zidu.

Na koncu vse to klikanje doda plast držanja, ki delo olajša le nekoliko manj kot začetek z besedilno datoteko. Ko sem ustvarjal eno funkcijo, je imel brskalnik opozorilo: "Ta funkcija vsebuje zunanje knjižnice." V časih čistega vozlišča je bilo to nekaj, kar bi od mene pričakovali, ali pa bi se tega naučil tako, da sem z Googlom sporočil o napaki, medtem ko sem prekrižal prste in upal, da je odgovor tam. Zdaj oblak hiti na pomoč.

Amazon ima še vrsto drugih možnosti, ki so približno tako brez strežnikov kot AWS Lambda, če brez strežnika pomeni, da vas razbremeni opravil za upravljanje strežnikov. Ima elastična orodja, kot sta Amazon EC2 Auto Scaling in AWS Fargate, ki zavrtita in zaustavijo strežnike, in AWS Elastic Beanstalk, ki prevzame naloženo kodo, jo razporedi na spletne strežnike ter skrbi za uravnoteženje in spreminjanje obremenitve. Z mnogimi od teh orodij za avtomatizacijo ste seveda še vedno odgovorni za ustvarjanje slike strežnika.

Ena izmed bolj uporabnih ponudb je AWS Step Functions, nekakšno orodje za diagrame poteka brez kode za ustvarjanje državnih strojev za modeliranje, kar arhitekti programske opreme imenujejo potek dela. Del vprašanja je v tem, da naj bi bile vse funkcije brez strežnika popolnoma brez stanja, kar deluje, ko uveljavljate precej osnovno poslovno logiko, kar pa je lahko nočna mora, ko nekoga kličete skozi kontrolni seznam ali diagram poteka. Nenehno greste v bazo podatkov, da znova naložite podatke o odjemalcu. Funkcije koraka lepijo Lambda funkcije s stanjem.

Google Cloud Functions in Firebase

Če je vaš cilj znebiti se težav pri konfiguriranju strežnikov, ima Google Cloud številne storitve, ki ponujajo različne količine svobode pred stvarmi, kot je uporaba korenskega gesla ali celo uporaba ukazne vrstice.

Začenši z Google App Engineom leta 2008, Google počasi dodaja različne možnosti brez strežnika z različnimi kombinacijami sporočil in preglednosti podatkov. Google Cloud Pub / Sub, ki se imenuje Google Cloud Pub / Sub, od vas skrije čakalno vrsto sporočil, zato morate samo napisati kodo za proizvajalca in potrošnika podatkov. Google Cloud Functions ponuja izračunavanje na podlagi dogodkov za številne glavne izdelke, vključno z nekaterimi orodji za označevanje in API-ji. Potem je tu še Google Firebase, baza podatkov o steroidih, ki vam omogoča mešanje kode JavaScript v sloj za shranjevanje podatkov, ki podatke posreduje vaši stranki.

Od njih mi je najbolj zanimiv Firebase. Nekateri menijo, da so bile baze podatkov prvotna aplikacija brez strežnika, ki je odvzela podatkovne strukture in opravila za shranjevanje na disku, da bi vse informacije dostavila prek vrat TCP / IP. Firebase to abstrakcijo postavi do skrajnosti, tako da doda tudi kodo JavaScript in sporočila, da naredi skoraj vse, kar boste morda želeli storiti s strežniško infrastrukturo, vključno z avtentikacijo. Tehnično gre zgolj za bazo podatkov, ki pa lahko obvlada večino poslovne logike in sporočil za vaš sklad. Resnično se lahko izognete z malo odjemalskega HTML-ja, CSS-ja, JavaScript-a in Firebase-a.

Morda vas bo zamikalo, da bi Firebaseove sloje JavaScript poimenovali "shranjene procedure", tako kot Oracle, vendar bi v tem manjkala večja slika. Koda Firebase je napisana v JavaScript, zato se bo izvajala v lokalni različici Node.js. V to plast lahko vdelate večino poslovne logike, ker je svet vozlišč že napolnjen s knjižnicami za obdelavo tega poteka dela. Poleg tega boste uživali v užitkih izomorfne kode, ki deluje na odjemalcu, strežniku in zdaj v bazi podatkov.

Del, ki mi je padel v oči, je bil sinhronizacijski sloj, vgrajen v Firebase. Sinhroniziral bo kopije predmetov iz baze podatkov po celotnem omrežju. Trik je v tem, da lahko odjemalsko aplikacijo nastavite kot le še eno vozlišče baze podatkov, ki se naroči na vse spremembe za ustrezne podatke (in samo ustrezne podatke). Če se podatki spremenijo na enem mestu, se spremenijo povsod. Izogibate se lahko vsem težavam pri sporočanju in se osredotočite na samo zapisovanje informacij v Firebase, ker jih bo Firebase ponovil tam, kjer morajo biti.

Ni se vam treba osredotočiti samo na Firebase. Osnovnejše Googlove funkcije v oblaku so preprostejši pristop k vdelavi prilagojene kode v Googlov oblak. Trenutno so funkcije v oblaku v glavnem le možnost za pisanje kode Node.js, ki se bo izvajala v vnaprej konfiguriranem okolju Node. Preostanek platforme Google Cloud Platform podpira najrazličnejše jezike - od Jave in C # do Go, Python in PHP - Funkcije v oblaku so strogo omejene na JavaScript in Node. Bilo je namigov, da prihajajo druge jezikovne možnosti in ne bi bil presenečen, če bi se kmalu pojavile.

Google Cloud Functions ne seže tako globoko v Google Cloud, kot AWS Lambda seže v AWS, vsaj na tej točki. Ko sem se poigraval in gledal, kako ustvarjam funkcijo za interakcijo z Google Dokumenti, sem ugotovil, da bi verjetno moral uporabiti API REST in napisati kodo v nečem, imenovanem Apps Script. Z drugimi besedami, svet Google Docs ima svoj lastni API REST, ki je bil brez strežnika že dolgo, preden je bila skovana besedna zveza.

Omeniti velja, da Google App Engine še naprej deluje močno. Na začetku je le ponujal zavijanje aplikacij Python, da bi zadovoljil povpraševanje vseh, ki obiščejo spletno mesto, vendar je bil v preteklih letih razširjen na številne različne jezikovne pogoje. Ko svojo kodo združite v izvedljivo datoteko, App Engine obdela postopek zagona dovolj vozlišč za obdelavo vašega prometa, povečanje ali zmanjšanje, ko uporabniki pošiljajo zahteve.

Upoštevati je treba še vedno nekaj ovir. Kot pri funkcijah v oblaku mora biti tudi vaša koda napisana na razmeroma brez državljanstva in vsako zahtevo mora končati v omejenem času. Toda App Engine ne odvrže celotnega odra ali pozabi na vse med zahtevami. App Engine je bil velik del revolucije brez strežnikov in je še vedno najprimernejši za tiste, ki z eno nogo ostanejo v starošolski metodi gradnje lastnega sklada v Pythonu, PHP, Javi, C # ali Go.

Funkcije Microsoft Azure

Microsoft si seveda enako kot drugi prizadeva zagotoviti, da lahko ljudje tudi z oblakom Azure naredijo vse te pametne brez strežnike. Podjetje je ustvarilo lastne osnovne funkcije za žongliranje z dogodki - Azure Functions - in izdelalo nekaj izpopolnjenih orodij, ki so še bolj dostopna polprogramerjem.

Največja prednost, ki jo ima Microsoft, je lahko zbirka Officeovih aplikacij, nekdanjih namiznih izvedljivih datotek, ki se počasi, a zanesljivo selijo v oblak. Dejansko je eno obračunavanje prihodkov iz oblaka postavilo Microsoft pred Amazon, deloma tako, da je del svojih prihodkov iz Officea strmoglavil v kratkotrajno rubriko "oblak".

Eden najboljših primerov iz dokumentacije o funkcijah Azure prikazuje, kako je mogoče sprožiti funkcijo v oblaku, ko nekdo shrani preglednico v OneDrive. Naenkrat mali vilini v oblaku oživijo in popravijo preglednico. To bo zagotovo božja dar IT trgovinam, ki podpirajo ekipe, ki imajo radi svoje preglednice Excel (ali druge Officeove dokumente). Funkcije Azure lahko napišejo tako, da naredijo skoraj vse. Pogosto mislimo, da sta HTML in splet edini vmesnik za oblak, vendar ni razloga, da ne bi bilo mogoče prek formatov dokumentov, kot sta Microsoft Word ali Excel.

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