Avatar billede nutten Nybegynder
25. august 2008 - 13:52 Der er 5 kommentarer og
1 løsning

Arkitekturmodel for et klient-server system

Hej

Jeg sidder med en problemstilling omkring et klient-server system.

Udgangspunktet er et klientprogram, der kontakter en server på www og henter data fra en database. Databasen indeholder pt lige over 1.5 mill records fordelt på flere tabeller osv. Det er ikke et db-design, jeg ønsker :o)

Jeg er raget lidt uklar med designet for systemet, da jeg ikke har kompetencer til at udelukke den ene løsning fra den anden.

Hvad er normal praksis ( hvis nogen )? Er en webservice "god" nok på serversiden, skal jeg benytte EJB, er Socket forbindelse løsningen eller hvad? Jeg er selvfølgelig interesseret i et stabilt system, men er der teknologier der går på kompromis med performance for at opnå det?

Der skal være noget sikkerhed på overførslen af data og tilsvarende, når klienten ønsker at gemme ændringer på serveren - dog ikke ændring af data, disse er statiske. Dvs den største belastning på båndbredde vil være download.

På et senere tidspunkt vil caching af data gøres muligt på klient siden, lige nu er min idé at bygge de dataobjekter klienten har brug for. ( Med mindre det er soleklart, at det skal være muligt med det samme qua perormance ).

På forhånd tak

/Nutten
Avatar billede arne_v Ekspert
25. august 2008 - 15:17 #1
Foerste spoergsmaal er om det er store ustrukturede klumper data (BLOB's f.eks.
billeder) eller mindre strukturede klumper data.

Hvis det er BLOB's, saa boer du for en intranet loesning gaa efter socket - det vil
give bedst performance. Sockets passer ikke saa godt ind i en Java EE loesning, men du
kan lave en inbound JCA adapter. Hvis det er en internet loesning boer du gaa efter
en simpel HTTP loesning. Den performer naesten lige saa godt som socket og kan gaa
igennem firewalls. I Java EE vil det vaere en servlet som skal udfoere det. P.g.a. at
overheaden ved HTTP er saa lille, saa vil du i en kombineret intranet og internet loesning
sagtens kunne noejes med HTTP.

Hvis det er rigtige objekter med masser af felter, saa vil du ved en internet eller
en intranet loesning med ikke-Java klienter vaelge SOAP/HTTP. Mens du ved en intranet
loesning med Java-only klienter vil vaelge EJB. I et kombineret intranet og
internet loesning vil du nok vaelge at implementere begge loesninger, da SOAP/HTTP har
et stort overhead sammenlignet med et EJB kald.
Avatar billede nutten Nybegynder
25. august 2008 - 15:41 #2
Data i sig selv er blot tekst, så min plan var at skabe nogle strukturerede dataobjekter indeholdende disse data. Jeg har givet det en del tanker om, hvorvidt systemet ville performe ok, hvis der skal hentes mange records på en gang selvom det dybest set kun er måske 9-10 kolonner fra en tabel.

Løsningen vil lige nu være 100% internet og java-only klient, da klienten vil bevæge sig rundt i landet.
Avatar billede arne_v Ekspert
25. august 2008 - 16:08 #3
Hvis stort set bare en klump text, saa plain HTTP via en servlet, ellers hvis
forskellige data med relations saa SOAP/HTTP.

Database performance kan naturligvis vaere en flaskehals, men jeg tvivler. Readonly
data kan caches rimeligt godt i selve databasen, og hvis det er mobile neheder, saa
er baandbredde vel begraenset.

Men du skal naturligvis kigge lidt paa stoerrelsen af data der skal hentes og antal
samtidige klienter naar DB HW skal dimensioneres.

Men selv beskedent HW kan nu klare en del med den form for load.

Indtil det er bevist at det ikke fungerer saa ville jeg ogsaa lade databasen selv
cache fremfor at cache i app serveren - specielt hvis DB og app er paa samme
fysiske box.

Simpelt. Og saa tilfoej cache i app hvis noedvendigt. Sandsynligvis indeholder
dit persisterings framework allerede cache muligheder.
Avatar billede nutten Nybegynder
26. august 2008 - 09:37 #4
Korrekt, mit framework understøtter cache muligheder - vil dog undlade at bruge det hvis det ikke giver problemer at køre setup'et uden.

Jeg foretrækker at lave relationen på serveren og returnerer det færdige objekt. Jeg må lave nogle målinger på størrelsen og tiden det tager at hente. Det burde ikke være et problem at sikre transporten med SSL eller lign?

Men tak for forklaringen og forslagene :o)

Læg gerne et svar
Avatar billede arne_v Ekspert
26. august 2008 - 15:02 #5
HTTPS fremfor HTTP er jo nemt. Du skal naturligvis huske at blokere for HTTP i web.xml
saaledes at der ikke er nogen som glemmer S'et.

Du kan saagar bruge client certificates for at hoejne sikkerheden hvis du vil.

Og et svar.
Avatar billede nutten Nybegynder
26. august 2008 - 15:27 #6
Takker for din uddybende forklaring og de gode råd :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester