Leiðbeiningar

Hvernig á að keyra bakgrunnsverk í vefforriti: biðraðir, áætlanir og cron

Til að keyra bakgrunnsverk í vefforriti skaltu fyrst skipta vinnunni í tvo flokka. Kveikt verk (senda velkomin tölvupóst, vinna úr upphleðslu) er hægt að vista í verkbiðröð, oft töflu í gagnagrunninum þínum, og láta starfsmann keyra það með endurtilraunum. Tímasett verk (næturskýrsla, áminningar á 15 mínútna fresti) þurfa eitthvað sem ræsir á tímaáætlun: cron-eiginleika hýsingarinnar, eða utanaðkomandi tímaáætlun sem kallar á varinn endapunkt í appinu þínu. Gerðu alltaf verk örugg í að keyra tvisvar, skráðu bilanir, og treystu aldrei á tímamæli inni í þjóni sem getur sofið eða endurræst sig.

Þessi leiðarvísir útskýrir valkostina, hvenær hver þeirra hentar, og hvernig á að setja þá upp með AI-smiði, þar á meðal á hýsingum sem skala niður í núll.

Hvað telst bakgrunnsverk

Allt sem er hægt, óáreiðanlegt eða ekki þarf fyrir tafarlaus viðbrögð notandans:

  • Senda tölvupósta, tilkynningar og kvittanir
  • Breyta stærð mynda, umkóða myndbönd, búa til PDF-skjöl
  • Kalla á hæg þjónustur þriðja aðila, þar á meðal AI-módel í löng verk
  • Flytja inn eða samstilla gögn frá öðru kerfi
  • Næturhreinsun, skýrslur og áminningar

Að gera þetta innan beiðninnar gerir síður hægar og brothættar: ef tölvupóstveitan liggur niðri mistekst nýskráning notandans. Með því að færa þetta í bakgrunn fær notandinn tafarlaust svar og verkið má endurreyna.

Valkostirnir

ValkosturHvernig hann virkarKostirGallar
Skjóta-og-gleyma í sama ferliSvara, og halda síðan áfram verkinu í þjóninumEngin uppsetningTapast ef þjónninn stoppar; engar endurtilraunir
Tímamælir í ferli (setInterval, setTimeout)Tímamælir í keyrandi þjóninumEinfaltKeyrir ekki meðan appið sefur; tvöföldun með mörgum eintökum
GagnagrunnsbiðröðVerk vistuð sem línur; starfsmaður tekur fyrir þau og keyrirNotar gagnagrunninn sem þú hefur; varanlegt; auðvelt að skoðaÞú smíðar endurtilraunir og læsingar; þarf eitthvað sem keyrir starfsmanninn
Sérstök biðröð (Redis-byggð eða hýst)Biðraðarþjónusta og starfsmennÞroskaðir eiginleikar fyrir endurtilraunir og tímasetninguÖnnur þjónusta sem þarf að keyra og borga fyrir
Hýst verk- eða vinnuflæðisþjónustaÞjónusta þriðja aðila kallar á endapunktana þína með endurtilraunumTímasetning og endurtilraunir sjá um sigHáð söluaðila; annar reikningur og lykill
Utanaðkomandi tímaáætlun sem kallar á endapunktTímamælir annars staðar sendir HTTP-beiðni á áætlunVirkar á hvaða hýsingu sem er, þar á meðal skölun niður í núllLágmarksbil og tafir; verndaðu endapunktinn
Innbyggt cron hýsingarinnarVettvangurinn keyrir skipun á áætlunEinfalt þar sem það er til staðarEkki allar hýsingar bjóða það

Engin ein rétt lausn er til. Lítið app þarf oft aðeins gagnagrunnsbiðröð og utanaðkomandi tímaáætlun.

Af hverju hýsingar sem skala niður í núll breyta myndinni

Margar nútíma hýsingar setja appið þitt í svefn þegar enginn notar það og vekja það við næstu beiðni. Það sparar peninga, en sofandi þjónn keyrir engan kóða: tímamælar ræsast ekki og starfsmenn kanna ekki biðröðina. Á þessum hýsingum þarf tímasett vinna að byrja á innkominni beiðni, og auðveldasta uppspretta þeirrar beiðni er utanaðkomandi tímaáætlun. Hvert kall vekur appið (og oft gagnagrunninn), svo kall á hverri mínútu kostar meira en á 15 mínútna fresti. Veldu hægasta áætlunina sem uppfyllir þörfina.

Mynstur 1: gagnagrunnsbiðröð

