Naplata baza podataka prema onome što zaista koriste
Svaka Mythex aplikacija kojoj treba skladištenje podataka dobija sopstvenu Postgres bazu, a potrošnja baze objavljene aplikacije odlazi sa istog stanja kredita kao i izrada. Do kraja septembra procjenjivali smo tu potrošnju na osnovu toga koliko je dugo serverska aplikacija radila. Procjena se pokazala pogrešnom na način koji je bio bitan, pa smo je zamijenili: svaka baza sada se naplaćuje prema računarskim resursima koje je njen provider zaista izmjerio, jedan završen sat u isto vrijeme, i svaki sat se može naplatiti samo jednom.
Kako baze rade
Svaka baza radi na serverless Postgresu koji se skalira na nulu: nakon nekoliko minuta neaktivnosti zaspi, a probudi se na sljedeći upit. Dok je budna, može povećavati i smanjivati računarske resurse prema opterećenju. Zbog toga je „baza po aplikaciji” pristupačna — većina aplikacija je tiha većinu vremena, a uspavana baza košta gotovo ništa.
To takođe znači da trošak baze zavisi od dvije stvari koje spolja ne možemo vidjeti: koliko dugo je bila budna i koliko je bila velika dok je bila budna.
Šta je procjena pogrešno računala
Naše početno mjerenje pravilo je imalo pretpostavku: za svaki sat u kojem je serverska aplikacija objavljene aplikacije radila, naplati bazu po najmanjoj veličini računarskih resursa.
To je bilo pogrešno na tri načina:
- Veličina je bila pogrešna. Baze su zapravo radile na većoj podrazumijevanoj veličini nego što je procjena pretpostavljala.
- Baze se same skaliraju. Pod opterećenjem rastu, a procjena to nikada nije vidjela.
- Baze ne prate serversku aplikaciju. Baza ostaje budna kad god bilo šta je upita — aplikacija, zakazani posao, skripta koja je provjerava — bez obzira na to da li je serverska aplikacija bila podignuta.
Neto efekat: procjena je korisnicima naplaćivala otprilike polovinu onoga što su baze zaista koštale. To za nas nije održivo, a i brojevi o potrošnji u aplikaciji nisu značili ono što su ljudi mislili da znače.
Mjerenje umjesto nagađanja
Naš provider baza prijavljuje sekunde računarskih jedinica po satu za svaki projekat — koliko je računarskih resursa zaista potrošio, uključujući veličinu. Mjerenje sada radi ovako:
- Za svaku objavljenu aplikaciju sa bazom, preuzmi izmjerenu potrošnju za svaki završen sat od kada je aplikacija pošla uživo.
- Pretvori tu potrošnju u trošak po cijeni providera, primijeni stopu plana i naplati vlasniku aplikacije sa njegovih kredita.
- Pri svakom pokretanju gleda unazad do jednog dana, pa se sati koje su propušteni dok je naš API bio restartovan i dalje naplaćuju naknadno.
Skladištenje se naplaćuje odvojeno, prema veličini, jer ne zavisi od aktivnosti.
Nikada ne naplatiti isti sat dvaput
Mjerač naplate koji radi na više od jednog servera — i može pasti i ponovo pokušati — mora biti pažljiv da ne naplati dvaput. Svaki sat svake baze se prvo zauzima u sopstvenom redu baze podataka, prije nego što se naplati, uz jedinstveno ograničenje za par (baza, sat). Ako dva servera ili ponovni pokušaj pokušaju da naplate isti sat, uspijeva samo jedno zauzimanje.
Takođe smo napravili namjerni izbor za rijedak slučaj greške: ako proces padne između zauzimanja sata i njegove naplate, taj sat ostaje zauzet i nenaplaćen. Gubitak male količine prihoda u rijetkom padu bolji je od toga da nekoga naplatimo dvaput.
A kada se mjerena naplata uključila, krenula je od sljedećeg punog sata. Sati prije toga već su bili naplaćeni starom procjenom; naplatiti ih ponovo iz izmjerenih podataka značilo bi naplatiti taj period dvaput.
Šta ovo znači ako gradite na Mythexu
- Vaš račun za bazu sada odražava ono što je vaša baza zaista radila. Rijetko korišćena aplikacija košta vrlo malo; aplikacija koja stalno upita svoju bazu drži je budnom i košta više.
- Najveća poluga je kako vaša aplikacija koristi bazu. Ispitivanje baze svakih nekoliko sekundi drži je budnom cijelo vrijeme. Traženje podataka po potrebi uz pomoć AI-ja, ili njihovo keširanje, omogućava bazi da spava. Naš vodič o tome šta je baza podataka pokriva osnove.
- Pro planovi plaćaju pola Free stope za hosting, baze i skladištenje. Detalji su u dokumentaciji o kreditima.
Šta smo iz toga naučili
- Procjene troškova zasnovanih na potrošnji zastarijevaju. Kada uzvodni provider može reći šta je potrošeno, naplaćujte prema tome.
- Učinite naplatu idempotentnom na najmanjoj jedinici koju naplaćujete. Za nas je to jedan sat baze podataka.
- Kada morate da pogriješite, pogriješite u korist kupca.