Andmebaaside arveldamine selle järgi, mida need tegelikult kasutavad
Iga Mythexi rakendus, mis vajab andmete salvestamist, saab oma Postgres-andmebaasi, ja avaldatud rakenduse andmebaasi kasutus tuleb samast krediidisaldost, mis ehitamisekski. Kuni septembri lõpuni hindasime seda kasutust selle järgi, kui kaua rakenduse server töötas. Hinnang osutus valeks viisil, mis oli oluline, seega asendasime selle: iga andmebaasi arvestatakse nüüd pakkuja tegelikult mõõdetud arvutusvõimsuse järgi, üks lõppenud tund korraga, ja iga tund saab olla arvestatud ainult üks kord.
Kuidas andmebaasid töötavad
Iga andmebaas töötab serverivabas Postgres'is, mis skaleerub nulli: pärast paari minutit tegevusetust magab ta, ja ärkab järgmise päringu peale. Ärkvel olles saab ta arvutusvõimsust koormuse järgi üles ja alla reguleerida. Just see muudab „andmebaasi iga rakenduse jaoks” taskukohaseks: enamik rakendusi on enamiku ajast vaikne ja magav andmebaas maksab peaaegu midagi.
See tähendab ka seda, et andmebaasi kulu sõltub kahest asjast, mida väljastpoolt ei näe: kui kaua ta oli ärkvel ja kui suur ta oli, kui ta ärkvel oli.
Mis hinnangus valesti oli
Meie algne mõõdik tegi ühe eelduse: iga tunni eest, mil avaldatud rakenduse server töötas, arvestati andmebaasi väikseima arvutusvõimsuse järgi.
See oli kolmel viisil vale:
- Suurus oli vale. Andmebaasid töötasid tegelikult suuremas vaikesuuruses, kui hinnang eeldas.
- Andmebaasid skaleeruvad automaatselt. Koormuse all nad kasvavad, ja hinnang ei näinud seda kunagi.
- Andmebaas ei järgi rakenduse serverit. Andmebaas jääb ärkvel, kui miski sellele päringuid teeb: rakendus, ajastatud töö, skript, mis seda küsitleb, olenemata sellest, kas rakenduse server töötas.
Netotulemus: hinnang laskis kasutajatel maksta umbes poole sellest, mida andmebaasid tegelikult maksid. See ei ole meile jätkusuutlik, ja see tähendas ka seda, et rakenduse kasutusnumbrid ei tähendanud seda, mida inimesed arvasid.
Mõõtmine, mitte arvamine
Meie andmebaasipakkuja teatab iga projekti arvutusühikuid sekundites tunnis, ehk kui palju arvutusvõimsust see tegelikult kasutas, suurus arvesse võetud. Nii töötab mõõdik nüüd:
- Iga avaldatud rakenduse andmebaasi jaoks tuleb mõõdetud kasutus iga lõppenud tunni kohta alates rakenduse avaldamisest.
- Teisenda kasutus kuluks pakkuja hinnaga, rakenda paketi määr ja arvesta see rakenduse omaniku krediitidest.
- Vaata iga kord kuni päev tagasi, nii et tunnid, mis jäid vahele, kui meie API taaskäivitus, arvestatakse hiljem.
Salvestusruum arvestatakse eraldi, suuruse järgi, sest see ei sõltu aktiivsusest.
Ära arvesta tundi kunagi kaks korda
Arvestusmõõdik, mis jookseb rohkem kui ühel serveril ja võib kokku jookseda ning uuesti proovida, peab olema ettevaatlik, et ta ei arvestaks kahekordselt. Iga andmebaasi iga tund võetakse oma andmebaasirea sees enne, kui see arvestatakse, ja paari (andmebaas, tund) peal on unikaalsuse piirang. Kui kaks serverit või uuesti proovimine püüab sama tunni arvestada, õnnestub ainult üks võtmine.
Harva esineva tõrkejuhtumi jaoks tegime ka teadliku valiku: kui protsess kokku kukub enne, kui ta tunni on võtnud ja arvestanud, jääb see tund võetuks ja arvestamata. Väike tulu kaotus harva esineva krahhi korral on parem kui kunagi kellegi arvelt kahekordne arvestus.
Ja kui mõõdetud arvestus sisse lülitus, alustas see järgmisest täistunnist. Varasemad tunnid olid juba vana hinnangu järgi arvestatud, ja nende mõõdetud andmetega uuesti arvestamine oleks selle ajavahemiku kahekordselt arvestanud.
Mida see tähendab, kui sa Mythexil ehitad
- Sinu andmebaasi arve kajastab seda, mida sinu andmebaas tegi. Harva kasutatav rakendus maksab väga vähe; rakendus, mis küsib oma andmebaasilt pidevalt, hoiab seda ärkvel ja maksab rohkem.
- Suurim mõjutaja on see, kuidas sinu rakendus andmebaasi kasutab. Andmebaasi küsitlemine iga paari sekundi tagant hoiab selle ööpäevaringselt ärkvel. Andmete küsimine AI-lt nõudmisel või nende vahemällu panemine lubab andmebaasil magada. Meie juhend andmebaasi olemuse kohta katab põhitõed.
- Pro-paketid maksavad hostingu, andmebaaside ja salvestuse eest poole Free-paketi määrast. Üksikasjad on krediitide dokumentatsioonis.
Mida sellest õppisime
- Kasutuspõhiste kulude hinnangud lähevad valeks. Kui ülesvoolu pakkuja suudab öelda, mis kasutati, arvesta selle järgi.
- Tee arvestus idempotentseks väikseima ühiku tasemel, mida sa arvestad. Meie puhul on see üks andmebaasitund.
- Kui pead ebaõnnestuma, ebaõnnestu kliendi kasuks.