Droppa serverless, sparer tusenvis: – Det var en scam

Helge Sverre Hessevik Liseth flyttet fra AWS til dedikerte servere hos Hetzner. Nå ber han deg vurdere det samme.

Helge Sverre Hessevik Liseth er utvikler og står bak blant annet appen Kassalapp. 📸: Privat
Helge Sverre Hessevik Liseth er utvikler og står bak blant annet appen Kassalapp. 📸: Privat Vis mer

Skyplattformer fra selskaper som Microsoft, Google og AWS har utvilsomt gjort det enklere og raskere å utvikle programvare.

Samtidig har medaljen kanskje en bakside: For eksempel hevder Ruby on Rails-skaper og Basecamp-gründer David Heinemeier Hansson at han sparer 1 million dollar årlig på å kutte ut AWS og heller kjøre alt på egne servere.

Og nå nylig kunne en utvikler fortelle at bare det å ha en tom S3-bucket hos AWS kan gi deg kjemperegninger hvis noen på internett skulle finne på å bombardere S3-bucketen med trafikk – selv om forespørslene er uautoriserte. Det holder å vite navnet på S3-bucketen for at andre skal kunne bruke opp pengene dine.

Egne dårlige erfaringer med høye og ofte overraskende skyregninger har nå fått utvikleren Helge Sverre Hessevik Liseth til å selv droppe AWS til fordel for dedikerte servere. Helge Sverre jobber som VP of Engineering i Crescat, og står bak blant annet appen Kassalapp.

– Kassalapp kjører nå på Hetzner, 2.400 kroner spart i måneden. Serverless var en "scam", skrev han på X nylig.

Hetzner lar deg leie både fysiske og virtuelle servere. Helge Sverre Hessevik Liseth valgte det første – og har fått full kontroll selv. 📸: Hetzner Online GmbH
Hetzner lar deg leie både fysiske og virtuelle servere. Helge Sverre Hessevik Liseth valgte det første – og har fått full kontroll selv. 📸: Hetzner Online GmbH Vis mer

Fra AWS til Hetzner

Kassalapp har nå rundt 7.000 brukere og inneholder mer enn 24 millioner "snapshots" av priser på ulike dagligvarer.

Helge Sverre forteller til kode24 at Kassalapp tidligere kjørte på AWS Lambda, AWS sin løsning for serverless. Da tilordner skyleverandøren automatisk ressurser etter behov, slik at du ikke trenger å tenke på servere.

– Jeg brukte AWS Lambda via en tjeneste som heter Laravel Vapor, som i bunn og grunn er en request handler. Den zipper prosjektet og laster det opp i AWS Lambda og passer på at alt av konfigurasjonen er satt opp riktig. For database brukte jeg AWS RDS med MySQL, og for fillagring brukte jeg S3.

Nå har han flyttet hele Kassalapp-løsningen til dedikerte servere som han leier fra Hetzner. Dette er et tysk selskap med flere store datasentre rundt om i Europa og i USA, der man kan leie tilgang til dedikerte servere som man må sette opp selv.

Det er også mulig å leie virtuelle servere der flere kunder deler på samme fysisk server, men Helge Sverre har altså valgt å ha en fysisk server helt for seg selv.

«Den største fordelen er at man har full kontroll på maskinen man leier.»

Full kontroll

— Hva er den største fordelen med å gjøre det på den måten?

– Den største fordelen er at man har full kontroll på maskinen man leier. Om man vil kjøre den på 100 prosent CPU bruk døgnet rundt så kan man helt fint gjøre det, svarer han.

Men det aller viktigste er imidlertid mer ytelse for pengene, mener Helge Sverre.

– Og det er ikke noen skjulte "data transfer"-kostnader, slik som med AWS.

Det gjør det lettere å forutse kostnadene, mener han – og legger til at også DigitalOcean fortjener skryt for å ikke ha skjulte trafikkostnader som er vanskelig å finne ut av hva er.

Begrensninger med serverless

Problemet med AWS Lambda for Helge Sverre, var at det var en del begrensninger som man måtte godta. Han innrømmer riktignok at han kanskje ikke brukte løsningen helt slik den var ment å brukes.

For eksempel er det en maks "request time" på 30 sekunder.

– Dette er i de fleste tilfeller greit, men for eksempel for funksjonalitet som Kvitteringsskanning og å trigge en ny skraping av produktpriser via frontend så må man vente på at den actionen er ferdig.

– Man kan selvfølgelig bygge slikt på en slik måte at man får tilbake en ID og poller på den for å oppdatere status, men å gjøre slikt for hver lille småting som krever det blir etter hvert mye ork.

Helge Sverres Kassalapp-app samler prisinformasjon om dagligvarer.
Helge Sverres Kassalapp-app samler prisinformasjon om dagligvarer. Vis mer

