.NET > najpouzdaniji nacin za scheduled tasks
Imam dilemu...
Za stvari koje radim svaku minutu redovno > slozio sam windows service i to sljaka like a charm. Medjutim, sad imam stvari koje ce se morati odigrati u tocno odredjeno vrijeme. Ovako receno, zvuci kao klasican kandidat za dodati u windows scheduler medjutim ima catch: kroz dan cu imati periode kad satima nece bit nicega, a imat cu i valove kad je moguce da bude nekoliko taskova u sekundi. presudna stvar je da je sustav as pouzdan as possible. citajuci po netu, vidim da ljudi za frekventnije stvari imaju puno vise povjerenja u windows services i tu se sad lomim oko odluke jer: - windows service mi stvarno radi po onom set&forget - opisano je klasican kandidat za scheduler - nemam nikakvo iskustvo sa schedulerom i njegovom pouzdanoscu pa eto, ako tko ima real life experience, bit cu vrlo zahvalan tnx |
Zadnji put sam scheduling u .Net-u radio još 2004, i uzeo sam neku gotovu biblioteku. Aplikacija je radila kao windows servis, i ta biblioteka je dobro određivala vremena pokretanja taskova. Međutim dešavalo se da aplikacija padne iz nekog razloga, i ta biblioteka se nije brinula da pokrene taskove koji su trebali da se vrte u to vreme. Pošto je taj kod sigurno outdated, nema smisla ni da kopam koja je to bila biblioteka. Ali zato evo jedan dobar tekst na tu temu, a u komentarima može još što šta pametno da se vidi:
http://ayende.com/blog/155489/rotten...-roll-your-own |
tnx
iako mi tu zapravo ne odgovaraju na jedno pitanje: postoji li pregust raspored za windows scheduler? kako se on ponasa u situaciji kad ima npr 50 taskova za odradit u 2 sekunde? (lupam bezveze brojeve) za servis znam da ce odradit kako treba jer mi vec radi odlicno druge stvari medjutim posto je, kako rekoh, kandidat za scheduler rado bih iskoristio infrastrukturu OSa, ako je moguce jer sumnjam da cu napisat nesto pametnije od njih. A tek ako nije, onda cu se krpit drugacije. |
Čekaj, sad kad čitam tvoj prvi post - kažeš imaćeš periode kad satima neće biti ničega, a onda posle nekoliko taskova u sekundi. Kako se tu uklapa scheduler, kad ima unapred određenu frekvenciju okidanja i to je to?
|
@domagoj Svaki scheduler koji treba da u burstu aktivira 50 procesa u sekundi ti nije 100% pouzdan, i cron na linuxu zna da se skuca ako OS ima posla u tom trenutku. Hocu reci, nije to trivijalan zahtev, ako mora da bude bas precizno u bas toj sekundi.
|
Citat:
|
Citat:
kako rekoh, imam servis koji isto ima lijepu frekvenciju taskova kad napadnu, ali kod njega nije krucijalno vrijeme pa onda ne igra ulogu. PS. ovo sa 50 u sekundi je proizvoljno...mozda nece biti bas toliko, mozda bude deset (iako, mozda nekad zakuca 80). poanta je bila - pod opterecenjem (sto god mu opterecenje znacilo). |
Cini mi se da ce sve ici u smjeru da odredimo uvjet da korisnik mora narucit svoj gablec barem minutu prije dostave (inace ce se smatrati da zeli promptnu dostavu sto ce onda raditi druga funkcija). Nakon toga, windows service moze mirno:
- pokupiti listu novih narudzbi iz baze svakih npr 30 sekundi i dodati u job queue - timer.tick sa tick periodom od sekunde odradjivati taskove - svaka obrada narudzbe ide u svom threadu ovo mi zvuci kao najcisca i najsigurnija implementacija |
Ovaj tvoj opis mi sugeriše da ti nije bitna periodičnost, već neki mehanizam koji pomaže da se ne zaguši ceo sistem kad je veći load. A da razmisliš o MSMQ? On dosta olakšava asinhrono izvršavanje taskova. Kad stigne zahtev on se stavi u queue, a drugi thread čita iz tog queue-a i izvršava kad stigne. AKo se koriste transakcije i uključi da su poruke recoverable MSMQ odlično podnosi padove sistema ili kad proces/thread koji obrađuje zahteve ne radi iz nekog razloga.
|
Citat:
ono sto mi jest bitno je da se sustav ne zagusi i da akcije budu izvrsene s najvecom mogucom tocnoscu. ne znam nista o MSMQ, sad cu proguglat to. hvala ti. |
Vreme je GMT +2. Trenutno vreme je 21:43. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.