Avatar billede dsj Nybegynder
25. april 2003 - 12:03 Der er 27 kommentarer og
1 løsning

Brugen af corba i en clusteret server

Jeg er så småt ved at være færdig med udviklingen af et clusteret system. En master-server indeholder et register over bla. alle slave-serverne, som principielt kan clustres i uendelig mange instanser.

En af master-serverens vigtigste opgaver er at styre load-balanceringen i systemet. En ting jeg dog ikke bryder mig om er, at en master-server som administrerer hele systemet, er en klar SPOF (single point of failure). Derfor ville jeg at fjerne master-serveren og blot lade en slave-server indtage rollen som master, og hvis den går ned træder en anden slave-server ind i master-rollen.

Pt. et kommunikationen serverne imellem realiseret vha. RMI, hvilket giver et problem jeg godt vil undgå. Hvis man skal kalde en metode på en anden server, er man nødt til at kende ip-adressen til det register, hvor server-objektet er bundet, da man kun kan binde i lokale registre.

Spørgsmålet er så, kan dette undgås med CORBA? Kan man kalde en server udelukkende ved det i ORBen bundende navn? F.eks. hvis den der har master-rollen altid hedder "master", kan jeg så i CORBA kalde objektet med navnet "master" uden at skulle kende ip-adressen?
Avatar billede arne_v Ekspert
25. april 2003 - 12:23 #1
Ikke noget svar men nogle spørgsmål.

Jeg troede faktisk godt at man kunne "binde" til en remote
RMI registry.

Er du sikker på at man ikke kan det ?

Både RMI, CORBA og JNDI objekter bliver slået rent op på navn.

Som jeg forstå at dit spørgsmål så skulle pointen ved CORBA i.s.f.
RMI være at du kan bruge en remote ORB men at remote RMI registry
ikke virker.

Men hvis du skal no single point og failure skal du jo også have
RMI registry / CORBA ORB / JNDI server replikeret.

Kan den ORB der kommer med J2SE kører clustered ?

(jeg tvivler, da jeg altid har opfatter det som lidt af et stykke
demo legetøj)

Har du kigget efter en clusterable JNDI server ?
Avatar billede dsj Nybegynder
25. april 2003 - 13:23 #2
Ja, jeg er sikker på at man ikke i RMI kan binde til et remote registry, SUN skriver det selv, kan bare ikke huske hvor jeg så det. Når man skal slå et objekt i RMI er man nødt til at angive adressen også: //host:port/name og det er DET jeg ikke kan lide. Angiver man ikke en adressen søger den kun på local host. Kan CORBA slå objekter op på andre fysiske maskiner uden at skulle angive den præcise adress og kun navnet?

Jeg kender ikke noget særligt til den ORB java bruger og har ikke kigget på en clusterable JNDI server. Men så vidt jeg ved har alle applikationer der vil slå objekter op eller binde en ORB kørende?
Avatar billede arne_v Ekspert
25. april 2003 - 13:38 #3
Grunden til at jeg troede RMI registry kunne køre remote er følgende
fra API doc på java.rmi.Naming:

The Naming class provides methods for storing and obtaining references to remote objects in a remote object registry. Each method of the Naming class takes as one of its arguments a name that is a java.lang.String in URL format (without the scheme component) of the form:

    //host:port/name

where host is the host (remote or local) where the registry is located, port is the port number on which the registry accepts calls, and where name is a simple string uninterpreted by the registry. Both host and port are optional. If host is omitted, the host defaults to the local host. If port is omitted, then the port defaults to 1099, the "well-known" port that RMI's registry, rmiregistry, uses.
Avatar billede arne_v Ekspert
25. april 2003 - 13:40 #4
Også ved CORBA og JNDI lookup skal du angive hostnavn og port på
hvor du vil slå objektet op.

Ved clustered løsninger skal det så bare være muloigt at angive
flere hostnavne.
Avatar billede arne_v Ekspert
25. april 2003 - 13:44 #5
Så du kommer til at leve med at connecte til noget (medmindre du skriver
din egen multicast baserede protokol).

