Kaj je serverless? Računalništvo brez strežnikov, preprosto razloženo
Serverless je način izvajanja kode, pri katerem sami ne nastavljate in ne upravljate nobenih strežnikov. Svojo kodo predate ponudniku v oblaku, ta pa jo požene samo, ko nekaj sproži – spletno zahtevo, nalaganje datoteke, obvestilo o plačilu – nato se ustavi. Ponavadi plačate čas, ko se vaša koda dejansko izvaja, ne pa stroja, ki stoji neizkoriščen.
Zakaj je serverless pomemben, ko gradite z AI
Ko gledate možnosti gostovanja ali kodo, zgrajeno z AI, boste naleteli na »serverless funkcije«, »edge funkcije« ali »cloud funkcije«. Številne platforme za gostovanje jih ponujajo, nekateri gradniki z AI pa zaledje uvajajo na tak način. Razumevanje modela vam pomaga pri treh praktičnih vprašanjih:
- Strošek. Ali bo aplikacija stala denar, ko je nihče ne uporablja?
- Hitrost. Zakaj je prva zahteva po mirnem obdobju počasnejša?
- Omejitve. Zakaj je dolga naloga – generiranje velikega poročila, obdelava videa – potekla zaradi časovne omejitve?
Koristno je tudi vedeti, kaj serverless ni: ni odsotnost zaledja. Še vedno imate kodo na strežniku; le nekdo drug upravlja stroje. Za osnove glejte kaj je strežnik.
Vsakdanja primerjava
Lasten strežnik je kot lasten avtomobil. Vedno je tu in je takoj pripravljen na vožnjo, a plačujete zanj – zavarovanje, parkirnino, vzdrževanje – ne glede na to, ali ga uporabljate.
Serverless je kot klic taksija. Plačate samo vožnje, ki jih opravite, in če naenkrat potrebuje prevoz sto ljudi, pride sto taksijev. Vendar je lahko kratko čakanje, da avto pride (hladni zagon), vsaka vožnja ima največjo dolžino, voznik pa se ne spomni vas od prejšnje vožnje (funkcije so brez stanja).
Kako delujejo serverless funkcije
V najbolj pogosti obliki, imenovani functions as a service (funkcije kot storitev):
- Napišete funkcijo – majhen kos kode, ki obravnava eno vrsto dogodka, na primer »obdelaj POST na
/api/bookings«. - Jo uvedete. Ponudnik jo shrani in poveže s sprožilcem: URL-jem, urnikom, novo datoteko v shrambi, sporočilom v čakalni vrsti.
- Pride dogodek. Ponudnik zažene kopijo vaše funkcije (ali ponovno uporabi toplo), jo požene in vrne rezultat.
- Samodejno se skalira. Če pride tisoč zahtev naenkrat, ponudnik požene veliko kopij vzporedno, do meja vašega računa.
- Mirovanje. Ko promet ustavi, se kopije ugasnejo. Ko nič ne teče, za računsko moč ne plačate ničesar.
Zelo preprosta serverless funkcija v JavaScriptu je lahko takšna:
export default async function handler(request) {
const { name } = await request.json();
return Response.json({ message: `Hello, ${name}` });
}
Ni kode za zagon strežnika, odpiranje vrat ali ohranjanje procesa. Platforma vse to opravi sama.
»Serverless« se v ohlapnejšem pomenu uporablja tudi za druge upravljane storitve, ki se samodejno skalirajo in obračunavajo po porabi – na primer serverless baze podatkov, ki med mirovanjem mirujejo.
Ključni pojmi
| Pojem | Pomen |
|---|---|
| Funkcija (FaaS) | Majhna enota kode, ki jo ponudnik požene na zahtevo. |
| Sprožilec / dogodek | Kar zažene funkcijo – HTTP zahteva, nalaganje datoteke, časovnik, sporočilo v čakalni vrsti. |
| Hladni zagon | Zakasnitev, ko se mora nova kopija funkcije zagnati, preden lahko obdela zahtevo. |
| Toplo | Kopija, ki že teče in lahko odgovori takoj. |
| Brez stanja (stateless) | Funkcija si med izvajanji ne zapomni ničesar. Vse, kar mora ostati, gre v bazo ali shrambo. |
| Časovna omejitev (timeout) | Največji čas, ki ga en zagon sme trajati. Na primer največ 15 minut za AWS Lambda; mnoge platforme privzeto dovolijo precej manj. |
| Edge funkcija | Funkcija, ki teče na mnogih lokacijah blizu uporabnikov, ponavadi z ožjimi omejitvami. |
| Skaliranje na nič (scale to zero) | Ne izvaja nič in ne plačuje računske moči, ko ni prometa. |
Delovni primer: majhna rezervacijska stran
Rezervacijska stran studia za jogo ob vsaki nedeljski večer dobi nalet obiska, ko se objavi nov urnik, preostale dni v tednu pa zelo malo.
- Na strežniku, ki je vedno vklopljen, studio plačuje stroj 24/7, dimenzioniran za nedeljski vrhunec in večinoma neizkoriščen drugače.
- Z serverless funkcijami sta
GET /api/classesinPOST /api/bookingsfunkciji. Nedeljski naval samodejno zažene veliko kopij; na mirnem torkovem jutru skoraj nič ne teče in račun je blizu nič.
Pokažejo se tudi kompromisi. Prva oseba, ki v torek zjutraj odpre stran, lahko malo počaka na hladni zagon. Baza podatkov mora obdelati veliko kratkotrajnih povezav iz mnogih kopij funkcij, za kar bo morda potreben usmerjevalnik povezav (connection pooler). In če studio kasneje želi nalogo »ustvari letno poročilo o udeležbi za vse« v obliki PDF-ja, lahko ta preseže časovno omejitev funkcije in se mora izvajati drugje.
Kdaj serverless ustreza – in kdaj ne
| Dobro se ujema | Manj primerno |
|---|---|
| Nizek, nihajoč ali nepredvidljiv promet | Stalen velik promet, pri katerem je lahko cenejši strežnik, ki je vedno vklopljen |
| Kratke naloge zahteva/odgovor: API-ji, obravnava obrazcev, webhooki | Dolgotrajna opravila: obdelava velikih videoposnetkov, veliki uvozi podatkov |
| Majhne ekipe, ki ne želijo upravljati strežnikov | Aplikacije, ki držijo žive povezave (nekatere funkcije klepeta ali večigralskih iger), razen če platforma to podpira |
| Obravnava dogodkov: »ko se naloži datoteka, naredi sličico« | Aplikacije, ki med zahtevami hranijo veliko pomnilnika |
Pogoste napake in napačna razumevanja
- »Serverless pomeni brez zaledja.« Pomeni brez strežnikov, ki bi jih upravljali. Še vedno pišete in zavarujete kodo zaledja.
- »Serverless je vedno cenejši.« Poceni je pri majhnem obsegu, vendar se lahko cena po zahtevi pri velikem in stalnem obsegu hitro nabere.
- »Serverless se neskončno skalira.« Platforme imajo omejitve sočasnosti, vaša baza podatkov pa lahko postane ozko grlo veliko prej kot funkcije.
- »Datoteke, shranjene v funkciji, bodo tam tudi naslednjič.« Lokalna shramba je začasna. Uporabite bazo podatkov ali shrambo datotek.
- »Ugašanje na nič je isto kot serverless.« Sorodno, vendar ne enako. Nekatere platforme vašo aplikacijo poganjajo kot običajen strežnik, ki zaspi, ko miruje, in se prebudi ob naslednji zahtevi – podoben prihranek in podobna zakasnitev prve zahteve, vendar brez časovnih omejitev na posamezno zahtevo, kot jih imajo funkcije.
Kaj vprašati svojega gradnika z AI
- »Ali bo to zaledje teklo kot serverless funkcije ali kot strežnik, ki je vedno vklopljen ali zaspi? Kaj to pomeni za strošek?«
- »Ali bo katera od nalog verjetno trajala dlje od časovne omejitve platforme? Če da, kako jih obravnavamo?«
- »Vse, kar mora ostati, shranjuj v bazo ali shrambo datotek, ne v pomnilnik ali lokalne datoteke.«
- »Kako naj upravljamo povezave z bazo, če teče veliko kopij hkrati?«
- »Kakšna je zakasnitev prve zahteve, potem ko je bila aplikacija dlje časa neaktivna?«
Kako Mythex gosti aplikacije
Mythex svojega gostovanja ne opisuje kot serverless funkcije. Ko objavite, vaša aplikacija teče kot običajna spletna aplikacija ali vsebnik, ki ga za vas upravlja Mythex – nastavljati ni treba nič. Gre za skaliranje na nič: objavljene aplikacije in njihove baze podatkov med mirovanjem zaspijo in se prebudijo ob naslednjem obisku; uspavana aplikacija ne porablja računske moči, dodatni stroji pa se zaženejo samo ob velikem prometu (paket Pro dovoli do 3 na storitev). Priložena Postgres baza po 5 minutah neaktivnosti zaspi, zaračuna pa se čas, ko je bila budna. Tako dobite velik del koristi »plačate, kar uporabite«, z istim tipom zakasnitve prve zahteve po tihem obdobju. Glejte omejitve gostovanja v dokumentaciji in naša vodnika o spletnem gostovanju ter zmanjševanju stroškov gostovanja.
Vprašanja
Kaj pomeni serverless na kratko?
Serverless pomeni, da ponudniku v oblaku predate svojo kodo, ta pa se zažene samo takrat, ko je potrebno – na primer ob prihodu zahteve –, brez da bi vi kaj nastavljali ali vzdrževali strežnike. Ponavadi plačate čas, ko se koda dejansko izvaja, ne pa stroja, ki je vedno vklopljen.
Ali so v serverless res brez strežnikov?
Strežniki obstajajo; vi jih le ne upravljate. Ponudnik vašo kodo požene na svojih strojih, zažene jo, ko prispejo zahteve, jo ob obremenitvi poveča in ob mirovanju ugasne.
Kaj je hladni zagon (cold start)?
Hladni zagon je dodatna zakasnitev, ko se serverless funkcija zažene po mirovanju, ker ponudnik najprej zažene novo kopijo. Glede na platformo, jezik in velikost kode je lahko komaj opazen ali traja sekundo ali več.
Ali je serverless cenejši od običajnega strežnika?
Pri aplikacijah z malo ali neenakomernim prometom pogosto da, saj skoraj nič ne plačate, ko miruje. Pri aplikacijah s stalnim velikim prometom pa je lahko strežnik, ki je vedno vklopljen, cenejši. Odvisno je od vašega vzorca uporabe in cen ponudnika.
Kateri so primeri serverless platform?
Znani primeri so AWS Lambda, Google Cloud Run functions, Azure Functions, Cloudflare Workers ter funkcije platform za gostovanje, kot sta Vercel in Netlify.