AWS Lambda ili Cloudflare Workers: čekanje i egress preokreću račun

|Autor: Urednički tim QUASA|6 min čitanja
AWS Lambda ili Cloudflare Workers: čekanje i egress preokreću račun

Za serverless API koji velik dio poziva čeka odgovor baze ili drugog servisa Cloudflare Workers Paid može imati niži račun za izvršavanje od AWS Lambda Event Functions. Workers naplaćuje aktivno CPU vrijeme i zahtjeve, dok Lambda Event Functions trajanje poziva obračunava prema dodijeljenoj memoriji. Kada poziv gotovo samo računa i stane u Lambdinu besplatnu kvotu, odnos se može preokrenuti.

Za korisnika u Hrvatskoj cijena po pozivu ipak nije cijeli odgovor. Izlazni promet može promijeniti prednost koju pokazuje račun za izvršavanje, a mjesto obrade određuje koliko dugo API čeka udaljenu bazu. Usporedba zato mora odvojiti CPU rad, mrežno čekanje, broj zahtjeva, veličinu odgovora i latenciju cijelog puta do korisnika.

Što ulazi u račun za izvršavanje?

Za AWS Lambda Event Functions naplaćuju se zahtjevi i trajanje izraženo u GB-sekundama: vrijeme izvršavanja množi se memorijom dodijeljenom funkciji. Za x86 u američkoj regiji ovdje se koriste cijene od 0,20 USD za milijun zahtjeva i 0,0000166667 USD po GB-sekundi te mjesečna besplatna kvota od milijun zahtjeva i 400.000 GB-sekundi. Prijenos podataka u funkciju ili iz nje izvan regije izvršavanja može se naplatiti zasebno, kao i druge AWS usluge koje funkcija koristi. Račun se odnosi na Event Functions; Lambda Web Functions imaju drukčiji model koji uključuje aktivno CPU vrijeme i potrošnju memorije izvršnog okruženja.

Na planu Cloudflare Workers Paid osnovna mjesečna naknada iznosi najmanje 5 USD po računu i uključuje 10 milijuna zahtjeva te 30 milijuna CPU-milisekundi. Svaki dodatni milijun zahtjeva stoji 0,30 USD, a milijun CPU-milisekundi 0,02 USD. Standardni model ne naplaćuje trajanje čekanja ni dodatni izlazni promet Workera; usluge poput baze i pohrane mogu imati vlastitu naplatu. Osnovna naknada nije cijena pojedinačne funkcije ako se isti plaćeni račun koristi i za druge usluge.

Isti API pri milijun, 15 milijuna i 100 milijuna zahtjeva

Uvjetni izračun za isti API pokazuje drukčiji odnos troškova Lambde i Workersa pri jednom, 15 i 100 milijuna zahtjeva.

Uzmimo uvjetni mjesečni scenarij u kojem svaki zahtjev na obje platforme obavi 5 ms CPU rada i 195 ms čeka mrežni odgovor. Poziv ukupno traje 200 ms, a Lambda Event Function ima dodijeljeno 256 MB memorije. To je model za usporedbu tarifnih formula, a ne izmjereni benchmark: isti programski posao ne mora na različitim platformama potrošiti jednako CPU vremena. Pretpostavka je i da druge funkcije nisu potrošile navedene mjesečne kvote.

Pri milijun zahtjeva Lambda potroši 50.000 GB-sekundi te je njezin račun za zahtjeve i trajanje 0 USD unutar besplatnih kvota. Workers potroši 5 milijuna CPU-milisekundi i ostaje na osnovnih 5 USD. Prednost Lambde ovdje proizlazi iz raspoložive kvote, a ne iz niže cijene svakog milisekundnog razdoblja čekanja. Ako je kvota već iskorištena drugim funkcijama na računu, taj se rezultat mijenja.

Pri 15 milijuna zahtjeva Lambda dosegne 750.000 GB-sekundi. Nakon odbitka kvota, približno 5,83 USD otpada na trajanje i 2,80 USD na zahtjeve, ukupno 8,63 USD. Workers troši 75 milijuna CPU-milisekundi: dodatni CPU stoji 0,90 USD, dodatni zahtjevi 1,50 USD, a račun s osnovnom naknadom iznosi 7,40 USD. Razlika je mala, ali smjer se promijenio jer se mrežno čekanje u dva modela obračunava različito.

Pri 100 milijuna zahtjeva Lambda troši 5 milijuna GB-sekundi. Njezin približan račun iznosi 76,67 USD za trajanje i 19,80 USD za zahtjeve, ukupno 96,47 USD. Workers troši 500 milijuna CPU-milisekundi: dodatni CPU iznosi 9,40 USD, dodatni zahtjevi 27 USD, a ukupni račun 41,40 USD. Ovi iznosi pokrivaju samo navedene stavke izvršavanja i pretpostavljaju cijelo vrijeme jednake vrijednosti po zahtjevu.

