/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Flere servere med RMI
Fra : norgaards


Dato : 20-06-01 00:54

Hej,
Jeg står og skal lave et skoleprojekt. Følgende har jeg ikke
været istand til at finde blot en smule information om ude
på internettet.

Er der nogen der måske kunne give mig et hint, eller som kender
et godt eksempel, på hvordan man får flere servere til at samarbejde
med RMI. Der findes mange eksempler på hvordan flere klienter og
én server arbejder sammen med RMI som middleware, og det
er ikke så svært. - Men at skulle få RMI til at fungere med flere
servere forvirrer mig. Normalt så genereres der stubs og
skeletons med en enkelt server app. Men hvad skal man gøre,
når der skal genereres stubs/skeletons, når der er 3 forskellige
servere? Bortset fra nogle få ting, så er de ens og kan det samme.
Work load skal deles mellem dem, requests omdirigeres til den
der har færrest brugere osv.

Der er blot tale om et almindeligt chat-program, men det skal
være baseret på mere end én server.

Der kan vel kun genereres stubs/skeletons på basis af én server
source fil? - Hvordan kommer jeg ud over dette problem. Det undrer
mig at jeg ikke har kunnet finde noget om flere servere på webbet, da der
tales så meget om skalerbarhed, performance, sikkerhed osv.

Jeg håber at en eller anden kender noget til disse ting, og har et hint,
eller nogle
kommentarer som kan lede mig i den rigtige retning.

Med venlig hilsen
John




 
 
Lars Mosegård (20-06-2001)
Kommentar
Fra : Lars Mosegård


Dato : 20-06-01 17:16


"norgaards" <norgaards@post.tele.dk> skrev i en meddelelse
news:9goom8$cuf$1@news.inet.tele.dk...

[snip]
En hel masse RMI snak...
[snip]

Bare en (ufærdig) ide:
Måske kan du lave din egen CustomRMIRegistry.
De forskellige servere skal så registrere sig hos denne registry.
Når så klienter laver en lookup efter en service, udvælger din registry den
"bedste" (afhænging af load balancing algoritme) server og returnerer dens
remote object.

Skel/stub classer skal ligge på de enkelte servere. Disse loades så dynamisk af
klienterne.

Håber du kan bruge det til noget

Lars



norgaards (23-06-2001)
Kommentar
Fra : norgaards


Dato : 23-06-01 21:52

Hej Lars,
Tak for tippet, men jeg er newbie indenfor distribuerede
systemer, så jeg vil ikke vove mig ud i at skrive eget
RMIRegistry. - Kan man for resten ikke, på en eller anden
måde, føje ekstra metoder til Suns Registry? Den kommer
jo som en exe fil, men jeg mener at jeg engang hørte om
en, som havde gjort det.

Mvh
John


> [snip]
> En hel masse RMI snak...
> [snip]
>
> Bare en (ufærdig) ide:
> Måske kan du lave din egen CustomRMIRegistry.
> De forskellige servere skal så registrere sig hos denne registry.
> Når så klienter laver en lookup efter en service, udvælger din registry
den
> "bedste" (afhænging af load balancing algoritme) server og returnerer dens
> remote object.
>
> Skel/stub classer skal ligge på de enkelte servere. Disse loades så
dynamisk af
> klienterne.
>
> Håber du kan bruge det til noget
>
> Lars
>
>



Mikkel Bundgaard (25-06-2001)
Kommentar
Fra : Mikkel Bundgaard


Dato : 25-06-01 23:25

norgaards <norgaards@post.tele.dk> wrote in message
news:9goom8$cuf$1@news.inet.tele.dk...
> Hej,
> Jeg står og skal lave et skoleprojekt. Følgende har jeg ikke
> været istand til at finde blot en smule information om ude
> på internettet.
>
> Er der nogen der måske kunne give mig et hint, eller som kender
> et godt eksempel, på hvordan man får flere servere til at samarbejde
> med RMI. Der findes mange eksempler på hvordan flere klienter og
> én server arbejder sammen med RMI som middleware, og det
> er ikke så svært. - Men at skulle få RMI til at fungere med flere
> servere forvirrer mig. Normalt så genereres der stubs og
> skeletons med en enkelt server app. Men hvad skal man gøre,
> når der skal genereres stubs/skeletons, når der er 3 forskellige
> servere? Bortset fra nogle få ting, så er de ens og kan det samme.
> Work load skal deles mellem dem, requests omdirigeres til den
> der har færrest brugere osv.
>
> Der er blot tale om et almindeligt chat-program, men det skal
> være baseret på mere end én server.
>
> Der kan vel kun genereres stubs/skeletons på basis af én server
> source fil? - Hvordan kommer jeg ud over dette problem. Det undrer
> mig at jeg ikke har kunnet finde noget om flere servere på webbet, da der
> tales så meget om skalerbarhed, performance, sikkerhed osv.
>
> Jeg håber at en eller anden kender noget til disse ting, og har et hint,
> eller nogle
> kommentarer som kan lede mig i den rigtige retning.
>
> Med venlig hilsen
> John
>
Hej John

