Нұсқаулықтар

Веб-қолданбада фондық жұмыстарды қалай іске қосу: кезектер, жоспарлаушылар және cron

Веб-қолданбада фондық жұмыстарды іске қосу үшін алдымен жұмысты екі түрге бөліңіз. Іске қосылатын жұмыстар (қош келдіңіз хатын жіберу, жүктелген файлды өңдеу) жұмыс кезегіне сақталуы мүмкін, көбіне деректер қорындағы кесте, ал қайталаулары бар жұмысшы арқылы өңделеді. Жоспарланған жұмыстар (түнгі есеп, әр 15 минут сайынғы еске салулар) кестемен іске қосылатын бір нәрсені қажет етеді: хосттың cron мүмкіндігі немесе қолданбаңыздағы қорғалған эндпоинтті шақыратын сыртқы жоспарлаушы. Жұмыстарды екі рет орындалуға қауіпсіз етіңіз, қателерді жазыңыз және ұйықтай немесе қайта іске қосыла алатын серверде таймерге ешқашан сенбеңіз.

Бұл нұсқаулық нұсқаларды, олардың қай кезде сәйкес келетінін және AI қолданба құрастырушысымен, соның ішінде нөлге дейін масштабтайтын хосттарда, қалай орнату керектігін түсіндіреді.

Фондық жұмыс нені құрайды

Пайдаланушының дереу жауабына қажет емес, баяу немесе сенімсіз кез келген нәрсе:

  • Хат, хабарлама және түбіртек жіберу
  • Суреттерді өлшемін өзгерту, бейнені түрлендіру, PDF жасау
  • Баяу үшінші тарап API-лерін шақыру, соның ішінде ұзақ тапсырмалар үшін AI модельдері
  • Басқа жүйеден деректерді импорттау немесе синхрондау
  • Түнгі тазалау, есептер және еске салулар

Бұны сұраудың ішінде орындау беттерді баяулатады және тұрақсыз етеді: электрондық пошта провайдері істемей қалса, пайдаланушының тіркелуі сәтсіз болады. Фонға жіберу пайдаланушыға бірден жауап беріледі және жұмысты қайталауға болады.

Нұсқалар

НұсқаҚалай жұмыс істейдіАртықшылығыКемшілігі
Бір процесте жіберіп қоюЖауап беріп, жұмысты серверде жалғастыруОрнату жоқСервер тоқтаса жоғалады; қайталау жоқ
Процесс ішіндегі таймер (setInterval, setTimeout)Жұмыс істеп тұрған серверде таймерӨте қарапайымҰйықтаған кезде іске қосылмайды; бірнеше данада қайталанады
Деректер қорына негізделген кезекЖұмыстар жол ретінде сақталады; жұмысшы оларды алып орындайдыҚолдағы деректер қорын пайдаланады; тұрақты; тексеру оңайҚайталауды және құлыптауды өзіңіз жасайсыз; жұмысшыны іске қосатын нәрсе керек
Бөлек кезек (Redis негізіндегі немесе басқарылатын)Кезек қызметі және жұмысшыларЖетілген қайталау және жоспарлау мүмкіндіктеріБасқаратын және төлейтін тағы бір қызмет
Хостталған жұмыс немесе жұмыс процесі қызметіҮшінші тарап қадамдарды қайталаумен және кестемен эндпоинттеріңізді шақырадыЖоспарлау мен қайталау сізге орындаладыСатушыға тәуелділік; тағы бір аккаунт және кілт
Эндпоинтті шақыратын сыртқы жоспарлаушыБасқа жерде таймер кесте бойынша HTTP сұрауын жібередіКез келген хостта жұмыс істейді, соның ішінде нөлге масштабтайтынМинималды интервалдар мен кідірістер; эндпоинтті қорғау керек
Хосттың өзіндік cron мүмкіндігіПлатформа командасын кесте бойынша іске қосадыБар жерде қарапайымБарлық хост ұсынбайды

Біржақты дұрыс жауап жоқ. Шағын қолданбаға көбіне деректер қорындағы кезек пен сыртқы жоспарлаушы жеткілікті.

