„5. Elosztott rendszerek (2012)” változatai közötti eltérés

Ferrero (vitalap | szerkesztései)
a Ferrero átnevezte a(z) 5. Elosztott rendszerek lapot a következő névre: 5. Elosztott rendszerek (2012)
Nagy Marcell (vitalap | szerkesztései)
a autoedit v2: fájlhivatkozások egységesítése, az új közvetlenül az adott fájlra mutat
 
(4 közbenső módosítás, amit egy másik szerkesztő végzett, nincs mutatva)
5. sor: 5. sor:
==Távoli eljáráshívás==
==Távoli eljáráshívás==
===Függvényhívás===
===Függvényhívás===
%ATTACHURL%/rmi.png
[[File:rmi.png]]
===Csonk===
* sorosítva elküldi a paramétereket
* meghívja a távoli függvényt
* visszaveszi a visszatérési értéket


==== Interfész ====
* A fejlesztö definiálja, specifikálja.
* WebService-ek esetén WSDL adja meg
* Callback minta esetén a kloens oldalon szerepel
* CORBA esetén IDL-ben specifikáljuk
==== Csonk ====
* Keretrendszer fordítási időben generálja
* Callback minta esetén a kliens oldalon szerepel
* Sorosítva elküldi a paramétereket, meghívja a távoli függvényt, visszaveszi a visszatérési értéket
<pre>
<pre>
int foo(int x, int y, int z) {
int foo(int x, int y, int z) {
24. sor: 30. sor:
}
}
</pre>
</pre>
===Adapter===
 
* beolvassa a paramétereket
==== Szerializálás ====
* meghívja az implementációt
* CORBA esteén az OIOP/IIOP specifikálja
* visszaküldi a visszatérési értéket
* Callback minta esteén a kliens oldalon szerepel
* Keretrendszerben gyárilag implementálva van
* WebService-ek esetén SOAP
 
==== Adapter ====
* Callback minta esetén a kliens oldalon szerepel
* CORBA esteén az IDL-ben specifikáljuk
* Beolvassa a paramétereket, meghívja az implementációt, visszaküldi a visszatérési értéket
<pre>
<pre>
void invoke(Skeleton skeleton) {
void invoke(Skeleton skeleton) {
39. sor: 52. sor:
}
}
</pre>
</pre>
==== Implementáció ====
* Fejlesztö implementálja
* Callback minta esteén a kliens oldalon szerepel
===Problémakezelés===
===Problémakezelés===
* memóriakezelés
* memóriakezelés
51. sor: 69. sor:
** NameService (hierarchikus, név szerinti keresés)
** NameService (hierarchikus, név szerinti keresés)
** TradeService (szolgáltatás szerint kereshető)
** TradeService (szolgáltatás szerint kereshető)
==Remote Method Invocation==
==Remote Method Invocation==
====Szerializálás====
====Szerializálás====
72. sor: 91. sor:
* paraméter: Serializable interfészt megvalósító objektum
* paraméter: Serializable interfészt megvalósító objektum
===Szerver oldal===
===Szerver oldal===
%ATTACHURL%/rmi-szerver.png
[[File:rmi-szerver.png]]
====RemoteObject====
====RemoteObject====
* távoli objektumok és stub-ok ősosztálya
* távoli objektumok és stub-ok ősosztálya
114. sor: 133. sor:
===Kliens oldal===
===Kliens oldal===


%ATTACHURL%/rmi-kliens.png
[[File:rmi-kliens.png]]


* Stub hivatkozik a távoli objektumra, implementálja annak interfészét
* Stub hivatkozik a távoli objektumra, implementálja annak interfészét
134. sor: 153. sor:
* void unbind(String name) - kiszed
* void unbind(String name) - kiszed
====LocateRegistry ====
====LocateRegistry ====
* '''a LocateRegistry osztály és a Registry interface azonosítja az RMI Registry szolgáltatást'''
* megkeresi/létrehozza a Registry-t
* megkeresi/létrehozza a Registry-t
* static Registry createRegistry(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf)
* static Registry createRegistry(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf)
141. sor: 161. sor:
* referenciákat számol
* referenciákat számol
* kilens oldalon is van komponense (DGCClient)
* kilens oldalon is van komponense (DGCClient)
* amikor a kiens deszerializál egy távoli objektumra mutató referenciát, akkor a [[DGCClient]] egy dirty() hívással jelez
* amikor a kiens deszerializál egy távoli objektumra mutató referenciát, akkor a DGCClient egy dirty() hívással jelez
  a szerver GC-je felé, hogy az objektumra a kliensenk szüksége van
  a szerver GC-je felé, hogy az objektumra a kliensenk szüksége van
* erre válaszul a szerver megmondja, hogy mennyi időre tudja garantálni az objektum megtartását a memóriájában
* erre válaszul a szerver megmondja, hogy mennyi időre tudja garantálni az objektum megtartását a memóriájában
* a [[DGCClient]] feladata, hogy meghosszabbítsa ezt az idő a lejárta előtt egy újabb dirty hívással, ha a kliensnek továbbra is szüksége van az objektumra
* a DGCClient feladata, hogy meghosszabbítsa ezt az idő a lejárta előtt egy újabb dirty hívással, ha a kliensnek továbbra is szüksége van az objektumra
* ha a [[SGCClient]] úgy veszi észre, hogy nincs szüksége a kliensnek tovább a távoli objektumra, akkor ezt a tényt egy clean () hívással jelzi a szerver  
* ha a SGCClient úgy veszi észre, hogy nincs szüksége a kliensnek tovább a távoli objektumra, akkor ezt a tényt egy clean () hívással jelzi a szerver  
  GC-je felé
  GC-je felé
