Kas yra serverless? Serverless kompiuterija paprastai paaiškinta
Serverless – tai kodo vykdymo būdas, kai nieko nesidiegiate ir nevaldote serverių patys. Perduodate savo kodą debesijos teikėjui, ir jis paleidžiamas tik tada, kai kas nors jį suaktyvina – žiniatinklio užklausa, įkeltas failas, mokėjimo pranešimas – ir po to sustoja. Dažniausiai mokate už laiką, kai jūsų kodas iš tikrųjų veikia, o ne už mašiną, kuri stovi be darbo.
Kodėl serverless svarbu kuriant su AI
Kai kuriate programą su AI ir žiūrite į talpinimo variantus ar kodą, susidursite su terminais „serverless funkcijos“, „edge funkcijos“ ar „cloud funkcijos“. Daugelis talpinimo platformų jas siūlo, o kai kurie AI kūrėjai diegia savo serverines dalis būtent taip. Šio modelio supratimas padeda atsakyti į tris praktinius klausimus:
- Kaina. Ar jūsų programa kainuos pinigus, kai niekas jos nenaudoja?
- Greitis. Kodėl pirma užklausa po ramaus laikotarpio lėtesnė?
- Ribos. Kodėl ilga užduotis – didelės ataskaitos generavimas, didelio vaizdo įrašo apdorojimas – nutrūko dėl laiko limito?
Taip pat verta žinoti, ką serverless nereiškia: tai nereiškia, kad nėra serverinės dalies. Jūsų kodas vis tiek veikia serveryje; tiesiog kažkas kitas valdo mašinas. Pagrindams žr. kas yra serveris.
Kasdienė analogija
Tradicinis serveris – tarsi automobilio nuosavybė. Jis visada yra, pasiruošęs važiuoti akimirksniu, bet mokate už jį – draudimą, stovėjimą, priežiūrą – nepriklausomai nuo to, ar juo važiuojate.
Serverless – tarsi taksi iškvietimas. Mokate tik už kelionės, kurias darote, ir jei šimtui žmonių reikia važiuoti vienu metu, atvažiuoja šimtas taksi. Bet laukti, kol mašina atvyks, gali tekti trumpai (šaltas paleidimas), kiekviena kelionė turi maksimalų ilgį, o vairuotojas nesimena jūsų iš ankstesnės kelionės (funkcijos yra be būsenos, stateless).
Kaip veikia serverless funkcijos
Dažniausiai pavidale, vadinamame functions as a service:
- Parašote funkciją – nedidelę kodo dalį, kuri apdoroja vieno tipo įvykį, pavyzdžiui, „apdoroti POST į
/api/bookings“. - Diegiate ją. Teikėjas saugo ją ir prijungia prie paleidiklio: URL, tvarkaraščio, naujo failo saugykloje ar žinutės eilėje.
- Atkeliauja įvykis. Teikėjas paleidžia jūsų funkcijos kopiją (arba panaudoja šiltą) ir ją vykdo, grąžindamas rezultatą.
- Mastelį didina savarankiškai. Jei vienu metu atkeliauja tūkstantis užklausų, teikėjas paleidžia daug kopijų lygiagrečiai, iki jūsų paskyros ribų.
- Ji tampa neaktyvi. Kai srautas sustoja, kopijos išjungiamos. Kai nieko nevyksta, už skaičiavimus nemokate.
Paprasta serverless funkcija JavaScript kalba galėtų atrodyti taip:
export default async function handler(request) {
const { name } = await request.json();
return Response.json({ message: `Hello, ${name}` });
}
Nėra kodo, kuris paleistų serverį, atidarytų prievadą ar palaikytų procesą. Visa tai tvarko platforma.
Terminas „serverless“ taip pat laisviau vartojamas kitoms valdomoms paslaugoms, kurios automatiškai didina mastelį ir apmokestinamos pagal naudojimą – pavyzdžiui, serverless duomenų bazėms, kurios sustabdomos, kai neaktyvios.
Pagrindiniai terminai
| Terminas | Reikšmė |
|---|---|
| Funkcija (FaaS) | Nedidelis kodo vienetas, kurį teikėjas vykdo pagal poreikį. |
| Paleidiklis / įvykis (trigger / event) | Kas paleidžia funkciją – HTTP užklausa, failo įkėlimas, laikmatis, eilės žinutė. |
| Šaltas paleidimas (cold start) | Vėlavimas, kol prieš apdorojant užklausą turi paleisti naują funkcijos kopiją. |
| Šiltas (warm) | Kopija, kuri jau veikia ir gali atsakyti nedelsiant. |
| Be būsenos (stateless) | Funkcija tarp vykdymų nesaugo atminties. Viskas, kas turi išlikti, eina į duomenų bazę ar saugyklą. |
| Laiko limitas (timeout) | Maksimalus leidžiamas vieno vykdymo laikas. Pavyzdžiui, AWS Lambda maksimumas yra 15 minučių; daugelis platformų numato gerokai mažiau. |
| Edge funkcija | Funkcija, vykdoma daugelyje vietų arti naudotojų, dažnai su griežtesniais limitais. |
| Mastelio mažinimas iki nulio (scale to zero) | Nieko nevykdymas ir nemokėjimas už skaičiavimus, kai nėra srauto. |
Darbo pavyzdys: nedidelė rezervacijų svetainė
Jogos studijos rezervacijų svetainė kiekvieną sekmadienio vakarą sulaukia lankytojų antplūdžio, kai paskelbiama nauja tvarkaraštis, o likusią savaitę – labai mažai.
- Su visada įjungtu serveriu studija moka už mašiną 24/7, parinktą pagal sekmadienio vakaro piką, ir ji beveik visą laiką tuščia.
- Su serverless funkcijomis
GET /api/classesirPOST /api/bookingsyra funkcijos. Sekmadienio antplūdis automatiškai paleidžia daugybę kopijų; tyliu antradienio rytą beveik nieko nevyksta ir sąskaita artima nuliui.
Kompromisai taip pat pasireiškia. Pirmas žmogus, atidaręs svetainę antradienio rytą, gali palaukti papildomą akimirką dėl šalto paleidimo. Duomenų bazė turi tvarkyti daug trumpalaikių jungčių iš daugelio funkcijų kopijų, todėl gali prireikti jungčių telkinio (connection pooler). Ir jei studija vėliau norės užduoties „sugeneruoti visų metinės lankomumo PDF“, ji gali viršyti funkcijos laiko limitą ir reikės vykdyti kitur.
Kada serverless tinka – o kada ne
| Geras pasirinkimas | Mažiau tinkamas |
|---|---|
| Žemas, staigiai ar nenuspėjamai kylantis srautas | Nuolatinis didelis srautas, kur visada įjungtas serveris gali būti pigesnis |
| Trumpos užklausos ir atsakymai: API, formų apdorojimas, webhook'ai | Ilgai vykstantys darbai: didelių vaizdo įrašų apdorojimas, dideli duomenų importai |
| Maži komandos, nenorintys valdyti serverių | Programos, kurios palaiko atviras ryšio jungtis (kai kurios pokalbių ar daugelio žaidėjų funkcijos), nebent platforma tai palaiko |
| Įvykių apdorojimas: „kai įkeliamas failas, sukurti miniatiūrą“ | Programos, kurioms reikia daug atminties tarp užklausų |
Dažnos klaidingos nuomonės
- „Serverless reiškia, kad nėra backend.“ Tai reiškia, kad nėra serverių, kuriuos reikia valdyti. Vis tiek rašote ir saugote serverinį kodą.
- „Serverless visada pigiau.“ Mažame apimtyje pigu, bet kaina už užklausą gali sudaryti didelę sumą esant dideliam, nuolatiniam srautui.
- „Serverless be galo mastelizuojasi.“ Platformos turi lygiagretumo ribas, o duomenų bazė gali tapti kliūtimi gerokai anksčiau nei funkcijos.
- „Failai, įrašyti funkcijoje, bus kitą kartą.“ Vietinė saugykla yra laikina. Naudokite duomenų bazę ar failų saugyklą.
- „Mastelio mažinimas iki nulio yra tas pats, kas serverless.“ Susiję, bet ne identiški. Kai kurios platformos paleidžia programą kaip įprastą serverį, kuris užmiega, kai neaktyvus, ir pabunda su kita užklausa – panašus taupymas ir panašus pirmosios užklausos vėlavimas, bet be funkcijoms būdingų laiko limitų kiekvienai užklausai.
Ko paklausti savo AI kūrėjo
- „Ar šis backend veiks kaip serverless funkcijos, ar kaip visada įjungtas arba užmigdomas serveris? Ką tai reiškia kainai?“
- „Ar kai kurios užduotys gali užtrukti ilgiau nei platformos laiko limitas? Jei taip, kaip jas tvarkyti?“
- „Viską, kas turi išlikti, saugokite duomenų bazėje ar failų saugykloje, o ne atmintyje ar vietiniuose failuose.“
- „Kaip valdyti duomenų bazės jungtis, jei daug kopijų veikia vienu metu?“
- „Koks yra vėlavimas pirmai užklausai, kai programa buvo neaktyvi?“
Kaip Mythex talpina programas
Mythex savo talpinimo neapibūdina kaip serverless funkcijų. Publikuodami programa veikia kaip įprasta žiniatinklio programa arba konteineris, kurį Mythex valdo už jus – nieko talpinti nereikia. Tai mastelio mažinimas iki nulio: publikuotos programos ir jų duomenų bazės užmiega, kai neaktyvios, ir pabunda kitą kartą apsilankius; užmigusi programa skaičiavimams nieko nekainuoja, o papildomos mašinos paleidžiamos tik tada, kai srautas didelis (Pro plane – iki 3 vienai paslaugai). Prijungta Postgres duomenų bazė taip pat užmiega po 5 neaktyvių minučių ir yra apmokestinama už laiką, kurį buvo įjungta. Taigi gaunate dalį naudos „mokėk tik už tai, ką naudoji“, su tuo pačiu pirmos užklausos vėlavimu po ramaus laikotarpio. Žr. dokumentacijos talpinimo ribas ir mūsų vadovus apie žiniatinklio talpinimą bei kaip sumažinti talpinimo išlaidas.
Klausimai
Ką reiškia serverless paprastais žodžiais?
Serverless reiškia, kad debesijos teikėjui perduodate savo kodą, ir jis vykdomas tik tada, kai reikia – pavyzdžiui, kai ateina užklausa – be jokių serverių jūsų pusėje. Dažniausiai mokate už laiką, kai jūsų kodas iš tikrųjų veikia, o ne už mašiną, kuri nuolat įjungta.
Ar serverless tikrai nėra serverių?
Serveriai yra, tiesiog jūs jų nevaldote. Teikėjas paleidžia jūsų kodą savo mašinose, paleidžia jį, kai atkeliauja užklausos, didina, kai apkrova didelė, ir išjungia, kai nevykdomas jokių darbų.
Kas yra šaltas paleidimas (cold start)?
Šaltas paleidimas – tai papildomas vėlavimas, kai serverless funkcija paleidžiama po nenaudojimo, nes teikėjas pirma turi paleisti naują jos kopiją. Jis gali būti nuo beveik nepastebimo iki vienos sekundės ar ilgesnio, priklausomai nuo platformos, kalbos ir kodo dydžio.
Ar serverless pigiau nei įprastas serveris?
Programoms su nedideliu ar nevienodu srautu dažnai taip, nes beveik nemokate, kai nieko nevyksta. Programoms su dideliu, nuolatiniu srautu visada įjungtas serveris gali išeiti pigiau. Tai priklauso nuo jūsų naudojimo modelio ir teikėjo kainų.
Kokios yra serverless platformų pavyzdžiai?
Žinomi pavyzdžiai – AWS Lambda, Google Cloud Run functions, Azure Functions, Cloudflare Workers ir talpinimo platformų, tokių kaip Vercel ir Netlify, funkcijų galimybės.