Нөлге масштабтайтын хосттар мұны қалай өзгертеді

Көп заманауи хост ешкім пайдаланбаған кезде қолданбаны ұйықтатып, келесі сұраумен оятады. Бұл ақша үнемдейді, бірақ ұйықтап жатқан сервер код орындамайды: таймерлер іске қосылмайды, жұмысшылар сұрау жасамайды. Осындай хосттарда жоспарланған жұмыс кіріс сұраудан басталуы керек, ал ең оңай сұрау көзі — сыртқы жоспарлаушы. Әр шақыру қолданбаны (және жиі деректер қорын) оятады, сондықтан әр минут сайын шақыру әр 15 минут сайынғыдан қымбат. Қажетті жиілікті қанағаттандыратын ең баяу кестені таңдаңыз.

1-үлгі: деректер қорындағы жұмыс кезегі

Іске қосылатын жұмыстар үшін:

  1. jobs кестесін жасаңыз: түрі, деректер (JSON), мәртебесі (pending, running, done, failed), әрекеттер саны, run_after, last_error, уақыт белгілері.
  2. Бір нәрсе болғанда, оны тудырған өзгеріспен бір транзакцияда жұмыс жолын енгізіңіз, сонда олар бірге сәтті немесе сәтсіз болады.
  3. Жұмысшы уақыты келген жұмыстарды алып, running деп белгілейді, жұмысты орындап, done деп белгілейді.
  4. Сәтсіздікте әрекеттер санын арттырып, run_after мәнін кейінірек қойыңыз (мысалы 1, 5, содан кейін 30 минут) және қатені сақтаңыз. Шектен асқанда failed деп белгілеп, біреуге хабарлаңыз.

Егер бірнеше жұмысшы бір мезгілде жұмыс істеуі мүмкін болса, жұмыстарды қауіпсіз алу керек. Postgres-те SELECT ... FOR UPDATE SKIP LOCKED әр жұмысшыға бір-бірімен қақтығыспай әр түрлі жолдарды алуға мүмкіндік береді.

Жұмысшыны не іске қосады? Үнемі жұмыс істейтін серверде — бөлек процестегі цикл. Нөлге масштабтайтын хостта 2-үлгідегі жоспарланған эндпоинт әр шақыруда уақыты келген жұмыстардың бір бөлігін өңдей алады.

2-үлгі: қолданбаңызды шақыратын сыртқы жоспарлаушы

Жоспарланған жұмыстар үшін:

  1. POST /api/cron/send-reminders сияқты эндпоинт қосыңыз.
  2. Қорғаңыз: тақырыпта құпия токенді талап етіңіз, оны екі жақта да құпия ретінде сақтаңыз және басқаны бас тартыңыз.
  3. Идемпотент етіңіз: бір минутта екі рет іске қосу екі еске салуды жібермеуі керек. Не жіберілгенін жазып қойыңыз.
  4. Әр шақыруды қысқа ұстаңыз: бір партияны (мысалы 100 элемент) өңдеңіз, қалғанын келесі шақыру алады.
  5. Жоспарлаушыны соған бағыттаңыз.

Жоспарлаушы таңдаулары:

  • GitHub Actions жоспарланған жұмыс процестері. GitHub шектеулері шегінде тегін. GitHub құжаттарына сәйкес 2026 жылдың қыркүйегі жағдайында ең қысқа интервал — 5 минутта бір рет, жұмыстар көп жүктеме кезінде (әсіресе әр сағаттың басында) кешігуі мүмкін, кестелер әдепкі бойынша UTC қолданады, ал жария репозиторийдегі жоспарланған жұмыс процестері репозиторий белсенділігінсіз 60 күннен кейін өшіріледі.
  • Хостталған cron қызметтері. Жалғыз міндеті кестемен URL шақыру болатын көптеген қызмет бар. Оларға тәуелді болмас бұрын сенімділігін, минималды интервалын және ескертулерін тексеріңіз.
  • Бұлттық провайдеріңіздің жоспарлаушысы. Үлкен бұлттық провайдерді қолдансаңыз, HTTPS эндпоинтін шақыра алатын басқарылатын жоспарлаушысы болады.
  • Хостталған жұмыс немесе жұмыс процесі қызметі. Олар жоспарлау, кезектер мен қайталауларды біріктіреді және әр қадам үшін эндпоинттеріңізді шақырады. Бағаларын және шектеулерін әр сатушының сайтында салыстырыңыз.