* a szerver eközben számolja, hogy hány távoli referencia van a távoli objektumokra, és ha ez 0-ra csökken, akkor weak referenciával hivatkozik rá
* a szerver eközben számolja, hogy hány távoli referencia van a távoli objektumokra, és ha ez 0-ra csökken, akkor weak referenciával hivatkozik rá
153. sor: 173. sor:
* sajnos lehet, hogy a kliens hálózati hiba miatt nem tudta megújítani a referenciáját, és ekkor a következő kérése nem fogja megtalálni az objektumot (NULL)
* sajnos lehet, hogy a kliens hálózati hiba miatt nem tudta megújítani a referenciáját, és ekkor a következő kérése nem fogja megtalálni az objektumot (NULL)
  emiatt is szükség van arra, hogy a távoli objektum metódusai RemoteExceptiont dobjanak
  emiatt is szükség van arra, hogy a távoli objektum metódusai RemoteExceptiont dobjanak
FORRÁS: http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/index.jsp?topic=/com.ibm.java.doc.diagnostics.50/diag/understanding/rmi_dgc.html
 
FORRÁS: http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/index.jsp?topic=/com.ibm.java.doc.diagnostics.50/diag/understanding/rmi_dgc.html


-- [[MisnyovszkiAndrasSSO]] - 2009.05.27.
-- [[MisnyovszkiAndrasSSO]] - 2009.05.27.
 
===RMI során átadható paraméterek osztályozása és a paraméterátadás módja===
===RMI során átadható paraméterek osztályozása és a paraméterátadás módja===
* Pass-by-Reference
* Pass-by-Reference
191. sor: 212. sor:


====Mitöl ügynök az ügynök?====
====Mitöl ügynök az ügynök?====
* Aktív és autonóm
* '''Aktív és autonóm''': saját szálon fut, a döntéseit maga hozza a környezet figyelembevételével
** saját szálon fut
* '''Kapcsolatképes (reaktív)''': más ügynökökkel kommunikálhat
** a döntéseit maga hozza
* '''Tanulékony''': a tapasztalatait összegzi
** a környezet figyelembevételével
* '''Mobil''': képes az ügynökségek közötti közlekedésre
* Kapcsolatképes (reaktív)
** más ügynökökkel kommunikálhat
* Tanulékony
** a tapasztalatait összegzi
* Mobil
** képes az ügynökségek közötti közlekedésre


====Hogyan érkezik az ügynök?====
====Hogyan érkezik az ügynök?====
255. sor: 270. sor:
** Trader attribútumok állítása: számosságok, kéréstovábbítás
** Trader attribútumok állítása: számosságok, kéréstovábbítás
* Különbözö helyen futó traderek összekapcsolhatóak linkkel vagy federatrion-nel, mely arra jó hogy az egyikben kezdeményezett keresés a többibe továbbadódhat. Ez a kapcsolat egyirányú. Beállításai:
* Különbözö helyen futó traderek összekapcsolhatóak linkkel vagy federatrion-nel, mely arra jó hogy az egyikben kezdeményezett keresés a többibe továbbadódhat. Ez a kapcsolat egyirányú. Beállításai:
** local_only: csak az aktuális traderben keresünk
** '''local_only''': csak az aktuális traderben keresünk
** if_no_local: ha az aktuálisban nincs, mehet tovább
** '''if_no_local''': ha az aktuálisban nincs, mehet tovább
** always: minden elérhetö traderben keresünk
** '''always''': minden elérhetö traderben keresünk
 
===Event Service===
===Event Service===
* Alap CORBA kommunikáció = erös csatolás és egy-egy kommunikáció
* Alap CORBA kommunikáció = erös csatolás és egy-egy kommunikáció
268. sor: 284. sor:
** a csatlakozáshoz proxy kell, mely interfészt nyújt a termelö felé fogyasztóként és a fogyasztó felé termelőként, illetve tárolja a felgyűlt üzeneteket
** a csatlakozáshoz proxy kell, mely interfészt nyújt a termelö felé fogyasztóként és a fogyasztó felé termelőként, illetve tárolja a felgyűlt üzeneteket
** a kommunikációs modellek keverhetőek
** a kommunikációs modellek keverhetőek
* Proxy: a supplier proxy-k saját FIFO pufferrel rendelkezdnek
* '''Proxy''': a supplier proxy-k saját FIFO pufferrel rendelkezdnek
** push consumer proxy: a push hatására a csatornához továbbítja az eseményt
** '''push consumer proxy''': a push hatására a csatornához továbbítja az eseményt
** push supplier proxy: a következő eseményt push hívással adja át a fogyasztónak
** '''push supplier proxy''': a következő eseményt push hívással adja át a fogyasztónak
** pull supplier proxy: a pull hatására vagy ad egy új eseményt vagy pufferből, vagy blokkol
** '''pull supplier proxy''': a pull hatására vagy ad egy új eseményt vagy pufferből, vagy blokkol
** pull comsumer proxy: pull hívással kér új eseményt a termelötöl
** '''pull comsumer proxy''': pull hívással kér új eseményt a termelötöl
 
===Notification Service===
===Notification Service===
* Plusz szolgáltatások: csatorna factory, események szürése, QoS, NotifyPublish/Subscribe
* Plusz szolgáltatások: csatorna factory, események szürése, QoS, NotifyPublish/Subscribe