Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Par pitanja u vezi izrade serverskog dijela aplikacije

[es] :: Java :: Par pitanja u vezi izrade serverskog dijela aplikacije

[ Pregleda: 1882 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Araneo
Freelancer
Podgorica

Član broj: 273077
Poruke: 1
*.crnagora.net.



Profil

icon Par pitanja u vezi izrade serverskog dijela aplikacije16.11.2010. u 18:23 - pre 162 meseci
Treba da programiram serverski dio sistema koji funkcionise na sljedeci nacin (izmisljen scenario, zao mi je sto ne mogu da opisem stvaran rad sistema ali jos uvijek nemam to pravo. Sistem koji sam ovdje opisao radi slicno mom sistemu):
klijenti su aplikacije na razlicitim racunarima koje se preko odredjenog porta kace na server (aplikacija koju ja radim). Klijent salje poruku sa sadrzajem, npr: "Sifra 238" i server treba da parsira poruku, uporedi vrijednost sifre sa nekim sadrzajima iz baze i vrati poruku klijentu. Mene brine to sto bi u odredjenom vremenu rada ovog sistema server mogao da prima i po par hiljada poruka u minuti. Ja sam rjesenje zamislio na sljedeci nacin:

1. Jedan thread koji 'slusa' na portu za primanje poruka, kad poruka stigne stavlja se u red
2. Drugi thread koji provjerava red svakih x milisekundi za neobradjene poruke, ako je stigla obradi je
3. U toku obrade program treba da posalje 2-3 upita bazi (maksimalno 10000 recorda u bazi)
4. Kad se obradi poruka pise se druga poruka koja se stavlja u red za slanje klijentu
5. Treci thread koji provjerava red za slanje svakih x milisekundi i salje poruku

Primljene poruke i poruke za slanje stavljam u red jer se moze desiti da stigne mnogo poruka za kratko vrijeme, pa da ne dodje do zagusenja u toku obrade poruke. Moje pitanje je da li ovakav sistem uradjen u Javi sa MySQL bazom moze da izdrzi ove zahtjeve (dakle u najgorem slucaju par hiljada poruka u minuti) i koliko jaka konfiguracija mi treba za to? I naravno da li je moj nacin za rjesavanje ovog problema dobar? Hvala unaprijed
 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.dynamic.isp.telekom.rs.

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: Par pitanja u vezi izrade serverskog dijela aplikacije17.11.2010. u 10:30 - pre 162 meseci
Ja ne bi pravio server od 0 za takve stvari, vec bi koristio gotova resenja, naprimer posto radis sa redovima poruka JMS mu dodje kao prirodno resenje (npr ActiveMQ je jedna od implementacija JMS specifikacije)

Drugi problem koji vidim jeste da ti hoces sinhrono da citas da li ima nesto novo na redu, a to nije dobro jer ubija perfomanse, bolje koristiti wait() i notifyAll() za takve stvari.

Generalno za ovakav problem ja bi koristio Spring ili J2EE (Glassfish ili JBoss ).
 
Odgovor na temu

dejanet
Beograd

Član broj: 19240
Poruke: 1181



+835 Profil

icon Re: Par pitanja u vezi izrade serverskog dijela aplikacije17.11.2010. u 10:54 - pre 162 meseci
Ja sam imao slican projekat, gde sam jedan deo istabao u QUARTZ(java framework za job scheduling procese):
- isto je bila kombinacija java/mysql,
- citanje sa porta preko po zlu poznatog java socketa,
- u proseku je 100 redova u minuti,
- ubuntu, najjeftiniji moguci server(ali server)

..nadam se da sam nesto pomogao..
 
Odgovor na temu

IDE

Član broj: 53403
Poruke: 586
*.20.crnagora.net.



Profil

icon Re: Par pitanja u vezi izrade serverskog dijela aplikacije17.11.2010. u 13:45 - pre 162 meseci
Ja sam radio slican sistem u Javi, ali u kombinaciji sa Oracle-om.
Rijec je o visokotransakcionom sistemu ( preko njega prolazi veliki broj poruka dnevno) i da kucnem u drvo - sve radi super vec godinama.

Ako ne zelis poslusati savjet Dejana Lozanovica, onda predlazem sljedece:

Kreiraj ServerSocket koji ce osluskivati na nekom portu.
On ima metodu accept() pomocu koje prihvata zahtjeve za konekcijom i koja vraca Socket koji ce da preuzme iscitavanje samog zahtjeva.
Sta ces dalje raditi sa tekstom/objektom koji preko njega primis- to je vec tvoje.

Da bi ovakav sistem zaista radio brzo i bez stajanja u redu cekanja ( osim onog cekanja koje se mora desiti zbog same biznis logike tvoje aplikacije ), ovakav sistem moras implementirati da bude multithreading.

Dakle, svaku obradu podataka , koristeci Socket kreiran prilikom accept()-a , radi kroz poseban thread.

kreiranje iole slozenije multithreading aplikacije nije ni malo bezazlen posao, i bilo bi dobro da veoma dobro poznajes principe sinhronizacije, na koji nacin ju je najbolje implementirati, koji objekti iz standardne biblioteke su thread-safe, kako efikasno kreirati thread-safe objekat i slicno...

Sto se tice baze i konekcija na nju, MySQL ce, naravno, odraditi posao.
Predlazem da koristis InnoDB tabele a ne MyISAM jer se kod MyISAM prilikom DML operacija lokuje citava tabela, a ne samo zapis kao u InnoDB-u.

Takodje, mozda bi mogao razmisliti o connection pool-u, kada su u pitanju konekcije ka bazi.

A onda tu dolaze sljedeci problemi: ako se iz nekog razloga poruke ne unesu u bazu, sta sa njima? da li postoji prioritet unosa u bazu? Jer ako postoji, da li unositi naredne, ako prethodne nisu uspjele? Stogod uradio sa neuspjelima, kada i kako ih kasnije unijeti u bazu, i slicno...

E, ida... nikakvo gledanje stanja svakih x milisekundi. Svaki thread ce obavljati svoj dio posla, a ti samo vodis racuna o njihovoj sinhronizaciji. Dakle, nema potreba da ih neko svakih x sekundi osluskuje... Sve pocinje i zavrsava se prirodnim tokom.

Ako bas budes zelio da bude jedan thread, ili da "nesto" drugo kontrolise tok podataka u multithread sistemu, pa da sve bude da kazem "event driven" , uvijek se moze implementirati i npr. observer pattern. Cistije je nego osluskivanje svakih x milisekundi.

to je to ukratko, zemljak ;-)






