3. előadás Protokollok Kommunikáció 2. rész RPC (Remote Procedure Call) távoli eljáráshívás RMI (Remote Method Invocation) távoli metódushívás MOM (Message-Oriented Middleware) üzenetorientált köztesréteg Streams folyamatok - Üzenetküldés elrejtése - Hozzáférési átlátszóság Távoli eljáráshívás RPC kommunikáció menete 2-8 RPC - paraméterátadás Probléma: különböző gépek, különböző adatábrázolással Mutatók Komplex adatszerkezetek => protokoll: Üzenet formátumának definiálása Egyszerű adatszerkezetek ábrázolása Üzenettovábbítás módja IDL (Interface Definition Language) DCE RPC (1) Distributed Computing Environment Konverzió IDL Eljáráshívás szintaxisa Konstans deklaráció Típusdefiníció konvertálási információ Azonosítók
DCE RPC (2) DCE RPC (3) Kliens és a szerver megírásának lépései a DCE RPC esetén. Kliens csatlakozása a szolgáltatáshoz Ajtók - Doors Aszinkron RPC a) A kliens és a szerver együttműködése hagyományos RPC során b) Együttműködés aszinkron RPC esetén Késleltetett szinkronizált RPC RMI elosztott objektumok Kliens és szerver együttműködése két aszinkron RPC segítségével. Modell kliensoldali helyettessel és szerveroldali vázzal.
RMI Kliens csatlakozása az objektumhoz Elosztott objektum Távoli objektum Distr_object* obj_ref; obj_ref = ; obj_ref-> do_something(); // Deklarálja az objektumhivatkozást // Inicializálja az objektumhivatkozást // Implicit csatlakozás és metódushívás Fordítási idejű objektum Futási idejű objektum Állandó objektum Nem állandó objektum Distr_object objpref; Local_object* obj_ptr; obj_ref = ; obj_ptr = bind(obj_ref); obj_ptr -> do_something(); (a) (b) // Deklarálja az objektumhivatkozást // Deklarálja a helyettes mutatóját // Inicializálja az objektumhivatkozást // Explicit csatlakozás (helyettes mutatója) // Helyetes metódusának meghívása a) Implicit csatlakozás b) Explicit csatlakozás RMI távoli művelet hívása Statikus hívás - IDL -> csonk fobject.append(number); Dinamikus hívás - futás közbeni összeállítás invoke(fobject, id(append), number); [ általánosan: invoke(objektum, metódus, input_paraméterek, output_paraméterek); ] Csak távoli objektum Java RMI Objektumok zárolása synchronized kliensen blokkol Helyettes szerializálható Üzenetorientált kommunikáció Korábbi kommunikációs modell RPC, RMI nem mindig használható: Szerver nem biztos, hogy üzemel a kérés elküldésekor Nem mindig hatékony a nagyfokú szinkronitás => üzenetcsere Pufferelés és a küldő blokkolásának lehetséges helyei
Új kommunikációs modell Üzenetküldés Megtartó kommunikáció Időleges kommunikáció Szinkron kommunikáció Aszinkron kommunikáció Ezek kombinációja is lehetséges Kommunikáció fajtái 1. Kommunikáció fajtái 2. a) Megtartó aszinkron kommunikáció b) Megtartó szinkron kommunikáció c) Időleges aszinkron kommunikáció d) Nyugta alapú időleges szinkron kommunikáció Kommunikáció fajtái 3. Üzenetorientált időleges kommunikáció Szállítási réteg által biztosított modell Kommunikációs csatlakozópont (socket) TCP primitívek e) Kézbesítés alapú időleges szinkron kommunikáció f) Válasz alapú időleges szinkron kommunikáció
Berkeley kommunikációs csatlakozópontok Berkeley kommunikációs csatlakozópontok Primitív Csatlakozópont (Socket) Kötés (Bind) Figyel (Listen) Elfogad (Accept) Csatlakozik (Connect) Küld (Send) Fogad (Receive) Lezár (Close) Jelentése Új kommunikációs végpont létrehozása A csatlakozóponthoz hozzárendel egy helyi címet Meghirdeti a kommunikációra való képességet Blokkolja a hívót a kapcsolatfelvételi kérés megérkezéséig Aktívan megkísérli a kapcsolat felépítését Adatot küld a kapcsolaton keresztül Adatot fogad a kapcsolaton keresztül Bontja a kapcsolatot MPI Üzenetátadó interfész MPI Üzenetátadó interfész Message-Passing Interface Csatlakozóponos megoldás nem eléggé magas szintű => kommunkációs könyvtárak inkompatibilitás => MPI (szabványosítás) Időleges kommunikáció Azonosító (csoport, folyamat) Primitív MPI_bsend MPI_send MPI_ssend MPI_sendrecv MPI_isend MPI_issend MPI_recv MPI_irecv Jelentése A helyi küldőpuffer végéhez hozzáadja a kimenő üzenetet Üzenetet küld, és vár annak helyi vagy távoli pufferbe történő másolásáig Üzenetet küld, és vár a nyugta megérkezéséig Üzenetet küld, és vár a válasz megérkezéséig Átad egy kimenő üzenetre mutató hivatkozást, és továbbmegy Átad egy kimenő üzenetre mutató hivatkozást, és várja ennek nyugtázását Üzenet fogadása; blokkolódik, ha nincs üzenet Ellenőrzi, hogy van-e beérkező üzenet, de nem blokkolja a hívót Üzenetorientált megtartó kommunikáció Üzenetsor-kezelő modell Üzenetorientált köztesréteg MOM Megtartó aszinkron kommunikáció Üzenetek köztes szinten való tárolása (várakozási sorok) Várakozási sort használó gyengén csatolt kommunikáció 4 lehetősége
Üzenetsor-kezelő modell Az üzenetsor-kezelő rendszer általános felépítése Primitív Betesz (Put) Kivesz (Get) Lekérdez (Poll) Értesít (Notify) Jelentése A megadott várakozási sor végére helyez egy üzenetet Mindaddig blokkol, amíg üres a várakozási sor, majd kiveszi a legelső üzenetet Megvizsgálja, a megadott várakozási sort, és kiveszi a legelső üzenetet, nem blokkol Egy kezelő rutint installál, amely mindannyiszor meghívásra kerül, ha üzenet kerül a várakozási sorba Az üzenetsor-kezelő rendszer várakozási sorát kezelő alapinterfész Az üzenetsor-kezelő szint szerinti és szállítási szint szerinti cím összefüggése Az üzenetsor-kezelő rendszer általános felépítése Üzenetközvetítők Az útválasztókkal kiépített üzenetsor-kezelő rendszer általános felépítése Az üzenetközvetítőt használó üzenetsor-kezelő rendszer általános felépítése