በድር መተግበሪያ ውስጥ የጀርባ ስራዎችን እንዴት ማካሄድ፡ ወረፋዎች፣ መርሐ-ግብር ሰጪዎችና cron
በድር መተግበሪያ የጀርባ ስራዎችን ለማካሄድ መጀመሪያ ስራውን በሁለት ዓይነት ይከፋፍሉት። የሚነሱ ስራዎች (እንኳን ደህና መጡ ኢሜይል መላክ፣ ሰቀላ ማካሄድ) ወደ ስራ ወረፋ ሊቀመጡ ይችላሉ፣ ብዙ ጊዜ በዳታቤዝዎ ውስጥ እንደ ሰንጠረዥ፣ እና እንደገና በመሞከር በሰራተኛ ይያዛሉ። መርሐ-ግብር የተያዘላቸው ስራዎች (የምሽት ሪፖርት፣ በየ15 ደቂቃው ማስታወሻዎች) በጊዜ ሰሌዳ የሚነሳ ነገር ያስፈልጋቸዋል፦ የአስተናጋጁ cron ባህሪ፣ ወይም በመተግበሪያዎ ውስጥ የተጠበቀ ኤንድፖይንት የሚጠራ ውጫዊ መርሐ-ግብር ሰጪ። ስራዎች ሁልጊዜ ሁለት ጊዜ ቢሰሩ ደህና እንዲሆኑ ያድርጉ፣ ውድቀቶችን ይመዝግቡ፣ እና መተኛት ወይም ዳግም መጀመር በሚችል ሰርቨር ውስጥ ባለ ሰዓት ቆጣሪ ላይ በፍጹም አትተማመኑ።
ይህ መመሪያ አማራጮቹን፣ እያንዳንዱ መቼ እንደሚስማማ፣ እና በAI መተግበሪያ ገንቢ እንዴት እንደሚያዋቅሩ፣ ወደ ዜሮ በሚመዘኑ አስተናጋጆችም ላይ ጨምሮ ያብራራል።
የጀርባ ስራ ምን እንደሆነ
ቀርፋፋ፣ የማይታመን ወይም ለተጠቃሚው ፈጣን ምላሽ የማያስፈልግ ማንኛውም ነገር፦
- ኢሜይሎች፣ ማሳወቂያዎችና ደረሰኞች መላክ
- ምስሎችን መቀየር፣ ቪዲዮ መቀየር፣ PDF ማመንጨት
- ቀርፋፋ የሶስተኛ ወገን ኤፒአዮችን መጥራት፣ ረጅም ስራ ላይ AI ሞዴሎችን ጨምሮ
- ከሌላ ስርዓት ዳታ ማስመጣት ወይም ማመሳሰል
- የሌሊት ጽዳት፣ ሪፖርቶችና ማስታወሻዎች
ይህንን በጥያቄው ውስጥ ማድረግ ገጾችን ቀርፋፋና ደካማ ያደርጋል፦ የኢሜይል አቅራቢው ቢወድቅ፣ የተጠቃሚው ምዝገባ ይወድቃል። ወደ ጀርባ ማዛወር ተጠቃሚው ፈጣን ምላሽ ያገኛል፣ ስራውም እንደገና ሊሞከር ይችላል።
አማራጮቹ
| አማራጭ | እንዴት እንደሚሰራ | ጥቅም | ጉዳት |
|---|---|---|---|
| በተመሳሳይ ሂደት ውስጥ ማስነሳት እና መርሳት | ምላሽ ይሰጣል፣ ከዚያ በሰርቨሩ ስራውን ይቀጥላል | ምንም ማዋቀር የለም | ሰርቨሩ ቢቆም ይጠፋል፤ እንደገና መሞከር የለም |
በሂደቱ ውስጥ ሰዓት ቆጣሪ (setInterval፣ setTimeout) | በሚሰራው ሰርቨር ውስጥ ያለ ሰዓት ቆጣሪ | ቀላል ነው | ሲተኛ አይሰራም፤ ብዙ ቅጂዎች ካሉ ይደገማል |
| በዳታቤዝ የሚመራ ወረፋ | ስራዎች እንደ ረድፎች ይቀመጣሉ፤ ሰራተኛ ይወስዳቸውና ያካሂዳቸዋል | ያለዎትን ዳታቤዝ ይጠቀማል፤ ዘላቂ ነው፤ ለመፈተሽ ቀላል | የራስዎን እንደገና መሞከርና መቆለፍ ይገነባሉ፤ ሰራተኛውን የሚያካሂድ ነገር ያስፈልጋል |
| የተለየ ወረፋ (በRedis ላይ ወይም የተቀናበረ) | የወረፋ አገልግሎትና ሰራተኞች | የበሰሉ የድጋሚ ሙከራና መርሐ-ግብር ባህሪያት | ሌላ የሚሰራና የሚከፈል አገልግሎት |
| የተስተናገደ የስራ ወይም የፍሰት አገልግሎት | ሶስተኛ ወገን በድግግሞሽና በመርሐ-ግብር ኤንድፖይንቶችዎን ይጠራል | መርሐ-ግብርና ድጋሚ ሙከራ ይያዛሉ | በአቅራቢው ላይ ጥገኛ፤ ሌላ መለያና ቁልፍ |
| ውጫዊ መርሐ-ግብር ሰጪ ኤንድፖይንት የሚጠራ | በሌላ ቦታ ያለ ሰዓት ቆጣሪ በጊዜ የኤችቲቲፒ ጥያቄ ይልካል | በማንኛውም አስተናጋጅ ላይ ይሰራል፣ ወደ ዜሮ መመዘንን ጨምሮ | ዝቅተኛ ክፍተቶችና መዘግየቶች፤ ኤንድፖይንቱን ጠብቁ |
| የአስተናጋጁ አብሮ የተገነባ cron | መድረኩ ትዕዛዝ በጊዜ ሰሌዳ ያካሂዳል | የሚገኝበት ቦታ ቀላል | ሁሉም አስተናጋጆች አይሰጡትም |
አንድም ትክክለኛ መልስ የለም። ትንሽ መተግበሪያ ብዙ ጊዜ የዳታቤዝ ወረፋና ውጫዊ መርሐ-ግብር ሰጪ ብቻ ይፈልጋል።
ወደ ዜሮ የሚመዝኑ አስተናጋጆች ለምን ነገሩን ይለውጣሉ
ብዙ ዘመናዊ አስተናጋጆች ማንም ሳይጠቀምበት ሲቀር መተግበሪያዎን ያንቀላፋሉ፣ በቀጣዩ ጥያቄ ያነቃሉ። ይህ ገንዘብ ይቆጥባል፣ ነገር ግን የተኛ ሰርቨር ኮድ አያካሂድም፦ ሰዓት ቆጣሪዎች አይነሱም፣ ሰራተኞች አይጠይቁም። በእነዚህ አስተናጋጆች ላይ መርሐ-ግብር የተያዘለት ስራ በገቢ ጥያቄ መጀመር አለበት፣ ለዚያ ቀላሉ ምንጭ ውጫዊ መርሐ-ግብር ሰጪ ነው። እያንዳንዱ ጥሪ መተግበሪያውን (ብዙ ጊዜ ዳታቤዙንም) ያነቃል፣ ስለዚህ በየደቂቃው መጥራት በየ15 ደቂቃው ከመጥራት ይበልጣል። ፍላጎቱን የሚያሟላ በጣም ዘገምተኛውን መርሐ-ግብር ይምረጡ።
ስርዓተ-ጥለት 1፦ የዳታቤዝ ስራ ወረፋ
ለሚነሱ ስራዎች፦
jobsሰንጠረዥ ይፍጠሩ፦ ዓይነት፣ ዳታ (JSON)፣ ሁኔታ (pending፣running፣done፣failed)፣ ሙከራዎች፣ run_after፣ last_error፣ የጊዜ ማህተሞች።- የሆነ ነገር ሲከሰት፣ ለውጡ ከሚፈጠርበት ግብይት ጋር በአንድ ግብይት ውስጥ የስራ ረድፍ ያስገቡ፣ ስለዚህ አብረው ይሳካሉ ወይም አብረው ይወድቃሉ።
- ሰራተኛ ጊዜያቸው የደረሰ ስራዎችን ይወስዳል፣
runningብሎ ምልክት ያደርጋቸዋል፣ ስራውን ይሰራል እናdoneያደርጋቸዋል። - ሲወድቅ
attemptsይጨምራል፣run_afterወደ በኋላ ያዘጋጃል (ለምሳሌ 1፣ 5፣ ከዚያ 30 ደቂቃ)፣ ስህተቱንም ያስቀምጣል። ከከፍተኛው በኋላfailedብሎ ምልክት አድርጎ አንድን ሰው ያሳውቃል።
ብዙ ሰራተኞች በአንድ ጊዜ ሊሰሩ ከቻሉ፣ ስራዎች በደህና መወሰድ አለባቸው። በPostgres ላይ SELECT ... FOR UPDATE SKIP LOCKED እያንዳንዱ ሰራተኛ የተለያዩ ረድፎችን እንዲወስድ ይፈቅዳል ያለ ግጭት።
ሰራተኛውን ማን ያካሂዳል? ሁልጊዜ በሚሰራ ሰርቨር ላይ፣ በተለየ ሂደት ውስጥ ያለ ዑደት። ወደ ዜሮ በሚመዘን አስተናጋጅ ላይ፣ በስርዓተ-ጥለት 2 ያለው መርሐ-ግብር የተያዘለት ኤንድፖይንት በእያንዳንዱ ጥሪ የተዘጋጁ ስራዎችን ቡድን ማካሄድ ይችላል።
ስርዓተ-ጥለት 2፦ ውጫዊ መርሐ-ግብር ሰጪ መተግበሪያዎን የሚጠራ
መርሐ-ግብር ለተያዘላቸው ስራዎች፦
- እንደ
POST /api/cron/send-remindersያለ ኤንድፖይንት ይጨምሩ። - ይጠብቁት፦ በርዕስ ውስጥ ሚስጥር ቶከን ይጠይቁ፣ በሁለቱም በኩል እንደ ሚስጥር ይቀመጥ፣ ሌላ ሁሉንም ውድቅ ያድርጉ።
- እንደገና ቢሰራ ምንም ጉዳት እንዳይኖረው (idempotent) ያድርጉት፦ በአንድ ደቂቃ ውስጥ ሁለቴ ቢሰራ ሁለት ማስታወሻዎችን መላክ የለበትም። የተላከውን ይመዝግቡ።
- እያንዳንዱ ጥሪ አጭር ይሁን፦ ቡድን (ለምሳሌ 100 ዕቃዎች) ያካሂዱ፣ ቀጣዩ ጥሪ የቀረውን ይወስድ።
- መርሐ-ግብር ሰጪ ወደ እሱ አመልክቱ።
የመርሐ-ግብር ሰጪ ምርጫዎች፦
- GitHub Actions መርሐ-ግብር የተያዘላቸው ስራዎች። በGitHub የአጠቃቀም ገደቦች ውስጥ ነጻ። በሴፕቴምበር 2026 እንደተገለጸው፣ የGitHub ሰነዶች አጭሩ ክፍተት በየ5 ደቂቃ አንድ ጊዜ እንደሆነ፣ በስራ የተጠመዱ ጊዜያት (በተለይ የእያንዳንዱ ሰዓት መጀመሪያ) ሊዘገዩ እንደሚችሉ፣ መርሐ-ግብሮች በነባሪ UTC እንደሚጠቀሙ፣ እና በህዝባዊ ማከማቻ ያሉ መርሐ-ግብር የተያዘላቸው ስራዎች ለ60 ቀናት ምንም የማከማቻ እንቅስቃሴ ከሌለ እንደሚቦዘኑ ይናገራሉ።
- የተስተናገዱ cron አገልግሎቶች። ብዙ አገልግሎቶች አሉ ብቸኛ ስራቸው ዩአርኤልን በጊዜ ሰሌዳ መጥራት ነው። በላዩ ከመመካትዎ በፊት አስተማማኝነትን፣ ዝቅተኛ ክፍተትንና ማስጠንቀቂያዎችን ያረጋግጡ።
- የደመና አቅራቢዎ መርሐ-ግብር ሰጪ። የትልቅ የደመና አቅራቢ ቀድሞ የሚጠቀሙ ከሆነ፣ HTTPS ኤንድፖይንት መጥራት የሚችል የሚተዳደር መርሐ-ግብር ሰጪ ይኖረዋል።
- የተስተናገደ የስራ ወይም የፍሰት አገልግሎት። እነዚህ መርሐ-ግብር፣ ወረፋዎችና ድግግሞሽ ያዋህዳሉ፣ ለእያንዳንዱ ደረጃ ኤንድፖይንቶችዎን ይጠራሉ። ዋጋንና ገደቦችን በእያንዳንዱ አቅራቢ ድረ-ገጽ ያወዳድሩ።
ስርዓተ-ጥለት 3፦ አቅራቢው እንዲያደርገው ይፍቀዱ
አንዳንድ ጊዜ ምርጡ የጀርባ ስራ ምንም አለመኖር ነው፦
- ክፍያዎች። Stripe ያልተሳኩ የደንበኝነት ክፍያዎችን እንደገና ይሞክራል እና ዌብሁኮችን ይልካል፤ እርስዎ ይመልሳሉ እንጂ አይጠይቁም። ዌብሁክ ምንድን ነው ይመልከቱ።
- ኢሜይል። አቅራቢዎች መልዕክቱን ካስረከቡ በኋላ ማድረስን ወረፋ ያደርጋሉ እና እንደገና ይሞክራሉ።
- የጅምላ AI ስራ። OpenAI እና Anthropic አስቸኳይ ላልሆኑ ጥያቄዎች ለኋላ የሚሰበስቡት የጅምላ ኤፒአዮች አሏቸው።
ለAI ገንቢዎ የሚሰጡ ትዕዛዞች
ለወረፋ፦
በዳታቤዛችን ውስጥ jobs ሰንጠረዥ (ዓይነት፣ payload JSON፣ ሁኔታ፣ attempts፣ run_after፣ last_error) በመጠቀም የስራ ወረፋ ጨምር። ተጠቃሚ ሲመዘገብ፣ በመስመር ላይ ከመላክ ይልቅ በተመሳሳይ ግብይት ውስጥ send_welcome_email ስራ አስገባ። በSELECT ... FOR UPDATE SKIP LOCKED ጊዜያቸው የደረሰ ስራዎችን የሚወስድ፣ የሚያካሂድና ውድቀቶችን ከ1፣ 5 እና 30 ደቂቃ በኋላ እንደገና የሚሞክር processJobs(limit) ተግባር ጨምር፤ ከ4 ሙከራዎች በኋላ failed ብሎ ምልክት አድርግ።
ለመርሐ-ግብር የተያዘለት ቀስቅሴ፦
POST /api/cron/tick ጨምር፣ በሚስጥር CRON_SECRET የተጠበቀ bearer ቶከን ያለው፤ ቶከን ያለሌለው ጥያቄ ሁሉ ውድቅ ይሁን። እያንዳንዱ ጥሪ processJobs(100) ያካሂድና በሚቀጥሉት 24 ሰዓታት ውስጥ የሚመጡ እና ገና ያልተላኩ የቦታ ማስያዝ ማስታወሻዎችን ይልካል፣ የተላኩትን እንዳይደገም ይመዘግባል። የተካሄደውን የJSON ማጠቃለያ ይመልሱ። ከዚያ ዩአርኤሉንና ቶከኑን ከማከማቻ ሚስጥሮች በማንበብ በየ15 ደቂቃው ይህን ኤንድፖይንት የሚጠራ GitHub Actions ፋይል ጻፍ።
የተለመዱ ስህተቶች
- በ
setIntervalመተማመን። ሰርቨሩ ሲተኛ ወይም ዳግም ሲጀምር በጸጥታ ይቆማል፣ ሁለት ቅጂዎች ሲሰሩ ደግሞ በእጥፍ ይሰራል። - ያልተጠበቀ cron ኤንድፖይንት። ያገኘው ሁሉ ስራዎችዎን ወይም የኢሜይል ሂሳብዎን ሊያስነሳ ይችላል።
- ስራዎች እንደገና ቢሰሩ ጉዳት የሌላቸው ያልሆኑ። እንደገና መሞከርና የተባዙ መርሐ-ግብር ጥሪዎች ይከሰታሉ። ለእነሱ ንድፍ ያውጡ።
- የውድቀት ታይነት የለም። ለአንድ ሳምንት በጸጥታ የሚወድቅ ስራ በግልጽ ከሚወድቅ የከፋ ነው። ስህተቶችን ይመዝግቡ እና ተደጋጋሚ ውድቀቶች ላይ ያሳውቁ።
- በአንድ ጥያቄ ውስጥ ረጅም ስራ። ጥያቄዎች ጊዜ ያልፍባቸዋል። በቡድን ያካሂዱ።
- በጣም ብዙ ጊዜ መርሐ-ግብር ማስያዝ። በወደ ዜሮ በሚመዘን አስተናጋጅ ላይ እያንዳንዱ ጥሪ መተግበሪያውን ያነቃል እና ያስከፍላል። ክፍተቱን ከእውነተኛ ፍላጎቱ ጋር አስማሙ።
- የሰዓት ዞኖች። "9 ሰዓት" ለመርሐ-ግብር ሰጪዎ (ብዙ ጊዜ UTC) እና ለተጠቃሚዎችዎ የተለያየ ትርጉም አለው። ጊዜን በUTC ያስቀምጡ እና ለእያንዳንዱ ተጠቃሚ ይቀይሩ።
- ሚስጥሮች በስራ ፋይሉ ውስጥ። ቶከኖችን በመርሐ-ግብር ሰጪው የሚስጥር ማከማቻ ያስቀምጡ። የኤፒአይ ቁልፎችን እንዴት መጠበቅ ይመልከቱ።
ዝርዝር
- ቀርፋፋ ስራ ከተጠቃሚ ጥያቄዎች ተወግዷል
- ስራዎች በዘላቂነት ይቀመጣሉ፣ በማህደረ ትውስታ ብቻ አይደለም
- የእየጨመረ ክፍተት ያላቸው ድጋሚ ሙከራዎች እና ከፍተኛ ገደብ
- እያንዳንዱ ስራ ሁለት ጊዜ ቢሰራ ደህና ነው
- መርሐ-ግብር የተያዘለት ኤንድፖይንት በሚስጥር ቶከን የተጠበቀ ነው
- እያንዳንዱ ሩጫ የተወሰነ ቡድን ብቻ ያካሂዳል
- የወደቁ ስራዎች በማስጠንቀቂያዎች ይታያሉ
- የመርሐ-ግብር ክፍተት ከማስተናገጃ ወጪ ጋር ተመርጧል
- ጊዜያት በUTC ይቀመጣሉ
በMythex የጀርባ ስራዎች
የMythex ሰነዶች መርሐ-ግብር የተያዘላቸው ወይም cron ስራዎችን አይገልጹም፣ የታተሙ መተግበሪያዎችና ዳታቤዞቻቸውም ስራ ሲፈቱ ይተኛሉ፣ በቀጣዩ ጥያቄ ይነሳሉ (የማስተናገጃ ገደቦች ይመልከቱ)። ስለዚህ በመተግበሪያዎ ውስጥ ባሉ ሰዓት ቆጣሪዎች ላይ አትተማመኑ። የሚሰራው ከላይ ያለው አካሄድ ነው፦ ለዳታ ሰንጠረዥና በቶከን የተጠበቀ ኤንድፖይንት ወኪሉን ይጠይቁ፣ ከዚያም ውጫዊ መርሐ-ግብር ሰጪ ወደ የታተመው ዩአርኤልዎ ይጠቁሙ። ቶከኑን እንደ የፕሮጀክት ሚስጥር ያስቀምጡ፣ እና እያንዳንዱ መነሳት መተግበሪያውና ዳታቤዙ ለነቁበት ጊዜ ክሬዲት እንደሚያወጣ ያስታውሱ፣ ስለዚህ ምክንያታዊ ክፍተት ይምረጡ። መተግበሪያዎ ለዚህ የኤፒአይ ጀርባ የሚያስፈልገው ከሆነ፣ REST API ጀርባ የምግብ አሰራር መነሻ ነው፣ እና REST API እንዴት መገንባት ኤንድፖይንቶቹን መንደፍን ይሸፍናል። ዋናው ምርትዎ ቋሚ ሂደቶች ወይም ቦቶች ከሆኑ፣ ለቋሚ ሂደቶች የተሰራ አስተናጋጅ ይበልጥ ሊስማማዎ ይችላል።
ጥያቄዎች
የጀርባ ስራ ምንድን ነው?
የጀርባ ስራ ተጠቃሚ እየጠበቀ ካለው ጥያቄ ውጭ መተግበሪያው የሚሰራው ስራ ነው፣ ለምሳሌ ኢሜይል መላክ፣ ምስል መቀየር፣ ሪፖርት ማመንጨት ወይም ዳታ ማመሳሰል። ተጠቃሚው ፈጣን ምላሽ ያገኛል፣ ስራው ደግሞ ለብቻው ይሰራል እና ካልተሳካ እንደገና ሊሞከር ይችላል።
አስተናጋጄ cron ከሌለው መርሐ-ግብር የተያዘለትን ስራ እንዴት ላካሂድ?
ስራውን የሚሰራ በጥበቃ የተጠበቀ ኤንድፖይንት ጨምሩ፣ ከዚያም ውጫዊ መርሐ-ግብር ሰጪ በጊዜ ሰሌዳ እንዲጠራው አድርጉ። አማራጮች፦ የተያዘለት GitHub Actions ስራ፣ የተስተናገደ cron አገልግሎት ወይም የደመና አቅራቢዎ መርሐ-ግብር ሰጪ ናቸው። ኤንድፖይንቱን በሚስጥር ቶከን ጠብቁት።
ለመርሐ-ግብር ስራዎች setInterval ወይም setTimeout መጠቀም እችላለሁ?
ለትናንሽ፣ ብዙም ለማይጠቅሙ ስራዎች ብቻ፣ ሁልጊዜ በሚሰራ ሰርቨር ላይ። ሰርቨሩ ዳግም ቢጀምር፣ ዜሮ ላይ ቢመዘን ወይም ብዙ ቅጂዎች ቢሰሩ፣ ሰዓት ቆጣሪዎቹ ይጠፋሉ ወይም ከአንድ ጊዜ በላይ ይሰራሉ። መርሐ-ግብር የተያዘለት ስራ በዳታቤዝ ያስቀምጡ ወይም መርሐ-ግብር ሰጪ ይጠቀሙ።
Mythex cron ስራዎችን ይደግፋል?
የMythex ሰነዶች መርሐ-ግብር የተያዘላቸው ወይም cron ስራዎችን አይገልጹም፣ የታተሙ መተግበሪያዎችም ስራ ሲፈቱ ይተኛሉ። አስተማማኝው አካሄድ የውጫዊ መርሐ-ግብር ሰጪ በመተግበሪያዎ ውስጥ በጥበቃ የተጠበቀ ኤንድፖይንት መጥራት ነው፣ ይህም መተግበሪያውን ያነቃና ስራውን ያካሂዳል።