Što je bez poslužitelja? Objašnjeno računalo bez poslužitelja

Programeri provode bezbroj sati rješavajući poslovne probleme pomoću koda. Tada je red na opsku ekipu da provede bezbroj sati, prvo smišljajući kako doći do koda koji programeri zapisuju i pokreću na svim dostupnim računalima, a drugo osiguravajući da ta računala rade bez problema. Drugi je dio uistinu beskrajan zadatak. Zašto taj dio ne prepustiti nekom drugom?

Mnogo inovacija u IT-u tijekom posljednja dva desetljeća - virtualni strojevi, računalstvo u oblaku, spremnici - usredotočeno je na to da ne morate puno razmišljati o osnovnom fizičkom stroju na kojem radi vaš kôd. Računarstvo bez poslužitelja sve je popularnija paradigma koja ovu želju dovodi do svog logičnog zaključka: Kod računala bez poslužitelja ne morate znati ništa o hardveru ili OS-u na kojem radi vaš kôd, jer se za sve brine davatelj usluga .

Što je računalo bez poslužitelja?

Računanje bez poslužitelja izvedbeni je model za oblak u kojem davatelj usluga oblaka dinamički dodjeljuje - i zatim naplaćuje korisniku - samo računske resurse i pohranu potrebnu za izvršavanje određenog dijela koda. Naravno, još uvijek su uključeni poslužitelji, ali za njihovo osiguravanje i održavanje u potpunosti se brine davatelj usluga. Chris Munns, Amazonov zagovornik za besposlužitelje, rekao je na konferenciji 2017. godine da, iz perspektive tima koji piše i postavlja kôd, „uopće nema poslužitelja kojima se može upravljati niti ih pružati. To ne uključuje ništa što bi bilo goli metal, ništa što je virtualno, ništa što je spremnik - sve što uključuje upravljanje hostom, krpanje hosta ili bavljenje bilo čime na razini operativnog sustava, nije nešto što biste trebali učiniti u svijet bez poslužitelja. " 

Kao što objašnjava programer Mike Roberts, taj se pojam nekoć koristio za takozvane scenarije back-end-as-a-a-service , gdje se mobilna aplikacija povezivala s pozadinskim poslužiteljem koji je u cijelosti hostiran u oblaku. Ali danas kada ljudi govore o računalu bez poslužitelja ili o arhitekturi bez poslužitelja, oni misle na ponudu kao uslugu , u kojoj kupac napiše kod koji se bavi samo poslovnom logikom i prenese ga na davatelja usluga. Taj se pružatelj brine za sve pripreme hardvera, upravljanje virtualnim strojevima i spremnicima, pa čak i za zadatke poput multithreadinga koji su često ugrađeni u aplikacijski kod.

Funkcije bez poslužitelja vode se događajima, što znači da se kod poziva samo kada ga pokrene zahtjev. Davatelj naplaćuje samo računsko vrijeme koje se koristi za izvršenje, a ne fiksnu mjesečnu naknadu za održavanje fizičkog ili virtualnog poslužitelja. Te se funkcije mogu povezati zajedno za stvaranje cjevovoda za obradu ili mogu poslužiti kao komponente veće aplikacije, u interakciji s drugim kodom koji se izvodi u spremnicima ili na uobičajenim poslužiteljima.

Prednosti i nedostaci računala bez poslužitelja

Iz tog bi opisa trebale biti jasne dvije najveće dobrobiti računala bez poslužitelja: programeri se mogu usredotočiti na poslovne ciljeve koda koji pišu, a ne na infrastrukturna pitanja; i organizacije plaćaju samo računalne resurse koje zapravo koriste vrlo granulirano, umjesto da kupuju fizički hardver ili iznajmljuju instance u oblaku koje uglavnom miruju.