Det er også begrensninger på "request size" man kan sende frem og tilbake via Lambda. Det gjør at de fleste innebygde filopplastingsfunksjoner ikke fungerer ut av boksen.

– Det gjør at man må lage "stream til S3"-funksjonalitet bare for å laste opp en liten bildefil, noe som i de fleste tilfeller er meget overkill, sukker Helge Sverre oppgitt.

Et annet problem med serverless har vært det faktum at serverless-funksjoner bare kjører en kort tid før de går "i dvale" – og tar tid å starte opp igjen.

Ved å kjøre alt på en server man selv har kontroll på slipper han å måtte finne "workarounds" for å kjøre bakgrunnsjobber lenge.

– Her har jeg tidligere måtte på merkelige måter "chunke opp" og "daisy-chaine" kø-jobber slik at den prosesserer x antall jobber. Deretter dispatcher den en ny batch som begynner fra en offset, da noen av disse tingene ikke kan kjøres i parallel.

– Dette gjør at hele applikasjonen blir litt vanskeligere å forstå hvordan funker!

Mer komplisert, men verdt det

– Er det ikke mye mer komplisert å måtte sette opp alt selv, og verdt å betale for en skytjeneste som «bare funker»?

– Noe mer komplisert er det å sette opp ting selv, men man har i dag mange gode verktøy som tar seg av selve provisjoneringen av server, samt backups, sier Helge Sverre.

Selv bruker han tjenesten Ploi.io til denne jobben, men om man ønsker å drifte en lignende løsning selv kan han anbefale Coolify. Den støtter Docker og flere rammeverk og språk.

– Så om man allerede for eksempel kjører på ECS eller noe lignende så er det i teorien bare å bytte hvilke host man sender Docker-kommandoene til.

– Hva er de største ulempene med å kjøre på egne servere?

– Ulempen er at nå må jeg selv tenke på database-backups og hvor jeg skal lagre filer, i stedet for S3.

Med Ploi er det enklere å sette opp serveren og få sikkerhetskopiert databasen. 📸: Ploi.io
Med Ploi er det enklere å sette opp serveren og få sikkerhetskopiert databasen. 📸: Ploi.io Vis mer

– Dette er i stor grad uproblematisk da jeg har satt opp database-backups via Ploi.io som kjører en DB-dump og legger det som zip-fil i Google Drive. Jeg mister dog muligheten for "restore til nøyaktig dette sekundet", men for prosjekter som Kassalapp er dette en akseptabel tradeoff.

Filer lagrer han rett til serverdisken, der han har 2 TB tilgjengelig. For Kassalapp sin del er det i hovedsak snakk om autogenerte OpenGraph-bilder som han kan generere når han trenger dem.

– Ved å ikke bruke S3 til slikt så slipper man også å betale for "data transfer" når man henter ned disse eller når man generer disse bildene. Dette er en kost man kanskje ikke tenker over, men det å hente ut, liste eller sjekke om en fil eksisterer i S3 koster faktisk noen små slanter for hver eneste request man gjør mot denne tjenesten. Om man behandler mange filer kan dette bli en del over tid.

Helge Sverre sier han ikke har noen redundans på drift, og ikke trenger det til sitt prosjekt – men om man trenger det kan man gjøre det, noe som krever en del mer komplisert oppsett.

«Internett klarte seg helt fint i årevis med å slenge opp nye filer via FTP på en shared hosting-konto.»

- Vurder det selv!

– Har du noen gode råd til andre som vurderer om det er mulig å kutte ned på skykostnadene sine?

Gå dypt inn i egen sjel og vurder om det faktisk er nødvendig med en så overkomplisert workflow! Internett klarte seg helt fint i årevis med å slenge opp nye filer via FTP på en shared hosting-konto, sier Helge Sverre.

Om man ønsker å beholde AWS, kan man likevel kutte kostnader ved å tenke på hvilke tjenester man bruker og hvordan man setter dem opp. For eksempel kan man ifølge Helge Sverre kanskje halvere kostnadene ved å kjøre databasen sin i Amazons EC2 i stedet for RDS, samt passe på at alt kjører i samme region.

– Men vurder om det gir mening å rett og slett bare droppe skyen, og heller gå for fysisk maskinleie når prosjektet ikke lenger drar nytte av å "bare betale for det man bruker", oppfordrer Helge Sverre.

Har du en liten statisk nettside eller en enkel web-applikasjon som bare trenger å hostes et sted, så er det helt greit å kaste dette på Vercel eller Netlify, mener han. Men når trafikken begynner å vokse, bør du vurdere å legge alt på en liten server med fast månedlig pris, i stedet for å hele tiden måtte lure på om fakturaen for neste måned blir 50 eller 5000 kroner.

– Ikke vær redd for å utforske dedikert hardware. "Cloud" betyr "ikke min maskin". I en verden hvor leie erstatter eierskap, kan det være klokt å ha kontroll over maskinen som kjører programvaren vår, avslutter han.