Her er mine ideer til noget som du selv kan gå videre med.
Den ide, som jeg skitserer, er dog rimelig omfattende (ligesom
denne tekst er blevet) og nogle steder meget mangelfuldt, så du
er velkommen til at skære fra og ændre som du selv lyster .
Det er sikkert også meget, der kan forbedres/ændres, så det
skal barer ses som en indledende ide eller brainstorm.

Først nogle kort kommentarer og spørgsmål og derefter en mulig
(ikke gennemtænkt) måde at implementere dit chat-program på:

* Du kan sondre mellem dine server på deres ip (og evt. en id,
hvis der er flere servere på en ip). Da en brugerdelen af
programmet laver lookup (gennem Naming) til en bestemt ip er
det jo givet hvilken computer/server, hun får fat i.
* Skal brugere kunne snakke med alle andre eller kun med dem,
der er på samme server ?
* Skal brugerne blive på den samme server, eller kan de blive
"flyttet" til en anden, hvis den bliver for belastet ?

Jeg har nedenstående gået ud fra at alle brugere i systemet kan
snakke med alle andre. På alle servere "kører" serverdelen af
programmet og rmiregistry kører også.

Når en bruger logger på systemet, sker det ved at hun kontakter
en af serverne (er det egentlig ikke peers, da ingen af dem
bestemmer over de andre). Da alle server kender antallet af
brugere på de andre server (se længere nede under workload)
finder serveren den mindst belastede og returnere adressen på
den til brugeren, som der så derefter kun arbejder gennem denne.
Denne server skal så løbende opdatere sine tekstkøer (de
beskeder som brugere sætter ind i systemet) med de andre servere.
Derved får alle brugere alle beskeder (hvis man ønsker dette).
Når brugeren så er færdig med chatten og logger fra, skal
antallet af brugere tælles en ned.

workload
Du ønsker at workload skal deles og der er to måder (mindst),
hvorpå dette kan løses. Enten snakker serverne samme f.eks.
hvert minut, så alle ved hvem, der er mindst belastet. Eller også
udspørger den server, som man logger sig på, de andre om hvor
belastede de er.

metoder på serveren
Da alle servere principielt skal kunne "alt" er der her nogle af
de metoder som de alle skal indeholde:
* En metode, der på en eller anden måde returnere adressen
på den server, der er mindst belastet.
* En metode, der returnere antallet af brugere på serveren.
* Metoder, der hjælper med til at distribuere beskeder i systemet.
* Find selv på flere .

Jeg håber du kan bruge noget af alt denne rodede information.
Måske skulle du prøve at kigge på om der ikke var nogle
peer-to-peer implementeringer, der bruger rmi. Disse vil sikkert
kunne give dig noget inspiration

PS. Du kan evt. kigge på min hjemmeside under "SubSpace"
(findes til højre), hvor mit seneste projekt ligger. Dette projekt
er en peer-to-peer implementering af Suns JavaSpaces.
Dette projekt er ikke helt, hvad du ønsker, men du kan måske
få ideer fra designet/implementeringen.
--
Mvh.
Mikkel Bundgaard
RUC Datalogi
http://officehelp.gone.dk


norgaards (26-06-2001)
Kommentar
Fra : norgaards


Dato : 26-06-01 14:08

Hej Mikael,
Du skal have mange tak for de mange gode råd, og for linket. - Jeg har lige
et par spm. mere, som jeg håber jeg må stille dig.

.. - Hvis jeg f.eks. vil foretage et kald fra server1 på maskine/knude1 til
server2 på maskine/knude2, så har jeg forstået det sådan at jeg fra server1
kan lave en naming.lookup for at binde til server2's registry. Når dette er
sket kan jeg kalde, f.eks., sendMessage() metoden, så den også sendes til
brugere på server2.

Hvad jeg ikke ved (jeg har jo ikke prøvet det før) er om dette naming.lookup
fra server1 til server2 medfører at server1 herefter er fast knyttet til
server2 som klient? - Eller om der skal foretages naming.lookup for hver
efterfølgende besked - i så tilfælde er det vel ikke en god løsning (?).
Tager naming.lookup megen tid/degradere ydelsen osv?

