Kapitel 12: Client/Server

Werbung
12. Client/Server-Anwendungen
12.1 Allgemeines
p
"Client/Server" - ein Modewort und vielschichtiger
Begriff
p
Wird in verschiedenen Kontexten mit verschiedener
Bedeutung verwendet:
p
m
Downsizing / Rightsizing
m
Datenkapselung
m
Informationsserver / Data Warehouse
Ziel dieses Kapitels
m
Vorstellung des Client/Server-Verarbeitungsmodells
m
Vorstellung der Architekturvarianten
m
Kurze Vorstellung der Basis-Technologien für die
Implementierung
m
Aufzeigen von Fallstricken
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-1
12.2 Das Client/Server-Modell
p
Das Client/Server-Modell - C/S-Modell - ist ein
Software-Architektur-Modell
p
Zwei Komponententypen: Client und Server
p
Grundschema der Kooperation
p
m
Die Initiative zu einer Interaktion geht stets vom Klienten
(Client) aus.
m
Der Client formuliert Aufträge und schickt diese zur
Ausführung an einen Dienstanbieter (Server).
m
Für jeden Server ist festgelegt bzw. bekannt, welche
Arten von Diensten (Services) er anbietet.
Typisch für C/S-Modell:
m
Asymmetrie der Rollen bzw. Funktionen.
m
Das Modell legt die Rolle der Beteiligten (Client oder
Server) sowie die Abfolge der Interaktionsschritte fest
(siehe Abb. 12-1).
m
Ein Client kann im Laufe einer Verarbeitung auf mehrere
Server zugreifen
m
... und ein Server kann mehrere Clients bedienen
m
Ein Server kann im Rahmen einer Auftragsbearbeitung
selbst auch wieder Client sein (siehe Abb. 12-2).
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-2
Client
Server
1. Auftrag
2. Bearbeitung
3. Resultat/Antwort
Abb. 12-1: Interaktionen im Client/Server-Modell
Client
Server
Server/Client
Auftrag
Auftrag
Resultat/Antwort
Resultat/Antwort
Abb. 12-2: Verschiedene Rollen bei Auftragsausführung
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-3
12.3 Architekturaspekte
p
Viele verschiedene Realisierungsformen von C/SSystemen möglich
p
Die Unterschiede liegen hauptsächlich in der Aufteilung
der Funktionen des Anwendungssystems (Applikation)
zwischen Client- und Server-System
p
Komponenten einer Applikation
m
Präsentationsfunktion
Gesamte Handhabung der Ein-/Ausgabe (Tastatur, Maus, ....,
Bildschirm, Drucker, ...)
m
Applikationsfunktion
Eigentliche anwendungsspezifische Programm- und Ablauflogik;
benutzt Präsentations- und Datenverwaltungsfunktionen (z.B.
mittels embedded SQL) zur Realisierung
m
Datenverwaltungsfunktion
Realisieren den physischen Zugriff auf die Daten mittels Dateioder DB-Schnittstelle.
PräsentationsFunktionen
ApplikationsFunktionen
DatenverwaltungsFunktionen
DB
Abb. 12-3: Komponenten einer Applikation
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-4
p
Verschiedene "Schnitte" möglich:
Client
0
Server
2
1
Präsentation
3
Applikation
4
5
Datenverwaltung
Abb. 12-4: Mögliche Funktionsverteilungen
Schnitt 0:
(= keine Zerlegung) Typische Zentralrechneranwendung: Vom Datenzugriff über Applikationslogik bis zum Bildschirmaufbau wird alles vom
Zentralsystem erledigt.
Schnitt 1:
Verteilte Präsentation. Die Präsentationsfunktion
wird hierbei in eine Server- und eine ClientKomponente aufgespalten (siehe Abs. 12.3.1).
Schnitt 2:
Entfernte Präsentation. Vom Grundgedanken her
traditionelle Terminal-Host-Konfiguration. Die Applikation steuert, im Gegensatz zur verteilten
Präsentation, den Bildschirm durch entsprechende
Kommandosequenzen unmittelbar selbst.
Ein Terminalemulationsprogramm auf einem PC,
das mit einem Hostsystem verbunden ist, wäre ein
Beispiel für eine solche C/S-Variante.
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-5
Schnitt 3:
Verteilte Applikationsfunktion. Ein Teil der
Applikation auf dem Client-, ein anderer auf dem
Serversystem ausgeführt (siehe Abs. 12.3.3).
Schnitt 4
C/S-Variante mit entferntem Datenbankzugriff
(remote database access; RDA), der über eine
semantisch hohe Schnittstelle (wie z. B. SQL)
realisiert wird (siehe Abs. 12.3.2).
Schnitt 5
C/S-Variante, bei welcher der Server auf einen
reinen Dateiserver (file server) bzw. Pageserver
reduziert wird. Die Umsetzung logische Satzadresse (z.B. über TID) in physische Adresse wird
clientseitig durchgeführt.
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-6
12.3.1 Verteilte Präsentation
p
Bekanntestes System für verteilte Präsentation
X-Windows1
p
Zwei Komponenten: X-(Display-)Server + X-Client(s)
p
Der X-Server
p
m
läuft auf dem Rechner des Benutzers und verwaltet die
Fenster seiner X-Clients.
m
bietet den X-Clients Ein- und Ausgabedienste an, mittels
derer diese die gewünschte Anwendungsfunktionalität
(bzgl. Ein-/Ausgaben) realisieren
m
stellt auf seinem Bildschirm die Fenster (X-Windows) dar
und registriert Maus- und Tastatureingaben
Die X-Clients
m
können auf demselben oder auch einem anderen
Rechner wie der X-(Display-)Server laufen
m
sind hinsichtlich der Ein-/Ausgabe ortsunabhängig.
p
Der Benutzer kann auf seinem Bildschirm mit mehreren
Anwendungen gleichzeitig arbeiten
p
und kann zwischen diesen mittels Cut & Paste
(unterstützt durch den X-Server) Daten austauschen
p
Die Programmierschnittstelle zwischen X-Server und
X-Client ⇒ X-Bibliothek
1 1984 am MIT (Massachusetts Institute for Technology) entwickelt
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-7
Datei
Bearbeiten
Zeichnen
Anordnen
Hilfe
Datei
Bearbeiten
Zeichnen
Anordnen
Hilfe
Applikation
X-Display-Server
X-Client
Rechner A
a) nichtverteilte Lösung
Applikation
X-Display-Server
Rechner A
X-Client
Rechner B
b) verteilte Lösung
Abb. 12-5: X-Windows-basierte Applikation
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-8
12.3.2 Entfernter Datenbankzugriff
p
"Schnitt 4" in Abb. 12-4
m
Die gesamte Datenverwaltungsfunktionalität wird auf
dem Serversystem bereitgestellt.
m
Die gesamte Applikationsfunktionalität liegt auf dem
Client-System.
p
Der Client bedient sich hierbei einer semantisch „hohen“
Schnittstelle, wie z. B. SQL oder eines objektorientierten
Pendants.
p
Die physischen Aspekte des Zugriffs, insbesondere der
gezielte Zugriff auf Datenbankseiten, Indexe u. ä.
bleiben hierdurch vor dem Client verborgen.
p
Im einfachsten Fall bedient sich das Clientsystem der
„normalen“ Datenbankschnittstelle des eingesetzten
DBMS, wie z. B. Embedded SQL.
p
Für die Anwendung ist es in diesem Fall völlig
transparent, ob die Datenverwaltungsfunktionalität auf
demselben Rechner oder auf einem entfernten Rechner
angeboten wird oder ob es sich um den Zugriff auf ein
verteiltes DBMS handelt.
p
Viele DBMSe bieten über diese Schnittstelle auch den
transparenten Zugriff auf Daten anderer Datenbanken
desselben oder anderer Hersteller an
⇒ Database Gateways (proprietäre Lösung!)
p
Das eigene Server-DBMS fungiert dabei quasi als
"Vermittler" (zu Einschränkungen siehe Abs. 5.6).
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-9
12.3.3 Verteilte Applikationsfunktion
p
"Schnitt 3" in Abb. Abb. 12-4.
p
Merkmal: Ein Teil der Applikation wird auf dem Clientein anderer auf dem Server-System ausgeführt.
p
Problemstellung in der Regel: Verteilung so wählen, daß
Kommunikationsaufwand möglichst gering wird
p
Beispiel 12-1:
Gegeben sei ein Informationssystem, das Bestellungen verwaltet.
m
Relation Lieferanten
n AnzBestGesamt = die Anzahl der aktuell noch offenen
Bestellungen bei diesem Lieferanten
n BestSummeGesamt = (ggf. restlicher) Gesamtwert dieser
Bestellungen an.
m
Relation Bestellungen
n AnzPosten = aktuelle Anzahl der (ggf. restlichen)
Bestellpositionen dieser Bestellung
n BestSumme = (ggf. restlicher) Gesamtwert dieser Positionen
(= Summe über alle BestWert-Attribute einer Bestellung).
m
Relation BestellPositionen
= die einzelnen Positionen der Bestellungen
Lieferanten
Bestellungen
LiefNr
LiefName
BestNr LiefNr
BestellPositionen
BestNr
PosNr
...
...
AnzBestGesamt
BestSummeGesamt
AnzPosten
BestSumme
...
BestWert
ArtNr
Abb. 12-6: Relationen für Bestell-Informationssystem
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-10
Datenbankzugriffe für die Implementierung der Teilfunktion
"Verbuchung Warenzugang":
1. SELECT-Zugriff auf Lieferant: über LiefNr oder LiefName.
2. SELECT-Zugriff auf Bestellungen: über LiefNr.
3. SELECT-Zugriff auf BestellPositionen: über BestNr.
4. DELETE-Zugriff auf BestellPositionen: ein Tupel wird
gelöscht.
5. UPDATE-Zugriff auf Bestellungen: Aktualisierung von
AnzPosten und BestSumme.
6. UPDATE-Zugriff auf Lieferanten: Aktualisierung von
BestSummeGesamt.
7. COMMIT für alle Änderungsoperationen.
Bei dieser Vorgehensweise sind also insgesamt sieben (entfernte)
Datenbankaufrufe erforderlich. 2
Alternative: Stored Procedure
Naheliegende Funktionsaufteilung in diesem Fall:
Zusammenfassung der DELETE- und UPDATE-Anweisungen in
einer Stored Procedure
⇒ DeleteBestPos(LiefNr, BestNr. BestPos, BestWert)
Damit:
Schritte 1 - 3 wie oben
Schritte 4 - 7 als Stored-Procedure-Aufruf
2 Durch Verwendung eines Joins könnten zwar die ersten drei Aufrufe im Prinzip zu
einem Aufruf zusammengefaßt werden, damit würde sich allerdings das zu
übertragende Datenvolumen stark aufblähen und auch die Verarbeitung im
Anwendungsprogramm (Zerlegen des Join-Resultats in die Bestandteile „Lieferant“,
„Bestellung“ und „BestellPositionen“) komplizierter werden, so daß man dies in der
Regel nicht tun wird.
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-11
CREATE PROCEDURE DeleteBestPos ( LiefNr
BestNr
PosNr
BestWert
INTEGER,
INTEGER,
INTEGER,
DECIMAL(7,2))
BEGIN
/* Beginn Prozedurrumpf */
DELETE
Hostvariable
FROM BestellPositionen
WHERE BestNr = :BestNr AND PosNr = :PosNr;
ON ERROR GOTO Fehler;
UPDATE
SET
WHERE
Bestellungen
AnzPosten = AnzPosten -1,
BestSumme = BestSumme - :BestWert
BestNr = :BestNr;
ON ERROR GOTO Fehler;
UPDATE
SET
WHERE
Lieferanten
BestSummeGesamt = BestSummeGesamt - :BestWert
LiefNr = :LiefNr;
ON ERROR GOTO Fehler;
COMMIT WORK;
GOTO Ende;
Fehler:
ROLLBACK WORK;
SQL_STATUS_CODE := ....;
Ende:
END;
/* Ende Prozedurrumpf */
Abb. 12-7: Stored Procedure
3
3 Stored Procedures, Stored Functions und Triggers sind in SQL-92 noch nicht
definiert, sondern erst für SQL-3 vorgesehen. Sie werden jedoch von einigen
relationalen DBMSen – allerdings in syntaktisch unterschiedlichen Formen – bereits
heute angeboten.
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-12
Alternative dazu: Trigger
Löschoperation (Schritt 4) noch "von Hand", restliche Updates
dann über Trigger-Prozedur.
Ablauf hier:
Schritte 1- 4 wie gehabt
Schritt 5 (faßt mittels Trigger die Schritte 5-7 zusammen)
CREATE TRIGGER AfterDeleteBestPos
AFTER DELETE ON BestellPositionen
FOR EACH ROW
DECLARE
LiefNr Integer;
BEGIN
SELECT
INTO
FROM
WHERE
LiefNr
:LiefNr
Bestellungen
BestNr = old.BestNr;
/* Deklaration Hilfsvariable
*/
/* Ermittlung LieferantenNr */
/* und Speicherung in LiefNr */
Zugriff auf alten Tupelwert
ON ERROR GOTO Ende;
UPDATE
SET
WHERE
Bestellungen
/* Aktualisierung Bestellungen */
AnzPosten = AnzPosten - 1,
BestSumme = BestSumme - old.BestWert
BestNr = old.BestNr;
ON ERROR GOTO Ende;
UPDATE
SET
WHERE
Lieferanten
/* Aktualisierung Lieferanten */
BestSummeGesamt =
BestSummeGesamt - old.BestWert
LiefNr = :LiefNr;
Ende:
END;
Abb. 12-8: Trigger
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-13
p
p
p
Probleme bei der Verwendung von Triggern
m
Erschwerte Wartung: Ggf. zwei Programm zu ändern
m
Kaskadierungseffeke (Trigger aktiviert Trigger ...)
m
Aktivierungsreihenfolge manchmal schwer
durchschaubar (bei Systemen, die mehrfache Trigger
eines Typs (ON UPDATE, ON DELETE, ...) je Tabelle
zulassen)
m
Fehlerpotential bei Systemen, die nur einen Trigger
eines Typs je Tabelle zulassen
⇒ Fallunterscheidung innerhalb des Triggers
⇒ "WHEN-Bedingung" wird immer unspezifischer
Zusammenfassung
m
Stored Procedures / Trigger die "Datenbank-Lösung" für
verteilte Applikationsfunktion
m
kann helfen - wo geeignet -, die Performanz signifikant
zu verbessern
Wegen der Wartungsproblematik
m
Stored Procedures und Trigger mit Augenmaß
einsetzen!
m
Wartung mit bedenken
m
Verlust an Portabilitiät bedenken
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-14
12.4 Basistechnologien
p
Im folgenden exemplarische und skizzenhafte
Behandlung einiger Basistechnologien, die bei der
Realsierung eines C/S-Systems oftmals direkt oder
indirekt zum Einsatz kommen.
12.4.1 Remote Procedure Call (RPC)
p
p
Bekannteste Vertreter:
m
Sun-RPC
m
DCE-RPC (der OSF 4)
Zwei Teile:
m
Client-Stub
⇒ "entfernter" Prozeduraufruf auf dem Client
m
Server-Stub
⇒ "echter" Prozeduraufruf auf dem Server
p
Beschreibung der Schnittstellen mittels spezieller
Interface Description Language (IDL), die jeweils an
die Syntax der verwendeten Programmiersprache
angelehnt ist.
p
IDL-Compiler erzeugt daraus dann den "echten" AufrufCode
4 Open Software Foundation
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-15
Server
Client
Anwendungsprogramm
Client-Stub
Prozeduraufruf
Verpacken
Aufrufparameter
KommunikationsKomponente
Übertragung
Aufruf
KommunikationsKomponente
Server-Stub
ServerProgramm
Empfang
Aufruf
Auspacken
Aufrufparameter
ProzedurAufruf
Warten
Rückgabe
Ergebnis
Auspacken
Ergebnis
Empfang
Ergebnis
Abarbeitung
Übertragung
Ergebnis
Verpacken
Ergebnis
Ergebnisrückgabe
Abb. 12-9: Ablauf eines RPC
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-16
p
p
Potentielle Probleme:
m
fehlender Time-out-Mechanismus
m
falls nicht vorhanden, komplexe Eigen-Implementierung
(⇒ paralleler Thread)
m
dadurch erhöhtes Blockierungs- bzw. Fehlerrisiko
RPC-Ausführungssemantiken
m
"kann sein" (may-be)-Semantik: Ausführung ohne
Garantie über die Häufigkeit der Prozedurausführungen
in Fehlerfällen
m
"höchstens einmal" (at most once)-Semantik: maximal
einmalige Ausführung der Prozedur auf Serverseite,
ggf. mehrfach auf Serverseite eintreffende Aufrufaufforderungen werden ignoriert,
m
"mindestens einmal" (at least once)-Semantik: die
Prozedur wird mindestens einmal auf dem Server
ausgeführt (evtl. auch mehrfach),
m
"genau einmal" (exactly once)-Semantik: die Prozedur
wird genau einmal ausgeführt.
Anmerkung:
Diese Ausführungssemantiken werden vor allem dann
wichtig, wenn es mehrere Server im Netz geben kann, die
einen bestimmten Dienst erbringen können.
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-17
p
Für transaktionsorientiertes Arbeiten verlangt der
einfache RPC dem Anwendungsentwickler einen
erheblichen Entwurfs- und Implementierungsaufwand
ab, um die sichere bzw. atomare Ausführung der
Anwendungsfunktion auch im Kontext möglicher Fehler
zu gewährleisten. - Er ist daher solche Aufgaben
praktisch ungeeignet.
p
Deshalb Entwicklung von RPC-Erweiterungen, um RPCs
u.a. auch in einem transaktionsorientierten Kontext
sinnvoll einsetzen zu können (⇒transactional RPCs).
p
Von einem Transactional RPC spricht man, wenn
m
zwischen Client und Server eine (transaktions-)
gesicherte Übergabe erfolgt,
m
die Prozedur in Transaktionslogik („Alles-oder-NichtsPrinzip“) implementiert wird,
m
die Freigabe aller Änderungen einem gemeinsamen
Commit-Protokoll unterliegt.
p
Oftmals werden diese erweiterten RPCs daher in
Verbindung mit TP-Monitoren (siehe Abschnitt 12.4.7)
realisiert bzw. angeboten.
p
Die meisten RPC-Systeme fallen in die At-most-onceFehlerklasse, weil sie einen guten Kompromiß zwischen
Nützlichkeit und Implementierungsaufwand darstellt. 5
5 Eine ausführlichere Behandlung und ein Vergleich von RPC-Systemen findet sich
in Schill, A.: Remote Procedure Call: Fortgeschrittene Konzepte und Systeme - ein
Überblick. Informatik-Spektrum, Band 15, Teil 1: Grundlagen, Heft 2, April 1992, S.
79-87, Teil 2: Erweiterte RPC-Ansätze, Heft 3, Juni 1992, S. 145-155
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-18
12.4.2 Systemeinbettung: Prozesse und
Threads
p
Problemstellung:
Eine bestimmte Anwendung soll von mehreren
Benutzern (auf einem Applikationsserver) gleichzeitig
genutzt werden können.
p
Alternativen
m
jede Anwendungsinstanz als eigener Prozeß mit
eigenem geladenen Programmcode
⇒ komplett getrennte Adreßräume
m
dto., aber mehrfache Verwendung desselben
Programmcodes 6
⇒ Shared Segments
⇒ Voraussetzung: Code reentrant übersetzt
m
Ausführung der Anwendungsinstanz als Threads
⇒ eigener Programmzähler
⇒ evlt. auch lokale Variablen möglich
⇒ ansonsten gemeinsamer Adreßraum
6 Macht UNIX automatisch bei mehrfachem Laden eines Programms. In einigen
älteren Betriebssystemen muß man diese Shared Segments explizit anlegen und
verwalten.
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-19
p
Beispiel 12-2: Prozeßerzeugung und -überlagerung in UNIX
main()
{
int pid;
switch( pid = fork() )
{
case -1 : printf("fork failed\n");
exit(1);
case 0 : printf("child: process id = %d\n", getpid() );7
execl("/bin/ls", "ls", "-la", (char*)0);
/* Überlagerung*/
printf("exec failed\n");
exit(1)
default : printf("parent: process id of child = %d\n", pid)
exit(0);
}
}
Anmerkungen:
case = -1 fängt den Fall ab, daß fork fehlschlägt und als Returncode -1
zurückliefert.
case = 0 trifft im Erfolgsfall auf den Kindprozeß zu. In diesem Fall führt
der Kindprozeß jedoch nicht den Code des Vaterprozesses aus,
sondern überlagert diesen (natürlich nur in seinem eigenen
Adreßraum) durch ein anderes Programm, das er mittels execl(...)
einlagert und zur Ausführung bringt. – In unserem Beispiel
lagern wir das ls-Kommando von Unix ein und bringen es zur
Ausführung.
default
(also case > 0 ) trifft im Erfolgsfall auf den Vaterprozeß zu. In
unserem Beispiel wird lediglich die Prozeßnummer des Kindprozesses ausgegeben. In der Regel wird hier natürlich der
eigentliche Programmcode des Vaterprogramms folgen.
7 mit getpid() kann ein Prozeß seine eigene Prozeßnummer erfragen.
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-20
12.4.3 Kommunikationsdienste
p
Zu unterscheiden
m
Kommunikation zwischen Prozessen auf demselben
Rechner
⇒ Interprozeßkommunikation
⇒ pipes, named pipes (wie Dateizugriff)
⇒ Message send/receive
m
Kommunikation zwischen Prozessen auf verschiedenen
Rechnern
⇒ Sockets
p
Sockets
m
logische "Steckdosen" zur Herstellung bidirektionaler
Kommunikationsverbindungen
m
bestehen (aus Benutzersicht) aus drei Teilen:
n
Socket-Kopf (socket layer)
n
Protokollteil (protocol layer)
n
Gerätetreiber (device layer)
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-21
result = socket( pf, type, protocol ) mit
pf
= Protokoll-Familie
z. B. TCP/IP (Internet), dann pf = PF_INET
Appletalk, dann pf = PF_APPLETALK,
Unix-intern, dann pf = PF_UNIX
type
= Art (Typ) der Kommunikation
z. B. SOCK_STREAM, SOCK_DGRAM,
SOCK_RAW
protocol = (ggf.) genauere Spezifikation des gewählten
Protokolltyps
result
= Deskriptor
Abb. 12-10: Erzeugung eines Socket
Client-Prozeß
Server-Prozeß
Socket-Kopf
Socket-Kopf
TCP
TCP
Protokollteil
Protokollteil
IP
Gerätetreiber
IP
Ethernettreiber
Ethernettreiber
Gerätetreiber
Rechnernetz
Abb. 12-11: Socket-Modell
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-22
p
Je nach Protokoll und Gebrauch verschiedene
Kommunikationsmodelle möglich
m
m
Stream-Verbindung
n
Stellt eine virtuelle, gesicherte, verbindungsorientierte
Kommunikation zur Verfügung.
n
Analog zum Telefonieren wird (virtuell) eine „feste“
Kommunikationsverbindung zwischen zwei Prozessen
aufgebaut, also eine Art von „virtueller Leitung“
geschaltet.
n
Nachdem die Verbindung hergestellt ist, können mittels
send- und recv-Anweisungen Nachrichten versandt bzw.
empfangen werden
Datagram-Verbindung
n
Eine Nachricht an einen oder mehrere Adressaten
geschickt.
n
Der Empfang ist jedoch nicht gesichert und die
Reihenfolge der Nachrichten ist nicht garantiert.
n
Bei diesem Verbindungstyp können Nachrichten mit
sendto versandt und mittels recvfrom empfangen werden
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-23
p
Prinzipieller Ablauf bei Stream-Verbindung
Client
Server
1. Server-Socket erzeugen:
sock = socket(PF_INET, SOCK_STREAM, 0)
2. Socket mit Port verbinden:
serv_addr.sin_addr = < leer >;
serv_addr.sin_port = server_port;
serv_addr.sin_family = PF_INET;
serv_addr.sin_addr.s_addr =
htonl(INADDR_ANY);
bind(sock, &serv_addr, len_serv_addr);
3. Festlegen max. Anzahl von Verbindungen
(= Länge der Warteschlange):
listen( sock, MAX_CONNECTION);
4. Übergang in Wartezustand:
new_sock =
accept(sock, &clnt_addr, len_clnt_addr);
5. Client-Socket erzeugen:
sock = socket(PF_INET, SOCK_STREAM, 0);
6. (Virtuelle) Verbindung zum Server aufbauen:
serv_addr.sin_addr = server_host_addr;
serv_addr.sin_port = server_port;
serv_addr.sin_family = PF_INET;
connect(sock, &serv_addr, len_serv_addr);
7. Datenaustausch (voll duplex):
send( sock, clnt_data1, len_data1, 0);
len = recv(new_sock, clnt_data1, BUFSIZE);
send( new_sock, serv_data1, len_serv_data1, 0);
len = recv(sock, serv_data1, BUFSIZE);
.
.
.
8. Verbindung abbauen:
close( sock);
close( new_sock);
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-24
Erläuterungen:
Zu 2: Der Server initialisiert den Socket-Descriptor mit einer leeren
Host-Adresse und stellt den „Eingangsfilter“ auf
INADDR_ANY. Das heißt er ist bereit, von allen Clients
Nachrichten zu empfangen. Außerdem spezifiziert er die
"Steckdosen-Nummer" (Port) seines Sockets. Mittels der
Ports lassen sich die verschiedenen Server eines Rechners
unterscheiden. Die Adresse eines Servers setzt sich also aus
der Host-Adresse des Rechners, auf dem er läuft, und
dessen „Steckdosen-Nummer“ zusammen.
Zu 4: Der Aufruf new_sock = accept(sock, clnt_addr, len_clnt_addr)
versetzt den Server in einen Wartezustand. Er wartet nun auf
Clients, welche die in clnt_addr spezifizierten Anforderungen
(Protokoll-Familie, Adresse) erfüllen.
Zu 6: Der Client spezifiziert genau den Server (Netzadresse) +
Server-Port, mit dem kommuniziert werden soll.8 Connect
stellt die Verbindung zum Server her, falls möglich bzw.
zulässig. (Der Server verbleibt hierdurch immer noch im
Wartezustand.)
Zu 7: Der Server wird durch den Eingang der Nachricht
"aufgeweckt" und erhält die Nachricht am Socket new_sock.
Der Socket-Deskriptor von new_sock wurde mit den
Absender-Adreßdaten des Clients initialisiert. Damit ist die
"Leitung" nun "geschaltet". Die weitere Kommunikation
zwischen diesem Client und diesem Server wird nun über
new_sock abgewickelt. Der "alte" Socket sock kann damit
zum Aufbau weiterer (paralleler) Verbindungen
wiederverwendet werden.
8 Die genaue Host-Adresse des Servers erhält man in der Regel durch eine entsprechende Bibliotheksfunktion, wie z. B. gethostbyname().
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-25
p
Prinzipieller Ablauf bei Datagram-Verbindung
Client
Server
1. Server-Socket erzeugen:
sock = socket(PF_INET, SOCK_DGRAM, 0)
2. Socket mit Port verbinden:
serv_addr.sin_addr = < leer >;
serv_addr.sin_port = server_port;
serv_addr.sin_family = PF_INET;
serv_addr.sin_addr.s_addr =
htonl(INADDR_ANY);
bind(sock, &serv_addr, len_serv_addr);
3. Client-Socket erzeugen:
sock = socket(PF_INET, SOCK_DGRAM, 0);
4. Daten senden (mit Empfängerangabe):
serv_addr.sin_addr = server_host_addr;
serv_addr.sin_port = server_port;
serv_addr.sin_family = PF_INET;
sendto(sock, clnt_data1, len_clnt_data1, NO_FLAGS,
&serv_addr, len_serv_addr);
len = recvfrom( sock, clnt_data1, BUFSIZE,
NO_FLAGS, &clnt_addr,
len_clnt_addr);
sendto(
sock, serv_data1, len_serv_data1,
NO_FLAGS, &clnt_addr,
len_clnt_addr);
len = recvfrom(
sock, serv_data1, BUFSIZE, NO_FLAGS,
&serv_addr, len_serv_addr);
.
.
.
5. Socket freigeben:
close( sock);
close( sock);
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-26
12.4.4 Autorisierung, Authentifizierung und
geschützte Übertragung
p
p
p
Probleme:
m
lokal: siehe Zugriff auf Dateien/Datenbanken
(siehe z.B. Vorlesung "Datenbanksysteme")
m
ungeschützte Übertragung von Paßwörtern
m
ungeschützte Übertragung (sensibler) Antwortdaten
Lästig und deshalb potentielle Schwachstelle
m
erforderliche Mehrfachanmeldungen bei den
Komponentensystemen
m
Versuchung groß,
n
Anmeldung im Programm "hart zu verdrahten"
n
Anmeldedaten zentral zu hinterlegen (⇒ Schutz?)
Sichere Lösung nicht ganz trivial
m
nichts für "Bastler"
m
ggf. geeignete "Middleware" (z. B. DCE) einsetzen
9
9 siehe hierzu z.B. P. Dadam: Verteilte Datenbanken und Client/Server-Systeme ...
bzw. für eine ausführlichere Darstellung A. Schill: DCE - Das OSF Distributed
Computing Environment, Einführung und Grundlagen, Springer-Verlag, 1993
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-27
12.4.5 Common Object Request Broker
(CORBA)
Common Facilities
Application Objects
Object Request Broker
Object Services
Abb. 12-12: OMG Object Management Architecture (OMA)
p
p
Application Objects
m
Ziel der OMA: Unterstützung von interoperablen,
portablen und wiederverwendbaren Anwendungen.
m
Die restlichen Komponenten dienen dazu, dieses Ziel zu
erreichen.
Object Request Broker (ORB)
m
Der ORB ist die Kernkomponente von OMA.
m
Er vermittelt zwischen den verteilten Objekten und sorgt
dafür, daß die Methodenaufrufe zum passenden Zielobjekt
geleitet werden, daß dieses aktiviert wird (falls erforderlich)
und daß die Ergebnisse zum Aufrufer gelangen.
m
Architektur und Funktion des ORB sind in der CORBA
festgelegt.
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-28
p
p
Object Services
m
Die Objektdienste unterstützen die Abwicklung der Interaktionen auf den verteilten Objekten.
m
Zu diesen Diensten gehören Basisfunktionen wie Sicherheit,
Ereignisbehandlung, persistente Speicherung, ...
m
Ziel der OMG: Auszuarbeitung entsprechender
Spezifikationen für diese Objektdienste.
Common Facilities
m
p
Sammlung von Objekten, die von vielen Anwendungen
benötigt werden, wie z. B. Objekte (und damit
verbundene Methoden) zum Drucken oder für die
Behandlung von Fehlern.
Die Common Object Request Broker Architecture
(CORBA) konkretisiert Aufbau, Funktionalität und
Schnittstellen eines ORBs.
ServerObjekt
Aufrufer
Dynamische
Schnittstelle
IDL
Skeleton
Statische
IDL
Stubs
ORB-Schnittstelle
Objektadapter
ORB-Kern
Schnittstellenverzeichnis
(interface repository)
Implementierungsverzeichnis
(implementation repository)
Abb. 12-13: OMG CORBA
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-29
p
Der ORB bietet zwei Arten von Schnittstellen für den
C/S-Operationsaufruf an: 10
m
Statische Schnittstelle:
n
m
Wie beim RPC (siehe Abschnitt 12.4.1) wird vor der
Ausführung des Client-Programms ein Client-Stub aus
der Schnittstellenbeschreibung erzeugt und statisch zum
Client-Programm gebunden.
Dynamische Schnittstelle:
n
Erlaubt das dynamische Absetzen von Aufrufen.
n
Der Client erzeugt zur Laufzeit einen Auftrag für eine
gegebene Serverschnittstelle und übergibt den Auftrag
an den ORB.
n
Der Client spezifiziert das referenzierte Objekt, welche
Operation (Methode) aufgerufen werden soll und die
aktuellen Aufrufparameter.
n
Die dynamische Schnittstelle ist in der OMG-CORBASpezifikation verbindlich festgelegt.
p
Für das aufgerufene Objekt ist nicht erkennbar, über
welche der beiden Aufrufschnittstellen ein Dienst
angefordert wurde.
p
Ein Aufruf gelangt über den Objektadapter (object
adapter) und das IDL-Skeleton (ist vergleichbar mit
dem Server-Stub beim RPC) zum Server-Objekt.
10 Für weiterführende Details siehe z. B. R. M. Soley, W. Kent: The OMG Object
Model, in W. Kim (ed.) Modern Database Systems: The Object Model,
Interoperability, and Beyond. ACM Press / Addison-Wesley, 1995, pp. 18-41
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-30
p
Beim Aufruf einer Operation/Methode ist für den Client
nicht sichtbar,
m
ob das Objekt lokal vorhanden ist oder auf einem
anderen Rechner liegt
m
auf welcher Hardware und in welcher Programmiersprache ein Objekt implementiert ist
m
ob das aufgerufene Objekt bereits aktiv ist oder erst vom
Sekundärspeicher eingelagert werden muß.
Jedenfalls ist dies das Ziel, das mit der ORB bzw.
CORBA verfolgt wird.
p
p
Objektadapter
m
Bereitstellung allgemeiner Dienste wie Starten eines
inaktiven Server-Objektes, Unterstützung bei der
Authentifizierung.
m
Je nach Anwendungsklasse kann es verschiedene
Objektadapter mit unterschiedlicher Funktionalität
geben.
Implementation Repository
m
Soll die Implementierung von (Server-) Objekten
unterstützen.
m
Bereitstellung von Beschreibungsdaten über das Objekt,
wie etwa Ressourcenbedarf bei der Ausführung oder
Hardwarevoraussetzungen.
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-31
p
p
Interface Repository
m
Enthält IDL-Beschreibungen und Informationen zu
Server-Schnittstellen.
m
Es unterstützt zur Laufzeit das Hinzufügen, Suchen und
Auffinden von Schnittstellen sowie die Typüberwachung
der Parameter bei dynamischen Methodenaufrufen.
Abschließende Bemerkungen
m
Spezifikationen der OMG bezüglich ORB und CORBA
beziehen sich vor allem auf die Beschreibung/
Festlegung der Komponenten, deren Funktionalität und
Zusammenwirken sowie ggf. deren Schnittstellen. Die
Implementierung selbst ist Sache der einzelnen
Hersteller.
m
ORB/CORBA ist vom Ansatz her eine mächtige
Entwicklungsumgebung für objektorientierte – auch
verteilte objektorientierte – Anwendungen, die Anwendungsentwickler in C/S-Umgebungen die
Implementierung von systemnahen Diensten abnimmt
oder zumindest vereinfacht. Insbesondere wird sie in
einem hohen Maße eine transparente Verteilung der
Objekte/Dienste ermöglichen.
m
Die Güte der zugrundeliegenden ORB/CORBAImplementierung, insbesondere die Vorkehrungen für
eventuell auftretende Fehlerfälle, wird deshalb von
Hersteller zu Hersteller verschieden sein; auch die Interoperabilität zwischen verschiedenen ORB/CORBAImplementierungen wird nicht immer als gegeben
vorausgesetzt werden können.
m
Deshalb: Angebotene Lösungen genau prüfen!
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-32
12.4.6 Remote Database Access (RDA) 11
p
Bereitstellung von Diensten für den Zugriff auf entfernte
"fremde" (relationale) Datenbanken
p
Im Unterschied zu "Database Gateways" Fernzugriff für
Anwendungsprogramm explizit sichtbar
p
Konkurrenz verschiedener "Industriestandards" (ODBC
von Microsoft, DRDA von IBM, ...)
p
Seit 1992 ISO-Standard; zwei Teile:
m
Generischen RDA (IS 9579-1)
Beschreibt die Funktionen zum Initialisieren, Öffnen,
zum Anstoßen der Ausführung, zum Commit usw., die
unabhängig vom Typ des eingesetzten DBMS gelten.
m
Spezifischen RDA (IS 9579-2)
Beschreibt, welche SQL-Syntax unterstützt wird. Hier
verweist man im Prinzip einfach auf den jeweiligen SQLStandard. – Für andere DBMS-Typen müßten hier dann
jeweils eigene „spezifische RDA“-Standards definiert
werden.
p
Standard beschreibt nur Funktionalitäten
p
Festlegung konkreter Schnittstellen durch u.a. SQL
Access Group (⇒ DB Call Level Interface)
11 Für eine ausführliche Behandlung siehe W. Lamersdorf: Datenbanken in verteilten
Systemen - Konzepte, Lösungen, Standards. Vieweg-Verlag, 1994
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-33
R-Initialize
"Generischer RDA"
R-Open
R-BeginTransaction
R-Execute
SELECT ... , FETCH ...
"Spezifischer RDA"
INSERT ... , UPDATE ... , DELETE ...
...
R-Status
...
R-Commit
...
R-Terminate
Abb. 12-14: Generischer und spezifischer RDA nach ISO
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-34
INACTIVE
R-Initialize
R-Terminate
ACTIVE
RDA Transaction
Not Open
R-BeginTransaction
R-Execute
RDA Transaction
Open
R-Commit Req
R-Execute
RDA Transaction
Terminating
R-Commit Cnf
Abb. 12-15: Zustandsübergangsdiagramm für den
RDA-Client (Single-Server-Fall, vereinfacht)
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-35
12.4.7 TP-Monitore
p
Ursprünglich (70er Jahre + ff.): Systemnahe SW zur
Realisierung großer Online-Informationssysteme
Merkmale dieser IS-Anwendungen:
p
p
p
m
viele Benutzer/Endgeräte
m
benutzen dassselbe Anwendungsprogramm
Damals:
m
Anzahl möglicher paralleler Tasks stark eingeschränkt
m
auch Hauptspeicher war knappe Ressource
m
manche Anwendungen nicht reentrant
Lösung (damals):
m
TP-Monitor-SW übernahm Prozeß- und Ressourcenverwaltung
m
"Sharing" von nicht-reentrant Anwendungen
m
Realisierung "virtueller" Terminals
m
...
Heute:
m
Immer noch populär bei Realisierung großer
Informationssysteme (manchmal weiter über 10.000
Benutzer/Endgeräte)
m
Zunehmender Einsatz für verteilte Anwendungen
(⇒ u.a. two-phase commit)
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-36
p
Einige bekannte TP-Monitore
m
CICS (IBM) (mit Unix-Variante: CICS/6000)
m
UTM (Siemens) (mit Unix-Variante: OpenUTM)
m
...
... und aus dem Unix-Umfeld:
p
m
Encina
m
Tuxedo
m
....
Heute oftmals eher eine Art von "Werkzeugkasten"
m
reliable queues
m
transactional RPC
m
...
als ein geschlossenes Produkt
p
Seit 1992 ISO-Standard für verteilte Transaktionsverarbeitung (distributed transaction processing (TP))
p
Wie üblich, im Standard nur Beschreibung der
Dienstelemente und deren Funktionalität:
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-37
m
Hauptgruppen von Dienstelementen (Auszug):
n
Dialogverwaltung
: zum Auf- und Abbau von
TP-Dialogen
n
Recovery
: zur Fehlerbehandlung, Dialogund Transaktions-Recovery
n
Commitment
: zur koordinierten Freigabe
oder zum Zurücksetzen von
Änderungen
TP-Commit
: Beenden eines Transaktionsbaumes
TP-Done
: Freigabe lokaler Daten
TP-Commit-Complete : erfolgreiches Ende der
Transaktion
TP-Rollback
: Transaktion zurücksetzen
TP-Rollback-Complete : erfolgreiches Ende eines
Rollback
TP-Prepare
: „Prepare to Commit“Aufforderung
TP-Ready
: „Ready to Commit“-Antwort
...
n
TP-Data
: „Platzhalter“ innerhalb von TP,
u. a. zur Übertragung von
RDA-Aufrufen
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-38
Anwendung
TP Service
User Invocation
(TPSUI)
1. TP-Commit
5. TP-Commit-Complete
TP
Service Provider
(TPSP)
2. TP-Prepare
4. TP-Done
2. TP-Prepare
3. TP-Ready
4. TP-Done
TP
Service Provider
(TPSP)
2. TP-Prepare
3. TP-Ready
DBMS1
2. TP-Prepare
3. TP-Ready
4. TP-Done
4. TP-Done
3. TP-Ready
TP
Service Provider
(TPSP)
2. TP-Prepare
4. TP-Done
3. TP-Ready
DBMS2
DBMS3
Abb. 12-16: Ablauf eines verteilten Commit bei TP nach ISO
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-39
p
X/Open Distributed Transaction Processing
m
X/Open ⇒ Industriekonsortium
m
Festlegung konkreter Call-Schnittstellen
m
Zur koordinierende Ressourcen im Prinzip nicht auf
DBMS beschränkt
Anwendungsprogramm
RM API
(z.B. SQL)
TX Schnittstelle
(für TA-Steuerung)
Resource
Manager
(RM)
Transaction
Manager
(TM)
DB-Server
XA-Schnittstelle
(Steuerung RM-übergreifender TAs)
Print-Server
Abb. 12-17: X/Open Distributed Transaction Processing
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-40
12.5 Technisch/wissenschaftliche
Anwendungen
p
Häufig: Bearbeitung großer, komplex strukturierte
Datenobjekte
p
"Entfernte" Bearbeitung dem auf Server in der Regel
nicht möglich
p
Übertragung des Datenobjektes auf den Client
⇒ check-out
p
Evtl. sogar "kooperative" Objektbearbeitung auf der
Client-Seite in Zukunft denkbar
p
Rückübertragung des geänderten Objektes (als Ganzes
oder nur die Änderungen12) nach Beendigung
⇒ check-in
12 K. Küspert, P. Dadam, J. Günauer, : Cooperative Object Buffer Management in
the Advanced Information Management Prototype. Proc. Int'l Conf. On Very Large
Databases (VLDB '87), Brighton, England, Sept. 1987, pp. 483-492
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-41
1
Client
Server-DB
SELECT ...
Anwendungen
FROM ...
WHERE ...
Object
Buffer
Check-out
3
Object
Buffer
2
Änderungen
4
Server-DB
Client
Anwendungen
Object
Buffer
Check-in
5
Object
Buffer
6
Abb. 12-18: Check-out/Check-in
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-42
p
Normales Transaktionskonzept (mit normalen Sperren)
nicht ausreichend
⇒ lange Transaktionen
⇒ Langzeitsperren (nicht flüchtig)
⇒ andere Konfliktbehandlung
R
W
LR
LW
C
R
+
-
+
+
-
W
-
-
-
-
-
LR
+
-
+
-
-
LW
+
-
-
-
-
C
-
-
-
-
-
Legende: R = Read Lock, W = Write Lock,
LR = Long Read Lock, LW = Long Write Lock,
C = Check-in Lock
Abb. 12-19: Verträglichkeitsmatrix
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-43
12.6 Typische Fallstricke / Fehler bei
Client/Server-Implementierungen
p
p
p
p
Ortsabhängigkeit von Anwendungsprogrammen
m
Grund: kein verteiltes DBMS eingesetzt
m
Aufteilung der Daten auf verschiedene Server im
Anwendungsprogramm sichtbar
m
spätere Änderung schwierig
globale Blockierungszustände / Verklemmungen
m
nicht alle Fehlerfälle berücksichtigt
m
an globale Verklemmungen nicht gedacht,
keine Erkennungs-/Auflösungsstrategie implementiert
Synchronisation konkurrierender Zugriffe
m
kritische Operationen werden aus Performanzgründen
(oder Unwissenheit) nicht unter Two-Phase-Commit
ausgeführt (⇒ Konsistenzprobleme)
m
globale Sperren implementiert, aber Verfahren nicht
"wasserdicht"
m
an Wiederanlaufproblematik nicht gedacht
Fehlerbehandlung (vergessen oder selbst Fehlerquelle)
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-44
p
p
Verwaltung repliziert gespeicherter Daten
m
infolge naiver Implementierung u.U. geringe
Systemverfügbarkeit
m
... oder potentielle Konsistenzprobleme (insbesondere
bei Wiederanlauf nach Fehlern)
Programmpflege (Versions- und Update-Problematik)
m
Nur Erstinstallation bedacht, nicht Releasewechsel
m
dadurch (Client-)Programme oft auf unterschiedlichem
Stand
m
Falls Programm nicht selbst auf wechselseitige
Verträglichkeit prüfen, kann Chaos drohen
p
....
p
Insgesamt:
Gefahr der Unterschätzung der (potentiellen)
Komplexität des Gesamtvorhabens
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-45
12.7 Ergänzende Literatur
p
P. Dadam: Verteilte Datenbanken und Client/Server-Systeme.
Springer-Verlag, 1996
p
K. Geihs: Client/Server-Systeme: Grundlage und Architekturen.
Thomson's Aktuelle Tutorien Nr. 6, Thomson Publishing, 1995
p
W. Lamersdorf: Datenbanken in verteilten Systemen: Konzepte,
Lösungen, Standards. Vieweg-Verlag, 1994
p
A. Karer, B. Müller: Client/Server-Technologie in der
Unternehmenspraxis. Springer-Verlag, 1994
p
J. Gray, A. Reuter: Transaction Processing: Concepts and
Techniques. Morgan-Kaufmann Publishers, 1993
p
J.J. Le Bert: CICS Made Easy. McGraw-Hill Book Comp., 1986
p
Th. Kregeloh, St. Schönleber: CICS leicht und schnell gelernt. Rudolf
Müller online DV-Praxis (Verlagsges. Rudolf Müller GmbH, Köln),
1991
p
R. Koch (Hrsg. P. Jilek): BS 2000/OSD Technische Beschreibung
Transaktionssystem. Publicis MCD-Verlag, 1995
p
A. Schill: DCE - Das OSF Distributed Computing Environment,
Einführung und Grundlagen. Springer-Verlag, 1993
p
M. Wallrath: Entwicklung ingenieurwissenschaftlicher
Datenbankanwendungen. FZI-Berichte Informatik, Springer-Verlag
1994
 P. Dadam, 1999 - Verteilte Datenbanken und Client/Server-Systeme
12. Client/Server-Anwendungen
12-46
Herunterladen