Vodiči

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

Da biste pokrenuli pozadinske poslove u web aplikaciji, prvo podelite posao na dve vrste. Okidani poslovi (slanje dobrodošlog imejla, obrada otpremljenog fajla) mogu se sačuvati u red poslova, često kao tabela u vašoj bazi, a obrađuje ih radnik sa ponovnim pokušajima. Zakazani poslovi (noćni izveštaj, podsetnici na svakih 15 minuta) treba nešto što se pokreće po rasporedu: funkcija cron-a na hostu ili spoljni planer koji poziva zaštićenu krajnju tačku u vašoj aplikaciji. Uvek neka poslovi budu bezbedni za dvostruko pokretanje, beležite greške i nikada ne oslanjajte se na tajmer unutar servera koji može da spava ili se ponovo pokrene.

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

Šta se računa kao pozadinski posao

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

  • Slanje imejlova, obaveštenja i računa
  • Promena veličine slika, transkodiranje videa, pravljenje PDF-ova
  • Pozivi sporih API-ja trećih strana, uključujući AI modele za duge zadatke
  • Uvoz ili sinhronizacija podataka iz drugog sistema
  • Noćno čišćenje, izveštaji i podsetnici

Kada se ovo radi unutar zahteva, stranice postaju spore i krhke: ako je provajder imejla pao, registracija korisnika ne uspeva. Prebacivanje u pozadinu znači da korisnik dobija trenutni odgovor, a posao se može ponovo pokrenuti.

Opcije

OpcijaKako radiPrednostiMane
Pokreni i zaboravi u istom procesuOdgovori, pa nastavi rad na serveruNema podešavanjaGubi se ako se server zaustavi; nema ponovnih pokušaja
Tajmer u procesu (setInterval, setTimeout)Tajmer u pokrenutom serveruTrivijalnoNe radi dok spava; duplira se sa više kopija
Red poslova u baziPoslovi se čuvaju kao redovi; radnik ih preuzme i izvršiKoristi bazu koju već imate; trajno; lako za pregledSami pravite ponovne pokušaje i zaključavanje; treba nešto što pokreće radnika
Namenski red (zasnovan na Redis-u ili upravljan)Servis reda plus radniciZreli ponovni pokušaji i zakazivanjeJoš jedan servis za pokretanje i plaćanje
Hostovani servis za poslove ili tokoveTreća strana poziva vaše krajnje tačke sa ponovnim pokušajima i rasporedimaZakazivanje i ponovni pokušaji se rade za vasZavisnost od dobavljača; još jedan nalog i ključ
Spoljni planer koji poziva krajnju tačkuTajmer negde drugde šalje HTTP zahtev po rasporeduRadi na bilo kom hostu, uključujući one koji se skaliraju na nuluMinimalni intervali i kašnjenja; zaštitite krajnju tačku
Ugrađeni cron hostaPlatforma pokreće komandu po rasporeduJednostavno tamo gde postojiNe nudi svaki host

Ne postoji jedan pravi odgovor. Mala aplikacija često treba samo red u bazi i spoljni planer.

Zašto hostovi koji se skaliraju na nulu menjaju sliku

Mnogi savremeni hostovi uspavaju vašu aplikaciju kada je niko ne koristi i bude je pri sledećem zahtevu. To štedi novac, ali uspavani server ne izvršava kod: tajmeri se ne aktiviraju i radnici ne proveravaju red. Na tim hostovima zakazani rad mora da počne dolaznim zahtevom, a najlakši izvor tog zahteva je spoljni planer. Svaki poziv budi aplikaciju (i često njenu bazu), pa pozivanje svakog minuta košta više nego na svakih 15 minuta. Izaberite najređi raspored koji zadovoljava potrebu.

Obrazac 1: red poslova u bazi