Čekanje mijenja odnos, memorija povećava razliku

Sada iz istog uvjetnog posla uklonimo mrežno čekanje, a ostavimo 5 ms rada po zahtjevu. Pri 100 milijuna poziva Lambda s 256 MB memorije troši 125.000 GB-sekundi, ostaje unutar besplatne kvote za trajanje i plaća približno 19,80 USD za zahtjeve. Workersov račun ostaje 41,40 USD jer su broj zahtjeva i pretpostavljeno CPU vrijeme isti. Tako posao koji je gotovo sav računski daje obrnut redoslijed cijena od posla koji dugo čeka mrežu.

Dodijeljena memorija dodatno utječe na Lambdin račun. Uz prvotnih 200 ms trajanja i 100 milijuna zahtjeva, 128 MB dalo bi približno 54,80 USD, a 512 MB približno 179,80 USD za zahtjeve i trajanje. To je učinak formule uz nepromijenjeno trajanje, ne jamstvo jednake izvedbe: dodjela memorije u Lambdi mijenja i raspoložive računalne resurse, pa stvarni poziv može završiti brže ili sporije.

Ograničenja Cloudflare Workersa određuju 128 MB memorije po izolatu te zadani CPU limit od 30 sekundi za HTTP zahtjev na plaćenom planu, uz mogućnost povećanja na pet minuta. Vrijeme čekanja mrežnog zahtjeva ne ulazi u CPU vrijeme. Zato niska cijena pri dugom čekanju ne znači da će Worker jednako odgovarati zadatku koji u memoriji obrađuje velik skup podataka ili dugo neprekidno računa.

Kada izlazni promet preokreće cijenu?

Račun za funkciju nije račun za cijeli API. Uvjetni odgovor od 50 kB pri 100 milijuna zahtjeva stvara približno 5 TB izlaznih podataka prije kompresije. Workers nema dodatnu stavku za vlastiti izlazni promet, dok na AWS strani stvarni trošak prijenosa ovisi o putu podataka, regiji, besplatnim količinama i načinu izlaganja API-ja. Uz bazu, pristupnu uslugu ili pohranu mogu se pojaviti i druge zasebne stavke.

U varijanti bez mrežnog čekanja Lambda za izvršavanje ima prednost od 21,60 USD nad Workersom pri 100 milijuna poziva. Ako naplativi izlazni promet te konfiguracije prijeđe 21,60 USD, prednost u ukupnom računu nestaje čak i bez dodatnih troškova baze ili HTTP pristupa. To je prag izveden iz uvjetnog primjera, a ne procjena stvarne tarife prijenosa. Ako Worker dohvaća podatke iz druge usluge, i ta usluga može zasebno naplatiti zahtjeve ili promet na svojoj strani.

Hladni start i udaljenost do baze

Smještaj Cloudflare Workera bliže korisniku ili bazi mijenja ukupni put API zahtjeva između Hrvatske i Frankfurta.

AWS-ov opis izvršnog okruženja razlikuje hladni poziv, pri kojem se okruženje i kod inicijaliziraju, od kasnijeg poziva koji već pripremljeno okruženje može ponovno iskoristiti. Inicijalizacija dodaje latenciju i može ući u obračun trajanja. Zato mjerenje samo aktivnih instanci ne prikazuje cijelo iskustvo API-ja koji se poziva povremeno. Unaprijed pripremljena okruženja mogu ublažiti hladne startove, ali dodaju drukčije troškove od onih u gornjem izračunu.

Prema Cloudflareovim pravilima smještaja, Worker se zadano izvršava blizu mjesta primitka zahtjeva, a može se smjestiti bliže pozadinskoj bazi ili API-ju. Za korisnika u Hrvatskoj obrada blizu korisnika pomaže najviše kada odgovor ne zahtijeva više odlazaka do udaljene baze. Ako ih zahtijeva, ti se mrežni obilasci zbrajaju; približavanje Workera bazi može skratiti ukupno vrijeme odgovora iako sam kod tada radi dalje od korisnika.

Za izbor platforme presudne su dvije različite mjere: puni mjesečni račun za konkretnu arhitekturu i vrijeme od korisnikova zahtjeva do gotova odgovora. Kod API-ja koji dugo čeka bazu Workersov obračun CPU vremena može biti povoljniji, dok kratkom poslu Lambdina kvota može dati prednost. Položaj baze, hladni pozivi i naplativi prijenos određuju hoće li se taj odnos zadržati izvan samog računa za funkciju.

Pročitajte i:

Podijeli:

Pretplatite se na naš newsletter

Primajte najnovije vijesti o Web3-u, AI-ju i kriptovalutama izravno u svoj sandučić.

0