Client/Server-Programmierung Client/Server

Werbung
Client/Server-Programmierung
WS 2013/2014
Roland Wismüller
Betriebssysteme / verteilte Systeme
.d
[email protected] e
rolanda
Tel.: 0271/740-4050, Büro: H-B 8404
Stand: 8. November 2013
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
i
Client/Server-Programmierung
WS 2013/2014
1
Grundlagen: Wiederholung
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
18
1 Grundlagen: Wiederholung ...
Inhalt
➥ Architekturmodelle
➥ Zeit und Zustand in verteilten Systemen
➥ Middleware
➥ Java RMI
Roland Wismüller
Betriebssysteme / verteilte Systeme
19
Client/Server-Programmierung (1/13)
1.1 Architekturmodelle
Client/Server-Modell
➥ Asymmetrisches Modell: Server stellen Dienste bereit, die von
(mehreren) Clients genutzt werden können
➥ Server verwalten i.a. Ressourcen (zentralisiert)
Client
Aufruf
Ergebnis
Client
Aufruf
Server
Server
Ergebnis
Prozeß
Rechner
Server kann selbst
wieder als Client agieren
➥ Häufigstes Modell für verteilte Anwendungen (ca. 80 %)
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
20
1.1 Architekturmodelle ...
Client/Server-Modell ...
➥ I.A. nebenläufige Anfragen mehrerer Client-Prozesse an den
Server-Prozeß
Start
Client
Anfrage
(request)
Ende
Antwort
(reply)
Zeit
Server
Client
➥ Beispiele: Dateiserver, WWW-Server, DB-Server, DNS-Server, ...
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
21
1.1 Architekturmodelle ...
n-Tier-Architekturen
➥ Verfeinerungen der Client/Server-Architektur
➥ Modelle zur Verteilung einer Anwendung auf die Knoten einer
verteilten Systems
➥ Vor allem bei Informationssystemen verwendet
➥ Tier (engl. Schicht / Stufe) kennzeichnet einen unabhängigen
Prozeßraum innerhalb einer verteilten Anwendung
➥ Prozeßraum kann, muß aber nicht physischem Rechner
entsprechen
➥ mehrere Prozeßräume auf einem Rechner möglich
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
22
1.1 Architekturmodelle ...
2-Tier-Architektur
➥ Client- und Server-Tier
➥ Keine eigene Tier für die Anwendungslogik
Präsentation
Client−Tier
Anwendungslogik
(Verteilung auf Client−
und Server−Tier variiert)
Server−Tier
Datenhaltung
➥ Vorteil: einfach, performant
➥ Nachteil: schwer wartbar, schlecht skalierbar
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
23
1.1 Architekturmodelle ...
3-Tier-Architektur
Client−Tier
Präsentation
Middle−Tier
Anwendungslogik
Server−Tier
Datenhaltung
➥ Standard-Verteilungsmodell für einfache Web-Anwendungen:
➥ Client-Tier : Web-Browser zur Anzeige
➥ Middle-Tier : Web-Server mit Servlets / JSP / ASP
➥ Server-Tier : Datenbank-Server
➥ Vorteile: Anwendungslogik zentral administrierbar, skalierbar
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
24
1.1 Architekturmodelle ...
(Animierte Folie)
Beispiel: typische Internet-Anwendung
DMZ
Internet
1
0
Web−
Client
Firewall
1
0
0
1
00
11
00
11
00 1
11
00
11
0 11
1
0
00
00
11
0
1
0
1
00
11
00
11
000
111
000
111
0111
1
0000
1
000
000 111
111
000
111
Firewall
Web−
Client
Intranet
11
00
00
11
00
11
00
11
000
111
000
111
000
000 111
111
000 111
000
111
Web−
Server
Tier 1
Roland Wismüller
Betriebssysteme / verteilte Systeme
11
00
00
11
00
11
00
11
000
111
000
111
000
111
000
111
Web−
Server
Anwen−
dungs−
Server
Daten−
bank−
Server
Tier 2
Tier 3
Tier 4
Client/Server-Programmierung (1/13)
25
1.2 Zeit und Zustand in verteilten Systemen
Was ist der Unterschied zwischen einem verteilten System und
einem Ein-/Mehrprozessorsystem?
➥ Ein- bzw. Mehrprozessorsystem:
➥ nebenläufige Prozesse: pseudo-parallel durch time sharing
bzw. echt parallel
➥ globale Zeit: alle Ereignisse in den Prozessen lassen sich
zeitlich eindeutig ordnen
➥ globaler Zustand: zur jeder Zeit kann ein eindeutiger Zustand
des Systems angegeben werden
➥ Verteiltes System
➥ echte Parallelität
➥ keine globale Zeit
➥ kein eindeutiger globaler Zustand
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
26
1.2 Zeit und Zustand in verteilten Systemen ...
Globale Zeit
➥ Auf Ein-/Mehrprozessorsystem
➥ jedem Ereignis kann (zumindest theoretisch) ein eindeutiger
Zeitstempel derselben lokalen Uhr zugeordnet werden
➥ bei Mehrprozessorsystemen: Synchronisation am
gemeinsamen Speicher
➥ In verteilten Systemen:
➥ viele lokale Uhren (eine pro Knoten)
➥ exakte Synchronisation der Uhren (prinzipiell!) nicht möglich
➥ ⇒ Reihenfolge von Ereignissen auf verschiedenen Knoten
nicht (immer) eindeutig zu ermitteln
➥ (vgl. spezielle Relativitätstheorie)
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
27
1.2 Zeit und Zustand in verteilten Systemen ...
Eine Auswirkung der Verteiltheit
➥ Szenario: zwei Prozesse beobachten zwei andere Prozesse
x
Beobachter A
Prozess 1
x
Prozess 2
Beobachter B
y
z
y
z
z x
y
➥ Die Beobachter sehen die Ereignisse ggf. in unterschiedlicher
Reihenfolge!
➥ Problem z.B., falls die Beobachter replizierte Datenbanken und
die Ereignisse Datenbank-Updates sind
➥ Replikate sind nicht mehr konsistent!
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
28
1.2 Zeit und Zustand in verteilten Systemen ...
Die Lamport’sche Kausalitätsrelation
➥ In zwei Fällen kann die Reihenfolge von Ereignissen auch ohne
globale Uhr bestimmt werden:
➥ falls die Ereignisse im selben Prozeß sind, reicht lokale Uhr
➥ das Senden einer Nachricht ist immer vor deren Empfang
➥ Definition der Kausalitätsrelation → (happened before)
➥ falls Ereignisse a, b im selben Prozeß i sind und ti (a) < ti (b)
(ti : Zeitstempel mit Uhr von i), so gilt a → b
➥ falls a das Senden einer Nachricht und b deren Empfang ist,
so gilt a → b
➥ falls a → b und b → c, so gilt auch a → c (Transitivität)
➥ a → b bedeutet, daß b kausal von a abhängen kann
Roland Wismüller
Betriebssysteme / verteilte Systeme
29
Client/Server-Programmierung (1/13)
1.2 Zeit und Zustand in verteilten Systemen ...
Beispiele
a
Prozeß 4
k
g
c
Prozeß 2
Prozeß 3
i
b
Prozeß 1
d
f
h
j
e
l
➥ Hier gilt u.a.:
➥ b → i und a → h (Ereignisse im selben Prozeß)
➥ c → d und e → f (Senden / Empfang einer Nachricht)
➥ c → k und a → i (Transitivität)
➥ g 6→ l und l 6→ g: l und g sind nebenläufig (concurrent)
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
30
1.2 Zeit und Zustand in verteilten Systemen ...
Globaler Zustand: Ein Beispiel zur Motivation
➥ Szenario: Peer-to-Peer -Anwendung, Prozesse senden sich
gegenseitig Aufträge
➥ Frage: wann kann die Anwendung terminieren?
➥ Falsche Antwort: wenn kein Prozeß mehr einen Auftrag
bearbeitet
➥ Grund: Aufträge können noch in Nachrichten unterwegs sein!
Prozeß 1
Prozeß 2
Auftrag
idle
idle
➥ Weitere Anwendungen: verteilte Garbage-Collection, verteilte
Deadlock -Erkennung, ...
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
31
1.2 Zeit und Zustand in verteilten Systemen ...
➥ Wie bestimmt sich der Gesamtzustand eines verteilten Prozeßsystems?
➥ naiv: Summe der Zustände aller Prozesse (falsch!)
➥ Zwei Aspekte müssen beachtet werden:
➥ Nachrichten, die noch in Übertragung sind
➥
müssen mit in den Zustand aufgenommen werden
➥ Fehlen einer globalen Zeit
➥
ein Globalzustand zur Zeit t kann nicht definiert werden!
➥ Zustände der Prozesse beziehen sich immer auf lokale
(und damit unterschiedliche) Zeiten
➥ Frage: Bedingung an die lokalen Zeiten? ⇒ konsistente
Schnitte
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
32
1.2 Zeit und Zustand in verteilten Systemen ...
(Animierte Folie)
Konsistente Schnitte
➥ Ziel: bilde aus (nicht zeitgleich ermittelten) lokalen Zuständen
einen sinnvollen globalen Zustand
➥ Prozesse modelliert durch Folgen von Ereignissen:
Prozeß 1
Prozeß 2
Prozeß 3
konsistente Schnitte
inkonsistenter Schnitt
➥ Schnitt: betrachte in jedem Prozeß ein Präfix der Ereignisfolge
➥ Konsistenter Schnitt:
➥ falls der Schnitt den Empfang einer Nachricht beinhaltet, so
beinhaltet er auch das Senden dieser Nachricht
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
33
1.3 Middleware
Verteilte Anwendung (VA)
VA−
Komponente
VS−Knoten
VA−
Komponente
Netz
VS−Knoten
Verteiltes System (VS)
Verteilte Anwendung (VA)
VA−
VA−
Komponente
Komponente
Middleware Netz Middleware
VS−Knoten
VS−Knoten
Verteiltes System (VS)
➥ VA nutzt VS für Kommunikation zwischen ihren Komponenten
➥ VSe bieten i.a. nur einfache Kommunikationsdienste an
➥ direkte Nutzung: Netzwerkprogrammierung
➥ Middleware bietet intelligentere Schnittstellen
➥ verbirgt Details der Netzwerkprogrammierung
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
34
1.3 Middleware ...
➥ Middleware ist Schnittstelle zwischen verteilter Anwendung und
verteiltem System
➥ Ziel: Verbergen der Verteilungsaspekte vor der Anwendung
➥ u.a. Zugriffs- und Orts-Transparenz
➥ Middleware kann auch Zusatzdienste für Anwendungen bieten
➥ starke Unterschiede bei existierender Middleware
➥ Unterscheidung:
➥ kommunikationsorientierte Middleware
➥
(nur) Abstraktion von der Netzwerkprogrammierung
➥ anwendungsorientierte Middleware
➥
neben Kommunikation steht Unterstützung verteilter
Anwendungen im Mittelpunkt
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
35
1.3.1 Kommunikationsorientierte Middleware
➥ Fokus: Bereitstellung einer Kommunikationsinfrastruktur für
verteilte Anwendungen
➥ Aufgaben:
➥ Kommunikation
➥ Behandlung der Heterogenität
➥ Fehlerbehandlung
Anwendung
Kommunikationsorientierte
Middleware
Betriebssystem / verteiltes System
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
36
1.3.1 Kommunikationsorientierte Middleware ...
Entfernter Prozeduraufruf (RPC, Remote Procedure Call)
➥ Ermöglicht einem Client den Aufruf einer Prozedur in einem
entfernten Server-Prozeß
Client−
Prozeß
y = P(x);
Eingabeparameter
Resultate
P(a) {
Server−
...
return b; Prozeß
}
➥ Kommunikation nach Anfrage / Antwort-Prinzip
Entfernter Methodenaufruf (RMI, Remote Method Invocation)
➥ Ermöglicht einem Objekt, Methoden eines entfernten Objekts
aufzurufen
➥ Prinzipiell sehr ähnlich zu RPC
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
37
1.3.1 Kommunikationsorientierte Middleware ...
Gemeinsame Grundkonzepte entfernter Aufrufe
➥ Client und Server werden durch Schnittstellendefinition entkoppelt
➥ legt Namen der Aufrufe, Parameter und Rückgabewerte fest
➥ Einführung von Client-Stubs und Server-Stubs (Skeletons) als
Zugriffsschnittstelle
➥ werden automatisch aus Schnittstellendefinition generiert
➥
IDL-Compiler, Interface Definition Language
➥ sind verantwortlich für Marshalling / Unmarshalling
sowie für die eigentliche Kommunikation
➥ realisieren Zugriffs- und Ortstransparenz
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (1/13)
38
1.3.1 Kommunikationsorientierte Middleware ...
Funktionsweise der Client- und Server-Stubs (RPC)
Server−Prozeß
Client−Prozeß
Client−Stub
y=P(x)
Server−Skeleton
P(a) {
Argumente a in
Nachricht m1 packen
send(Server, m1);
receive(Server, m2) ;
Ergebnis b aus Nach−
richt m2 auspacken
}
return b;
Roland Wismüller
Betriebssysteme / verteilte Systeme
while (true) {
receive(m1);
client=sender(m1);
Argumente x aus Nach−
richt m1 auspacken
y = P(x) ;
Ergebnis y in Nach−
richt m2 packen
send(client, m2);
}
P(a) {
...
return b;
}
Client/Server-Programmierung (1/13)
39
Client/Server-Programmierung
WS 2013/2014
25.10.2013
Roland Wismüller
Betriebssysteme / verteilte Systeme
.d
[email protected] e
rolanda
Tel.: 0271/740-4050, Büro: H-B 8404
Stand: 8. November 2013
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (2/13)
i
1.3.1 Kommunikationsorientierte Middleware ...
Basis von RMI: Das Proxy-Pattern
➥ Client arbeitet mit Stellvertreterobjekt (Proxy) des eigentlichen
Serverobjekts
➥ Proxy und Serverobjekt implementieren dieselbe Schnittstelle
➥ Client kennt / nutzt lediglich diese Schnittstelle
<<interface>>
Schnittstelle
Client
Proxy
Roland Wismüller
Betriebssysteme / verteilte Systeme
Objekt
40
Client/Server-Programmierung (2/13)
1.3.1 Kommunikationsorientierte Middleware ...
Ablauf eines entfernten Methodenaufrufs
Client−Rechner
Server−Rechner
Client
Server
Selbe Schnitt−
stelle wie beim
Objekt
Client ruft
eine
Methode
auf
Proxy
Client−BS
Netzwerk
Roland Wismüller
Betriebssysteme / verteilte Systeme
Skeleton ruft
dieselbe
Methode für
das Objekt auf
Objekt
Status
Methode
Skeleton
Schnitt−
stelle
Server−BS
Verpackter Aufruf wird über das Netzwerk weitergegeben
(Objekt−ID, Methodenname, Parameter)
Client/Server-Programmierung (2/13)
41
1.3.1 Kommunikationsorientierte Middleware ...
Erstellung eines Client/Server-Programms
Server−
Prozeduren
Compiler
Server
Server−Skel.
Schnittstellen−
beschreibung
RPC/RMI
Laufzeit−
Bibliothek
IDL−
Compiler
Client−Stubs
Client−
Programm
Compiler
Client
➥ Gilt prinzipiell für alle Realisierungen entfernten Aufrufe
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (2/13)
42
1.3.2 Anwendungsorientierte Middleware
➥ Setzt auf kommunikationsorientierter Middleware auf
➥ Erweitert diese um:
➥ Laufzeitumgebung
➥ Dienste
➥ Komponentenmodell
Anwendungs− Anwendungs− Anwendungs−
komponente komponente komponente
Komponentenmodell
Dienste
Laufzeitumgebung
Dienste
Kommunikationsinfrastruktur
Betriebssystem / verteiltes System
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (2/13)
43
1.3.2 Anwendungsorientierte Middleware ...
Laufzeitumgebung
➥ Ressourcenverwaltung
➥ Pooling von Prozessen, Threads, Verbindungen
➥ Steuerung der Nebenläufigkeit
➥ Verbindungsverwaltung
➥ Verbesserung der Verfügbarkeit
➥ Replikation, Clustering
➥ Sicherheitsmechanismen
➥ Authentifizierung und Autorisierung
➥ Vertraulichkeit und Integrität
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (2/13)
44
1.3.2 Anwendungsorientierte Middleware ...
Dienste
➥ Namensdienst (Verzeichnisdienst)
➥ Zuordnung von Namen zu Referenzen (Adressen)
➥ Sitzungsverwaltung
➥ Transaktionsverwaltung
➥ Persistenzdienst
➥ z.B. objektrelationaler Mapper (OR-Mapper)
Komponentenmodell
➥ Komponentenbegriff, Schnittstellenverträge, Laufzeitumgebung
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (2/13)
45
1.4 Java RMI
➥ Java RMI ist fester Bestandteil von Java
➥ erlaubt Nutzung entfernter Objekte
➥ Stub- und Skeleton-Klassen werden automatisch aus Schnittstellendefinition (Java Interface) generiert
➥ ab JDK 1.5 dynamisch zur Laufzeit
➥ Namensdienst: RMI Registry
➥ Verteilte Garbage-Collection
Roland Wismüller
Betriebssysteme / verteilte Systeme
46
Client/Server-Programmierung (2/13)
1.4 Java RMI ...
Beispiel: Hello World
Client−JVM
Interface
interface Hello {
String sayHello();
}
Client−Klasse
class HelloClient {
...
Hello h;
...
s = h.sayHello();
...
Roland Wismüller
Betriebssysteme / verteilte Systeme
Server−JVM
Server−Klasse
class HelloServer
implements Hello {
String sayHello() {
return "Hello World";
}
...
Client/Server-Programmierung (2/13)
47
1.4 Java RMI ...
Hello-World Interface
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hello extends Remote {
String sayHello() throws RemoteException;
}
Marker−Schnittstelle ,
enthält keine Methoden,
markiert Interface als
RMI−Schnittstelle
Roland Wismüller
Betriebssysteme / verteilte Systeme
RemoteException zeigt
Fehler im entfernten
Objekt bzw. bei Kommu−
nikation an
Client/Server-Programmierung (2/13)
48
1.4 Java RMI ...
Hello-World Server
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
public class HelloServer extends UnicastRemoteObject
implements Hello {
public HelloServer() throws RemoteException {
super();
}
public String sayHello() {
return "Hello World!";
Remote Methode
}
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (2/13)
49
1.4 Java RMI ...
Hello-World Server ...
public static void main(String args[]) {
try {
HelloServer obj = new HelloServer();
Naming.rebind("rmi://localhost/Hello−Server", obj);
}
catch (Exception e) {
System.out.println("Error: " + e.getMessage());
e.printStackTrace();
}
}
}
Erzeugen des
Server−Objekts
Registrieren des Server−Objekts
unter dem Namen "Hello−Server"
beim Name−Server (RMI−Registry,
lokaler Rechner, Port 1099)
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (2/13)
50
1.4 Java RMI ...
Hello-World Client
import java.rmi.*;
public class HelloClient {
public static void main(String args[]) {
Objektreferenz vom
try {
Name−Server holen
Hello obj =
(Hello)Naming.lookup("rmi://bspc02/Hello−Server");
String message = obj.sayHello();
System.out.println(message);
}
Aufruf der Methode
catch (Exception e) {
des entfernten Objekts
...
}
}
}
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (2/13)
51
1.4 Java RMI ...
Übersetzen und Starten des Systems
HelloClient.java
Hello.java
javac
javac
Hello.class
Hello.class
bis JDK 1.4
HelloClient.class
Client−Seite
Roland Wismüller
Betriebssysteme / verteilte Systeme
HelloServer.java
HelloServer.class
rmic
Server−Seite
HelloServer_Stub.class
Client/Server-Programmierung (2/13)
52
1.4 Java RMI ...
Parameterübergabe
➥ Übergabe von Parametern an Remote-Methoden erfolgt
➥ entweder über call-by-value
➥
für Werttypen und serialisierbare Objekte
➥ oder über call-by-reference
➥
für Objekte, die Remote implementieren
➥ Entscheidung wird z.T. erst zur Laufzeit getroffen!
➥ Rückgabe des Ergebnisses folgt selben Regeln wie Parameterübergabe
Roland Wismüller
Betriebssysteme / verteilte Systeme
Client/Server-Programmierung (2/13)
53
Herunterladen