Za okidane poslove:

  1. Napravite tabelu jobs: tip, payload (JSON), status (pending, running, done, failed), attempts, run_after, last_error, vremenske oznake.
  2. Kada se nešto desi, ubacite red posla u istoj transakciji kao promena koja ga je izazvala, pa uspeju ili propadnu zajedno.
  3. Radnik preuzima poslove koji su na redu, označava ih kao running, izvršava ih i označava kao done.
  4. Pri neuspehu, povećajte attempts, postavite run_after kasnije (na primer 1, 5, pa 30 minuta) i sačuvajte grešku. Posle maksimuma, označite kao failed i obavestite nekoga.

Ako više radnika može da radi istovremeno, poslovi moraju bezbedno da se preuzmu. Na Postgres-u, SELECT ... FOR UPDATE SKIP LOCKED omogućava da svaki radnik preuzme različite redove bez sukoba.

Šta pokreće radnika? Na serveru koji je uvek uključen, petlja u posebnom procesu. Na hostu koji se skalira na nulu, zakazana krajnja tačka iz obrasca 2 može obraditi seriju poslova na svakom pozivu.

Obrazac 2: spoljni 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: zahtevajte tajni token u zaglavlju, sačuvan kao tajna na obe strane, i odbijte sve ostalo.
  3. Neka bude idempotentna: pokretanje dva puta u istom minutu ne sme poslati dva podsetnika. Zabeležite šta je poslato.
  4. Neka svaki poziv bude kratak: obradite seriju (recimo 100 stavki), a sledeći poziv neka preuzme ostatak.
  5. Usmerite planer na nju.

Izbor planera:

  • Zakazani GitHub Actions workflow-i. Besplatni u okviru GitHub-ovih ograničenja korišćenja. Od septembra 2026, GitHub dokumentacija kaže da je najkraći interval jednom na 5 minuta, pokretanja mogu kasniti u vreme velikog opterećenja (posebno na početku svakog sata), rasporedi koriste UTC podrazumevano, a zakazani workflow-i u javnom repozitorijumu se isključuju posle 60 dana bez aktivnosti u repozitorijumu.
  • Hostovane cron usluge. Postoje mnoge usluge čiji je jedini posao da pozivaju URL po rasporedu. Proverite pouzdanost, minimalni interval i upozorenja pre nego što se oslonite na nju.
  • Planer vašeg cloud provajdera. Ako već koristite veliki cloud provajder, imaće upravljani planer koji može da poziva HTTPS krajnju tačku.
  • Hostovani servis za poslove ili tokove. Oni kombinuju zakazivanje, redove i ponovne pokušaje i pozivaju vaše krajnje tačke za svaki korak. Uporedite cene i ograničenja na sajtu svakog dobavljača.

Obrazac 3: neka to uradi provajder

Nekad je najbolji pozadinski posao — nijedan:

  • Plaćanja. Stripe ponavlja neuspele uplate pretplate i šalje webhook-ove; vi reagujete umesto da proveravate. Pogledajte šta je webhook.
  • Imejl. Provajderi stavljaju isporuku u red i ponavljaju je kada im predate poruku.
  • Grupni AI rad. OpenAI i Anthropic nude batch API-je za nehitne zahteve koje šaljete i preuzimate kasnije.

Upiti za vašeg AI graditelja

Za red:

Dodaj red za pozadinske poslove koristeći tabelu jobs u našoj bazi (tip, payload JSON, status, attempts, run_after, last_error). Kada se korisnik registruje, ubaci posao send_welcome_email u istoj transakciji umesto da šalješ inline. Dodaj funkciju processJobs(limit) koja preuzima poslove na redu pomoću SELECT ... FOR UPDATE SKIP LOCKED, izvršava ih i ponavlja neuspehe posle 1, 5 i 30 minuta, a označava ih kao failed posle 4 pokušaja.

Za zakazani okidač:

Dodaj POST /api/cron/tick zaštićen bearer tokenom iz tajne CRON_SECRET; odbij svaki zahtev bez njega. Svaki poziv pokreće processJobs(100) i šalje podsetnike za rezervacije koji su na redu u narednih 24 sata, a još nisu poslati, uz beleženje poslatih podsetnika da se ništa ne pošalje dvaput. Vrati JSON rezime onoga što je pokrenuto. Zatim napiši GitHub Actions workflow koji poziva ovu krajnju tačku na svakih 15 minuta, čitajući URL i token iz tajni repozitorijuma.

