Mi az a szerver nélküli (serverless) működés? Egyszerűen elmagyarázva
A serverless egy kódfuttatási mód, amelynél nem állítasz be és nem kezelsz semmilyen szervert. A kódodat egy felhőszolgáltatónak adod, az pedig csak akkor futtatja, ha valami elindítja – egy webes kérés, egy feltöltött fájl, egy fizetési értesítés –, majd leáll. Általában azt az időt fizeted, amíg a kódod ténylegesen fut, nem egy tétlenül álló gépet.
Miért fontos a serverless, ha AI-val építkezel
Ha AI-val építesz alkalmazást, és tárhelyopciókat vagy kódot nézel, összefutsz a „serverless függvények”, „edge függvények” vagy „felhőfüggvények” kifejezésekkel. Sok tárhelyplatform kínálja őket, és néhány AI-építő így telepíti a backendet. A modell megértése három gyakorlati kérdésben segít:
- Költség. Fizetni fogsz az alkalmazásért, amikor senki sem használja?
- Sebesség. Miért lassabb az első kérés egy csendes időszak után?
- Korlátok. Miért járt le a időkorlát egy hosszú feladatnál – egy nagy jelentés generálásánál vagy egy videó feldolgozásánál?
Az is segít tudni, mit nem jelent a serverless: nem azt jelenti, hogy nincs backend. Továbbra is van szerveroldali kódod; csak más futtatja a gépeket. Az alapokért lásd: mi az a szerver.
Hétköznapi hasonlat
A hagyományos szerver olyan, mint egy autó tulajdonlása. Mindig ott van, azonnal indulásra kész, de fizetsz érte – biztosításért, parkolásért, karbantartásért –, akár használod, akár nem.
A serverless olyan, mint taxit hívni. Csak az utak után fizetsz, és ha száz embernek kell egyszerre fuvar, száz taxi jön. Viszont rövid várakozás lehet, amíg az autó megérkezik (ez a hideg indítás), minden út maximális hosszúságú, és a sofőr nem emlékszik rád az előző fuvar után (a függvények állapotmentesek).
Hogyan működnek a serverless függvények
A legelterjedtebb formában, amelyet functions as a service-nek (FaaS) hívnak:
- Írsz egy függvényt – egy kis kódrészletet, amely egyfajta eseményt kezel, például „kezeld a POST kérést a
/api/bookingsútvonalon”. - Telepíted. A szolgáltató tárolja, és egy eseményindítóhoz köti: egy URL-hez, egy ütemezéshez, egy új fájlhoz a tárolóban, vagy egy üzenethez a sorban.
- Esemény érkezik. A szolgáltató elindít egy példányt a függvényedből (vagy újrahasznosít egy meleg példányt), lefuttatja, és visszaadja az eredményt.
- Magától skálázódik. Ha egyszerre ezer kérés érkezik, a szolgáltató párhuzamosan sok példányt futtat, a fiókod korlátaiig.
- Tétlenné válik. Ha leáll a forgalom, a példányok leállnak. Ha nincs semmi futva, a számítási költség nulla.
Egy apró serverless függvény JavaScriptben nagyjából így nézhet ki:
export default async function handler(request) {
const { name } = await request.json();
return Response.json({ message: `Hello, ${name}` });
}
Nincs szükség kódra szerver indításához, portok nyitásához vagy folyamat életben tartásához. Ezt mind a platform intézi.
A „serverless” kifejezést lazábban más, automatikusan skálázódó, használat szerint számlázott menedzselt szolgáltatásokra is használják – például a serverless adatbázisokra, amelyek tétlenség esetén szüneteltetnek.
Kulcsfogalmak
| Fogalom | Jelentés |
|---|---|
| Függvény (FaaS) | Egy kis kódegység, amelyet a szolgáltató igény szerint futtat. |
| Eseményindító / esemény | Ami elindítja a függvényt – HTTP-kérés, fájlfeltöltés, időzítő, üzenet a sorban. |
| Hideg indítás (cold start) | Késleltetés, amikor egy új példánynak el kell indulnia, mielőtt kérést kezelne. |
| Meleg (warm) | Egy már futó példány, amely azonnal tud válaszolni. |
| Állapotmentes (stateless) | A függvény nem őriz memóriát a futások között. Ami maradandó, az adatbázisba vagy tárhelyre kerül. |
| Időkorlát (timeout) | Egy futás maximális megengedett ideje. Például az AWS Lambda maximuma 15 perc; sok platform ennél jóval kevesebbet ad alapból. |
| Edge függvény | A felhasználókhoz közeli, sok helyszínen futó függvény, gyakran szigorúbb korlátokkal. |
| Skálázás nullára (scale to zero) | Nincs futás, és nincs számítási költség, ha nincs forgalom. |
Munkapélda: egy kis foglalási oldal
Egy jógastúdió foglalási oldalára minden vasárnap este rohamszerűen érkeznek a látogatók, amikor kikerül az új órarend, a hét többi részében pedig alig.
- Állandóan futó szerveren a stúdió non-stop fizet egy gépért, amelyet a vasárnap esti csúcsra méreteztek, és a többi időben nagyrészt tétlen.
- Serverless függvényekkel a
GET /api/classesés aPOST /api/bookingsfüggvények. A vasárnapi rohamot automatikusan sok példány követi; egy csendes keddi reggelen szinte semmi nem fut, és a számla közel nulla.
A kompromisszumok is megjelennek. Az első ember, aki kedd reggel megnyitja az oldalt, egy kicsit többet várhat a hideg indításra. Az adatbázisnak sok rövid életű kapcsolatot kell kezelnie sok függvénypéldánytól, ami kapcsolatkezelő (connection pooler) használatát indokolhatja. Ha a stúdió később egy „generáld mindenki éves részvételi PDF-jét” feladatot szeretne, az túllépheti a függvény időkorlátját, és máshol kell futnia.
Mikor jó a serverless – és mikor nem
| Jó választás | Kevésbé jó választás |
|---|---|
| Alacsony, lökésszerű vagy kiszámíthatatlan forgalom | Állandó, nagy forgalom, ahol az állandóan futó szerver lehet olcsóbb |
| Rövid kérés–válasz feladatok: API-k, űrlapkezelők, webhookok | Hosszú futású feladatok: nagy videófeldolgozás, nagy adatimportok |
| Kis csapatok, amelyek nem akarnak szervereket kezelni | Olyan alkalmazások, amelyek nyitva tartják a kapcsolatokat (egyes csevegési vagy többjátékos funkciók), hacsak a platform nem támogatja |
| Eseménykezelés: „amikor fájl töltődik fel, készíts bélyegképet” | Olyan alkalmazások, amelyeknek sok memóriát kell megtartaniuk a kérések között |
Gyakori tévhitek
- „A serverless azt jelenti, hogy nincs backend.” Azt jelenti, hogy nincsenek kezelendő szerverek. A backend kódot továbbra is meg kell írnod és biztosítanod.
- „A serverless mindig olcsóbb.” Kis volumen mellett az, de kérésenkénti árazásnál nagy, állandó volumen mellett a költségek összeadódhatnak.
- „A serverless végtelenül skálázódik.” A platformoknak van párhuzamossági korlátjuk, és az adatbázisod sokkal előbb szűk keresztmetszet lehet, mint a függvények.
- „A függvényben mentett fájlok legközelebb is ott lesznek.” A helyi tárolás ideiglenes. Használj adatbázist vagy fájltárhelyet.
- „A nullára skálázás ugyanaz, mint a serverless.” Rokon, de nem azonos. Egyes platformok az alkalmazásodat hagyományos szerverként futtatják, amely tétlenül elalszik, és a következő kérésre felébred – hasonló megtakarítással és hasonló első kérés-késleltetéssel, de függvényszerű kérésenkénti időkorlát nélkül.
Mit kérj az AI-építődtől
- „Ez a backend serverless függvényként fut, vagy állandóan futó, illetve elalvó szerverként? Mit jelent ez a költség szempontjából?”
- „Van olyan feladat, amely valószínűleg hosszabb lesz a platform időkorlátjánál? Ha igen, hogyan kezeljük?”
- „Minden maradandó adatot az adatbázisban vagy fájltárhelyen tárolj, ne memóriában vagy helyi fájlokban.”
- „Hogyan kezeljük az adatbázis-kapcsolatokat, ha sok példány fut egyszerre?”
- „Mennyi a késleltetés az első kérésnél, miután az alkalmazás tétlen volt?”
Hogyan szolgálja ki a Mythex az alkalmazásokat
A Mythex nem serverless függvényekként írja le a tárhelyét. Közzétételkor az alkalmazásod normál webalkalmazásként vagy konténerként fut, amelyet a Mythex kezel helyetted – nincs beállítanivaló tárhely. Ez nullára skálázás: a közzétett alkalmazások és adatbázisaik tétlenül elalszanak, és a következő látogatásra felébrednek; az elalvó alkalmazás nem fizet számítási költséget, a plusz gépek pedig csak nagy forgalomnál indulnak (Pro csomagban szolgáltatásonként legfeljebb 3). A csatolt Postgres adatbázis is 5 perc tétlenség után elalszik, és a felébren töltött időért számláz. Így a „fizess azt, amit használsz” előny nagy részét megkapod, csendes időszak utáni első kérés-késleltetéssel együtt. Lásd a dokumentációban a tárhelykorlátokat, illetve az útmutatóinkat a webhostingról és a tárhelyköltségek csökkentéséről.
Kérdések
Mit jelent egyszerűen a serverless?
A serverless azt jelenti, hogy a kódodat egy felhőszolgáltatónak adod, amely csak akkor futtatja, ha szükség van rá – például amikor kérés érkezik –, anélkül hogy neked szervereket kellene beállítanod vagy üzemeltetned. Általában azt az időt fizeted, amíg a kódod ténylegesen fut, nem egy folyamatosan bekapcsolt gépet.
Tényleg nincsenek szerverek a serverless működésben?
Vannak szerverek; csak nem neked kell kezelned őket. A szolgáltató a saját gépein futtatja a kódodat, elindítja, amikor kérések érkeznek, terhelés alatt felskálázza, tétlenség esetén pedig leállítja.
Mi a hideg indítás (cold start)?
A hideg indítás az a többletkésleltetés, amikor egy serverless függvény tétlenség után fut, mert a szolgáltatónak először el kell indítania egy friss példányt. Ez a platformtól, a nyelvtől és a kód méretétől függően az alig észrevehetőtől egy vagy több másodpercig terjedhet.
Olcsóbb a serverless, mint egy hagyományos szerver?
Kis vagy egyenetlen forgalmú alkalmazásoknál gyakran igen, mert tétlen állapotban szinte semmit nem fizetsz. Nagy, folyamatos forgalomnál egy állandóan futó szerver olcsóbb lehet. Ez a használati mintától és a szolgáltató árazásától függ.
Milyen serverless platformok vannak?
Ismert példák az AWS Lambda, a Google Cloud Run functions, az Azure Functions, a Cloudflare Workers, valamint a tárhelyplatformok, például a Vercel és a Netlify függvényfunkciói.