Blog

Databases factureren op basis van wat ze daadwerkelijk gebruiken

Elke Mythex-app die data moet opslaan, krijgt een eigen Postgres-database, en het databasegebruik van een gepubliceerde app komt van hetzelfde creditsaldo als het bouwen. Tot eind september schatten we dat gebruik op basis van hoe lang de server van de app draaide. Die schatting bleek op een manier fout die ertoe deed, dus hebben we haar vervangen: elke database wordt nu gefactureerd op basis van de rekencapaciteit die de provider daadwerkelijk heeft gemeten, één afgerond uur tegelijk, en elk uur kan maar één keer worden gefactureerd.

Hoe de databases werken

Elke database draait op serverless Postgres dat naar nul schaalt: na een paar minuten inactiviteit slaapt hij, en hij wordt wakker bij de eerstvolgende query. Terwijl hij wakker is, kan hij zijn rekencapaciteit opschalen en afschalen met de belasting. Dat maakt "een database per app" betaalbaar — de meeste apps zijn meestal rustig, en een slapende database kost bijna niets.

Het betekent ook dat de kosten van een database afhangen van twee dingen die we van buitenaf niet zien: hoe lang hij wakker was en hoe groot hij was terwijl hij wakker was.

Wat de schatting fout had

Onze oorspronkelijke meter maakte een aanname: voor elk uur dat de server van een gepubliceerde app draaide, rekende hij een database tegen de kleinste rekengrootte.

Dat was op drie manieren fout:

  1. De grootte klopte niet. Databases draaiden eigenlijk op een grotere standaardgrootte dan de schatting aannam.
  2. Databases schalen automatisch. Onder belasting groeien ze, en de schatting zag dat nooit.
  3. Databases volgen de appserver niet. Een database blijft wakker zolang iets er een query op doet — de app, een geplande taak, een script dat hem pollt — of de server van de app nu wel of niet draaide.

Het netto-effect: de schatting rekende gebruikers ongeveer de helft van wat de databases echt kostten. Dat is voor ons niet houdbaar, en het betekende ook dat de gebruiksgetallen in de app niet betekenden wat mensen dachten dat ze betekenden.

Meten in plaats van gokken

Onze databaseprovider rapporteert per project de rekencapaciteit-seconden per uur — hoeveel rekencapaciteit er echt is gebruikt, inclusief grootte. De meter werkt dus nu zo:

  1. Haal voor elke gepubliceerde app met een database het gemeten gebruik op voor elk afgerond uur sinds de app live ging.
  2. Reken dat gebruik om naar kosten tegen de prijs van de provider, pas het tarief van het abonnement toe, en boek het af van de credits van de eigenaar.
  3. Kijk elke keer maximaal een dag terug, zodat uren die zijn gemist terwijl onze API herstartte later alsnog worden gefactureerd.

Opslag wordt apart gefactureerd, op grootte, omdat die niet van activiteit afhangt.

Nooit een uur dubbel factureren

Een facturatiemeter die op meer dan één server draait — en kan crashen en opnieuw proberen — moet oppassen niet dubbel te factureren. Elk uur van elke database wordt geclaimd in de eigen databaserij voordat het wordt gefactureerd, met een uniciteitsbeperking op het paar (database, uur). Als twee servers, of een nieuwe poging, hetzelfde uur proberen te factureren, slaagt er maar één claim.

We hebben ook een bewuste keuze gemaakt voor het zeldzame faalgeval: als het proces crasht tussen het claimen van een uur en het factureren ervan, blijft dat uur geclaimd en ongefactureerd. Een klein deel van de omzet verliezen bij een zeldzame crash is beter dan iemand ooit dubbel laten betalen.

En toen gemeten facturatie werd ingeschakeld, begon het bij het volgende volle uur. De uren daarvoor waren al gefactureerd door de oude schatting; ze opnieuw factureren op basis van gemeten data zou dat stuk twee keer hebben gefactureerd.

Wat dit betekent als je op Mythex bouwt

  • Je databaserekening weerspiegelt nu wat je database heeft gedaan. Een app die zelden wordt gebruikt kost heel weinig; een app die constant zijn database bevraagt, houdt hem wakker en kost meer.
  • De grootste hefboom is hoe je app de database gebruikt. De database elke paar seconden pollen houdt hem de hele dag wakker. De AI op verzoek gegevens laten ophalen, of ze cachen, laat de database slapen. Onze gids over wat een database is behandelt de basis.
  • Pro-abonnementen betalen de helft van het Gratis-tarief voor hosting, databases en opslag. De details staan in de creditdocs.

Wat we ervan geleerd hebben

  • Schattingen van op gebruik gebaseerde kosten lopen uit de pas. Wanneer de upstream-provider kan zeggen wat er is gebruikt, factureer dan op basis daarvan.
  • Maak facturatie idempotent op de kleinste eenheid die je factureert. Voor ons is dat één databaseuur.
  • Als je moet falen, faal dan in het voordeel van de klant.

Mythex · Pricing · Bouw alles met AI · Website- en app-templates · Mythex vergeleken · Woordenlijst voor apps bouwen met AI · Gratis tools voor apps bouwen met 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 ਪੰਜਾਬੀ Polski 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 简体中文 繁體中文(香港) 繁體中文(台灣)