Uobičajene greške

  • Oslanjanje na setInterval. Tiho prestaje kada se server uspava ili ponovo pokrene, a duplira se kada rade dve kopije.
  • Nezaštićena cron krajnja tačka. Svako ko je pronađe može da pokrene vaše poslove ili vaš račun za imejl.
  • Poslovi koji nisu idempotentni. Ponovni pokušaji i dupli pozivi planera će se dešavati. Projektujte za to.
  • Nema vidljivosti grešaka. Posao koji tiho ne uspeva nedelju dana gori od onog koji glasno pada. Beležite greške i upozoravajte pri ponovljenim neuspesima.
  • Dugi rad u jednom zahtevu. Zahtevi ističu. Obrađujte u serijama.
  • Previše često zakazivanje. Svaki poziv na hostu koji se skalira na nulu budi i naplaćuje aplikaciju. Uskladite interval sa stvarnom potrebom.
  • Vremenske zone. „9 ujutru“ znači različite stvari za vaš planer (često UTC) i za vaše korisnike. Čuvajte vremena u UTC i pretvarajte ih za svakog korisnika.
  • Tajne u fajlu workflow-a. Držite tokene u tajnom skladištu planera. Pogledajte kako čuvati API ključeve bezbednim.

Kontrolna lista

  • Spori rad je premešten van korisničkih zahteva
  • Poslovi su trajno sačuvani, ne samo u memoriji
  • Ponovni pokušaji sa rastućim pauzama i maksimumom
  • Svaki posao je bezbedan za dvostruko pokretanje
  • Zakazana krajnja tačka je zaštićena tajnim tokenom
  • Svako pokretanje obrađuje ograničenu seriju
  • Neuspeli poslovi su vidljivi, uz upozorenja
  • Interval rasporeda izabran uzimajući u obzir trošak hostinga
  • Vremena su sačuvana u UTC

Pozadinski poslovi u Mythex-u

Mythex dokumentacija ne opisuje zakazane ni cron poslove, a objavljene aplikacije i njihove baze spavaju kada su neaktivne i bude se pri sledećem zahtevu (pogledajte Ograničenja hostinga). Zato se ne oslanjajte na tajmere unutar aplikacije. Pristup koji radi je onaj iznad: zamolite agenta za tabelu poslova i krajnju tačku zaštićenu tokenom, pa usmerite spoljni planer na vaš objavljeni URL. Token čuvajte kao tajnu projekta i imajte na umu da svako buđenje troši kredite za vreme dok su aplikacija i baza budne, pa izaberite razuman interval. Ako vašoj aplikaciji za ovo treba API pozadina, recept za REST API pozadinu je polazna tačka, a kako napraviti REST API objašnjava dizajn krajnjih tačaka. Ako su pozadinski radnici ili botovi suština vašeg proizvoda, host napravljen za trajne procese može bolje da odgovara.

Pitanja

Šta je pozadinski posao?

Pozadinski posao je posao koji vaša aplikacija radi van zahteva na koji korisnik čeka, na primer slanje imejlova, promena veličine slika, pravljenje izveštaja ili sinhronizacija podataka. Korisnik dobija brz odgovor, a posao se izvršava odvojeno i može se ponoviti ako ne uspe.

Kako da pokrenem zakazani zadatak ako moj host nema cron?

Dodajte zaštićenu krajnju tačku koja obavlja posao, pa neka je spoljni planer poziva po rasporedu. Opcije uključuju zakazani GitHub Actions workflow, uslugu cron-a u oblaku ili planer vašeg cloud provajdera. Zaštitite krajnju tačku tajnim tokenom.

Mogu li da koristim setInterval ili setTimeout za zakazane poslove?

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

Da li Mythex podržava cron poslove?

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

Mythex · Pricing · Pravite bilo šta uz AI · Šabloni za sajtove i aplikacije · Mythex u poređenju · Rečnik pojmova za pravljenje aplikacija uz AI · Besplatni alati za pravljenje aplikacija uz AI · 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 Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)