Mikä on serverless? Serverless-laskenta selitettynä yksinkertaisesti
Serverless on tapa ajaa koodia, jossa et itse pystytä tai hallitse mitään palvelimia. Annat koodisi pilvipalveluntarjoajalle, ja se ajaa koodin vain kun jokin laukaisee sen: verkkopyyntö, ladattu tiedosto, maksuilmoitus. Sitten se pysähtyy. Yleensä maksat ajasta, jonka koodisi todella käy, etkä koneesta, joka on joutilaana.
Miksi serverless on tärkeä, kun rakennat tekoälyllä
Kun rakennat sovellusta tekoälyllä ja katsot isännöintivaihtoehtoja tai koodia, törmäät termeihin ”serverless-funktiot”, ”edge-funktiot” tai ”pilvifunktiot”. Monet isännöintialustat tarjoavat niitä, ja jotkin tekoälysovellusrakentajat julkaisevat taustapalveluja tällä tavalla. Mallin ymmärtäminen auttaa kolmessa käytännön kysymyksessä:
- Kustannus. Maksaako sovelluksesi rahaa, vaikka kukaan ei käytä sitä?
- Nopeus. Miksi ensimmäinen pyyntö hiljaisen jakson jälkeen on hitaampi?
- Rajat. Miksi pitkä tehtävä, kuten suuren raportin tai videon käsittely, aikakatkaistiin?
On myös hyvä tietää, mitä serverless ei ole: se ei ole taustapalvelun puuttumista. Sinulla on edelleen palvelinpuolen koodi. Joku muu vain ajaa koneet. Perusteet löydät sivulta mikä palvelin on.
Arkinen vertaus
Perinteinen palvelin on kuin oma auto. Se on aina valmiina lähtemään heti, mutta maksat siitä, vakuutuksesta, pysäköinnistä ja huollosta, ajitpa sillä tai et.
Serverless on kuin ottaisi taksin. Maksat vain tehdyistä matkoista, ja jos sata ihmistä tarvitsee kyydin yhtä aikaa, sata taksia tulee. Mutta autoa joutuu odottamaan hetken (kylmäkäynnistys), jokaisella matkalla on enimmäispituus, eikä kuljettaja muista sinua edellisestä kyydistä (funktiot ovat tilattomia, stateless).
Miten serverless-funktiot toimivat
Yleisimmässä muodossa, jota kutsutaan functions as a service (FaaS):
- Kirjoitat funktion. Pieni koodinpätkä, joka käsittelee yhdenlaisen tapahtuman, kuten ”käsittele POST-pyyntö osoitteeseen
/api/bookings”. - Julkaiset sen. Palveluntarjoaja tallentaa sen ja kytkee sen laukaisijaan: URL-osoitteeseen, aikatauluun, uuteen tiedostoon tallennustilassa tai viestiin jonossa.
- Tapahtuma saapuu. Palveluntarjoaja käynnistää kopion funktiostasi (tai käyttää lämmintä kopiota), ajaa sen ja palauttaa tuloksen.
- Se skaalautuu itsestään. Jos tuhat pyyntöä saapuu yhtä aikaa, palveluntarjoaja ajaa monta kopiota rinnakkain tilisi rajoihin asti.
- Se menee joutilaaksi. Kun liikenne loppuu, kopiot sammutetaan. Kun mitään ei käy, et maksa laskennasta mitään.
Yksinkertainen serverless-funktio JavaScriptillä voi näyttää tältä:
export default async function handler(request) {
const { name } = await request.json();
return Response.json({ message: `Hello, ${name}` });
}
Koodia palvelimen käynnistämiseen, portin avaamiseen tai prosessin pitämiseen käynnissä ei tarvita. Alusta hoitaa sen kaiken.
”Serverless” tarkoittaa löyhemmin myös muita hallittuja palveluja, jotka skaalautuvat automaattisesti ja laskutetaan käytön mukaan, esimerkiksi serverless-tietokantoja, jotka pysähtyvät joutilaana ollessaan.
Keskeiset termit
| Termi | Merkitys |
|---|---|
| Funktio (FaaS) | Pieni koodiyksikkö, jonka palveluntarjoaja ajaa tarvittaessa. |
| Laukaisija / tapahtuma | Mikä käynnistää funktion: HTTP-pyyntö, tiedoston lataus, ajastin, jonoviesti. |
| Kylmäkäynnistys | Viive, kun uusi kopio funktiosta täytyy käynnistää ennen pyynnön käsittelyä. |
| Lämmin | Kopio, joka on jo käynnissä ja voi vastata heti. |
| Tilaton (stateless) | Funktio ei muista mitään ajojen välillä. Kaikki, mitä täytyy säilyttää, menee tietokantaan tai tallennustilaan. |
| Aikakatkaisu (timeout) | Yhdelle ajolle sallittu enimmäisaika. Esimerkiksi AWS Lambdan enimmäisaika on 15 minuuttia, monilla alustoilla oletus on paljon lyhyempi. |
| Edge-funktio | Funktio, jota ajetaan useissa paikoissa lähellä käyttäjiä, usein tiukemmin rajoin. |
| Skaalaus nollaan (scale to zero) | Ei ajeta mitään eikä makseta laskennasta, kun liikennettä ei ole. |
Työstetty esimerkki: pieni varaussivusto
Jooga-studion varaussivusto saa piikin sunnuntai-iltoina, kun uusi aikataulu julkaistaan, ja hyvin vähän muina päivinä.
- Aina päällä olevalla palvelimella studio maksaa koneesta 24/7, mitoitettuna sunnuntai-illan huippuun, ja se on suurimmaksi osaksi joutilaana.
- Serverless-funktioilla
GET /api/classesjaPOST /api/bookingsovat funktioita. Sunnuntain ruuhka käynnistää monta kopiota automaattisesti. Hiljaisena tiistaiaamuna lähes mitään ei aja, ja lasku on lähellä nollaa.
Kompromissit näkyvät myös. Ensimmäinen henkilö, joka avaa sivuston tiistaiaamuna, saattaa odottaa hetken kylmäkäynnistystä. Tietokannan täytyy käsitellä monia lyhytikäisiä yhteyksiä monista funktiokopioista, mikä voi vaatia yhteyspoolerin. Ja jos studio myöhemmin haluaa tehtävän ”luo kaikkien vuosittainen osallistumis-PDF”, se voi ylittää funktion aikarajan ja joutua ajettavaksi muualla.
Milloin serverless sopii ja milloin ei
| Hyvä sovitus | Vähemmän hyvä sovitus |
|---|---|
| Liikenne, joka on vähäistä, piikkistä tai ennakoimatonta | Jatkuva raskas liikenne, jossa aina päällä oleva palvelin voi olla halvempi |
| Lyhyet pyyntö-vastaus-tehtävät: API:t, lomakekäsittelijät, webhookit | Pitkäkestoiset työt: suurten videoiden käsittely, isot datan tuonnit |
| Pienet tiimit, jotka eivät halua hallita palvelimia | Sovellukset, jotka pitävät elävät yhteydet auki (joissakin chat- tai moninpelitoiminnoissa), ellei alusta tue sitä |
| Tapahtumien käsittely: ”kun tiedosto ladataan, tee siitä pikkukuva” | Sovellukset, jotka tarvitsevat paljon muistia pyyntöjen välillä |
Yleiset väärinkäsitykset
- ”Serverless tarkoittaa, ettei backendiä ole.” Se tarkoittaa, ettei palvelimia tarvitse hallita. Kirjoitat ja suojaat edelleen backend-koodin.
- ”Serverless on aina halvempaa.” Halpaa pienellä volyymilla, mutta pyyntökohtainen hinnoittelu voi kertyä suurella ja tasaisella volyymilla.
- ”Serverless skaalautuu äärettömästi.” Alustoilla on samanaikaisuusrajoja, ja tietokantasi voi muodostua pullonkaulaksi kauan ennen funktioita.
- ”Funktiossa tallennetut tiedostot ovat siellä seuraavalla kerralla.” Paikallinen tallennus on väliaikaista. Käytä tietokantaa tai tiedostotallennusta.
- ”Skaalaus nollaan on sama asia kuin serverless.” Liittyvät, mutta eivät identtiset. Jotkin alustat ajavat sovelluksesi tavallisena palvelimena, joka nukkuu joutilaana ja herää seuraavaan pyyntöön. Säästö ja ensimmäisen pyynnön viive ovat samankaltaisia, mutta funktiotyylisiä pyyntökohtaisia aikarajoja ei ole.
Mitä pyytää tekoälyrakentajalta
- ”Ajetaanko tämä taustapalvelu serverless-funktioina vai aina päällä olevana tai nukkuvana palvelimena? Mitä se tarkoittaa kustannuksille?”
- ”Kestävätkö jotkin tehtävät todennäköisesti alustan aikarajaa? Jos kestävät, miten ne pitäisi käsitellä?”
- ”Tallenna kaikki, minkä pitää säilyä, tietokantaan tai tiedostotallennukseen, älä muistiin tai paikallisiin tiedostoihin.”
- ”Miten tietokantayhteyksiä hallitaan, jos monta kopiota ajetaan yhtä aikaa?”
- ”Mikä on viive ensimmäisessä pyynnössä sen jälkeen, kun sovellus on ollut joutilaana?”
Miten Mythex isännöi sovelluksia
Mythex ei kuvaa isännöintiään serverless-funktioina. Kun julkaiset, sovelluksesi ajetaan tavallisena verkkosovelluksena tai konttina, jota Mythex hallinnoi puolestasi. Mitään isännöintiä ei tarvitse pystyttää. Kyse on skaalauksesta nollaan: julkaistut sovellukset ja niiden tietokannat nukkuvat joutilaana ja heräävät seuraavasta käynnistä. Nukkuva sovellus ei kuluta laskentaan mitään, ja lisäkoneet käynnistyvät vain, kun liikenne on raskasta (Pro-tasolla enintään 3 per palvelu). Liitetty Postgres-tietokanta nukahtaa myös 5 minuutin joutilasjakson jälkeen, ja sitä laskutetaan ajasta, jolloin se oli hereillä. Saat siis suuren osan ”maksa käytön mukaan” -hyödystä, ja ensimmäisen pyynnön viive hiljaisen jakson jälkeen on samankaltainen. Katso isännöinnin rajat dokumentaatiosta sekä oppaamme verkkoisännöinnistä ja isännöintikustannusten pienentämisestä.
Kysymykset
Mitä serverless tarkoittaa yksinkertaisesti?
Serverless tarkoittaa, että annat pilvipalveluntarjoajalle koodisi ja se ajaa sen vain tarvittaessa, esimerkiksi kun pyyntö saapuu, ilman että sinun tarvitsee pystyttää tai valvoa palvelimia. Yleensä maksat ajasta, jonka koodisi todella käy, etkä koneesta, joka on aina päällä.
Onko serverlessissä oikeasti palvelimia?
On, mutta et hallitse niitä. Palveluntarjoaja ajaa koodisi omilla koneillaan, käynnistää sen kun pyyntöjä saapuu, skaalaa sitä kuormituksen alla ja sulkee sen, kun se on joutilaana.
Mikä on kylmäkäynnistys?
Kylmäkäynnistys on ylimääräinen viive, kun serverless-funktio ajetaan joutilaana olon jälkeen, koska palveluntarjoajan täytyy ensin käynnistää siitä uusi kopio. Viive voi olla lähes huomaamaton tai sekunnin tai pidempi alustasta, kielestä ja koodin koosta riippuen.
Onko serverless halvempaa kuin tavallinen palvelin?
Sovelluksille, joilla on vähän tai epätasaista liikennettä, usein kyllä, koska maksat lähes ei mitään joutilaana ollessasi. Sovelluksille, joilla on raskasta ja jatkuvaa liikennettä, aina päällä oleva palvelin voi tulla halvemmaksi. Se riippuu käyttötavastasi ja palveluntarjoajan hinnoittelusta.
Mitä esimerkkejä serverless-alustoista on?
Tunnettuja esimerkkejä ovat AWS Lambda, Google Cloud Run functions, Azure Functions ja Cloudflare Workers sekä isännöintialustojen, kuten Vercelin ja Netlifyn, funktio-ominaisuudet.