Datu bāzu norēķini pēc tā, ko tās patiesi izmanto
Katra Mythex lietotne, kurai jāglabā dati, saņem savu Postgres datu bāzi, un publicētas lietotnes datu bāzes lietojums tiek ņemts no tā paša kredītu atlikuma kā būvēšana. Līdz septembra beigām mēs šo lietojumu aplēsām pēc tā, cik ilgi lietotnes serveris bija darbojies. Aplēse izrādījās nepareiza tādā veidā, kas bija svarīgs, tāpēc to aizstājām: katra datu bāze tagad tiek norēķināta pēc skaitļošanas jaudas, ko tās nodrošinātājs patiesi izmērījis, pa vienai pabeigtai stundai, un katru stundu var nomaksāt tikai reizi.
Kā darbojas datu bāzes
Katra datu bāze darbojas bezserveru Postgres, kas mērogojas līdz nullei: pēc dažām dīkstāves minūtēm tā aizmieg, un nākamā vaicājuma laikā pamostas. Kamēr tā ir nomodā, tā var palielināt vai samazināt skaitļošanas jaudu atkarībā no slodzes. Tas padara iespējamu „datu bāzi katrai lietotnei” — lielākā daļa lietotņu lielāko daļu laika ir klusas, un guļoša datu bāze gandrīz nemaksā.
Tas arī nozīmē, ka datu bāzes izmaksas atkarīgas no divām lietām, ko no ārpuses nevar redzēt: cik ilgi tā bija nomodā un cik liela tā bija, kamēr bija nomodā.
Ko aplēse nepareizi aprēķināja
Mūsu sākotnējais skaitītājs pieņēma vienu lietu: par katru stundu, kad publicētas lietotnes serveris darbojās, rēķināt datu bāzi mazākajā skaitļošanas izmērā.
Tas bija nepareizi trijos veidos:
- Izmērs bija nepareizs. Datu bāzes patiesi darbojās ar lielāku noklusējuma izmēru, nekā aplēse pieņēma.
- Datu bāzes mērogojas automātiski. Lielā slodzē tās aug, un aplēse to nekad nemanīja.
- Datu bāzes neseko lietotnes serverim. Datu bāze paliek nomodā, kad kaut kas to vaicā — lietotne, ieplānots darbs, skripts, kas to regulāri pārbauda —, neatkarīgi no tā, vai lietotnes serveris darbojas.
Galvenais rezultāts: aplēse lietotājiem aprēķināja aptuveni pusi no tā, ko datu bāzes patiesi maksāja. Tas nav ilgtspējīgi mums, un tas arī nozīmēja, ka lietojuma skaitļi lietotnē nenozīmēja to, ko cilvēki domāja.
Mērīt, nevis minēt
Mūsu datu bāzes nodrošinātājs atskaitās par katra projekta skaitļošanas vienību sekundēm stundā — cik skaitļošanas jaudas tas patiesi izmantoja, ieskaitot izmēru. Tāpēc skaitītājs tagad darbojas šādi:
- Katrai publicētai lietotnei ar datu bāzi iegūt izmērīto lietojumu katrai pabeigtai stundai kopš lietotnes publicēšanas.
- Pārvērst šo lietojumu izmaksās pēc nodrošinātāja cenas, piemērot plāna likmi un norēķināties ar lietotnes īpašnieka kredītiem.
- Katru reizi skatīties līdz vienai dienai atpakaļ, lai stundas, kas palika neuzskaitītas, kamēr mūsu API restartējās, tiktu norēķinātas vēlāk.
Glabāšana tiek norēķināta atsevišķi pēc izmēra, jo tā nav atkarīga no aktivitātes.
Nekad neiekasēt par stundu divreiz
Norēķinu skaitītājs, kas darbojas uz vairāk nekā viena servera un var avarēt un atkārtot, rūpīgi jāsargā no dubultas iekasēšanas. Katra katras datu bāzes stunda tiek pieprasīta savā datu bāzes rindā, pirms tā tiek iekasēta, un pārim (datu bāze, stunda) ir unikālitātes ierobežojums. Ja divi serveri vai atkārtojums mēģina norēķināties par vienu un to pašu stundu, tikai viens pieprasījums izdodas.
Mēs arī pieņēmām apzinātu lēmumu par retu kļūmes gadījumu: ja process avarē starp stundas pieprasīšanu un tās iekasēšanu, šī stunda paliek pieprasīta un nenorēķināta. Neliela ieņēmumu zaudēšana retas avārijas gadījumā ir labāka par to, ka kādam kaut kad iekasē divreiz.
Un, kad izmērītie norēķini tika ieslēgti, tie sākās no nākamās pilnās stundas. Iepriekšējās stundas jau bija iekasētas pēc vecās aplēses, un norēķināt tās vēlreiz pēc izmērītajiem datiem nozīmētu dubultot šo periodu.
Ko tas nozīmē, ja veidojat uz Mythex
- Jūsu datu bāzes rēķins tagad atspoguļo to, ko jūsu datu bāze darīja. Lietotne, kas tiek reti izmantota, maksā ļoti maz; lietotne, kas nepārtraukti vaicā savu datu bāzi, to turēs nomodā un maksās vairāk.
- Lielākais svira ir tas, kā jūsu lietotne izmanto datu bāzi. Ja datu bāzi aptaujājat ik pēc dažām sekundēm, tā paliek nomodā visu diennakti. Ja MI iegūst datus pēc pieprasījuma vai tos kešo, datu bāze var gulēt. Mūsu rokasgrāmata kas ir datu bāze sniedz pamatus.
- Pro plāni maksā pusi no Free likmes par hostingu, datu bāzēm un glabāšanu. Detaļas ir kredītu dokumentācijā.
Ko no tā guvām
- Aplēses par lietojumā balstītām izmaksām novirzās. Kad augšējais nodrošinātājs var pateikt, kas tika izmantots, norēķinieties pēc tā.
- Padariet norēķinus idempotentus mazākajā vienībā, ko iekasējat. Mums tā ir viena datu bāzes stunda.
- Ja jāpieļauj kļūda, pieļaujiet to klienta labā.