3-үлгі: провайдерге тапсырыңыз

Кейде ең жақсы фондық жұмыс — мүлде жоқ:

  • Төлемдер. Stripe сәтсіз жазылым төлемдерін қайталайды және webhook жібереді; сіз сұрамай, соған әрекет етесіз. Webhook дегеніміз не бетін қараңыз.
  • Электрондық пошта. Хабарламаны тапсырғаннан кейін провайдерлер жеткізуді кезекке қойып, қайталайды.
  • Жаппай AI жұмысы. OpenAI және Anthropic шұғыл емес сұраулар үшін пакеттік API ұсынады: оларды жіберіп, кейінірек жинайсыз.

AI құрастырушыға беретін сұраулар

Кезек үшін:

Деректер қорымыздағы jobs кестесін пайдаланып фондық жұмыс кезегін қосыңыз (түрі, деректер JSON, мәртебесі, әрекеттер саны, run_after, last_error). Пайдаланушы тіркелгенде, хатты дереу жіберудің орнына бір транзакцияда send_welcome_email жұмысын енгізіңіз. processJobs(limit) функциясын қосыңыз: ол уақыты келген жұмыстарды SELECT ... FOR UPDATE SKIP LOCKED арқылы алып, орындайды және сәтсіздіктерді 1, 5 және 30 минуттан кейін қайталайды, 4 әрекеттен кейін failed деп белгілейді.

Жоспарланған іске қосу үшін:

POST /api/cron/tick эндпоинтін қосыңыз, оны CRON_SECRET құпиясынан алынған bearer токенімен қорғаңыз; токенсіз кез келген сұрауды бас тартыңыз. Әр шақыру processJobs(100) іске қосып, әлі жіберілмеген, келесі 24 сағатта жүретін брондау еске салуларын жібереді және жіберілген еске салуларды жазады, сондықтан ешнәрсе екі рет жіберілмейді. Орындалғандарды қорытындылайтын JSON жауабын қайтарыңыз. Содан кейін URL мен токенді репозиторий құпияларынан оқитын, әр 15 минут сайын осы эндпоинтті шақыратын GitHub Actions жұмыс процесін жазыңыз.

Жиі кездесетін қателер

  • setInterval-ға сену. Сервер ұйықтаса немесе қайта іске қосылса, ол үнсіз тоқтайды, ал екі данада жұмыс істесе, екі еселенеді.
  • Қорғалмаған cron эндпоинті. Оны тапқан кез келген адам жұмыстарыңызды немесе электрондық пошта шотыңызды іске қосып алады.
  • Идемпотент емес жұмыстар. Қайталаулар мен қайталанатын жоспарлаушы шақырулары болады. Соған дайын жобалаңыз.
  • Сәтсіздікті көрмеу. Бір апта үнсіз сәтсіз болатын жұмыс, шулы сәтсіз болатыннан да нашар. Қателерді жазыңыз және қайталанған сәтсіздікте ескерту беріңіз.
  • Бір сұрауда ұзақ орындау. Сұраулар уақыты бітеді. Партиялармен өңдеңіз.
  • Тым жиі жоспарлау. Нөлге масштабтайтын хостта әр шақыру қолданбаны оятып, ақы алады. Интервалды нақты қажетке сәйкестендіріңіз.
  • Уақыт белдеулері. «9 сағат» сіздің жоспарлаушыңыз (көбіне UTC) мен пайдаланушыларыңыз үшін әртүрлі мәнді білдіреді. Уақытты UTC-де сақтап, әр пайдаланушыға шаққанда түрлендіріңіз.
  • Жұмыс процесі файлындағы құпиялар. Токендерді жоспарлаушының құпия сақтауында ұстаңыз. API кілттерін қауіпсіз сақтау бетін қараңыз.