Kao što Bernard Golden ističe, ta posljednja točka je od posebne koristi aplikacijama vođenim događajima. Na primjer, možda imate aplikaciju koja većinu vremena ne radi, ali pod određenim uvjetima mora obrađivati ​​mnoge zahtjeve za događajima odjednom. Ili možda imate aplikaciju koja obrađuje podatke poslane s IoT uređaja s ograničenom ili povremenom internetskom vezom. U oba slučaja, tradicionalni pristup zahtijevao bi pružanje snažnog poslužitelja koji bi mogao podnijeti vrhunske radne kapacitete - ali taj bi poslužitelj većinu vremena bio nedovoljno iskorišten. S arhitekturom bez poslužitelja platili biste samo resurse poslužitelja koje stvarno koristite. Računanje bez poslužitelja također bi bilo dobro za određene vrste skupne obrade.Jedan od kanonskih primjera slučaja upotrebe arhitekture bez poslužitelja je usluga koja prenosi i obrađuje niz pojedinačnih slikovnih datoteka i šalje ih u drugi dio aplikacije.

Možda je najočitiji nedostatak funkcija bez poslužitelja to što su namjerno efemerne i, kako kaže AlexSoft, "neprikladne za dugoročne zadatke". Većina pružatelja usluga bez poslužitelja neće dopustiti da se vaš kôd izvrši dulje od nekoliko minuta, a kada zavrtite funkciju, ona ne zadržava podatke sa statusom prethodno pokrenutih instanci. Povezani problem je taj što kod bez poslužitelja može potrajati nekoliko sekundi da se zavrti - što nije problem za mnoge slučajeve upotrebe, ali ako vaša aplikacija zahtijeva malu latenciju, budite upozoreni.

Mnogi drugi nedostaci, kako su istakli Rohit Akiwatkar i Gary Arora, imaju veze sa zaključavanjem dobavljača. Iako su dostupne opcije otvorenog koda, tržištem bez poslužitelja dominiraju veliki komercijalni pružatelji usluga u oblaku, o čemu ćemo razgovarati za trenutak. To znači da programeri često na kraju koriste alate svojih dobavljača, što otežava prebacivanje ako postanu nezadovoljni. A budući da se toliko računanja bez poslužitelja odvija, prema definiciji, na dobavljačevoj infrastrukturi, može biti teško integrirati bezuslužni kôd u vlastite cjevovode za razvoj i testiranje.

Dobavljači bez poslužitelja: AWS Lambda, Azure Functions i Google Cloud Functions

Moderno doba računala bez poslužitelja započelo je lansiranjem AWS Lambda, platforme koja se temelji na Amazonovoj usluzi u oblaku, 2014. Microsoft je slijedio primjer s Azure Functions 2016. Google Cloud Functions, koja je bila u beta verziji od 2017., napokon je dostigla proizvodni status u srpnju 2018. Tri službe imaju malo različita ograničenja, prednosti, podržane jezike i načine rada. Rohit Akiwatkar ima dobar i detaljan pregled razlika među trojicom. Također je pokrenut IBM Cloud Functions, koji se temelji na otvorenoj platformi Apache OpenWhisk.

Među svim računalnim platformama bez poslužitelja, AWS Lambda je najistaknutija i očito je imala najviše vremena za razvoj i sazrijevanje. obuhvaća ažuriranja i nove značajke dodane u AWS Lambda tijekom prošle godine.

Skupovi bez poslužitelja

Kao što je slučaj u mnogim softverskim područjima, svijet bez poslužitelja vidio je evoluciju hrpa softvera koji okupljaju različite komponente potrebne za izgradnju aplikacije bez poslužitelja. Svaki se stog sastoji od programskog jezika u koji ćete napisati kôd, aplikacijskog okvira koji pruža strukturu vašeg koda i skupa okidača koje će platforma razumjeti i koristiti za pokretanje izvršavanja koda.

Iako možete kombinirati i podudarati različite specifične ponude u svakoj od ovih kategorija, postoje ograničenja, ovisno o tome kojeg dobavljača koristite, uz određena preklapanja. Na primjer, za jezike možete koristiti Node.js, Java, Go, C # i Python na AWS Lambda, ali samo JavaScript, C # i F # izvorno rade na Azure funkcijama. Što se tiče okidača, AWS Lambda ima najduži popis, ali mnogi od njih su specifični za AWS platformu, poput Amazon Simple Email Service i AWS CodeCommit; Google Cloud Functions u međuvremenu mogu pokrenuti generički HTTP zahtjevi. Paul Jaworski detaljno razmatra stogove za svaku od velike tri ponude.