Fyrir kveikt verk:

  1. Búðu til töfluna jobs: tegund, gögn (JSON), staða (pending, running, done, failed), fjöldi tilrauna, run_after, last_error, tímastimplar.
  2. Þegar eitthvað gerist setur þú verkalínu inn í sömu færslu og breytingin sem kallaði á það, svo þau heppnast eða mistakast saman.
  3. Starfsmaður tekur verk sem eru tímabær, merkir þau running, framkvæmir þau og merkir þau done.
  4. Ef verk mistekst hækkarðu attempts, setur run_after síðar (til dæmis 1, 5, og síðan 30 mínútur) og geymir villuna. Eftir hámark merkirðu það failed og lætur einhvern vita.

Ef fleiri en einn starfsmaður gæti keyrt í einu þarf að taka verkin með öruggum hætti. Í Postgres leyfir SELECT ... FOR UPDATE SKIP LOCKED hverjum starfsmanni að taka mismunandi línur án árekstra.

Hvað keyrir starfsmanninn? Á þjóni sem er alltaf í gangi, lykkja í sérstöku ferli. Á hýsingu sem skalar niður í núll getur tímasetti endapunkturinn í mynstri 2 unnið hóp af tímabærum verkum í hverju kalli.

Mynstur 2: utanaðkomandi tímaáætlun sem kallar á appið þitt

Fyrir tímasett verk:

  1. Bættu við endapunkti eins og POST /api/cron/send-reminders.
  2. Verndaðu hann: krefstu leynilegs lykils í haus, geymdu hann sem leyndarmál á báðum hliðum, og hafnaðu öllu öðru.
  3. Gerðu hann idempotent: keyrsla tvisvar á sömu mínútu má ekki senda tvær áminningar. Skráðu hvað var sent.
  4. Haltu hverju kalli stuttu: vinndu hóp (til dæmis 100 atriði) og láttu næsta kall taka afganginn.
  5. Beindu tímaáætlun á hann.

Val á tímaáætlun:

  • GitHub Actions tímasettir vinnuflæði. Ókeypis innan notkunarmarka GitHub. Frá og með september 2026 segja skjöl GitHub að stysta bil sé einu sinni á 5 mínútna fresti, keyrslur geta tafist á annatíma (sérstaklega í upphafi hverrar klukkustundar), tímasetningar nota UTC sjálfgefið, og tímasett vinnuflæði í opinberri geymslu eru gerð óvirk eftir 60 daga án virkni í geymslunni.
  • Hýstar cron-þjónustur. Til eru margar þjónustur sem gera ekkert annað en að kalla á slóð eftir áætlun. Athugaðu áreiðanleika, lágmarksbil og viðvaranir áður en þú treystir á eina.
  • Tímaáætlun skýjaveitunnar. Ef þú notar stóra skýjaveitu er þar tímaáætlun sem getur kallað á HTTPS-endapunkt.
  • Hýst verk- eða vinnuflæðisþjónusta. Þær sameina tímasetningu, biðraðir og endurtilraunir og kalla á endapunktana þína fyrir hvert skref. Berðu saman verð og takmörk á vefsíðu hvers söluaðila.

Mynstur 3: láttu þjónustuveituna sjá um það

Stundum er besta bakgrunnsverkið ekkert verk:

  • Greiðslur. Stripe reynir aftur misheppnaðar áskriftargreiðslur og sendir webhook-skilaboð; þú bregst við í stað þess að spyrja. Sjá hvað webhook er.
  • Tölvupóstur. Veitendur setja skilaboð í biðröð og endurreyna sendingu þegar þú hefur skilað þeim.
  • Hópvinna með AI. OpenAI og Anthropic bjóða hópa-API fyrir beiðnir sem ekki eru brýnar, sem þú sendir inn og sækir síðar.

Fyrirmæli til AI-smiðsins

Fyrir biðröð:

Bættu við bakgrunnsbiðröð með töflunni jobs í gagnagrunninum okkar (tegund, gögn sem JSON, staða, attempts, run_after, last_error). Þegar notandi nýskráir sig skaltu setja verkið send_welcome_email inn í sömu færslu í stað þess að senda inline. Bættu við fallinu processJobs(limit) sem tekur tímabær verk með SELECT ... FOR UPDATE SKIP LOCKED, keyrir þau og reynir aftur eftir 1, 5 og 30 mínútur, og merkir þau failed eftir 4 tilraunir.

Fyrir tímasetta kveikju:

Bættu við POST /api/cron/tick sem er varinn með bearer-lykli úr leyndarmálinu CRON_SECRET; hafnaðu öllum beiðnum án hans. Hvert kall keyrir processJobs(100) og sendir bókunaráminningar sem eiga að fara út innan 24 klukkustunda og hafa ekki verið sendar, og skráir sendar áminningar svo ekkert sé sent tvisvar. Skilaðu JSON-samantekt á því sem keyrði. Skrifaðu síðan GitHub Actions-vinnuflæði sem kallar á þennan endapunkt á 15 mínútna fresti, og les slóðina og lykilinn úr leyndarmálum geymslunnar.

