Blog

Rozliczanie baz danych według tego, z czego faktycznie korzystają

Każda aplikacja Mythex, która potrzebuje przechowywać dane, dostaje własną bazę Postgres, a zużycie bazy opublikowanej aplikacji schodzi z tego samego salda kredytów co budowanie. Do późnego września szacowaliśmy to zużycie na podstawie tego, jak długo działał serwer aplikacji. Szacunek okazał się błędny w sposób, który miał znaczenie, więc go zastąpiliśmy: każda baza jest teraz rozliczana na podstawie mocy obliczeniowej, którą jej dostawca faktycznie zmierzył, jedną zakończoną godzinę naraz, a każda godzina może zostać obciążona tylko raz.

Jak działają bazy danych

Każda baza działa na bezserwerowym Postgresie, który skaluje się do zera: po kilku minutach bezczynności usypia i budzi się przy następnym zapytaniu. Gdy nie śpi, może zwiększać i zmniejszać moc obliczeniową wraz z obciążeniem. Dzięki temu „baza na aplikację” jest opłacalna, bo większość aplikacji jest cicha przez większość czasu, a uśpiona baza kosztuje prawie nic.

Oznacza to też, że koszt bazy zależy od dwóch rzeczy, których nie widać z zewnątrz: jak długo nie spała i jak duża była, gdy nie spała.

Czego nie trafił szacunek

Nasz pierwotny licznik zakładał: za każdą godzinę, w której serwer opublikowanej aplikacji działał, naliczaj bazę w najmniejszym rozmiarze.

To było błędne na trzy sposoby:

  1. Rozmiar był błędny. Bazy faktycznie działały w większym domyślnym rozmiarze niż zakładał szacunek.
  2. Bazy skalują się automatycznie. Pod obciążeniem rosną, czego szacunek nigdy nie widział.
  3. Bazy nie podążają za serwerem aplikacji. Baza nie śpi, kiedy cokolwiek ją odpytuje: aplikacja, zadanie cykliczne albo skrypt sprawdzający ją co pewien czas, bez względu na to, czy serwer aplikacji działał.

Efekt netto: szacunek obciążał użytkowników mniej więcej połową tego, ile naprawdę kosztowały bazy. Nie da się tego utrzymać, a do tego liczby zużycia w aplikacji nie znaczyły tego, co ludzie myśleli.

Mierzenie zamiast zgadywania

Dostawca naszych baz raportuje dla każdego projektu sekundy jednostek obliczeniowych na godzinę, czyli ile mocy obliczeniowej faktycznie zużyto, z uwzględnieniem rozmiaru. Licznik działa więc teraz tak:

  1. Dla każdej opublikowanej aplikacji z bazą pobierz zmierzone zużycie za każdą zakończoną godzinę od chwili, gdy aplikacja poszła na żywo.
  2. Przelicz to zużycie na koszt wg ceny dostawcy, zastosuj stawkę planu i obciąż nią kredyty właściciela aplikacji.
  3. Przy każdym przebiegu sięgaj wstecz nawet o dobę, żeby godziny pominięte, gdy nasze API się restartowało, zostały rozliczone później.

Przechowywanie jest rozliczane osobno, według rozmiaru, bo nie zależy od aktywności.

Nigdy nie obciążaj godziny dwa razy

Licznik rozliczeń działający na więcej niż jednym serwerze, który może się wywrócić i ponowić próbę, musi uważać, by nie obciążyć dwa razy. Każda godzina każdej bazy jest rezerwowana we własnym wierszu bazy danych, zanim zostanie naliczona, z ograniczeniem unikalności na parze (baza, godzina). Jeśli dwa serwery albo ponowna próba spróbują rozliczyć tę samą godzinę, tylko jedna rezerwacja się powiedzie.

Podjęliśmy też świadomą decyzję co do rzadkiego przypadku awarii: jeśli proces padnie między rezerwacją godziny a jej naliczeniem, godzina zostaje zarezerwowana i nierozliczona. Utrata małego fragmentu przychodu przy rzadkiej awarii jest lepsza niż pobranie od kogoś dwa razy.

A gdy włączyliśmy rozliczanie zmierzonego zużycia, zaczęło ono od następnej pełnej godziny. Godziny wcześniejsze zostały już naliczone przez stary szacunek, a rozliczenie ich ponownie na podstawie danych zmierzonych obciążyłoby ten odcinek dwa razy.

Co to oznacza, jeśli budujesz na Mythex

  • Rachunek za bazę odzwierciedla teraz to, co Twoja baza faktycznie robiła. Rzadko używana aplikacja kosztuje bardzo mało, a aplikacja, która stale odpytuje bazę, nie pozwoli jej spać i będzie kosztować więcej.
  • Największą dźwignią jest to, jak aplikacja korzysta z bazy. Odpytywanie bazy co kilka sekund trzyma ją przy życiu całą dobę. Poproszenie AI o pobranie danych na żądanie albo ich buforowanie pozwala bazie spać. Nasz poradnik czym jest baza danych omawia podstawy.
  • Plany Pro płacą za hosting, bazy i przechowywanie połowę stawki planu Free. Szczegóły są w dokumentacji kredytów.

Co z tego wynieśliśmy

  • Szacunki kosztów zależnych od zużycia się rozjeżdżają. Gdy dostawca po stronie źródła może powiedzieć, co zostało zużyte, rozlicz na podstawie tego.
  • Spraw, by rozliczenie było idempotentne na najmniejszej jednostce, jaką pobierasz. U nas to jedna godzina bazy danych.
  • Gdy musisz zawieść, zawódź na korzyść klienta.

Mythex · Pricing · Zbuduj wszystko z AI · Szablony stron i aplikacji · Mythex w porównaniu · Słownik budowania aplikacji z AI · Darmowe narzędzia do budowania aplikacji z AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)