Remote Procedure Call

Transcrição

Remote Procedure Call
Client/Server-Systeme
Prof. Dr.-Ing. Wilhelm G. Spruth
WS 2004 / 2005
Teil 3
Remote Procedure Call
cs 0400 ww6
wgs 09-96
Schwierigkeiten mit Sockets
Sockets nur Schnittstelle zur Transportschicht. Keine
Unterstützung zur
Kommunikationssteuerung
Datendarstellung
Anwendungsprogrammierer muß selber Protokolle definieren
und implementieren um
Kommunikationspartner finden
Austausch von Nachrichten steuern
Eigenschaften des Transportmechnanismus berücksichtigen
Wechsel der Transferrichtung steuern
auf Fehler reagieren
(z.B. Verbindungsabbruch)
Name Server
Sync Punkte
Verbindungsorientiert
verbindungslos
Please Token
Waisen
und
einheitliche Datendarstellung
XDR, ASN.1
Bei komplizierten Anforderungen aufwendige und
fehleranfällige Programmierung
cs 0408 ww6
wgs 09-98
RPC - Remote Procedure Call
Unterprogrammaufruf auf einem anderen Rechner
standardisierte Interprozeßkommunikation (Interprocess
Communication, IPC) zwischen Rechnern unterschiedlicher
Architektur und Hersteller
verdeckt den Transportmechanismus.
RPC definiert:
•
•
•
•
•
•
Auffinden des Kommunikationspartners
Steuerung des Datenaustausches
Wechsel der Transferrichtung
Erkennung von Fehlern
Überwachung von Zugriffsberechtigungen
Datenrepräsentation
Der Begriff "RPC" wird sowohl generisch als auch für spezifische
Implementierungen verwendet :
• Sun RPC
• DCE RPC
RPC ähnliche Interprozesskommunikation
•
•
•
•
CICS Direct Program Link (DPL)
Corba
RMI
Microsoft DotNet (DCOM, COM+, DNA)
cs 0307 ww6
wgs 09-99
Viele Hersteller,.
viele RPC Produkte
OSI
ASN.1
SUN
RPC, XDR
CICS
DPL
Zeitachse
DCE
RPC
CORBA
Microsoft
Object RPC
RMI
Web
Services
Viele Programm Pakete, die RPC intern benutzen
z. B. Tivoli (DCE)
Entwicklung des RPC
cs 0327 ww6
wgs 02-03
SUN RPC
(auch als ONC RPC bezeichnet)
Die Firma SUN entwickelt
1. RPC (Remote Procedure Call)
Aufruf eines Unterprogramms auf einem anderen
Rechner ohne Wechsel des Programmkontextes
einheitliches Protokoll für die Prozeßkommunikation
auf Rechnern unterschiedlicher Architektur und
Hersteller
2. XDR (eXternal Data Representation)
betriebssystem- und rechnerunabhängige ,
einheitliche Darstellung von Daten
RPC und XDR Protokolle und Quellcode werden von SUN
als Public Domain Software zur Verfügung gestellt.
Internet Activity Board nimmt RPC und XDR als RFC
(Request For Comment) auf:
RPC
XDR
cs 0404 ww6
RFC 1050
RFC 1014
wgs 09-98
OSI
Schichten
5-7
Anwendung
4
TCP
UDP
3
IP
2
z. B. Ethernet
1
Hardware
Schichten der Internet Protokoll Suite
cs 0406 ww6
wgs 09-98
OSI
Schichten
7
Anwendung
6
XDR
5
RPC
4
TCP
UDP
3
IP
2
z. B. Ethernet
1
Hardware
Einordnung des SUN RPC
in das OSI Modell
cs 0405 ww6
wgs 09-98
Klient
Server
KlientenProgramm
warten
RPC ( ..... ) ;
RPC
Aufruf
warten
Server
Programm
RPC
Ergebnis
warten
Synchroner RPC
Klient blockiert während der Ausführung des Server Programms
cs 0316 ww6
wgs 09 -00
Client
Aufrufende
Prozedur
Argumente
Server
Ergebnisse
Aufgerufene
Prozedur
Local Procedure Call
Ein aufrufender Prozess führt eine aufgerufene Prozedur in
seinem eigenen Adressraum aus
Client
Server
Aufrufende
Prozedur
Aufgerufene
Prozedur
Argumente
Ergebnisse
Argumente
Client
Stub
Request
Nachricht
Ergebnisse
Server
Stub
Reply
Nachricht
Request
Nachricht
Reply
Nachricht
Netzwerk
Remote Procedure Call
Client und Server laufen als zwei separate Prozesse. Sie
können (Ausnahmefall), müssen aber nicht, auf dem gleichen
Rechner laufen.
Die beiden Prozesse kommunizieren über Stubs. Stubs sind
Routinen, welche lokale Prozedur Aufrufe auf Netzwerk RPC
Funktionsaufrufe abbilden.
cs 0308u ww6
wgs 09-99
RPC Beispiel (1)
Angenommen, der Server ist nur eine Library. Dann ist Add
lediglich ein Procedur Aufruf.
RPC Beispiel (2)
RPC Beispiel (3)
Aufgaben der Stubs (Prozedurrümpfe)
Binden des Client-Anwendungsprogramms an den Server
Parameter des RPC einsammeln und in einen Puffer
packen, dessen Inhalt in der Form einer Nachricht an den
Empfänger gesendet wird. Dieser Vorgang wird als
Parameter marshalling bezeichnet.
Fehlerbehandlung
Kommunikationsfehler
Klientenfehler
Serverfehler
Transparente Kommunikation
Transportmechanismus, z.B. TCP, UDP
Datenrepräsentation, z.B. ASN.1, XDR
Sicherheit
Verschlüsselung, Authentifizierung
z.B. Kerberos, SSL
vs1010 ww
wgs 06-95
Client
Server
Aufrufende
Prozedur
1
Aufgerufene
Prozedur
10
6
Client
Stub
2
5
Server
Stub
9
7
4
RPC/XDR
Bibliothek
RPC/XDR
Bibliothek
3
8
8
3
Netzwerk
Aufruf eines SUN Remote Procedure Calls
Aufgaben der Stubs:
• Parameter des RPC Aufrufs einsammeln und in eine
Nachricht packen (marschalling)
• Transparente Weiterleitung (entfernte Ausführung soll für
den Anwendungsprogrammierer verborgen bleiben)
Aufgaben der RPC/XDR Bibliothek:
• Fehlerbehandlung (Client, Server, Netzwerk)
• Transparente Kommunikation , z.B. TCP, UDP
• Datenrepräsentation
• Sicherheit
s 0310u ww6
wgs 09-99
Stub
RPC Routine
SVC
System Call
User Status
Kernel Status
Transport Schicht
Routine
Stub des Klienten-Programms
RPC und XDR sind System Calls. Die Routinen laufenteilweise im
User Status, verzweigen aber in den Kernel status.
cs 0317 ww6
wgs 09 -00
RPC
RPC
RPC
Service Service Service
RPC Server
andere Prozesse
Betriebssystem Kernel
Die RPC Services (RPC Dienstprogramme) können entweder in
getrennten virtuellen Adressenräumen laufen, oder alternativ als
Threads innerhalb eines virtuellen Adressenraums implementiert
werden.
Ein RPC Service wird auch als Implementation bezeichnet.
Häufig Hunderte oder Tausende unterschiedlicher RPC Services auf
dem gleichen Rechner.
Der RPC Server stellt Verwaltungsdienste für seine RPC Services
zur Verfügung, z.B. das Binding.
Auf einem Rechner können mehrere RPC Server laufen, die z.B.
unterschiedliche Arten von RPC Services gruppieren.
Die RPC Ebenen
RPC bietet Schnittstellen in mehreren Ebenen an. Die
wichtigsten sind:
High Level
einfache Schnittstelle, um ein RPC abzusetzen
keine besonderen Kenntnisse über Netzwerkarchitektur
notwendig
basiert auf dem UDP-Protokoll
Lower Level
erlaubt detaillierte Kontrolle über
Verbindung
Auswahl des Protokolls (z.B. TCP oder UDP)
Übermittelung komplexer Datenstrukturen
verschiedene Arten der Zugriffsüberwachung
Setzen von Zeitkonstanten (timeouts)
Überwachen der Sockets
Reaktion auf Fehler
Call Back Mechanismen
cs 0409 ww6
wgs 06-94
Identifikation eines RPC Dienstprogrammes
o
Jedes RPC Dienstprogramm auf einem Server ist
eindeutig durch das Tripel
Programmnummer
Versionsnummer
Prozedurnummer
program number
version number
procedure number
identifiziert.
Jede Nummer wird durch einen 4-Byte langen IntegerWert dargestellt.
o
Klient kennt nur
Internetadresse und das Tripel Programmnummer,
Versionsnummer, Prozedurnummer
um über einen RPC ein Dienstprogramm des Servers
aufzurufen.
o
Portnummer des Servers ist dem Klienten unbekannt.
cs 0201 ww
wgs 06-94
0
31
Transaktions-ID
Senderichtung
RPC - Protokollversionsnummer
Programmnummer
Versionsnummer
Prozedurnummer
Berechtigungsnachweis
Berechtigungsnachweis-Verifizierung
Parameter des Prozeduraufrufes
RPC - Protokollkopf
cs 0315
ww6
wgs 05 -94
RPC Binding
Wie findet der Klient die Lokation des RPC Services und des
dazugehörigen Servers ?
2 Probleme für den Klienten:
1.
Server identifizieren (z.B. Internet Adresse)
2.
RPC Service identifizieren (z.B. Port Nummer)
Portnummer muss aus Portierungsgründen variabel sein.
Binding ist die Abbildung (mapping) von Programmnummer,
Versionsnummer und Prozedurnummer auf die physische Adresse
(z.B. Internet Adresse und Port Nummer).
Ein Binder ist ein Dienst der das Binding zur Verfügung stellt
(z.B.. portmapper beim Sun RPC).
Der Binder hat drei Functionen:
1.
2.
3.
Register
Unregister
LookUp
Der High Level RPC setzt voraus, das der Klient die physische
Adresse des Servers kennt (z.B. Internet ID).
#include ..........
int main( ..... )
{
int result;
static char *datain ;
static char *dataout ;
•
•
result=callrpc(host, PROGNUM, VERSNUM, PROCNUM,
inproc, &datain, outproc, &dataout);
return(1);
•
•
}
High Level RPC Client Programm
inproc() ist eine XDR Routine, welche die Daten von &datain
encodiert um dem Server das Request Argument mitzuteilen.
outproc() ist eine XDR Routine, welche die Antwort des Servers
nach &dataout decodiert.
#include ..........
servicexxx( ..... )
{
•
•
/* hier passiert die eigentliche Arbeit der RPC Server Routine
*/
•
•
}
int main(void)
{
•
•
/* register with port mapper so that the client knows
where to contact for service */
registerrpc(PROGNUM, VERSNUM, PROCNUM, progname,
inproc, outproc);
•
•
/* run the server RPC */
svc_run();
•
•
return 1;
}
High Level RPC Server Programm
Ein RPC Server Programm besteht in der Regel aus zwei Teilen:
• dem eigentlichen Server, und
• einem oder mehreren Services ( auch als Server Implementation
bezeichnet)
Wenn der Server eine Anforderung für PROGNUM, VERSNUM,
PROCNUM erhält, versucht er progname auszuführen.
Arbeitsweise des High Level RPC
Aufrufes
Der High Level RPC Aufruf bewirkt unter der Decke 2 RPC
Aufrufe:
1. Aufruf des Server-Portmappers. Dieser teilt
dem Klienten die zu der angegebenen
Programmnr./Versionsnummer dazugehörige Portnummer
des Serverrechners mit.
2. Aufruf des Server Programms über die so ermittelte
Portnummer.
Jeder High Level RPC Aufruf benötigt somit für den
Benutzer unsichtbar 2 reale Aufrufe (zusätzliche
Netzbelastung).
Das aufgerufene Server-Programm kann aus mehreren
Prozeduren bestehen, von denen der RPC Aufruf eines in
Anspruch nimmt. Nur das Server-Programm ist über die
Portnummer ansprechbar. Das Server-Programm enthält
einen Dispatcher, welcher in die gewünschte Prozedur
verzweigt.
High Level RPC Aufrufe benutzen das verbindungslose
UDP Protokoll. Die Verwendung von TCP ist nur in
Verbindung mit den lower level RPC Aufrufen möglich.
vs1016
ww
+
wgs 05 -94
Client
Rechner
Server
Rechner
Port
111
Port
Mapper
Port
a
Port
b
2
1
Client
Program
Port
c
RPC
Service
3
Client - Server Adressierung
1. RPC Server etabliert Adresse, auf der er auf Anforderungen
lauscht. Er registriert diese Adresse
(hier Port c) beim Port Mapper
2. Klient erfragt beim Port Mapper die Adresse der
gewünschten Server Prozedur
3. Klient öffnet Übertragungsweg mit der gewünschten
Server Prozedur
cs 0411 ww6
wgs 06-94
Erfragen der Portnummer
cs 0403a ww6
wgs 07-03
Lower Level RPC
Interface Definition Language
Ein RPC Programm definiert seine Interface (Schnittstelle) unter
Benutzung einer Interface Definition Language (IDL). Die IDL
Beschreibung der Schnittstelle enthält die Namen und Parameter
aller Proceduren des RPC Programms, sowie Angaben zur
Fehlerbehandlung. Jede Prozedur muss in der Schnittstellenbeschreibung festgehalten werden
Ein Stub Compiler liest die IDL Schnittstellenbeschreibung und
produziert zwei Stub Proceduren für jede Server Procedure (client
side stub und server side stub).
• Der Server Programmierer implementiert die Server Procedur und
linked sie mit dem Server Side Stub
• Der Klient Programmer implementiert das Klienten Programm
und linked es mit dem Client Side Stub
• Die Stubs sind zuständig, alle Details der Kommunikation
zwischen Klient und Server zu steuern und zu verwalten.
Ein Client Side Stub ist eine Procedur die so aussieht, als wäre es
eine callable Server Procedur. Ein Server Side Stub sieht für die
Server Prozedur so aus, als hätte ein Klient sie aufgerufen.
• Das Klienten Programm glaubt, es hätte den Server aufgerufen. In
Wirklichkeit ruft es den Client Side Stub auf.
• Das Server Programm glaubt, es würde vom Klienten Programm
aufgerufen. In Wirklichkeit ruft es der Server Side Stub auf.
• Die Stubs senden sich gegenseitig Messages für eine
transparente Ausführung des RPC.
In Corba and Java/RMI werden die Server Side Stubs als Skeletons
bezeichnet.
Sun RPC:
XDR and RPC language
XDR - eXternal Data Representation language
•
•
•
•
Use to describe data formats
Transfer data between different computer architectures
It is not a programming language
XDR data types, similiar as in C/C++
RPC Language (Interface Definition Language, IDL)
• identical to XDR, only added program- definition
• Parameters passing
o A single argument and a single result are allowed
o Multiple arguments and result values
should be packaged into a single structure
/* date.x - Specification of remote date and time service. */
/* Define 2 procedures:
bin_date_1() returns the binary time and date (no arguments).
str_date_1() takes a binary time and returns
a human-readable string. */
program DATE_PROG {
version DATE_VERS {
long
BIN_DATE(void) = 1;
string STR_DATE(long) = 2;
} = 1;
} = 0x31234567;
/* procedure number = 1 */
/* procedure number = 2 */
/* version number = 1 */
/* program number =
0x31234567 */
Lower Level RPC
Interface Definition Language (IDL)
Compilation Schritte für den
Lower Level Remote Procedure Call
Fehlerbehandlung
Fehlermöglichkeiten
•
Server kann Prozedur nicht beenden
(z.B. Rechnerausfall, SW-Fehler)
•
Klient wird während des RPCs abgebrochen
(z.B. Rechnerausfall, SW-Fehler)
Im Gegensatz zum lokalen Prozeduraufruf sind Fehlerbehandlungsmaßnahmen erforderlich.
cs 0311 ww6
Klient
Server
Fehler
Fehler
wgs 11-99
Fehlerbehandlung - Ausfall des Servers
1.
Idempotente Arbeitsvorgänge
"Idempotent" sind Arbeitsvorgänge, die beliebig oft ausgeführt
werden können; Beispiel: Die neuesten Fußballergebnisse in die
Bundesligatabelle auf einer Webseite eintragen. Nicht idempotent
ist die Überweisung eines Geldbetrages von einem Konto auf ein
anderes.
2.
Nicht-idempotente Arbeitsvorgänge
Problem: Wie wird festgestellt, ob ein Arbeitsgang
durchgeführt wurde oder nicht.
• "Genau einmal" (exactly once).
• "Höchstens einmal" (at most once).
• "Wenigstens einmal" (at least once). Ideal für idempotente
Vorgänge.
Die „genau einmal“ (exactly once) Semantik wird mit Hilfe von
Transaktionen verwirklicht.
cs 0324 ww6
wgs 08-00
Fehlerbehandlung
Nicht-idempotente Arbeitsgänge
Ohne Fehler garantiert das RPC System, daß entfernte
Operationen genau einmal durchgeführt werden.
Problem: wie wird im Fehlerfall festgestellt, daß
Arbeitsgang durchgeführt wurde oder nicht.
"Genau einmal" (exactly once) Semantik ist mit TCP für die
Datenübertragung erreichbar. Problem bei den auf UDP
basierenden High Level RPC Aufrufen.
Die „ACID“ Eigenschaften eines Transaktionsmonitors
garantieren die Genau einmal Semantik für die
Verarbeitung durch den (die) Server.
"Höchstens einmal" (at most once, maybe). Das Client
Anwendungsprogramm erhält eine Fehlermeldung, und
muß die Fehlerbehandlung übernehmen. Kann versuchen,
das "Genau einmal" Ideal zu simulieren. Garantiert keine
Mehrfachausführungen des RPC.
"Wenigstens einmal" (at least once). Ideal für idempotente
Vorgänge. Bei nicht-idempotenten Vorgängen wird jede
durch den Zeitgeber verursachte Neuübertragung mit
einer Kennziffer versehen, die vom Server zurückgegeben
wird und von der Fehlerbehandlungsroutine des
Clientprogrammes ausgewertet wird.
cs0321
ww6
wgs 09 -00
Eingabe Queue
enqueue
dequeue
Queue
Manager
RPC
Prozess
Klient
dequeue
enqueue
Ausgabe Queue
Server
Fehlerbehandlung - Ausfall des Klienten
Getrennte Warteschlangen für eingehende und ausgehende
Nachrichten lösen viele Probleme. Wenn der Klient abstürzt
(Waise), schließt der Server seine Arbeit ab. Das Ergebnis der RPC
Verarbeitung steht in der Ausgabe Queue, und kann beim
Wiederanlauf des Klienten dort abgeholt werden.
Andere Aufgaben der Queues:
• Prioritätensteuerung
• Lastverteilung auf mehrere Server
cs 0323 ww6
wgs 08-00
Aufruf eines OS/390 Mainframe-Programms aus Java
Die Integration von OS/390 Mainframe-Programmen in Javabasierte Client/Server-Systeme funktioniert prinzipiell recht einfach.
In der folgenden Methode wird ein OS/390 RPC-Programm namens
„KFZRES01 “aufgerufen.Diesem Programm werden zwei Strings
übergeben,einer für die Eingabeparameter,der zweite für die durch
KFZRES01 erzeugte Ausgabe.
/** *Folgende Methode ruft einen RPC auf dem Mainframe
auf. */
private boolean rpcCall(String inputString,
StringBuffer outBuffer){
RPC m_rpc =new RPC();
try {
//Mainframe braucht UserID und Password!
m_rpc.setUser(“k3216 ”);
m_rpc.setPwd(“TESTPW ”);
//Name des aufzurufenden Programms setzen
m_rpc.setRpcName(“KFZRES01 ”);
//remote procedure call ausführen
m_rpc.execute(inputString,outBuffer);
return true;
}
catch (Exception e) {
m_stateField.setText(“Execute-Error:“
+m_rpc.getApiMessage());
return false;
}
}
Seitens der OS/390 Mainframe-Programme ändert sich rein gar
nichts gegenüber der Nutzung per 3270-Terminal. Das Programm
KFZRES01 „weiß “also nicht, ob es durch ein Java-Programm
benutzt wird oder über konventionelle OS/390 MainframeTerminals.
cs 0328 ww6
wgs 02-03
DCE Remote Procedure Call
Kann konfiguriert werden, die Host Computer Sicherheitseinrichtungen zu benutzen
Unterstützt verbindungslose und verbindungsorientierte
Protokolle
20 unterschiedliche Nachrichten Typen definiert, davon
einige nur für den verbindungslosen oder den
verbindungsorientierten Transport. Die Nachrichten
werdenals Protocol Data Units (PDU´s) bezeichnet
Der Microsoft RPC ist eine auf DCOM basierende
objektorientierte Erweiterung des DCE RPC (auch als
„Objekt RPC“ bezeichnet. Die Syntax der übertragenen
Pakete ist nahezu vollständig mit der ursprünglichen DCE
Spezifikation kompatibel. Wird als Bestandteil von NT
ausgeliefert.
cs 0806 ww6
wgs 06-98
XML - RPC
Part of Web Services
• XML - RPC is a Remote Procedure calling protocol that
works over the Internet. An XML - RPC Message is a
HTTP- POST request.
• The body of the request is in XML. A procedure executes
on the server and the value it returns is also formatted in
XML.
• Procedure parameters can be scalars, numbers, strings,
dates, etc.
Second generation RPCs:
Corba
RMI
Microsoft .NET
Third generation RPCs: Web services and XML
XML RPC
cs 0313
wgs 09-00
Schicht
7
Anwendungen
RPC
Named
Pipes
CPI-C
5-6
4
Sockets
NetBIOS
API
APPC
NLM
API
TCP/IP
NetBIOS
SNA
IPX
Gebräuchliche Programmierschnittstellen
(zahlreiche Querverbindungen
weitere Protokolle: HTTP, 3270 (verwendet SNA)
Corba / IIOP, RMI, DCOM, verwenden Sockets und/oder
RPC. Microsoft SMB verwendet Named Pipes.
cs 0401 ww
wgs 01-96
Anwendungen
SMB
NetBIOS
IPX/SPX
TCP/UDP
NetBEUI
IP, PPP
Ethernet, Token Ring, Seriell
Service Message Block (SMB) Protokoll Stack
Ein SMB ist ein Kommando mit dessen Hilfe ein Klient auf einen
Server zugreift. Beispiel: Die Partition C: eines Servers erscheint
auf einem Klienten als Partition E: . Microsoft proprietärer
Standard, 1987 definiert, wird mit allen Windows Betriebssystemen
(3.11, 95, 98, NT) als Klient und als Server ausgeliefert.
Mehrere inkompatible Varianten. Klient sendet negprot Kommando
an Server, um Protokollvariante zu vereinbaren.
NT LAN Manager, OS/2 LAN Server, PATHWORKS (Digital) sowie
LAN Manager for Unix verwenden SMB, ebenso SAMBA´s NT
Version .
Microsoft TCP Implementierung ist in Wirklichkeit eine „NetBIOS
over RCP/IP Implementierung, entsprechend RFC 1001 und 1002,
von Microsoft alternativ auch als NBT oder NetBT bezeichnet.
CIFS (Common Internet File System) ist ein neuer, SMB basierter
Microsoft Standard.
Wird ein NT Netzwerk installiert, erfolgt automatische die Installation des
„.Arbeitsstationsdienstes“. Es erscheint Meldung: “Installiert Unterstützung für das SMB
(Server Message Block) Protokoll. Anderes Beispiel: Interlnk, Intersvr Kommandos.
cs 0417x ww6
wgs 11-99

Documentos relacionados