|
Programiranje Java, Perl, VB, ASP, .NET, C, C++, Pascal, Delphi Sponzor: |
|
Alati teme | Način prikaza |
18. 05. 2012. | #1 |
Domagoj Horvat
Expert
|
.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
__________________
postoje ludosti bez kojih je nemoguce ljudsko dostojanstvo |
18. 05. 2012. | #2 |
Dejan Grujic
Professional
Datum učlanjenja: 29.09.2005
Poruke: 380
Hvala: 9
64 "Hvala" u 40 poruka
|
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 |
18. 05. 2012. | #3 |
Domagoj Horvat
Expert
|
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.
__________________
postoje ludosti bez kojih je nemoguce ljudsko dostojanstvo |
18. 05. 2012. | #4 |
Dejan Grujic
Professional
Datum učlanjenja: 29.09.2005
Poruke: 380
Hvala: 9
64 "Hvala" u 40 poruka
|
Č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?
|
18. 05. 2012. | #5 |
Ivan Dilber
Sir Write-a-Lot
|
@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.
__________________
Leadership is the art of getting people to want to do what you know must be done. |
18. 05. 2012. | #6 |
Domagoj Horvat
Expert
|
bas zato rekoh da 'lupam brojeve bezveze' (napisano u zagradi). dakle, to je ocekivanje, nikako unaprijed odredjena frekvencija. to ce biti korisnicke akcije koje ce zakazivati akcije. recimo, kao da imas narudzbe za gablece koje ljudi na radnom mjestu stavljaju. mogu cijelo prijepodne narucivati, ali mozes lako predvidjevi raspodjelu gableca u danu > svi ce biti grupirani npr. oko 13h. uz uvjet, naravno, da gableca ne fali i da svak u tocno vrijeme dobije svoj.
__________________
postoje ludosti bez kojih je nemoguce ljudsko dostojanstvo |
19. 05. 2012. | #7 | |
Domagoj Horvat
Expert
|
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).
__________________
postoje ludosti bez kojih je nemoguce ljudsko dostojanstvo |
|
19. 05. 2012. | #8 |
Domagoj Horvat
Expert
|
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
__________________
postoje ludosti bez kojih je nemoguce ljudsko dostojanstvo |
19. 05. 2012. | #9 |
Dejan Grujic
Professional
Datum učlanjenja: 29.09.2005
Poruke: 380
Hvala: 9
64 "Hvala" u 40 poruka
|
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.
|
"Hvala" Gruja za poruku: |
19. 05. 2012. | #10 | |
Domagoj Horvat
Expert
|
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.
__________________
postoje ludosti bez kojih je nemoguce ljudsko dostojanstvo |
|
|
|