Men det du skal have er:

1) en navne server som servere kan binde til remote

2) en navne server som kan clusteres så den ike selv bliver SPOF

Du siger RMI ikka kan klare #1. Jeg synes dokumentation antyder at den kan.

Men RMI kan ikke klare #2.

Som jeg læser J2SE CORBA docs så kan den klare #1, men jeg tror heller
ikke den kan klare #2.

Jeg er sikker på at du kan finde en (også gratis) CORBA ORB, som kan
klare både #1 og #2.

JNDI er formentlig den mest javaske løsning på problemet og jeg tror
at man kan finde software til det.

Men jeg kender ikke ret meget til JNDI servere udenfor J2EE app-server.
Avatar billede dsj Nybegynder
25. april 2003 - 14:05 #6
At RMI ikke kan #1 står rigtig mange steder i Sun Forum, og kan også antydes i doc'en. Metoder til at binde/unbinde med kan smide en AccessException:

AccessException - if this operation is not permitted (if originating from a non-local host, for example)

Desuden har jeg prøvet et utal af gange hvor alle policy-restrictioner er fjernet.

JNDI er altså en helt tredje løsning. Det har jeg heller ikke så meget kendskab til udover at J2EE-containere anvender det.
Avatar billede arne_v Ekspert
25. april 2003 - 18:47 #7
Avatar billede arne_v Ekspert
25. april 2003 - 18:53 #8
Men for ikke at blive forvirret: JNDI er kun et standard interface - det er
ikke en implementation.
Avatar billede lborupj Nybegynder
26. april 2003 - 12:59 #9
Hvis du vil bruge RMI til (ofcoz) remote invokationer, har du nok lidt af et problem med standard stubbene som RMI genererer, da jeg mener at disse indholder IP-adren på server-objektet. Kig på JavaGroups eller JINI til at løse dine clustering mht. master/slave problemtik (multicast). For at lave klienterne crash-resistant, skal du nok enten lave rigtigt meget house-keeping på klient-siden såfremt en server går ned skal du finde en anden server og slå denne op via Naming.lookup, eller lave dine egne stubbe, som f.eks. J2EE servere typisk gør (on-the-fly)
Avatar billede arne_v Ekspert
26. april 2003 - 13:24 #10
De af rmic genererede stubbe indeholder ikke IP adresse.
Avatar billede lborupj Nybegynder
26. april 2003 - 13:31 #11
Nej selvfølgeligt ikke for på compile tidspunkt kendes ip'en jo ikke. Desuden virker RMI så hut jeg visker således at man via lookup for en stub tilbage hvori ip'en på serveren samt port hvortil stubben skal forbinde er blevet sat på den aktuelle instans..
Avatar billede arne_v Ekspert
26. april 2003 - 13:34 #12
Netop.
Avatar billede lborupj Nybegynder
26. april 2003 - 13:38 #13
Problemet er jo det samme. Da den stub som klienten har loadet indeholder ip'en på serveren og denne server går ned er man jo nødt til at finde en ny "server" i clustered som man kan benytte istedet. Dette er der ikke lavet noget for i std. stubbe.. Derfor skal man lave cluster-aware stubbe til at løse problemet.
Avatar billede arne_v Ekspert
26. april 2003 - 13:43 #14
Vi er ikke uenige om at RMI ikke understøtter clustering.

Din 12:59:43 kommentar kunne bare misforståes.
Avatar billede dsj Nybegynder
26. april 2003 - 13:53 #15
Ja clustering er noget man selv må realisere, RMI er et middel. Jeg har læst lidt om JNDI, som skulle give mulighed for at slå remote-objekter op uden at kende deres placering i netværket, så det er nok det jeg skal have kigget nærmere på :)
Avatar billede arne_v Ekspert
26. april 2003 - 13:59 #16
Der er JNDI servere som kan opfylde både #1 og #2, fordi J2EE app-server
clustere bruger det.

