Avatar billede dsj Nybegynder
30. december 2003 - 22:06 Der er 17 kommentarer og
2 løsninger

Design-knude i clustret server-system

Jeg har en clustret server kørende, der dækker over et antal slaver og én master. De egentlige klienter er fordelt mellem slave-serverne. Hver klient har et tilknyttet objekt med en lang række data, der er persisteret i en database. Når klienten logger på en slave eller hvis klientens data skal bruges i en anden sammenhæng, indlæses og caches pt. data-objektet på en slave og hvilken slave der har hvilke klienters data-objekter cached, registreres på master-serveren. Logger en klient af en slave-server, forbliver data-objektet chached et stykke tid efter.

Andre del-komponenter i det samlede system, andre end de egentlige klienter, kan tilgå og manipulere med klienternes data-objekter. Disse manipulationer sendes altid til master-serveren, som sender forespørgslerne videre til den slave der har det ønskede data-objekt liggende; har ingen slave det ønskede objekt, vælges en tilfældig slave, som så indlæser det fra databasen.

Mit problem er håndteringen af klienternes data-objekter, som kan være spredt over forskellige slaver, men kan tilgås via master-serveren eller slaven selv. Hvis nu en manipulations-forespørgsel modtages på masteren og data-objektet ikke findes på nogen slaver, beordres en slave til at indlæse objektet, men hvis en masteren modtager endnu en forespørgsel hurtigt efter, vil slaven forsøge at indlæse objektet igen. Læsninger fra databasen foregår asynkront, idet en database-pool med egne tråde kører alle statements og returnerer resultatet. Flere situationer kan resulterer i at data-objekter indlæses fra databasen to gange, hvilket ikke må ske.

Der gives point for ideer der kan hjælpe til at forenkle håndteringen af data-objekterne i clusteret. Håber det jeg har skrevet er til at forstå.
Avatar billede arne_v Ekspert
30. december 2003 - 22:15 #1
Du har brug for en DLM (Distrubuted Lock Manager).

Jeg tror at du kunne få meget nytte af:
  http://www.jgroups.org/javagroupsnew/docs/index.html

Ikke bare har de en DLM men de har også men masse andre goodies til at
distrbuere data mellem cluster members.
Avatar billede dsj Nybegynder
30. december 2003 - 23:09 #2
Det ser helt interessant ud...

Med DLM, tænker du så på deres DistributedHashtable ?
Avatar billede arne_v Ekspert
30. december 2003 - 23:15 #3
Nej jeg tænker på klasserne:
  LockManager
  DistributedLockManager

Jeg har faktisk aldrig brugt den, men jeg kender DLM fra andre sammenhænge.

Princippet i en DLM er den samme som du kender fra multithreaded
app, hvor du kan synchronize på et objekt for at forhindre uhensigtsmæssige
samtidigheds problemer. Her synkroniserer du bare ikke mellem tråde
i samme JVM men mellem forskellige JVM's på forskellige maskiner.

Jeg har som sagt aldrig brugt denne DLM. Men det må vel være til at finde
ud af at bruge.
Avatar billede jpjens Nybegynder
05. januar 2004 - 23:04 #4
Hvad med at låse data når en 'slave' læser det ind. SELECT ... FOR UPDATE..
Er data låst ved du at det er ved at blive læst ind. Er data ikke låst er det enten tilgængeligt på en slave - eller skal læses ind af en?

Det kan gøres let eller svært - lidt afhængig af din platform og hvilken transaktionsstyring den stiller til rådighed..
Avatar billede dsj Nybegynder
05. januar 2004 - 23:13 #5
Hvad mener du med "platform"?

Jeg kører mod MySQL, så der er ikke adgang til transaktionsstyring gerigennem; jeg er dog ikke klar over om den låser tabellerne ved læsning, eller om den er smart nok til at lade være. Det er egentlig en pointe jeg ikke lige har været opmærksom ellers...

Hvis serverne indbyrdes skal arbejde med transaktioner, så kan de det ikke pt., men der lyder JGroups til at kunne gøre det.
Avatar billede jpjens Nybegynder
05. januar 2004 - 23:46 #6
Jeg arbejder normalt i J2EE-verdenen hvor platformen (applikationsserveren) stiller en række services til rådighed. Et eksempel på en central service er transaktionsstyring en anden er styring af 'isolation-levels'.

Uden en applikationsserver (eller noget andet der stiller de ting til rådighed) kommer du til selv at implementere det.

God fornøjelse med JGroups.
Avatar billede jpjens Nybegynder
05. januar 2004 - 23:47 #7
platformen: applikationsserveren, databasen, kø-managers, web-containers etc...
Avatar billede arne_v Ekspert
05. januar 2004 - 23:56 #8
JGroup bruges faktisk af en af de 3 store J2EE app-servere til clustering.

Jeg har *meget* svært ved at se transaktionsstyring og isolation levels som
2 distinkte services.
Avatar billede dsj Nybegynder
05. januar 2004 - 23:59 #9
"en af de 3 store" = JBoss ?
Avatar billede arne_v Ekspert
06. januar 2004 - 00:01 #10
jep
Avatar billede arne_v Ekspert
06. januar 2004 - 00:02 #11
WAS, WL og JBoss er de store idag.

BES, JRun, Pramati og hvad SUN nu kalder deres i denne uge
er lang bagefter med hensyn til udbredelse.
Avatar billede dsj Nybegynder
18. april 2004 - 21:27 #12
Arne, mon ikke det er på tide at smide et svar? JGroups blev løsningen...
Avatar billede arne_v Ekspert
18. april 2004 - 21:28 #13
svar
Avatar billede dsj Nybegynder
05. maj 2004 - 23:55 #14
Så er spørgsmålet så: Skal folk have point ENDNU en gang, eller HAR folk fået tilregnet pointen for dette før lukkede spørgsmål?

Der må læggges svar.
Avatar billede arne_v Ekspert
06. maj 2004 - 07:12 #15
svar
Avatar billede arne_v Ekspert
06. maj 2004 - 07:12 #16
Nej pointene tildelt i den period er tabt.

Jeg mistede over 15000.
Avatar billede arne_v Ekspert
06. maj 2004 - 07:37 #17
(de har mistet over en måneds ændringer til databasen)
Avatar billede dsj Nybegynder
06. maj 2004 - 08:51 #18
Ja hva kan man sige "Backup hver nat" :)
Avatar billede arne_v Ekspert
06. maj 2004 - 08:54 #19
Der er lidt flere detaljer i denne her tråd:
  http://www.eksperten.dk/spm/495078
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