Algeng mistök

  • Treysta á setInterval. Það hættir þegjandi þegar þjónninn sefur eða endurræsist, og tvöfaldast þegar tvö eintök keyra.
  • Óvarinn cron-endapunktur. Hver sem finnur hann getur kallað á verkin þín, eða reikning þinn fyrir tölvupóst.
  • Verk sem eru ekki idempotent. Endurtilraunir og tvöföld köll tímaáætlunar munu gerast. Hannaðu fyrir það.
  • Engin sýnileiki á bilunum. Verk sem mistekst þegjandi í viku er verra en það sem mistekst hátt. Skráðu villur og láttu vita af endurteknum bilunum.
  • Löng keyrsla í einni beiðni. Beiðnir renna út á tíma. Vinndu í hópum.
  • Of oft tímasett. Hvert kall á hýsingu sem skalar niður í núll vekur og rukkar appið. Passaðu bilið við raunverulega þörf.
  • Tímabelti. „Klukkan 9“ þýðir ólíka hluti fyrir tímaáætlunina (oft UTC) og notendur þína. Geymdu tíma í UTC og breyttu fyrir hvern notanda.
  • Leyndarmál í vinnuflæðisskránni. Geymdu lykla í leyndarmálageymslu tímaáætlunarinnar. Sjá hvernig á að halda API-lyklum öruggum.

Gátlisti

  • Hægt verk flutt úr beiðnum notenda
  • Verk geymd varanlega, ekki aðeins í minni
  • Endurtilraunir með vaxandi bilum og hámarki
  • Sérhvert verk öruggt í að keyra tvisvar
  • Tímasetti endapunkturinn varinn með leynilegum lykli
  • Hver keyrsla vinnur afmarkaðan hóp
  • Mistókst verk sýnileg, með viðvörunum
  • Bil tímaáætlunar valið með hýsingarkostnað í huga
  • Tímar geymdir í UTC

Bakgrunnsverk í Mythex

Skjölun Mythex lýsir ekki tímasettum verkum eða cron-verkum, og útgefin öpp og gagnagrunnar þeirra sofa þegar þau eru óvirk og vakna við næstu beiðni (sjá Hýsingartakmörk). Treystu því ekki á tímamæla inni í appinu. Aðferðin sem virkar er sú sem lýst er hér að ofan: biddu agentinn um verkatöflu og endapunkt varðan með lykli, og beindu síðan utanaðkomandi tímaáætlun á útgefna slóðina þína. Geymdu lykilinn sem verkefnisleyndarmál, og mundu að hvert vakning eyðir inneign fyrir þann tíma sem appið og gagnagrunnurinn eru vakandi, svo veldu skynsamlegt bil. Ef appið þitt þarf API-bakenda fyrir þetta er REST API bakendauppskriftin góður upphafspunktur, og hvernig á að smíða REST API fjallar um hönnun endapunktanna. Ef keyrandi starfsmenn eða vélmenni eru kjarni vörunnar þinnar gæti hýsing sem er byggð fyrir varanleg ferli hentað betur.

Spurningar

Hvað er bakgrunnsverk?

Bakgrunnsverk er vinna sem appið þitt framkvæmir utan beiðninnar sem notandi bíður eftir, til dæmis að senda tölvupósta, breyta stærð mynda, búa til skýrslur eða samstilla gögn. Notandinn fær hraða svörun, verkið keyrir sér og hægt er að endurreyna það ef það mistekst.

Hvernig keyri ég tímasett verk ef hýsingin mín hefur ekki cron?

Bættu við vörðu endapunkti sem framkvæmir verkið, og láttu síðan utanaðkomandi tímaáætlun kalla á hann eftir dagskrá. Valkostir eru tímasett GitHub Actions-keyrsla, hýst cron-þjónusta eða tímaáætlun skýjaveitunnar þinnar. Verndaðu endapunktinn með leynilegu lykilorði.

Get ég notað setInterval eða setTimeout fyrir tímasett verk?

Aðeins fyrir lítil, ómikilvæg verk á þjóni sem er alltaf í gangi. Ef þjónninn endurræsist, skalast niður í núll eða keyrir í nokkrum eintökum tapast tímamælar eða keyra oftar en einu sinni. Geymdu tímasett verk í gagnagrunni eða notaðu tímaáætlun.

Styður Mythex cron-verk?

Skjölun Mythex lýsir ekki tímasettum verkum eða cron-verkum, og útgefin öpp sofa þegar þau eru óvirk. Áreiðanlega leiðin er utanaðkomandi tímaáætlun sem kallar á varinn endapunkt í appinu þínu, sem vekur appið og keyrir verkið.

Mythex · Pricing · Smíðaðu hvað sem er með gervigreind · Sniðmát fyrir vefsíður og forrit · Mythex í samanburði · Orðasafn um forritasmíði með gervigreind · Ókeypis verkfæri fyrir forritasmíði með gervigreind · 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 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 简体中文 繁體中文(香港) 繁體中文(台灣)