Bez poslužitelja u oblaku: AWS u odnosu na Google Cloud u odnosu na Microsoft Azure

Ako su vas ikad probudili u 3 ujutro jer je poslužitelj prošao, shvatit ćete privlačnost modne riječi poput "bez poslužitelja". Konfiguracija strojeva može potrajati satima, danima ili ponekad čak i tjednima, a zatim ih treba neprestano ažurirati kako bi se ispravile pogreške i sigurnosne rupe. Ta ažuriranja obično donose vlastite gnjavaže jer nova ažuriranja uzrokuju nekompatibilnosti zbog kojih su potrebna druga ažuriranja ili se tako čini beskonačno.

Beskrajni lanac glavobolja od pokretanja poslužitelja jedan je od razloga što su velike tvrtke u oblaku prihvatile arhitekturu "bez poslužitelja". Znaju da je šef predugo čuo izgovore - poslužitelj ovaj, poslužitelj onaj. Kad bismo se mogli riješiti samo tih poslužitelja, šef mora razmisliti.

To je prekrasan prodajni termin s jedinim problemom što nije strogo istinit. Ove su aplikacije bez poslužitelja na isti način kao i restorani bez kuhinje. Ako je na jelovniku ono što želite i ako vam se sviđa kako ga kuhar priprema, sjesti u restoran je sjajno. Ali ako želite drugačije jelo, ako želite drugačije začine, dobro, nađite vlastitu kuhinju.

Amazon, Google i Microsoft tri su od većih tvrtki koje se bore za hostovanje aplikacija budućnosti, one za koje se nadaju da će biti upisane na njihov API bez poslužitelja i upravljane kroz njihov sloj automatizacije. Ako platforme rade ono što želite - a novi su modeli prilično općeniti - mogu biti najjednostavniji i najbrži način za stvaranje vlastite web aplikacije za jednoroge s više milijardi dolara. Napišete samo ključne dijelove logike, a platforma obrađuje sve detalje.

Funkcije bez poslužitelja postaju ljepilo ili skriptni jezik koji povezuje sve značajke oblaka. Alati za mapiranje ili AI, koji su nekad bili prilično neovisni, sada su povezani putem poslužiteljskih funkcija vođenih događajima. Sada se više vašeg posla može riješiti zahtjevima koji se talasaju i odbijaju kroz razne kutove svakog oblaka, pokrećući i pokrećući tok događaja. Ako želite istražiti strojno učenje i koristiti ga za analizu podataka, jedan od najbržih načina to je stvaranje aplikacije bez poslužitelja i započinjanje slanja događaja u kut strojnog učenja u oblaku.

Implicitno obećanje je da rezanje svega tanje olakšava dijeljenje resursa u oblaku. U prošlosti bi svi mahnito stvarali nove instance s, na primjer, Ubuntu poslužiteljem koji radi u svom vlastitom virtualnom stroju. Svi su koristili isti OS i dupliciran je milijun puta na istom stvarnom okviru koji se pretvarao da je desetak ili više virtualnih Ubuntu kutija. Operacije bez poslužitelja izbjegavaju sve to dupliciranje, čineći računarstvo u oblaku dramatično jeftinijim, posebno za poslove koji se sporadično izvode i nikada nisu stvarno zakrčili staru kutiju koja je sjedila u vašoj klimatiziranoj poslužiteljskoj sobi.

Naravno, sva ova pogodnost ima skriveni trošak. Ako ikada poželite napustiti ili premjestiti svoj kôd na drugo mjesto, vjerojatno ćete zaglaviti u prepisivanju većine stoga. API-ji su različiti i iako postoji određena standardizacija oko popularnih jezika poput JavaScript-a, prilično su bliski zaštićenim. Postoji puno mogućnosti za zaključavanje.

Da bih razumio privlačnost opcija bez poslužitelja, proveo sam neko vrijeme gradeći nekoliko funkcija i provirujući oko stogova. Nisam napisao puno koda, ali to je bila poanta. Proveo sam više vremena klikajući gumbe i upisujući web obrasce kako bih sve konfigurirao. Sjećate li se kada smo sve konfigurirali s XML-om, a zatim JSON-om? Sada ispunjavamo web obrazac i oblak to čini umjesto nas. Ipak morate razmišljati poput programera da biste razumjeli što se događa iza kulisa i izvan vaše kontrole.

AWS Lambda

AWS Lambda raste u sloj skripte ljuske za čitav Amazonov oblak. To je osnovni sustav koji vam omogućuje ugrađivanje funkcija koje odgovaraju na događaje koje bi mogao generirati gotovo bilo koji dio goleme Amazonove infrastrukture u oblaku. Ako se nova datoteka prenese na S3, mogli biste pokrenuti funkciju koja s njom čini nešto zanimljivo. Ako neki video snimak transkodira Amazon Elastic Transcoder, možete imati Lambda funkciju koja čeka da se aktivira kada završi. Te funkcije, pak, mogu pokrenuti druge Lambda operacije ili možda samo nekome poslati ažuriranje.