Det kunne sikkert gøres smartere med andre løsninger end RMI, men nu har jeg
ligesom bidt mig fast på at finde en løsning med RMI, selvom det mest er
designet til en enkelt server og flere klienter.

Mine spørgsmål er altså:
- kan en remote server knyttes til en anden remote
server v.hj.af naming.lookup, så de forbliver
herefter forbliver bundet sammen i et client/server
forhold og
- er det nødvendigt/uhensigtsmæssigt at kalde
naming.lookup for hver besked der sendes
eller er én gang nok?

Mvh
John

"Mikkel Bundgaard" <mikkelbu@teliamail.dk> wrote in message
news:9h8dp7$jm5$1@sunsite.dk...
> norgaards <norgaards@post.tele.dk> wrote in message
> news:9goom8$cuf$1@news.inet.tele.dk...
> > Hej,
> > Jeg står og skal lave et skoleprojekt. Følgende har jeg ikke
> > været istand til at finde blot en smule information om ude
> > på internettet.
> >
> > Er der nogen der måske kunne give mig et hint, eller som kender
> > et godt eksempel, på hvordan man får flere servere til at samarbejde
> > med RMI. Der findes mange eksempler på hvordan flere klienter og
> > én server arbejder sammen med RMI som middleware, og det
> > er ikke så svært. - Men at skulle få RMI til at fungere med flere
> > servere forvirrer mig. Normalt så genereres der stubs og
> > skeletons med en enkelt server app. Men hvad skal man gøre,
> > når der skal genereres stubs/skeletons, når der er 3 forskellige
> > servere? Bortset fra nogle få ting, så er de ens og kan det samme.
> > Work load skal deles mellem dem, requests omdirigeres til den
> > der har færrest brugere osv.
> >
> > Der er blot tale om et almindeligt chat-program, men det skal
> > være baseret på mere end én server.
> >
> > Der kan vel kun genereres stubs/skeletons på basis af én server
> > source fil? - Hvordan kommer jeg ud over dette problem. Det undrer
> > mig at jeg ikke har kunnet finde noget om flere servere på webbet, da
der
> > tales så meget om skalerbarhed, performance, sikkerhed osv.
> >
> > Jeg håber at en eller anden kender noget til disse ting, og har et hint,
> > eller nogle
> > kommentarer som kan lede mig i den rigtige retning.
> >
> > Med venlig hilsen
> > John
> >
> Hej John
>
> Her er mine ideer til noget som du selv kan gå videre med.
> Den ide, som jeg skitserer, er dog rimelig omfattende (ligesom
> denne tekst er blevet) og nogle steder meget mangelfuldt, så du
> er velkommen til at skære fra og ændre som du selv lyster .
> Det er sikkert også meget, der kan forbedres/ændres, så det
> skal barer ses som en indledende ide eller brainstorm.
>
> Først nogle kort kommentarer og spørgsmål og derefter en mulig
> (ikke gennemtænkt) måde at implementere dit chat-program på:
>
> * Du kan sondre mellem dine server på deres ip (og evt. en id,
> hvis der er flere servere på en ip). Da en brugerdelen af
> programmet laver lookup (gennem Naming) til en bestemt ip er
> det jo givet hvilken computer/server, hun får fat i.
> * Skal brugere kunne snakke med alle andre eller kun med dem,
> der er på samme server ?
> * Skal brugerne blive på den samme server, eller kan de blive
> "flyttet" til en anden, hvis den bliver for belastet ?
>
> Jeg har nedenstående gået ud fra at alle brugere i systemet kan
> snakke med alle andre. På alle servere "kører" serverdelen af
> programmet og rmiregistry kører også.
>
> Når en bruger logger på systemet, sker det ved at hun kontakter
> en af serverne (er det egentlig ikke peers, da ingen af dem
> bestemmer over de andre). Da alle server kender antallet af
> brugere på de andre server (se længere nede under workload)
> finder serveren den mindst belastede og returnere adressen på
> den til brugeren, som der så derefter kun arbejder gennem denne.
> Denne server skal så løbende opdatere sine tekstkøer (de
> beskeder som brugere sætter ind i systemet) med de andre servere.
> Derved får alle brugere alle beskeder (hvis man ønsker dette).
> Når brugeren så er færdig med chatten og logger fra, skal
> antallet af brugere tælles en ned.
>
> workload
> Du ønsker at workload skal deles og der er to måder (mindst),
> hvorpå dette kan løses. Enten snakker serverne samme f.eks.
> hvert minut, så alle ved hvem, der er mindst belastet. Eller også
> udspørger den server, som man logger sig på, de andre om hvor
> belastede de er.
>
> metoder på serveren
> Da alle servere principielt skal kunne "alt" er der her nogle af
> de metoder som de alle skal indeholde:
> * En metode, der på en eller anden måde returnere adressen
> på den server, der er mindst belastet.
> * En metode, der returnere antallet af brugere på serveren.
> * Metoder, der hjælper med til at distribuere beskeder i systemet.
> * Find selv på flere .
>
> Jeg håber du kan bruge noget af alt denne rodede information.
> Måske skulle du prøve at kigge på om der ikke var nogle
> peer-to-peer implementeringer, der bruger rmi. Disse vil sikkert
> kunne give dig noget inspiration
>
> PS. Du kan evt. kigge på min hjemmeside under "SubSpace"
> (findes til højre), hvor mit seneste projekt ligger. Dette projekt
> er en peer-to-peer implementering af Suns JavaSpaces.
> Dette projekt er ikke helt, hvad du ønsker, men du kan måske
> få ideer fra designet/implementeringen.
> --
> Mvh.
> Mikkel Bundgaard
> RUC Datalogi
> http://officehelp.gone.dk
>



