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

Najbolja metoda za prijenos podataka preko mreze

[es] :: Art of Programming :: Najbolja metoda za prijenos podataka preko mreze

[ Pregleda: 2803 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Sapphire
Denis Biondić
.NET software developer
Nürnberg, Germany

Član broj: 213086
Poruke: 290
212.39.113.*



+6 Profil

icon Najbolja metoda za prijenos podataka preko mreze07.04.2009. u 02:04 - pre 182 meseci
Iskreno, znam da se dosta toga moze pronaci na Netu u vezi ovoga, ali prvenstveno me zanima "forumsko" misljenje ljudi koji su se bavili time, te programera koji mogu reci ponesto korisno.
Evo problema / pitanja:

Direktno me zanima isplativost neke metode prijenosa podataka medju aplikacijama preko mreze. Pod pojmom isplativost, mislim na brzinu prijenosa, response time, procesorsko opterecenje posluzitelja (opterecenje u smislu potrebe za kompresiranjem podataka) etc.. To za ciljeve postavlja visoku konkurentnost rada, ali u obzir naravno dolaze metode s kojima se direktno i brzo dolazi do rezultata (primjer programiranje web servisa).
Sto se mene tice, radio sam sa .NET Socket klasama i direktnim mreznim programiranjem, sa visenitnim asinhronim serverom, i klijentima koji su se mogli konektovati na taj server, slati razlicite upite itd.. Za razmjenu podataka su isle diretne "data" klase spremljene u binarni oblik (kao neka klasa naziva Osoba, ili sta ja znam, Automobil npr), a definicije klase su bile importovane i u Serverskom i u Klijentskom projektu (znaci, definicije klasa u share-ovanom dll-u).
Dok je ovaj pristup osiguravao donekle cisto programiranje i drzanje nekih skromnih design pattern-a, sad me stvarno zanima sta bi bilo najoptimalnije i najelegantnije rjesenje za potrebe neke imaginarne aplikacije od max 200-300 usera, ili neke vece sa otprilike 10k usera istovremeno (opet imaginarno).
Eto da napomenem, nedavno sam radio i sa ASP.NET web servisima, koji su poglavito sluzili za primanje string SQL upita, i vracanje DataTabela.

Sad na tehnicki dio, kad sam spomenuo ovih 10k usera, razumijem da je tu prvenstveno potrebna velika optimizacija baze podataka, i to je ok.
Evo nekih metoda:
- serijalizacija klase u binarnu reprezentaciju
- serijalizacija klase u XML zapis, slanje preko mreze, vracanje nazad u klasu ili citanje iz XML zapisa

Da li je uopste ok, sa dizajnerske strane, praviti ciste data klase i u njih pakovati podatke? Postoji li optimalni pristup sa prednostima i brzine preko mreze, i cistim OO programiranjem koristenjem design pattern-a?

Bio bih jako zahvalan na misljenjima i komentarima svih vrsta ...


My programs don’t have bugs, they just develop random features.
 
Odgovor na temu

vlaiv
Vladimir Vlaisavljevic
Novi Sad

Član broj: 15993
Poruke: 352
212.200.249.*



+1 Profil

icon Re: Najbolja metoda za prijenos podataka preko mreze07.04.2009. u 10:00 - pre 182 meseci
Moj licni izbor bi bio pravljenja virtualnih metoda za zapis i citanje podataka za klasu u i iz memorije

ili josh bolje neku apstraktnu klasu transportera, stream-a ili nesto slicno.

Predefinishesh protokol komunikacije (neka standardna konstrukcija tipa request/response) i
sam odredish format data packet-a koji ce sluziti za transportovanje.

Jedino sto realno moze da doprinese u ovom slucaju jeste da vodish racuna da sam transport zbog
neke mane u dizajnu ne postane usko grlo.

Mnogo veca verovatnoca je da ce sam operativni sistem ili neka druga komponenta biti usko grlo u ovom slucaju.

Ako idesh na veliki broj konkurentnih konekcija vodi racuna o limitima samog operativnog sistema i preporucenom broju niti/otvorenih socket konekcija.

Preporucio bih ti da minimizujesh vreme zadrzavanja na socketu svakog klijenta i da ne drzis permanentne konekcije ka svima nego samo kada je zaista
potrebno nesto uraditi na serveru (neku sinhronizaciju obaviti).

Keshiraj podatke koje treba usluziti klijentima i koristi pametne mehanizme za interthread sinhronizaciju (naprimer MultipleReadExclusiveWrite Sync umesto
Critical Section-a tamo gde to ima smisla).

Koristi delayed obradu tamo gde je moguce. Znaci ako klijent postuje podatke u bazu neka njegov thread samo preuzme podatke i izvrsi prebacivanje podataka
u queue (zakaze ih za kasniju obradu) nekog thread-a nizeg prioriteta koji ce te podatke posle spustiti u bazu, a sam thread klijenta zavrsava komunikaciju,
raskida vezu i vraca se u thread pool, spreman da zaprimi novi zahtev.

Ukoliko postoji potreba da server kontaktira klijente (ako koristis sistem bez permanentne konekcije), preporucujem da korsitish udp umesto tcp i sam implementirash
neki sistem verifikacije isporucenosti paketa, ispravan ordering paketa i te neke stvari koje ti mogu zatrebati.

U slucaju UDP-a, mozes i napraviti samo jedan thread koji ce pristigle pakete da razvrstava po tome odakle su stigli i samo dalje da ih transportuje u odgovarajuce
queue-ove za obradu. Downside ovog pristupa jeste u tome da sam morash raditi segmentaciju podataka za prenosu u logicke paketice male velicine.

Nadam se da ce ti ovo moje vidjenje pomoci u odluci vezano za implementaciju.






 
Odgovor na temu

alex
Aleksandar Radulovic
Senior Software Engineer, Spotify
Stockholm, Sweden

Član broj: 71
Poruke: 2194
*.siminn.is.

Jabber: alex@a13x.info
ICQ: -1
Sajt: www.a13x.info


+1 Profil

icon Re: Najbolja metoda za prijenos podataka preko mreze07.04.2009. u 10:14 - pre 182 meseci
Preporucio bih koriscenje DTO (Data Transfer Object) objekata za prenos podataka izmedju procesa (server/klijent) jer uz pomoc njih mozes optimizovati i preneti samo potrebne podatke i time smanjiti broj poziva izmedju servera i klijenta. Nikako ne bi trebalo za prenos koristiti Domain Modele, jer se ne samo pri prenosu gubi tzv. behavior domain modela vec se klijentu moze poslati znatno vise (ili znatno manje) podataka o modelu (sto naravno nije optimizovano).

U dizajnu web servisa (trenutno je za ovakvu komunikaciju uobicajeno koristiti SOAP web servise) najbolje je dizajnirati WS metode i DTO objekte prema potrebama klijent aplikacije. SOAP WS stack ce te objekte transparetno za tvoje aplikacije preneti preko mreze u XML formatu (dok ce web servis taj XML dodatno kompresovati).

Za jedan Domain Model u tvojoj server aplikaciji moze postojati vise DTO objekata (shodno potrebama klijenta) koji prenose podatke.

Nadam se da sam ti odgovorio dovoljno uopsteno, s obzirom da je i pitanje bilo uopsteno..
Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x ||
linkedin.13x
 
Odgovor na temu

[es] :: Art of Programming :: Najbolja metoda za prijenos podataka preko mreze

[ Pregleda: 2803 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

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