there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

iMac
Kraljica Mamba
Software Developer
Beograd

Član broj: 271371
Poruke: 23
*.dynamic.sbb.rs.



+1 Profil

icon Re: Par pitanja u vezi izrade serverskog dijela aplikacije17.11.2010. u 22:43 - pre 162 meseci
AKo mozes da prepravljas klijenta koristi JMS. Ako ne mozes, ako su klijenti pod tudjom kontrolom a ti moras da ispostujes protokol da cekas poruke od njih, ja bih koristio Netty(http://jboss.org/netty). Savetujem ti da ne pametujes i pravis svoju implementaciju necega sto vec postoji i sto radi korektno.
 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.dynamic.isp.telekom.rs.

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: Par pitanja u vezi izrade serverskog dijela aplikacije18.11.2010. u 12:30 - pre 162 meseci
Citat:
iMac: AKo mozes da prepravljas klijenta koristi JMS. Ako ne mozes, ako su klijenti pod tudjom kontrolom a ti moras da ispostujes protokol da cekas poruke od njih, ja bih koristio Netty(http://jboss.org/netty). Savetujem ti da ne pametujes i pravis svoju implementaciju necega sto vec postoji i sto radi korektno.


I ja glasam za Netty ako je u pitanju cisti sirov TCP/IP ili UDP.
 
Odgovor na temu

[es] :: Java :: Par pitanja u vezi izrade serverskog dijela aplikacije

[ Pregleda: 1882 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.