Mikkel Bundgaard (26-06-2001)
Kommentar
Fra : Mikkel Bundgaard


Dato : 26-06-01 17:07

norgaards <norgaards@post.tele.dk> wrote in message
news:9ha1fq$hl4$1@news.inet.tele.dk...
> Hej Mikael,
> Du skal have mange tak for de mange gode råd, og for linket. - Jeg har
lige
> et par spm. mere, som jeg håber jeg må stille dig.
>
> . - Hvis jeg f.eks. vil foretage et kald fra server1 på maskine/knude1 til
> server2 på maskine/knude2, så har jeg forstået det sådan at jeg fra
server1
> kan lave en naming.lookup for at binde til server2's registry. Når dette
er
> sket kan jeg kalde, f.eks., sendMessage() metoden, så den også sendes til
> brugere på server2.
>
> Hvad jeg ikke ved (jeg har jo ikke prøvet det før) er om dette
naming.lookup
> fra server1 til server2 medfører at server1 herefter er fast knyttet til
> server2 som klient? - Eller om der skal foretages naming.lookup for hver
> efterfølgende besked - i så tilfælde er det vel ikke en god løsning (?).
> Tager naming.lookup megen tid/degradere ydelsen osv?
>
> Det kunne sikkert gøres smartere med andre løsninger end RMI, men nu har
jeg
> ligesom bidt mig fast på at finde en løsning med RMI, selvom det mest er
> designet til en enkelt server og flere klienter.
>
> Mine spørgsmål er altså:
> - kan en remote server knyttes til en anden remote
> server v.hj.af naming.lookup, så de forbliver
> herefter forbliver bundet sammen i et client/server
> forhold og
> - er det nødvendigt/uhensigtsmæssigt at kalde
> naming.lookup for hver besked der sendes
> eller er én gang nok?
>
> Mvh
> John
>
<SNIP EN MASSSE>
Hej John
Som du sikkert ved står RMI for Remote Method Invocation.
Dvs. at RMI er en måde, hvorpå man kan udføre metoder på
objekter, der ikke nødvendigvis ligger i den samme JVM
(eller på den samme computer).

Naming er en klasse, der gør det let at associere et navn
(i form af en string) til et givent objekt. Når du binder en instans
af din server-klasse til et navn, kan de ændre servere tilgå dette
objekt gennem navnet og den ip den ligger på. Dvs. at
Naming.lookup returnerer en reference til et "fjernt" objekt.
Denne reference kan så gemmes, så man ikke behøver at "slå"
objektet op igen. Denne reference skal blot ses som en almindelig
reference. Du behøver altså ikke at kalde Naming.lookup hver
gang, da du jo allerede har reference til den anden server.

Server1 er ikke specielt knyttet til server2. Man kunne f.eks.
tænke sig (hvis systemet ikke bliver for stort), at alle servere indeholder
en Vector, der så indeholder referencerne til alle de andre servere
i systemet. Derved kan alle kommunikere med alle og man behøver
ikke at bruge Naming.lookup (medmindre at der kommer en ny server
på systemet).

Mht. til ydelse og naming.lookup, er det nok smart at holde dette på et
minimum, da dette i hvert fald ikke er hurtigt. Hvis du ønsker hurtigere
ydelse, skal du nok kigge på sockets. Med socket har du også mulighed
for at styre tingene på et lavere niveau (hvilket kan være ønskværdigt til
tider).