Ellers skulle du måske følge lborupj's forslag og kigge lidt på JINI.

Jeg har aldrig selv haft tid til at kigge på JINI.

Men det skulle være en anden måde at lave den slags distribueret
computing på.
Avatar billede lborupj Nybegynder
26. april 2003 - 14:00 #17
njah.. Jeg er nu ikke sikker på at JNDI vil hjælpe dig der som standard. Normalt skal man vha. Properties sætte ens InitialContextFactory op i JNDI, samt hvilken server der er endpoint. Mange j2ee serveren laver en remote version af et initialcontext, som kører lokalt, men looker objekterne op på en anden maskine. JNDI kan bruges istedet for Naming.lookup (RMI) vha. en RMI impl. af initialcontext. Du er nok nødt til at lave dig egen impl. af en context, som spørger clustered hvilken server(e) den kan tilgå. Så kan du vist det skal være helt porno lave dine stubbe til at udføre load-balancing fordelt over flere servere (hvis IP'er sættes i dine stubbe)
Avatar billede arne_v Ekspert
26. april 2003 - 14:03 #18
For mere om JINI se:
  http://wwws.sun.com/software/jini/
Avatar billede arne_v Ekspert
26. april 2003 - 14:06 #19
Nu er der ikke nogen standard for at konfigurere InitialContext, men f.eks.
JBoss clustering så undlader man at angive nogen URL og så detecter
den selv JNDI clusteret via MultiCast.

Citat fra docs:

Cluster-wide JNDI
You can connect to and use the cluster-wide JNDI tree simple by leaving the provider URL
undefined. JBoss will use IP multicast to discover clustered JNDI.
Avatar billede dsj Nybegynder
26. april 2003 - 14:09 #20
Ja, det er noget i den stil jeg er interesseret i, hvor en slave-server f.eks. bare "råber ud i rummet" på en master-server, som så svarer uden at vide hvilken ip-adresse den kører på.
Avatar billede lborupj Nybegynder
26. april 2003 - 14:11 #21
<quote arne_v>
Nu er der ikke nogen standard for at konfigurere InitialContext..
</quote arne_v>
Jo -
Hashtable t = new Hashtable();
t.put(Context.INITIAL_CONTEXT_FACTORY, "net.sf.MyInitialContext");
osv...
Context c = new InitialContext(t);
Avatar billede dsj Nybegynder
26. april 2003 - 14:57 #22
Jeg har kigget lidt på JINI, og det ser faktisk ret interessant ud :)
Avatar billede arne_v Ekspert
26. april 2003 - 15:00 #23
Jeg har så udtrykt mig upræcist.

InitialContext interfacet er naturligvis 100% standard, fordi det er
en del af J2SE.

Men de properties der konfiguerer InitialContext er forskellige
fra implementation til implementation. Attribut værdierne er
altid forskellige og der kan være forskel på attribut navnene
pgså. Og clustering er en af de ting som jeg formoder er meget
forskellig mellem implementationerne.
Avatar billede arne_v Ekspert
30. april 2003 - 21:46 #24
Et svar såfremt du måtte finde nogle af mine kommentarer
hjælpsomme.
Avatar billede arne_v Ekspert
30. april 2003 - 21:46 #25
Vi prøver igen.
Avatar billede dsj Nybegynder
30. april 2003 - 22:02 #26
troede slet ikke du ville have nogen... :)
Avatar billede arne_v Ekspert
30. april 2003 - 22:06 #27
Jo - jeg er skam point junkie.

Men med spørgsmål af den her type er det sommetide svært at vurdere
om man reelt har bidraget med noget.

Det er mere klart ved et spørgsmål "Jeg får den her fejl når jeg compiler"
og man kan svare "sæt et semikolon i linie 7".
Avatar billede dsj Nybegynder
30. april 2003 - 22:32 #28
Ja, det jo det. Her var der mest brug for ideer.
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