
Cloudflare Workers vai Vercel? Halpa pyyntö voi hävitä muistirajaan

Cloudflare Workers on vahva kustannusvaihtoehto sovellukselle, joka käsittelee paljon kevyitä pyyntöjä ja mahtuu sen teknisiin rajoihin. Vercel Functions voi olla perustellumpi valinta, jos sovellus tarvitsee enemmän muistia tai käyttää Next.js:n ominaisuuksia, joiden siirtäminen Workersiin vaatisi lisätyötä.
Vertailu kannattaa tehdä kahdessa osassa. Kuukausilaskuun tarvitaan pyyntöjen, aktiivisen suoritinajan ja siirretyn datan määrät sekä Vercelillä varatun muistin käyttöaika. Erikseen on ratkaistava, toimiiko sovellus valitussa ajoympäristössä: halpakaan pyyntö ei auta, jos muistihuippu ylittää rajan.
Workersin hinta muodostuu pyynnöistä ja suoritinajasta
Cloudflare Workersin hinnaston mukaan maksullisen paketin vähimmäishinta on 5 dollaria kuukaudessa. Pakettiin sisältyy 10 miljoonaa pyyntöä ja 30 miljoonaa suoritinmillisekuntia kuukaudessa; ylittävä käyttö maksaa 0,30 dollaria miljoonalta pyynnöltä ja 0,02 dollaria miljoonalta suoritinmillisekunnilta. Workersin tiedonsiirrosta ulos ei veloiteta erikseen.
Workers-laskuriin merkitään kuukausittaiset Worker-kutsut ja niiden yhteenlaskettu aktiivinen suoritinaika. Vähennä kummastakin oma sisältyvä kiintiönsä ja lisää mahdolliset ylitykset vähimmäishintaan. Pelkkä pyyntöjen keskimääräinen vasteaika ei kelpaa suoritinajan tilalle: tietokantaa odottava kutsu voi kestää pitkään mutta käyttää vain vähän suoritinta.
Jaa liikenne tarvittaessa pyyntötyyppeihin. Kevyt rajapintakutsu, palvelimella muodostettu sivu ja raskas tiedonkäsittely voivat kuluttaa hyvin eri määrän suoritinaikaa. Staattinen tiedosto, joka palvellaan ilman Worker-kutsua, ei ole sama laskutettava tapahtuma kuin Workerille saapuva pyyntö. Jos Worker palvelee pyynnön omasta välimuististaan, kutsu voi edelleen kuluttaa pyyntökiintiötä, vaikka varsinaista Worker-suoritinaikaa ei synny.
Vercelin laskussa muistin varausaika on eri mittari
Vercel Functionsin Fluid Compute -hinnoittelu erottaa kutsut, aktiivisen suoritinajan ja varatun muistin käyttöajan. Suoritinajan laskutus keskeytyy esimerkiksi ulkoista palvelua odotettaessa, mutta varattua muistia laskutetaan instanssin käsitellessä pyyntöjä. Suoritin- ja muistihinnat riippuvat myös valitusta suoritusalueesta.
Vercelin arviossa aktiivinen suoritinaika muutetaan tunneiksi ja kerrotaan alueen tuntihinnalla. Muistierässä varattu gigatavumäärä kerrotaan instanssin käyttöajalla, jolloin tulos on gigatavuatunteja. Samaa instanssia voidaan käyttää samanaikaisiin pyyntöihin, joten yksittäisten pyyntöjen vasteaikojen summa ei kerro suoraan varatun muistin laskutettavaa aikaa.
Suomalaisia käyttäjiä palvelevan sovelluksen laskelmaan on siksi kirjattava myös suoritusalue. Tukholman ja Frankfurtin suoritin- ja muistihinnat eroavat Vercelin taulukossa toisistaan. Alue vaikuttaa lisäksi siihen, kuinka kaukana funktio on tietokannasta: edullinen alue voi kasvattaa odotusaikaa, jos sovelluksen data sijaitsee muualla.
Siirretty data ja välimuisti muuttavat vertailupohjaa
Kirjaa erikseen käyttäjille toimitetut tavut, funktiolle tulevat ja sieltä lähtevät tavut sekä yhteydet muihin palveluihin. Workersin omaan suorituslaskuun ei lisätä erillistä ulosmenevän tiedonsiirron maksua, mutta esimerkiksi tallennus-, kuva- tai tietokantapalvelun kulut voivat kuulua koko sovelluksen laskuun. Vercelillä siirtomäärää ei pidä piilottaa Functionsin suoritinerään, koska sisällön jakelu ja suoritus ovat eri kulutuseriä.
Välimuistin osumat muuttavat sekä laskua että laskurin lähtötietoja. Jos sivu palvellaan jakeluverkosta ilman funktion kutsua, sitä ei saa laskea dynaamiseksi suoritukseksi. Jos jokainen pyyntö kulkee koodin kautta, sama kävijämäärä tuottaa toisenlaisen suoritusmäärän. Siksi kahden alustan kuukausisummaa voi verrata vasta, kun molemmille on annettu sama liikenneprofiili ja selvästi määritelty välimuistin toiminta.
Muistihuippu voi ratkaista valinnan ennen hintaa
Workersin teknisissä rajoissa muistin enimmäismäärä on 128 megatavua isolaattia kohti sekä ilmaisessa että maksullisessa paketissa. Rajaan kuuluvat JavaScript-keko ja WebAssembly-varaukset. Kyse ei ole erillisestä muistimäärästä jokaiselle pyynnölle: sama isolaatti voi käsitellä useita pyyntöjä samanaikaisesti.
Suuri kokonaan muistiin koottu tiedosto, laaja välitulos tai yhtäaikaiset raskaat pyynnöt voivat nostaa käytön rajan yli. Tällöin lisää pyyntökiintiötä ostamalla ei saa sovellusta toimimaan. Suoratoisto tai käsittelyn pilkkominen voi pienentää muistihuippua, mutta toteutus ja ylläpito maksavat kehitystyötä. Vercelin varattavaa muistia voi kasvattaa, jolloin kapasiteetin lisäys näkyy myös sen laskentamallissa.
Erottele myös aktiivinen suoritinaika pyynnön kokonaiskestosta. Workersin maksullisessa paketissa suoritinaikaa koskee pyyntökohtainen raja, kun taas HTTP-pyynnön kokonaiskestolle ei ole vastaavaa kovaa rajaa asiakkaan pysyessä yhteydessä. Vercelillä funktion enimmäiskesto koskee koko käsittelyä myös odotuksen aikana. Pitkään vastausta odottava pyyntö ja paikallisesti raskas laskenta tarvitsevat siksi eri tarkistuksen.
Next.js:n ominaisuudet määräävät siirtotyön
Vercelillä Next.js toimii alustan omassa ajoympäristössä. Cloudflaren Next.js-ohje suosittelee Workersille vinextiä, joka on beta-vaiheessa; olemassa olevan OpenNext-toteutuksen ylläpito on edelleen vaihtoehto. Vinext tukee useita tavallisia Next.js-ominaisuuksia, mutta esimerkiksi kuvien optimoinnin tuki on osittainen.
Siirrettävässä sovelluksessa ratkaisevia ovat sen omat reitit ja riippuvuudet. Palvelimella tehtävä renderöinti, välimuistin uudistaminen, kuvankäsittely ja Node.js-kirjastot voivat vaatia eri määrän sovitustyötä. Jos sovitin muuttaa rakentamista tai välimuistin toimintaa, työ kuuluu samaan valintaan kuin arvioitu kuukausimaksu. Kevyessä rajapinnassa tätä kehyskustannusta voi olla vähän; laajasti Next.js:n palvelinominaisuuksiin nojaavassa sovelluksessa sillä voi olla suurempi paino kuin pyyntöhinnalla.
Julkaistut laskut eivät mittaa suorituskykyä
TanStack Shipin laskuesimerkissä kevyelle TanStack Start -sovellukselle esitetään noin 50 000 päivittäisellä pyynnöllä 8,50 dollarin Workers-summa ja 126,05 dollarin Vercel-summa kuukaudessa. Kirjoittaja kuvaa tuotantosovelluksiaan, mutta taulukon summat ovat hänen laskentaoletuksiaan. Ne eivät ole samalla toteutuksella ja samalla kuormalla tehty suorituskykytesti.
Esimerkin Vercel-suoritinerä käyttää eri laskutapaa kuin Vercelin nykyinen aluekohtainen tuntihinnoittelu. Workers-erä puolestaan käsittelee suoritinajan ylityksen nollana, vaikka taulukossa annettu suoritinajan mediaani ei yksin kerro laskutettavaa kokonaisaikaa. Näistä summista ei siksi voi johtaa yleistä liikennemäärää, jossa alusta vaihtuu varmasti halvemmaksi.
Omaan vertailuun tarvitaan pyyntötyypeittäin yhteenlaskettu suoritinaika, muistin varausaika, välimuistin osumat ja siirtomäärät. Hintalaskelma kertoo kustannuksista vasta näillä lähtötiedoilla. Sovelluksen toimivuus ja vasteajat ovat erillisiä kysymyksiä, joihin laskutaulukon erot eivät vastaa.
Lue myös:
Aiheeseen liittyvät artikkelit


Playwright vai Cypress? Rinnakkaisajo voi vaatia eri määrän infraa

Supabase vai Firebase? Lukumääräinen laskutus voi yllättää kasvussa

Grafana Cloud vai Datadog? Kardinaliteetti voi kääntää halvan laskun

Turnstile vai reCAPTCHA? Ilmaisraja muuttaa suuren lomakkeen hinnan

PostgreSQL vai MySQL? Työkuorma ratkaisee benchmarkin
Tilaa uutiskirjeemme
Saat tuoreimmat Web3-, tekoäly- ja kryptouutiset suoraan sähköpostiisi.