Тексеру тізімі

  • Баяу жұмыс пайдаланушы сұраулардан бөлініп шықты
  • Жұмыстар тек жадта емес, тұрақты сақталады
  • Өсетін кідірістері және шегі бар қайталаулар бар
  • Әр жұмыс екі рет іске қосылуға қауіпсіз
  • Жоспарланған эндпоинт құпия токенмен қорғалған
  • Әр іске қосу шектелген партияны өңдейді
  • Сәтсіз жұмыстар көрінеді, ескертулері бар
  • Жоспар интервалы хостинг шығынын ескере отырып таңдалған
  • Уақыт UTC-де сақталады

Mythex-тегі фондық жұмыстар

Mythex құжаттары жоспарланған немесе cron жұмыстарын сипаттамайды, ал жарияланған қолданбалар мен олардың деректер қорлары бос тұрғанда ұйықтап, келесі сұраудан оянады (Хостинг шектеулері бетін қараңыз). Сондықтан қолданбаңыздың ішіндегі таймерлерге сенбеңіз. Жұмыс істейтін тәсіл — жоғарыдағы: агенттен jobs кестесін және токенмен қорғалған эндпоинтті сұраңыз, содан кейін сыртқы жоспарлаушыны жарияланған URL-ға бағыттаңыз. Токенді жоба құпиясы ретінде сақтаңыз, және әр оянған сайын қолданба мен деректер қоры ояу болған уақыт үшін кредит жұмсалатынын ескеріңіз, сондықтан ақылға қонымды интервал таңдаңыз. Егер қолданбаңызға бұл үшін API серверін қажет болса, REST API backend рецепті бастапқы нүкте, ал REST API қалай жасау керек эндпоинттерді жобалауды түсіндіреді. Өніміңіздің негізі үнемі жұмыс істейтін жұмысшылар немесе боттар болса, ұзақ жұмыс істейтін процестерге арналған хост жақсырақ болуы мүмкін.

Сұрақтар

Фондық жұмыс деген не?

Фондық жұмыс — пайдаланушы күтіп тұрған сұраудан тыс қолданбаның орындайтын жұмысы, мысалы хат жіберу, суреттерді өлшемін өзгерту, есеп жасау немесе деректерді синхрондау. Пайдаланушы жылдам жауап алады, ал жұмыс бөлек орындалады және сәтсіз болса қайталануы мүмкін.

Хостингте cron болмаса, жоспарланған тапсырманы қалай іске қосамын?

Жұмысты орындайтын қорғалған эндпоинт қосыңыз, содан кейін сыртқы жоспарлаушы оны кесте бойынша шақырсын. Нұсқалар: жоспарланған GitHub Actions жұмыс процесі, хостталған cron қызметі немесе бұлттық провайдеріңіздің жоспарлаушысы. Эндпоинтті құпия токенмен қорғаңыз.

Жоспарланған жұмыстар үшін setInterval немесе setTimeout қолдануға бола ма?

Тек үнемі жұмыс істейтін серверде шағын, маңызсыз тапсырмалар үшін. Сервер қайта іске қосылса, ұйықтаса немесе бірнеше данамен жұмыс істесе, таймерлер жоғалады немесе бірнеше рет орындалады. Жоспарланған жұмысты деректер қорында сақтаңыз немесе жоспарлаушыны пайдаланыңыз.

Mythex cron жұмыстарын қолдай ма?

Mythex құжаттары жоспарланған немесе cron жұмыстарын сипаттамайды, ал жарияланған қолданбалар бос тұрғанда ұйықтайды. Сенімді тәсіл — қолданбаңыздағы қорғалған эндпоинтті шақыратын сыртқы жоспарлаушы, ол қолданбаны оятып, жұмысты орындайды.

Mythex · Pricing · ЖИ көмегімен кез келген нәрсені жасаңыз · Сайттар мен қосымшаларға арналған үлгілер · Mythex салыстыруда · ЖИ-мен қосымша жасау сөздігі · ЖИ-мен қосымша жасауға арналған тегін құралдар · 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 ਪੰਜਾਬੀ 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 简体中文 繁體中文(香港) 繁體中文(台灣)