Lambda funkcije možete pisati u JavaScript (Node.js), Python, Java, C # i Go. S obzirom da ti jezici mogu ugrađivati ​​mnoge druge jezike, sasvim je moguće pokrenuti drugi kôd poput Haskella, Lispa ili čak C ++. (Pogledajte ovu priču o kompajliranju naslijeđenog C ++-a u knjižnicu za upotrebu s AWS Lambda.)

Pisanje Lambda funkcija često se čini mnogo složenijim nego što očekujete, jer Amazon nudi toliko mogućnosti za konfiguraciju i optimizaciju. Iako je tehnički točno da možete napisati samo nekoliko redaka koda i postići velike stvari, osjećao sam se kao da sam tada morao dodijeliti više vremena za konfiguriranje rada koda. Većina toga postiže se ispunjavanjem obrazaca u pregledniku, umjesto da se tipka u tekstualne datoteke. Ponekad se čini kao da smo upravo zamijenili uređivač teksta za obrazac preglednika, ali to je cijena zadržavanja sve fleksibilnosti koju Amazon proširuje na korisnika Lambde.

Neki od dodatnih koraka nastali su zbog toga što Amazon izlaže više mogućnosti korisniku i očekuje više od prvog pisanja funkcija. Nakon što sam završio s pisanjem funkcije na Googleu ili Microsoftu, mogao sam usmjeriti svoj preglednik na pravi URL i odmah ga testirati. Amazon me pritisnuo da konfiguriram API pristupnik i otvorim pravu rupu na vatrozidu.

Na kraju, sve ovo klikanje dodaje sloj držanja koji posao čini malo lakšim od započinjanja tekstualnom datotekom. Kad sam stvarao jednu funkciju, preglednik je imao upozorenje: "Ova funkcija sadrži vanjske knjižnice." U doba čistog Čvora to je bilo nešto što bi se od mene očekivalo ili bih to naučio guglajući poruku o pogrešci dok sam prekrižio prste i nadao se da je odgovor tamo. Sad oblak juri u pomoć.

Amazon ima brojne druge mogućnosti koje su otprilike jednako "bez poslužitelja" kao i AWS Lambda, ako bez poslužitelja znači da ćete se osloboditi zadataka upravljanja poslužiteljem. Ima elastične alate poput automatskog skaliranja Amazon EC2 i AWS Fargate koji okreću i isključuju poslužitelje te AWS Elastic Beanstalk, koji uzima vaš učitani kôd, raspoređuje ga na web poslužitelje i rukuje balansiranjem i skaliranjem opterećenja. Naravno, s mnogim od ovih alata za automatizaciju i dalje ste odgovorni za stvaranje slike poslužitelja.

Jedna od korisnijih ponuda su AWS Step Functions, vrsta alata za dijagram toka bez koda za stvaranje državnih strojeva za modeliranje onoga što softverski arhitekti nazivaju tijekom rada. Dio je problema u tome što bi sve funkcije bez poslužitelja trebale biti potpuno bez stanja, nešto što funkcionira kad provodite prilično osnovnu poslovnu logiku, ali to može biti mala noćna mora kada nekoga klijenta prolazite kroz kontrolni popis ili dijagram toka. Stalno izlazite u bazu podataka kako biste ponovo učitali podatke o klijentu. Funkcije koraka lijepe Lambda funkcije sa stanjem.

Google Cloud Functions i Firebase

Ako vam je cilj riješiti se gnjavaže oko konfiguriranja poslužitelja, Google Cloud nudi brojne usluge koje nude različite količine slobode od stvari poput potrebe za root lozinkom ili čak korištenja naredbenog retka.

Počevši od Google App Enginea 2008. godine, Google polako dodaje različite opcije bez poslužitelja s raznim kombinacijama razmjene poruka i transparentnosti podataka. Jedan pod nazivom Google Cloud Pub / Sub od vas skriva red za slanje poruka, pa sve što trebate jest napisati kôd za proizvođača i potrošača podataka. Google Cloud Functions nudi izračunavanje na temelju događaja za mnoge glavne proizvode, uključujući neke od marquee alata i API-ja. A tu je i Google Firebase, baza podataka o steroidima koja vam omogućuje miješanje JavaScript koda u sloj za pohranu podataka koji podatke dostavlja vašem klijentu.

Od njih mi je najintrigantniji Firebase. Neki sugeriraju da su baze podataka izvorna aplikacija bez poslužitelja, koja je apstrahirala podatkovne strukture i poslove spremanja diska kako bi isporučivala sve informacije putem TCP / IP porta. Firebase ovu apstrakciju dovodi do krajnjih granica dodavanjem JavaScript koda i slanjem poruka kako bi učinio gotovo sve što biste mogli učiniti s infrastrukturom na poslužitelju, uključujući provjeru autentičnosti. Tehnički je to samo baza podataka, ali ona može obrađivati ​​velik dio poslovne logike i poruka za vaš stog. Stvarno se možete izvući s malo klijentskog HTML-a, CSS-a, JavaScript-a i Firebase-a.

