Дерекқорларды нақты пайдалануына қарай есептеу
Деректерді сақтауы керек әр Mythex қолданбасы өз Postgres дерекқорын алады, ал жарияланған қолданбаның дерекқор пайдалануы құрастыру сияқты бірдей несие балансынан алынады. Қыркүйек айының соңына дейін біз бұл пайдалануды қолданба серверінің қанша уақыт жұмыс істегеніне қарап бағаладық. Бағалау маңызды жолмен қате шықты, сондықтан оны ауыстырдық: әр дерекқор енді провайдері нақты өлшеген есептеу ресурсы бойынша, аяқталған әр сағат үшін есептеледі, ал әр сағат тек бір рет есептеледі.
Дерекқорлар қалай жұмыс істейді
Әр дерекқор нөлге масштабталатын серверсіз Postgres-те жұмыс істейді: бірнеше бос минуттан кейін ұйықтайды, келесі сұраныста оянады. Оянып тұрғанда ол жүктемеге қарай есептеу ресурсын көбейтіп, азайта алады. Осының арқасында "әр қолданбаға бір дерекқор" қолжетімді болады — көп қолданбалар көбінесе көп уақыт бос, ал ұйықтап жатқан дерекқор өте аз тұрады.
Бұл дерекқордың құны екі нәрсеге тәуелді дегенді білдіреді, оларды сыртқы жағынан көру мүмкін емес: қанша уақыт оянып тұрғаны және оянып тұрғанда қаншалықты үлкен болғаны.
Бағалау не қате болды
Біздің бастапқы есептегішіміз бір болжам жасады: жарияланған қолданбаның сервері жұмыс істеген әр сағат үшін дерекқорды ең кіші есептеу өлшемінде есептеу.
Бұл үш жолмен қате болды:
- Өлшем қате болды. Дерекқорлар болжамдағыдан үлкенірек әдепкі өлшемде жұмыс істеп жатты.
- Дерекқорлар автоматты масштабталады. Жүктеме түскенде олар өседі, ал бағалау мұны ешқашан көрмеді.
- Дерекқорлар қолданба серверін ілесіп жүрмейді. Дерекқор кез келген нәрсе оған сұраныс жібергенде оянып тұрады — қолданба, жоспарланған жұмыс, бос уақытта оны тексеретін скрипт — қолданбаның сервері жұмыс істеп тұрды ма, жоқ па, соған қарамастан.
Нәтижесінде бағалау пайдаланушылардан дерекқорлардың нақты құнының шамамен жартысын ғана алып отырды. Бұл бізге тұрақты емес еді, сонымен қатар қолданбадағы пайдалану сандары адамдар ойлағандай мағына бермеді.
Болжаудың орнына өлшеу
Дерекқор провайдеріміз әр жобаның секундтық есептеу бірлігін сағатына хабарлайды — ол нақты қанша есептеу пайдаланғанын, өлшемін қоса. Сондықтан есептегіш қазір мынадай жұмыс істейді:
- Дерекқоры бар әр жарияланған қолданба үшін қолданба іске қосылған уақыттан бастап әр аяқталған сағаттың өлшенген пайдаланысын алу.
- Сол пайдалануды провайдер бағасы бойынша құнға айналдыру, жоспардың мөлшерлемесін қолдану және қолданба иесінің несиесінен алу.
- Әр жолы бір күнге дейін артқа қарау, сондықтан API қайта іске қосылып тұрғанда жіберіп алынған сағаттар кейін есептеледі.
Сақтау белсенділікке тәуелсіз болғандықтан, оны өлшемі бойынша бөлек есептейміз.
Сағатты екі рет есептемеу
Бірнеше серверде жұмыс істейтін және құлап, қайталай алатын есептегіш қос есептеуден сақтануы керек. Дерекқордың әр сағаты есептелмес бұрын өз дерекқор жолында талап етіледі, жұп (дерекқор, сағат) бойынша бірегейлік шектеуі бар. Егер екі сервер немесе қайта әрекет бір сағатты есептеуге тырысса, тек бір талап сәтті болады.
Сирек кездесетін сәтсіздік жағдайында да әдейі таңдау жасадық: егер процесс сағатты талап еткен мен оны есептеу арасында құласа, ол сағат талап етілген күйде, есептелмей қалады. Сирек құлаудағы аздаған табысты жоғалту — біреуден екі рет алудан жақсы.
Өлшенген есептеу іске қосылғанда, ол келесі толық сағаттан басталды. Оған дейінгі сағаттар ескі болжаммен есептелген еді; оларды өлшенген деректер бойынша қайта есептеу сол аралықты екі рет алар еді.
Бұл сіз Mythex-те құрастырсаңыз нені білдіреді
- Дерекқор шотыңыз енді дерекқоры не істегенін көрсетеді. Сирек пайдаланылатын қолданба өте аз тұрады; дерекқорға үнемі сұраныс жіберетін қолданба оны оятып ұстайды және көбірек тұрады.
- Ең маңызды рычаг — қолданбаңыз дерекқорды қалай пайдаланады. Дерекқорды бірнеше секунд сайын тексеру оны тәулік бойы оятып ұстайды. Деректерді сұраныс бойынша AI арқылы алу немесе кэштеу дерекқорды ұйықтатуға мүмкіндік береді. Дерекқор деген не нұсқаулығы негіздерді түсіндіреді.
- Pro жоспарлары хостинг, дерекқорлар және сақтау үшін Free мөлшерлемесінің жартысын төлейді. Толық мәліметтер несиелер құжаттарында.
Осыдан не үйрендік
- Есептелетін құнның болжамдары ескіреді. Төменгі провайдер не пайдаланылғанын айта алса, сол бойынша есептеңіз.
- Ең кіші есептелетін бірлікте есептеуді идемпотентті етіңіз. Бізде ол бір дерекқор-сағат.
- Міндетті түрде құлауыңыз керек болса, тұтынушының пайдасына құлаңыз.