Okviri bez poslužitelja

Vrijedno je malo se zadržati na okvirnom dijelu jednadžbe, jer će to puno definirati o tome kako na kraju gradite svoju aplikaciju. Amazon ima vlastitu izvornu ponudu, open source model bez servera (SAM), ali postoje i drugi, od kojih je većina višestruka i također s otvorenim kodom. Jedan od najpopularnijih naziva se, prilično generički, Serverless, i naglašava da pruža isto iskustvo za svaku podržanu platformu, tj. AWS Lambda, Azure Functions, Google Cloud Functions i IBM OpenWhisk. Još jedna popularna ponuda je Apex, koji može pomoći u dovođenju nekih jezika koji inače nisu dostupni određenim pružateljima usluga.

Baze podataka bez poslužitelja

Kao što smo gore napomenuli, jedna neobičnost rada s kodom bez poslužitelja je ta koja nema trajno stanje, što znači da vrijednosti lokalnih varijabli ne ostaju u instancijama. Svi trajni podaci kojima vaš kôd treba pristupiti moraju se pohraniti negdje drugdje, a okidači dostupni u hrpama za glavne dobavljače uključuju baze podataka s kojima vaše funkcije mogu komunicirati.

Neke od tih baza podataka same se nazivaju besserverskim. To znači da se ponašaju slično kao i druge funkcije bez poslužitelja o kojima smo govorili u ovom članku, s očitom iznimkom da se podaci pohranjuju na neodređeno vrijeme. Ali velik dio upravljačkih troškova koji su uključeni u pripremu i održavanje baze podataka odbačen je po strani. Kao što kaže programer Jeremy Daly, "Sve što trebate je konfigurirati klaster i tada se za vas automatski obrađuju sva održavanja, zakrpe, sigurnosne kopije, replikacija i skaliranje." Kao i kod ponuda usluga kao usluge, plaćate samo vrijeme izračuna koje stvarno koristite, a resursi se vrte prema gore i dolje prema potrebi kako bi odgovarali potražnji.

Tri velika davatelja usluga bez poslužitelja nude vlastite baze podataka bez poslužitelja: Amazon ima Aurora Serverless i DynamoDB, Microsoft Azure Cosmos DB, a Google Cloud Firestore. To nisu jedine dostupne baze podataka. Nemanja Novković ima informacije o više ponuda.

Računarstvo bez poslužitelja i Kubernetes

Spremnici pomažu u napajanju tehnologije bez poslužitelja ispod poklopca, no za općenito upravljanje njima brine se dobavljač i time je nevidljiv korisniku. Mnogi računanje bez poslužitelja vide kao način za postizanje mnogih prednosti mikroservisa u spremniku, a da se ne moraju nositi s njihovom složenošću, pa čak počinju govoriti i o svijetu nakon kontejnera.

Zapravo, spremnici i računalo bez poslužitelja gotovo će sigurno koegzistirati dugi niz godina, a zapravo funkcije bez poslužitelja mogu postojati u istoj aplikaciji kao i mikroservisi u spremniku. Kubernetes, najpopularnija platforma za orkestraciju kontejnera, može upravljati i infrastrukturom bez poslužitelja. Zapravo, s Kubernetesom možete integrirati različite vrste usluga u jedan klaster.  

Offline bez poslužitelja

Možda će vam šansa za početak rada s računalom bez poslužitelja biti malo zastrašujuća, jer izgleda da biste se trebali prijaviti kod dobavljača da biste se poigrali i vidjeli kako to funkcionira. Ali ne bojte se: Postoje načini za pokretanje koda bez poslužitelja izvan mreže na vašem lokalnom hardveru. Na primjer, AWS SAM nudi lokalnu značajku koja vam omogućuje testiranje Lambda koda izvan mreže. A ako koristite aplikacijski okvir bez poslužitelja, provjerite dodatak bez poslužitelja, izvanmrežni sustav koji vam omogućuje lokalno pokretanje koda. Sretno eksperimentiranje!