Možda ćete doći u napast da Firebaseove JavaScript slojeve nazovete "pohranjenim procedurama", baš kao što je to učinio Oracle, ali to bi propustilo širu sliku. Firebase kôd napisan je na JavaScriptu, pa će se izvoditi u lokalnoj verziji Node.js. U ovaj sloj možete ugraditi veći dio poslovne logike jer je svijet Noda već ispunjen knjižnicama za rukovanje ovim tijekom rada. Osim toga, uživat ćete u užicima izomorfnog koda koji se izvodi na klijentu, poslužitelju i sada u bazi podataka.

Dio koji mi je zapao za oko bio je sinkronizacijski sloj ugrađen u Firebase. Sinkronizirat će kopije objekata iz baze podataka u cijeloj mreži. Trik je u tome što svoju klijentsku aplikaciju možete postaviti kao samo još jedan čvor baze podataka koji se pretplaćuje na sve promjene relevantnih podataka (i samo relevantnih podataka). Ako se podaci promijene na jednom mjestu, mijenjaju se svugdje. Možete izbjeći sve gnjavaže oko slanja poruka i koncentrirati se na samo upisivanje podataka u Firebase, jer će ih Firebase umnožiti tamo gdje trebaju biti.

Ne trebate se usredotočiti samo na Firebase. Osnovnije funkcije Google Cloud-a jednostavniji su pristup ugrađivanju prilagođenog koda u Googleov oblak. Trenutno je Cloud Functions uglavnom samo opcija za pisanje Node.js koda koji će se izvoditi u unaprijed konfiguriranom Node okruženju. Iako ostatak Google Cloud Platform podržava širok spektar jezika - od Jave i C # do Go, Pythona i PHP-a, Cloud funkcije su strogo ograničene na JavaScript i Node. Bilo je nagovještaja da dolaze i druge jezične opcije i ne bih se iznenadio da se uskoro pojave.

Google Cloud Functions ne seže toliko duboko u Google Cloud kao AWS Lambda u AWS, barem u ovom trenutku. Kad sam se zafrkavao gledajući u izgradnju funkcije za interakciju s Google dokumentima, otkrio sam da bih vjerojatno morao koristiti REST API i napisati kôd u nečemu što se naziva Apps Script. Drugim riječima, svijet Google dokumenata ima svoj vlastiti REST API koji je bio bez poslužitelja puno prije nego što je skovana modna riječ.

Vrijedno je napomenuti da Google App Engine nastavlja jačati. U početku se samo nudilo okretanje Python aplikacija kako bi se udovoljilo zahtjevima svih koji dođu na web mjesto, ali je tijekom godina proširivan kako bi mogao podnijeti mnogo različitih jezika. Nakon što kôd grupirate u izvršnu datoteku, App Engine obrađuje postupak pokretanja dovoljno čvorova za obradu vašeg prometa, skaliranje prema gore ili prema dolje dok korisnici šalju zahtjeve.

I dalje treba imati na umu nekoliko prepreka. Kao i kod funkcija u oblaku, vaš kôd mora biti napisan na relativno apatridni način i svaki zahtjev mora završiti u ograničenom vremenu. Ali App Engine ne baca svu skelu ili zaboravlja sve između zahtjeva. App Engine bio je veliki dio revolucije bez poslužitelja i ostaje najpristupačniji onima koji jednom nogom zadržavaju staru školsku metodu stvaranja vlastitog stoga u Pythonu, PHP-u, Javi, C # ili Go-u.

Microsoft Azure funkcije

Microsoft, naravno, radi jednako naporno kao i ostali kako bi osigurao da ljudi mogu sve ove pametne stvari bez poslužitelja raditi i s Azureovim oblakom. Tvrtka je stvorila vlastite osnovne funkcije za žongliranje događajima - Azure funkcije - i izgradila neke sofisticirane alate koji su još pristupačniji poluprogramerima.

Najveća prednost koju Microsoft može imati možda je kolekcija Officeovih aplikacija, bivših izvršnih datoteka na radnoj površini koje polako, ali sigurno migriraju u oblak. Zapravo je jedno računovodstvo prihoda od oblaka dovelo Microsoft ispred Amazona, dijelom svrstavši dio prihoda od Officea u efemernu rubriku "oblak".

Jedan od najboljih primjera iz dokumentacije o Azure funkcijama pokazuje kako se funkcija oblaka može pokrenuti kada netko spremi proračunsku tablicu u OneDrive. Iznenada mali vilenjaci u oblaku oživljavaju i rade stvari na proračunskoj tablici. Ovo će zasigurno biti božji dar IT trgovinama koje podržavaju timove koji vole svoje Excel proračunske tablice (ili druge Officeove dokumente). Oni mogu pisati Azure funkcije kako bi praktički radili bilo što. Često mislimo da su HTML i web jedino sučelje za oblak, ali nema razloga zašto to ne može biti putem formata dokumenata kao što su Microsoft Word ili Excel.