Men jeg syntes at du skal forsætte med RMI, da dette er
utroligt let, når først man kommer i gang.

Hvis dette ikke er forklaret godt nok, er du velkommen til at poste igen.
--
Mvh.
Mikkel Bundgaard
RUC Datalogi
http://officehelp.gone.dk



norgaards (26-06-2001)
Kommentar
Fra : norgaards


Dato : 26-06-01 23:33

Mange tak for hjæpen. Det besvarede mange af mine spørgsmål.

Mvh
John

"Mikkel Bundgaard" <mikkelbu@teliamail.dk> wrote in message
news:9habvt$fi0$2@sunsite.dk...
> norgaards <norgaards@post.tele.dk> wrote in message
> news:9ha1fq$hl4$1@news.inet.tele.dk...
> > Hej Mikael,
> > Du skal have mange tak for de mange gode råd, og for linket. - Jeg har
> lige
> > et par spm. mere, som jeg håber jeg må stille dig.
> >
> > . - Hvis jeg f.eks. vil foretage et kald fra server1 på maskine/knude1
til
> > server2 på maskine/knude2, så har jeg forstået det sådan at jeg fra
> server1
> > kan lave en naming.lookup for at binde til server2's registry. Når dette
> er
> > sket kan jeg kalde, f.eks., sendMessage() metoden, så den også sendes
til
> > brugere på server2.
> >
> > Hvad jeg ikke ved (jeg har jo ikke prøvet det før) er om dette
> naming.lookup
> > fra server1 til server2 medfører at server1 herefter er fast knyttet til
> > server2 som klient? - Eller om der skal foretages naming.lookup for hver
> > efterfølgende besked - i så tilfælde er det vel ikke en god løsning (?).
> > Tager naming.lookup megen tid/degradere ydelsen osv?
> >
> > Det kunne sikkert gøres smartere med andre løsninger end RMI, men nu har
> jeg
> > ligesom bidt mig fast på at finde en løsning med RMI, selvom det mest er
> > designet til en enkelt server og flere klienter.
> >
> > Mine spørgsmål er altså:
> > - kan en remote server knyttes til en anden remote
> > server v.hj.af naming.lookup, så de forbliver
> > herefter forbliver bundet sammen i et client/server
> > forhold og
> > - er det nødvendigt/uhensigtsmæssigt at kalde
> > naming.lookup for hver besked der sendes
> > eller er én gang nok?
> >
> > Mvh
> > John
> >
> <SNIP EN MASSSE>
> Hej John
> Som du sikkert ved står RMI for Remote Method Invocation.
> Dvs. at RMI er en måde, hvorpå man kan udføre metoder på
> objekter, der ikke nødvendigvis ligger i den samme JVM
> (eller på den samme computer).
>
> Naming er en klasse, der gør det let at associere et navn
> (i form af en string) til et givent objekt. Når du binder en instans
> af din server-klasse til et navn, kan de ændre servere tilgå dette
> objekt gennem navnet og den ip den ligger på. Dvs. at
> Naming.lookup returnerer en reference til et "fjernt" objekt.
> Denne reference kan så gemmes, så man ikke behøver at "slå"
> objektet op igen. Denne reference skal blot ses som en almindelig
> reference. Du behøver altså ikke at kalde Naming.lookup hver
> gang, da du jo allerede har reference til den anden server.
>
> Server1 er ikke specielt knyttet til server2. Man kunne f.eks.
> tænke sig (hvis systemet ikke bliver for stort), at alle servere
indeholder
> en Vector, der så indeholder referencerne til alle de andre servere
> i systemet. Derved kan alle kommunikere med alle og man behøver
> ikke at bruge Naming.lookup (medmindre at der kommer en ny server
> på systemet).
>
> Mht. til ydelse og naming.lookup, er det nok smart at holde dette på et
> minimum, da dette i hvert fald ikke er hurtigt. Hvis du ønsker hurtigere
> ydelse, skal du nok kigge på sockets. Med socket har du også mulighed
> for at styre tingene på et lavere niveau (hvilket kan være ønskværdigt til
> tider).
>
> Men jeg syntes at du skal forsætte med RMI, da dette er
> utroligt let, når først man kommer i gang.
>
> Hvis dette ikke er forklaret godt nok, er du velkommen til at poste igen.
> --
> Mvh.
> Mikkel Bundgaard
> RUC Datalogi
> http://officehelp.gone.dk
>
>



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste