Vodiči

Kako pokretati pozadinske poslove u web aplikaciji: redovi, planeri i cron

Da biste pokretali pozadinske poslove u web aplikaciji, prvo podijelite posao na dvije vrste. Okidani poslovi (pošalji dobrodošlu e-poruku, obradi otpremljenu datoteku) mogu se sačuvati u redu poslova, često kao tabela u vašoj bazi, a obrađuje ih radnik s ponovnim pokušajima. Zakazani poslovi (noćni izvještaj, podsjetnici svakih 15 minuta) trebaju nešto što se pokreće po rasporedu: cron funkciju hosta ili vanjski planer koji poziva zaštićenu krajnju tačku u vašoj aplikaciji. Uvijek pravite poslove da bezbjedno mogu da se izvrše dva puta, bilježite greške i nikad se ne oslanjajte na tajmer unutar servera koji može da spava ili se restartuje.

Ovaj vodič objašnjava opcije, kada koja odgovara i kako ih postaviti s AI graditeljem aplikacija, uključujući hostove koji se skaliraju na nulu.

Šta se računa kao pozadinski posao

Svaki rad koji je spor, nepouzdan ili nije potreban za trenutni odgovor korisniku:

  • Slanje e-pošte, obavještenja i računa
  • Promjena veličine slika, transkodiranje videa, generisanje PDF-ova
  • Pozivi sporim API-jima trećih strana, uključujući AI modele za duge zadatke
  • Uvoz ili sinhronizacija podataka iz drugog sistema
  • Noćno čišćenje, izvještaji i podsjetnici

Ako ovo radite unutar zahtjeva, stranice postaju spore i krhke: ako je provajder e-pošte pao, registracija korisnika propada. Premještanjem u pozadinu korisnik dobija trenutan odgovor, a posao se može ponoviti.

Opcije

OpcijaKako radiPrednostiMane
Pokreni i zaboravi u istom procesuOdgovori, pa nastavi rad na serveruNema postavljanjaIzgubi se ako se server zaustavi; nema ponavljanja
Tajmer u procesu (setInterval, setTimeout)Tajmer u pokrenutom serveruTrivijalnoNe radi dok spava; duplira se s više kopija
Red u baziPoslovi se čuvaju kao redovi; radnik ih preuzima i izvršavaKoristi bazu koju već imate; trajno; lako se pregledaSami pravite ponavljanja i zaključavanje; treba nešto da pokrene radnika
Namjenski red (na Redisu ili upravljani)Servis reda plus radniciZreli alati za ponavljanje i zakazivanjeJoš jedan servis za pokretanje i plaćanje
Hostovana usluga za poslove ili tokoveTreća strana poziva vaše krajnje tačke s ponavljanjima i rasporedimaZakazivanje i ponavljanja se rješavaju za vasZavisnost od dobavljača; još jedan nalog i ključ
Vanjski planer koji poziva krajnju tačkuTajmer negdje drugdje šalje HTTP zahtjev po rasporeduRadi na bilo kom hostu, uključujući skaliranje na nuluMinimalni intervali i kašnjenja; zaštitite krajnju tačku
Ugrađeni cron hostaPlatforma pokreće komandu po rasporeduJednostavno tamo gdje postojiNije svaki host to nudi

Nema jednog ispravnog odgovora. Mala aplikacija često treba samo red u bazi i vanjski planer.

Zašto hostovi koji se skaliraju na nulu mijenjaju sliku

Mnogi moderni hostovi uspavaju aplikaciju kad je niko ne koristi i bude je pri sljedećem zahtjevu. To štedi novac, ali uspavani server ne izvršava kod: tajmeri se ne aktiviraju i radnici ne provjeravaju red. Na ovakvim hostovima zakazani rad mora početi dolaskom zahtjeva, a najlakši izvor tog zahtjeva je vanjski planer. Svaki poziv budi aplikaciju (i često njenu bazu), pa pozivanje svake minute košta više nego svakih 15 minuta. Izaberite najrjeđi raspored koji zadovoljava potrebu.

Obrazac 1: red poslova u bazi

Za okidane poslove:

  1. Napravite tabelu jobs: tip, podaci (JSON), status (pending, running, done, failed), broj pokušaja, run_after, last_error, vremenske oznake.
  2. Kad se nešto desi, ubacite red posla u istoj transakciji kao promjena koja ga je izazvala, pa uspijevaju ili propadaju zajedno.
  3. Radnik preuzima poslove koji su na redu, označava ih kao running, izvršava ih i označava kao done.
  4. Pri neuspjehu, povećajte attempts, postavite run_after kasnije (npr. 1, 5, pa 30 minuta) i sačuvajte grešku. Nakon maksimuma, označite kao failed i obavijestite nekoga.

Ako više radnika može raditi istovremeno, poslovi se moraju bezbjedno preuzimati. Na Postgresu, SELECT ... FOR UPDATE SKIP LOCKED omogućava da svaki radnik preuzme različite redove bez sukoba.

Šta pokreće radnika? Na serveru koji je uvijek uključen, petlja u zasebnom procesu. Na hostu koji se skalira na nulu, zakazana krajnja tačka iz Obrasca 2 može obraditi seriju poslova na svaki poziv.

Obrazac 2: vanjski planer koji poziva vašu aplikaciju

Za zakazane poslove:

  1. Dodajte krajnju tačku kao što je POST /api/cron/send-reminders.
  2. Zaštitite je: zahtijevajte tajni token u zaglavlju, sačuvan kao tajna s obje strane, i odbijte sve drugo.
  3. Napravite je idempotentnom: pokretanje dva puta u istoj minuti ne smije poslati dva podsjetnika. Zabilježite šta je poslato.
  4. Neka svaki poziv bude kratak: obradi seriju (recimo 100 stavki), a sljedeći poziv preuzima ostatak.
  5. Usmjerite planer na nju.

Izbor planera:

  • GitHub Actions zakazani workflow-i. Besplatni u okviru GitHubovih ograničenja korištenja. Od septembra 2026, GitHubova dokumentacija kaže da je najkraći interval jednom na 5 minuta, pokretanja mogu kasniti u vrijeme velikog opterećenja (posebno na početku sata), rasporedi koriste UTC po defaultu, a zakazani workflow-i u javnom repozitorijumu se isključuju nakon 60 dana bez aktivnosti u repozitorijumu.
  • Hostovane usluge crona. Postoje mnoge usluge čiji je jedini posao da pozivaju URL po rasporedu. Provjerite pouzdanost, minimalni interval i obavještavanje prije nego što se oslonite na jednu.
  • Planer vašeg cloud provajdera. Ako već koristite veliki cloud provajder, imaće upravljani planer koji može pozvati HTTPS krajnju tačku.
  • Hostovana usluga za poslove ili tokove. Kombinuju zakazivanje, redove i ponavljanja i pozivaju vaše krajnje tačke za svaki korak. Uporedite cijene i ograničenja na sajtu svakog dobavljača.

Obrazac 3: prepustite to provajderu

Ponekad je najbolji pozadinski posao — nijedan:

  • Plaćanja. Stripe ponavlja neuspjela plaćanja pretplate i šalje webhookove; vi reagujete umjesto da anketirate. Pogledajte šta je webhook.
  • E-pošta. Provajderi stavljaju isporuku u red i ponavljaju je kad im predate poruku.
  • Skupni AI rad. OpenAI i Anthropic nude batch API-je za nehitne zahtjeve koje predate i preuzmete kasnije.

Upiti za vašeg AI graditelja

Za red:

Dodaj red pozadinskih poslova koristeći tabelu jobs u našoj bazi (tip, JSON podaci, status, attempts, run_after, last_error). Kad se korisnik registruje, ubaci posao send_welcome_email u istoj transakciji umjesto da šalješ inline. Dodaj funkciju processJobs(limit) koja preuzima poslove na redu s SELECT ... FOR UPDATE SKIP LOCKED, izvršava ih i ponavlja neuspjele nakon 1, 5 i 30 minuta, a označava ih kao failed nakon 4 pokušaja.

Za zakazani okidač:

Dodaj POST /api/cron/tick zaštićen bearer tokenom iz tajne CRON_SECRET; odbij svaki zahtjev bez njega. Svaki poziv pokreće processJobs(100) i šalje podsjetnike na rezervacije koji su na redu u narednih 24 sata, a još nisu poslati, bilježeći poslate da se ništa ne pošalje dva puta. Vrati JSON sažetak onoga što je izvršeno. Zatim napiši GitHub Actions workflow koji poziva ovu krajnju tačku svakih 15 minuta, čitajući URL i token iz tajni repozitorijuma.

Česte greške

  • Oslanjanje na setInterval. Tiho prestaje kad se server uspava ili restartuje, a udvostručuje se kad rade dvije kopije.
  • Nezaštićena cron krajnja tačka. Svako ko je pronađe može pokrenuti vaše poslove, ili vaš račun za e-poštu.
  • Poslovi koji nisu idempotentni. Ponavljanja i duplirani pozivi planera će se desiti. Projektujte za to.
  • Nema vidljivosti grešaka. Posao koji tiho ne uspijeva sedmicu gori je od onog koji glasno pada. Bilježite greške i obavještavajte o ponovljenim neuspjesima.
  • Dugi rad u jednom zahtjevu. Zahtjevi istječu. Obrađujte u serijama.
  • Prevelika učestalost zakazivanja. Svaki poziv na hostu koji se skalira na nulu budi i naplaćuje aplikaciju. Uskladite interval sa stvarnom potrebom.
  • Vremenske zone. „9 ujutro” znači različite stvari za vaš planer (često UTC) i za vaše korisnike. Čuvajte vremena u UTC-u i pretvarajte ih po korisniku.
  • Tajne u fajlu workflow-a. Čuvajte tokene u tajnoj pohrani planera. Pogledajte kako čuvati API ključeve na sigurnom.

Kontrolna lista

  • Spori rad premješten iz korisničkih zahtjeva
  • Poslovi sačuvani trajno, ne samo u memoriji
  • Ponavljanja s rastućim razmacima i maksimumom
  • Svaki posao bezbjedan za dva izvršenja
  • Zakazana krajnja tačka zaštićena tajnim tokenom
  • Svaki poziv obrađuje ograničenu seriju
  • Neuspjeli poslovi vidljivi, s upozorenjima
  • Interval zakazivanja izabran uzimajući u obzir trošak hostinga
  • Vremena sačuvana u UTC-u

Pozadinski poslovi u Mythexu

Mythexova dokumentacija ne opisuje zakazane ili cron poslove, a objavljene aplikacije i njihove baze spavaju kad su neaktivne i bude se pri sljedećem zahtjevu (pogledajte Ograničenja hostinga). Zato se ne oslanjajte na tajmere unutar aplikacije. Pristup koji radi je onaj gore: od agenta zatražite tabelu poslova i krajnju tačku zaštićenu tokenom, pa usmjerite vanjski planer na vaš objavljeni URL. Token čuvajte kao tajnu projekta i zapamtite da svako buđenje troši kredite za vrijeme dok su aplikacija i baza budne, pa izaberite razuman interval. Ako vašoj aplikaciji za ovo treba API backend, recept za REST API backend je polazna tačka, a kako napraviti REST API pokriva dizajn krajnjih tačaka. Ako su stalni radnici ili botovi srž vašeg proizvoda, host napravljen za trajne procese može vam bolje odgovarati.

Pitanja

Šta je pozadinski posao?

Pozadinski posao je rad koji aplikacija obavlja van zahtjeva na koji korisnik čeka, npr. slanje e-pošte, promjena veličine slika, generisanje izvještaja ili sinhronizacija podataka. Korisnik dobija brz odgovor, a posao se izvršava odvojeno i može se ponoviti ako ne uspije.

Kako pokrenuti zakazani zadatak ako moj host nema cron?

Dodajte zaštićenu krajnju tačku koja obavlja posao, pa neka vanjski planer poziva tu tačku po rasporedu. Opcije uključuju zakazani GitHub Actions workflow, uslugu hostovanog crona ili planer vašeg cloud provajdera. Zaštitite krajnju tačku tajnim tokenom.

Mogu li koristiti setInterval ili setTimeout za zakazane poslove?

Samo za male, nebitne zadatke na serveru koji je uvijek pokrenut. Ako se server restartuje, skalira na nulu ili radi u nekoliko kopija, tajmeri se gube ili se izvršavaju više puta. Zakazani rad čuvajte u bazi ili koristite planer.

Da li Mythex podržava cron poslove?

Mythexova dokumentacija ne opisuje zakazane ili cron poslove, a objavljene aplikacije spavaju kad su neaktivne. Pouzdan pristup je vanjski planer koji poziva zaštićenu krajnju tačku u vašoj aplikaciji, što budi aplikaciju i pokreće posao.

Mythex · Pricing · Izradite bilo šta uz AI · Šabloni za web stranice i aplikacije · Mythex u poređenju · Rječnik izrade aplikacija uz AI · Besplatni alati za izradu aplikacija uz AI · English

English አማርኛ العربية Български বাংলা 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 简体中文 繁體中文(香港) 繁體中文(台灣)