Verteilte Systeme

Transcription

Verteilte Systeme
Prof. Dr. Th. Letschert
CS5001
Verteilte Systeme
Master of Science (Informatik)
- Netzwerkprogrammierung -
© Th Letschert FH Gießen-Friedberg
Plattformen der Verteiltheit
Netzwerk-Programmierung :
Verteilte Systeme als interagierende Prozesse
Themen:
●
●
●
●
ein Blick zurück
Socket-API
Server-Struktur
einfache Abstraktionen oberhalb der Socket-Ebene in Java
Verteilte Systeme
Th Letschert, FH Giessen
2
Plattformen der Verteiltheit
Plattformen der Verteiltheit : ein Blick zurück
Verteilte Systeme
Th Letschert, FH Giessen
3
Plattformen der Verteiltheit – Ende 1980er
Plattformen der Verteiltheit ~ Ende 1980-er
–
LAN- / X25-Zeitalter : LANs und Fern-Netze: getrennte Welten
–
wichtige Protokolle (Protokoll-Stack kein Standard-Bestandteil eines BS)
●
Netbios
~1984 eingeführt als API für LAN-Controller, IBMs PC_LAN Netze
– ungerouteter Protokoll-Stack (keine Schicht-3 / keine Router)
SPX/IPX:
–
●
–
–
–
●
Protokoll in Novell-Netzen, bis Mitte der 1990er Markt-beherrschend
basierend auf Xerox Internetworking Protokollen
geroutetes Protokoll ähnlich zu TCP/IP
X25
Protokoll (Schicht 2 / 3) in Telekom-Netzen
– dominierend in kommerziellen eingesetzten Fern-Netzen
TCP/IP
–
●
–
–
Verteilte Systeme
kommerziell (fast) bedeutungslos
Einsatz (fast) nur in Fern-Netzen von Universitäten und
Forschungsinstituten
Th Letschert, FH Giessen
4
Plattformen der Verteiltheit – 1980er
Plattformen der Verteiltheit : 1980-er
–
Anwendungsplattform LANs
●
Netzwerk-Betriebssysteme für Standard-Dienste
–
Betriebssysteme (d.h. DOS) wird um Zugriff auf gemeinsame
Ressourcen erweitert
DOS-Aufrufe (Interrupts) werden abgefangen und umgeleitet
–
●
–
typische Ressource: File- / Drucker-Server (unter speziellem
Multitasking-BS)
Entwicklung angepasster verteilter Anwendungen
auf der Ebene von
– Interrupt-Handlern
– C- / Assembler-Routinen
Anwendungsplattform Fern-Netze
● Kommerzielle Systeme: X25, Proprietäre Protokolle mit entspr.
speziellen APIs
●
Forschung: OSI-Protokolle, TCP/IP mit speziellen APIs
Verteilte Systeme
Th Letschert, FH Giessen
5
Plattformen der Verteiltheit – 1980er
Anwendungsplattform
Beispiel: Datenpaket unter IPX empfangen
●
Interrupt-Handler schreiben (in Assembler)
–
–
–
–
–
●
Empfangs-Routine in C schreiben
–
–
–
●
System-Kontext: Kein User-Stack
Grobe Analyse des ECB
Ablage der Daten im Userspace
Anwendungs-Programm
–
–
●
System-Kontext: Kein User-Stack
Register-Paar ES:SI enthält Zeiger auf ECB
ECB, Event-Control-Block: Datenstruktur mit Info über das Ereignis und mit
Zeigern auf Fragmente des empfangenen Datenpakets
Aufruf C-Routine zur Annahme der Daten
Interrupt-Handler installieren
Test ob Daten angekommen
Daten annehmen, verarbeiten / Fehler behandeln
Notwendige Kenntnisse der Anwendungsentwickler
–
–
–
Verteilte Systeme
Assembler / C / komplexe APIs (Kontroll-Blöcke)
BS: Interrupts, Scheduling-/Tasking-Probleme, Funktion bestimmter Register,
Stack, Stack-Frames, User-Space vs. System-Space, ...
Protokoll: Paketformat, ...
Th Letschert, FH Giessen
6
Plattformen der Verteiltheit – Ende 1980er
Plattformen der Verteiltheit ~ Ende 1980-er
–
Protokolle
●
BS mit integriertem Protokoll-Stack
–
–
–
–
●
installierbare Protokolle
–
–
–
Unix-Varianten: TCP/IP
Mainframes, Mini-Computer (z.B. DEC): proprietäre Protokolle
(Lan-) Netz-Server (Netware): IPX/SPX
(Lan-) Netz-Server (IBM / MS, bis Bruch mit IBM->NT), OS/2): NETBIOS
PC: Netbios (IBM/MS), SPX/IPX (Netware), TCP/IP (Sun)
Mainframes, Mini-Computer: X25, TCP/IP, OSI-Protokolle
Typische Anwendungsplattform
● Fernnetze: wie Ende 1980er, X25
● LANs: Netbios, SPX/IPX mit speziellen APIs
(abhängig von Protokoll- und Protokoll-Implementierung und BS)
–
Notwendige Kenntnisse der Anwendungsentwickler
weit verbreit: LANs (vor allem unter Netware), X25 in Fernetzen
●
●
LANs unter NETWARE, NETBIOS: BS (Protokoll-Installation, -Konfiguration), API
WANs unter X25, TCP/IP, propr. Protokollen: BS-spezifische APIs
Verteilte Systeme
Th Letschert, FH Giessen
7
Plattformen der Verteiltheit – Frühe 1990er
Plattformen der Verteiltheit ~ Frühe 1990-er
–
Protokolle
● BS mit integriertem Protokoll-Stack
–
–
–
–
●
installierbare Protokolle
–
–
–
Unix-Varianten, Mini-Computer: TCP/IP
Mainframes, Mini-Computer (z.B. DEC): proprietäre Protokolle
(Lan-) Netz-Server (Netware): IPX/SPX
(Lan-) Netz-Server (MS-NT): NETBIOS
PC: Netbios (IBM/MS), SPX/IPX (Netware), TCP/IP (Sun)
Mainframes, Mini-Computer: X25, TCP/IP
Typische Anwendungsplattform
Beginn der Vereinheitlichung der LAN- / WAN-Netze unter TCP/IP
●
Socket-API für TCP/IP und SPX/IPX
●
NETBIOS-API für Netbios-basierte LANs
●
Interaktion auf API für Nutzung von Schicht-4-Diensten, z.B. via Socket-API
Verteilte Systeme
Th Letschert, FH Giessen
8
Plattformen der Verteiltheit – Frühe 1990er
–
–
Interaktion auf Schicht-4
●
Rechner-Identifikation (IP-Adresse, DNS-Name, ..)
●
Anwendungs-Identifikation (Port, well-known-port, ..)
●
Datenaustausch (Pakete senden/empfangen, Verbindungen aufbauen nutzen, ..)
●
Verteilte Anwendung: Mangement von Inter-Prozess-Kommunikation
●
Entwicklung einer verteilte Anwendung ~ Socket-Programmierung
Notwendige Kenntnisse der Anwendungsentwickler
●
●
●
LAN / WAN: Schicht-4- API
(Netbios / Socket-) API, Protokolle, Konfiguration der Protokoll-SW
WAN: BS-spezifische Schicht-4-APIs
Tiefere BS-Kenntnisse nicht mehr notwendig
Verteilte Systeme
Th Letschert, FH Giessen
9
Plattformen der Verteiltheit – Mitte 1990er
Plattformen der Verteiltheit ~ Mitte 1990-er
–
Protokolle
●
alle BS mit integriertem Protokoll-Stack
–
–
–
TCP/IP weit verbreitet
Trennung der Technologie von LAN und WAN beendet
Anwendungsplattformen
●
typisch: Nutzung einer Schicht-4-API (Sockets)
●
Forschungsthema, Anwendung durch fortgeschrittene Entwickler
–
Abstraktion von Schicht-4 Diensten
●
–
Unterstützung durch spezielle Dienste
●
–
Verteilte Systeme
z.B. RPC
Middleware,
SOA,
....
Bereitstellung von Standardlösungen in Bibliotheken
●
–
z.B. Namensdienste
Standard-Code-Bausteine (generiert / bereit gestellt)
●
–
z.B. OSI: Presentation- / Session-Layer
z.B. XDR
Integration in Programmiersprachen
Th Letschert, FH Giessen
10
Plattformen der Verteiltheit – Mitte 1990er
●
Protokoll-Stack bis Schicht-4 in BS integriert
●
Anwendungs-Protokolle als Anwendungsprogramme
●
Schicht-4- (Socket-) API in Programmiersprachen integriert
●
Höherwertige Unterstützung der Verteilung
–
Wetzwelt / OSI: als Schicht-4 / -5 konzipiert
–
Informatik
●
Forschung:
–
●
Nicht erfolgreich
(Warum?)
Fortsetzung der Integration in das BS (transparente Verteiltheit)
Praxis: Beginn der Middleware
Bibliotheken
– Generierungs-Werkzeuge
– Standard-Dienste
zur Unterstützung der Entwickler / Entlastung von StandardAufgaben
–
Verteilte Systeme
Th Letschert, FH Giessen
11
Plattformen der Verteiltheit
Plattformen der Verteiltheit :
Verteilte Systeme als interagierende Prozesse
Verteilte Systeme
Th Letschert, FH Giessen
12
Plattformen der Verteiltheit
Verteiltes Systeme auf Schicht-4 Diensten
System = interagierende Prozesse
in der Regel Client-Server-Struktur
Interaktion: Kommunikation über Socket-API
Themen
Nutzung der Socket-API
Struktur der Prozesse (der Server)
Nebenläufigkeit der System-Komponenten
Verteilte Systeme
Th Letschert, FH Giessen
13
Protokolle: OSI / Internet
Schicht 7
Anwendungs-Protokolle
Schicht 6
Session/Presentation -> Middleware-Protokolle
Schicht 5
Schicht 4
Internet-Protokolle
Schicht 3
Schicht 2
Schicht 1
ISO/OSI
Protokolle
Protokoll - (De-) Multiplexing
Rahmen- / Paket-Struktur
Verteilte Systeme
Th Letschert, FH Giessen
14
Schicht-4 Service Access Point (SAP) : Sockets
TFTP
SMTP
FTP
verbindungslos
verbindungsorientiert
(De-)Multiplexing
Anwendungen
System
...
NFS
Port
TCP
Socket-API
...
UDP
P-ID
IP
P-ID
Ethernet
Verteilte Systeme
Token-Ring
Th Letschert, FH Giessen
Seriell
15
Schicht-4 API: Socketkommunikation
Sockets
●
●
Schnittstelle zur Schicht-4-Implementierung (BS)
ursprünglich BSD-Unix,
heute 'alle' Systeme (z.B. WinSock)
Schicht-4 unabhängige Schnittstelle
heute meist für TCP/IP Protokollstack
Verbindungsendpunkt (SAP Service-Accesspoint)
● UPD
Server stellt Daten-Socket bereit
wartet auf Daten-Pakete von Client und antwortet
● TCP
Server stellt Verbindungs-Socket bereit
wartet auf Verbindungswünsche von Clients
Verbindung -> Daten-Socket
-> bi-dirketionaler Datenstrom zum Client
Verteilte Systeme
Th Letschert, FH Giessen
16
Socket-Abstraktionen: Zugriff auf Schicht-4-API
in Sprachen integriert
Java (Package java.net)
ServerSocket
lokale Adr: IP+Port
Server: accept
● Socket
● Client:
ferne Adr: IP+Port
Verbindungsaufbau,
● Server:
autom: ferne Adr
Komminikation
als Klassenbibliotheken
z.B. C++: ACE (Adapitve
Communication
Environment)
etc.: diverse andere
Kommunikation
C# (Namespace system.net)
● low-level:
● Socket
● IPEndPoint, IPAddress,...
● high-level:
● TCP-Client
● TCP-Listener
andere: Perl, TCL, Python, ...
Verteilte Systeme
Th Letschert, FH Giessen
17
Prozesse / Threads: Nebenläufigkeit in Komponenten
Prozesse/
Threads
Verteilte Systeme
bestehen aus Komponenten,
die durch Nachrichten
kommunizieren
Komponenten sind in der Regel
nebenläufige Systeme, die
aus Threads und/oder
Prozessen bestehen
Nebenläufige
Komponente
Verteiltes System
Verteilte Systeme
Th Letschert, FH Giessen
18
Verteilte Systeme als interagierende Prozesse
Verteilte Systeme als interagierende Prozesse:
Struktur der Komponenten / Server
Verteilte Systeme
Th Letschert, FH Giessen
19
Struktur der Komponenten / Server : Nebenläufigkeit in Komponenten
Nebenläufigkeit
vereinfacht SW-Organisation
unabhängige Ereignisverarbeitung,
z.B. blockiernde I/O-Operationen möglich
Verbesserung des Durchsatzes
Nutzung mehrerer CPUs, Parallelität in sonstiger HW
Nebenläufigkeit in Client/Server-Systemen
besonders wichtig für Server
hohe Anforderungen effiziente HW-Nutzung (hohe Last)
hohe Anforderung an Verfügbarkeit
Verteilte Systeme
Th Letschert, FH Giessen
20
Struktur der Komponenten / Server : Server-Architektur
Architektur des Servers
Ziele
keine ignorierten Service-Anforderungen ( Denial-of-Service )
hoher Durchsatz
Einflussfaktoren
Randbedingungen
Plattformeigenschaften (HW / BS)
Struktur der Anwendung
Nutzung der Anwendung
Protokoll-Struktur
Verbindungslos / Verbindungsorientiert
Request-Response / Sessions-Konzept
Verteilte Systeme
Th Letschert, FH Giessen
21
Serverarchitektur : Einflussfaktor Protokollstruktur
Protokollstruktur
●
synchrones Request-Response Protokoll
–
–
●
Neue Anfragen erst nach Antwort auf die vorhergehende
Einsatz
● Neue Anfragen hängen von der Antwort ab
● Kurze Bearbeitungszeit + geringe Netz-Latenz (LAN)
● Einfachheit vor Performanz
synchrones
Protokoll
asynchrones Request-Response Protokoll
–
–
Anfragen und Antwort entkoppelt
Einsatz
● Anfragen und Antworten sind nicht
eng gekoppelt (z.B. HTTP-Gets)
● Latenz im Netz groß (WAN)
● Performanz vor Einfachheit
asynchrones
Protokoll
Verteilte Systeme
Th Letschert, FH Giessen
22
Serverarchitektur : Einflussfaktor Protokoll
Dienstdauer
●
Protokoll mit kurz andauerndem Dienst (short duration service)
–
–
–
–
Dienst umfasst eine kurze (feste) Zeitdauer
Oft eine Frage / eine Antwort
Oft verbindungslos
Beispiele:
●
●
●
●
HTTP
ARP
Time
Protokoll mit lang andauerndem Dienst (long duration service)
–
Dienst umfasst eine (unbestimmt) lange Zeitdauer
Oft Austausch mehrerer Nachrichten
Oft verbindungsorientiert
–
Beispiele
–
–
●
●
●
Telnet
FTP
etc.
Verteilte Systeme
Th Letschert, FH Giessen
23
Serverarchitektur : Einflussfaktor Dienststruktur
●
interner Dienst
–
–
–
–
Dienst wird im Adressraum des Servers ausgeführt
geringere Latenzzeit
Server in größerer Gefahr (Absturz / Hänger)
Bindung: Dienst
● statisch
●
●
externer Dienst
–
–
–
●
dynamisch zum Server gebunden
Dienst wird in eigenem Adressraum ausgeführt (Prozess starten)
höhere Latenzzeit
Server weniger in Gefahr
Beispiel inetd
–
kann konfiguriert werden Dienste intern oder extern auszuführen
–
kurze Dienste intern / Lange Dienste extern
Verteilte Systeme
Th Letschert, FH Giessen
24
Serverarchitektur : Einflussfaktor Dienststruktur
●
zustandsloser Dienst (stateless service)
–
–
●
Dienst wird ohne Zustandsinformation im Server ausgeführt, jede Anfrage enthält alle
Informationen, die notwendig sind, um sie auszuführen
Beispiel:
● einfache Dienste,
●
NFS
●
HTTP (ohne Cookies, etc.)
zustandsbehafteter Dienst (stateful service)
–
–
–
Anfragen werden in Zustand ausgeführt,
Zustand
● Verbindungs-/Sitzungs -Zustand: Protokoll wickelt FSM (endlichen Automat) ab
●
dauerhafter Zustand: Zustand dauerhaft (über die Dauer einer Sitzung hinaus)
●
Zustand Absturz-resistent
Beispiel:
● Telnet / FTP: Sitzungszustand
●
Naming-Services: Absturz-resistent
Verteilte Systeme
Th Letschert, FH Giessen
25
Serverarchitektur : Einflussfaktor Dienststruktur
●
einfacher Dienst (single service server)
–
–
–
–
●
Server ist auf einen Dienst spezialisiert
Jeder Dienst benötigt seinen eigenen Server
Erhöhter Ressourcenbedarf / adminstrativer Aufwand
Robust
multipler Dienst (multi-service server)
–
–
–
–
Server bedient mehrere Dienste
Server bedient mit internem oder externem Dienst
Geringerer Rssourcenverbrauch / adminstrativer Aufwand
weniger robust
Verteilte Systeme
Th Letschert, FH Giessen
26
Serverarchitektur: Einflussfaktor Bereitschaft
●
Temporärer Server (one shot server)
–
–
–
●
Server wird auf ein Anfrage/Sitzung hin erzeugt, bedient nur diese
geringer Ressourcenbedarf
erhöhte Latenz
stehender Server (standing server)
–
–
–
Server wird bei Systemstart erzeugt
existiert permanent im Adressraum
Beispiel Apache Web-Server
Verteilte Systeme
Th Letschert, FH Giessen
27
Serverarchitektur: Einflussfaktor Verbindungs-/Sitzungskonzept
Verbindungen und Sitzungen
Verbindung (Connection)
–
Schicht-4 Konzept
–
Fehler-/Flusskontrolle erfordert Verbindung
(Verbindung = Information über den Zustand der Kommunikation)
Sitzung (Session)
–
Anwendungskonzept
–
„logische“ Verbindung der Kommpunikationspartner für die Dauer einer
Interaktion
–
OSI-Modell: Session-Layer (so praktisch nie realisiert)
Verteilte Systeme
Th Letschert, FH Giessen
28
Verbindung / Session : Beispiel HTTP
Beispiel HTTP
basiert auf TCP-Verbindung
Request-Response
Kommunikation
Session nach HTTPProtokoll= Frage / Antwort
reale Session der
Anwendung oft länger
Anwendung: Session = Einkaufstour
HTTP: Session = Request / Response
Schicht-4 : TCP Verbindung
Schicht-3 : IP / verbindungslos
Schicht-2 : Ethernet / verbindungslos
Schicht-1 : physikalische Verbindung
Verteilte Systeme
Th Letschert, FH Giessen
29
Verbindung / Session : Multiplexing
Verbindungen und Sitzungen
ohne Multiplexing der Sitzungen
●
Jede Beziehung Client (Thread) – Service-Provider (Thread) (Session /
Sitzung)
hat ihre eigene Verbindung
mit Multiplexing der Sitzungen
●
Eine gemeinsame Verbindung für jede Beziehung Client – Service-Provider
Sitzungen
Client-Threads
Sitzungen
Server-Threads
Client-Threads
TCP-Verbindung
Verteilte Systeme
Server-Threads
TCP-Verbindungen
Th Letschert, FH Giessen
30
Serverarchitektur: iterativer Server
Iterativer Server
●
behandelt eine Anfrage komplett ab bevor die nächste betrachtet wird
–
WS-Strategie
● Warteschlange für eintreffende Anfragen
●
●
●
Ignorieren
geeignet für
–
Dienste mit kurzen Bearbeitungszeiten
–
unregelmäßig und eher selten angefragte Dienste
Struktur
for ever:
retrieve request
perform service
send response
Verteilte Systeme
Th Letschert, FH Giessen
31
Serverarchitektur: iterativer Server
●
●
Vorteil
–
einfach
–
kein Thread- / Prozess-Overhead
Nachteil
–
eventuell schlechte Nutzung der Plattform-Fähigkeiten
mehrere CPU's, asynchroner DMA-Transfer, ...
–
schlechte Antwortzeiten / Verlust von Anfragen
–
eventuell Sende-Wiederholung bei Time-out -> Problemverschärfung
Verteilte Systeme
Th Letschert, FH Giessen
32
Serverarchitektur: Nebenläufiger Server
Nebenläufiger Server
●
bearbeitet mehrere Anfragen gleichzeitig
–
●
●
●
Threads (oder Prozesse)
Service-Art
–
single service : ein Dienst
–
multiple service : verschiedene Dienste
Einsatz
–
I/O-intensive Dienste
–
lang andauernde Dienste
Struktur
–
Thread (Prozess) pro Verbindung / Session
–
Thread (Prozess) pro Anfrage
Verteilte Systeme
Th Letschert, FH Giessen
33
Serverarchitektur: Nebenläufiger Server
Struktur: Thread pro Session / Verbindung
do for ever { handle = accept new connection;
thread = get SessionThread(handle);
thread.start();
}
Connection-Handler
while ( ! finished ) { msg = handle.getMsg();
answer = preform service
handle.send(answer)
}
Protocol / Session=-Handler
neuer
Client
Connection-Handler
Client C
Client B
Client A
Protocol/Session-Handler
Server
Clients
Verteilte Systeme
Th Letschert, FH Giessen
34
Serverarchitektur: Nebenläufiger Server
Struktur: Thread pro Aufgabe: Leader / Follower
request = handle.getMsg();
answer = preform service
handle.send(answer)
if ( ! finished ) {
followerThread = Synchronizer.getThread ();
followerThread.activate(handle);
}
do for ever { handle = accept new connection;
thread = get LeaderThread(handle);
thread.activate(handle);
}
Worker-Tread
Connection-Handler
Worker
Clients
Leader
Followers
Conn.Handler
Synchronzier
Leader nimmt die Anfrage an,
gibt sie an den Follower weiter
der damit zum Leader wird
Leader / Followers Muster, synchron
Verteilte Systeme
Th Letschert, FH Giessen
35
Serverarchitektur: Reaktiver Server
Reaktive Server (Reactive Server)
●
Verarbeiten mehrere Anfragen / Verbindungen
virtuell gleichzeitig
●
–
ein Thread / Prozess
–
leichtgewichtiges (Anwendungs-) Multitasking
Struktur
for ever
requestEvents = select()
for each event in requestEvents
receive request
perform service
send response
Verteilte Systeme
Th Letschert, FH Giessen
36
Serverarchitektur: Reaktiver Server
●
Vorteil
–
●
●
kein Thread / Prozess – Overhead
Nachteil
–
kein Ausnutzen von Plattform-Parallelismus
–
Probleme in einer Verbindung / Verarbeitung (Deadlock / Loop)
betrifft den gesamten Server
–
komplexere Programmierung
Programmierung
–
kurze / zustandslose Dienste: OK
–
Dienst mit Client-spezifischem Kontext :
●
–
FSM (endlicher Automat) pro Client verwalten
lange andauernde Dienste (z.B. Filetransfer)
●
●
blockieren Server oder
müssen mit Unterbrechungen (auf Anwendungsebene)
realisiert werden
(Multitasking auf Anwendungsebene)
Verteilte Systeme
Th Letschert, FH Giessen
37
Serverarchitektur: Reaktiver Server
●
Struktur
–
–
Warte auf I/O-Ereignis an einem von mehreren Handlern (select)
Verarbeite Ereignis
synchroner Event-Demultiplexer
BS: select-System-Call
Java: SocketChannel
Clients
Client-spezifische
Kontexte
Server
Reaktiver Server
Verteilte Systeme
Th Letschert, FH Giessen
38
Serverarchitektur: Reaktiver Server
●
Reaktor-Muster
Gestaltung reaktiver Server
beobachtet
channel
bearbeitet
I/O-Ereignis
z.B. channel
Nach Douglas C. Schmidt: Reactor, An Object Behavioral Pattern for
Demultiplexing and Dispatching Handles for Synchronous Events.
Verteilte Systeme
Th Letschert, FH Giessen
39
Serverarchitektur: Halb reaktiver / Halb nebenläufiger Server
Mischform: Halb reaktiv / Halb nebenläufig
(Half-sync / Half async)
●
Annahme der Anfragen / Verbindungen reaktiv
●
Weiterverarbeitung iterativ
Clients
Worker
IO-Thread
Queue
Clients
Half-Sync / Half-Async
mit Task-Queue
Worker
Leader
Followers
Half-Sync / Half-Async
mit Leader- und Follower-Threads
Synchronzier
Struktur
Verteilte Systeme
Th Letschert, FH Giessen
40
Serverarchitektur: Thread-Management
Threads erzeugen / aufspannen (Thread Spawning)
●
●
Erzeugungs-Strategien
–
Im Voraus erzeugen (eager spawning)
–
Bei Bedarf erzeugen (on demand spawning)
Im Voraus erzeugte Threads
–
bei Start erzeugen und in einem Pool platzieren
–
vermeidet Erzeugungs-/Vernichtungs-Overhead
–
erfordert Thread-Verwaltung
–
Größe des Thread-Pools
●
~ Zahl der CPUs
●
~ Last
●
~ dynamisch variabel
–
–
Verteilte Systeme
~ Last
~ aktuelle Länge der Warteschlange der Anfragen
Th Letschert, FH Giessen
41
Serverarchitektur: Thread-Management
●
Bei Bedarf erzeugen (on demand spawning)
–
–
Vorteil
●
Ressourcen-Schonung
●
einfacher
Nachteil
●
Schlecht konfigurierbar
●
Performance Probleme
●
längere Reaktionszeit
Verteilte Systeme
Th Letschert, FH Giessen
42
Serverarchitektur: Thread-Management
Task-basierte Thread-Zuteilung
●
pro Aufgabe ein Thread
–
IO-Thread
Task-1
Task-2
...
Muster z.B.:
Pipes and Filters
Message
–
Nachrichten-basierte Thread-Zuteilung
●
pro Nachricht / Session / Verbindung ein
Thread
Message
Task-1
Task-2
...
Muster z.B.:
Half-sync / Half-Async
Message
Task-1
Task-2
...
Verteilte Systeme
Th Letschert, FH Giessen
43
Server-Architektur: Threading-Strategie
Threading-Strategie
–
ein Thread
● select
● Bedienen der Ereignisse
● andere Aktivitäten
–
zwei Threads
● select / Ereignise bedienen
● andere Aktivitäten
OK bei 1-Prozessor System
(welcher Server ist das noch?)
–
Thread-Pool
● Thread: select
● Thread-Pool: Ereignisse bedienden
Anpassbar an System
–
Schlecht: select blockiert
Mehrere Threads / Thread-Pools
● Thread: select
● Thread(-Pool) A: Ereignisklasse A
● Thread(-Pool) B: Ereignisklasse B
● etc.
Verteilte Systeme
Th Letschert, FH Giessen
Ereignisbehandlung
konfigurierbar (Wichtigkeit, ...)
44
Server-Architektur: Thread-Erzeugung / Thread-Aufgaben
●
Thread-Erzeugung und Thread-Aufgaben
–
Thread-Erzeugung
●
Wann / Wie werden Threads erzeugt
–
Thread vs. Task
● Welche Aufgaben werden den Threads zugeteilt
–
Thread vs. I/O Ereignis
● welche(r) Thread(s) bearbeiten I/O-Ereignisse
Verteilte Systeme
Th Letschert, FH Giessen
45
Plattformen der Verteiltheit
Plattformen der Verteiltheit :
Einfache Abstraktionen über der Socket-Ebene in Java
Verteilte Systeme
Th Letschert, FH Giessen
46
Abstraktionen oberhalb der Socket-Ebene in Java
Einfache Abstraktionen über der Socket-Ebene in Java:
URL
Verteilte Systeme
Th Letschert, FH Giessen
47
URL Uniform Resource Locator
Ein URL lokalisiert Web-Ressourcen: Wo und wie finde ich etwas
Beispiele:
http://en.wikipedia.org/wiki/Uniform_Resource_Identifier#References
shttp://meine.bank.de
http://127.0.0.1:8080/factorize?number=1234
ftp://anonymous:anonymous@fileserver.irgend.wo/downloads
mailto://admin@mailserv.fh-giessen.de
URL Aufbau
Beispiel
Scheme (Protocol)
Zugriffsprotokoll
http
Authority
Besitzer
www.fh-giessen.de
Path
lokaler Weg zur Ressource
/home/~hg51/index.html
Query-String
Suche in der Ressource
searchString=java
Fragment Id (Ref)
Index in der Ressource
#intro
einzelne Bestandteile können fehlen
Verteilte Systeme
Th Letschert, FH Giessen
48
URL Uniform Resource Locator
Syntax / Beispiel (aus RFC 3986):
foo://example.com:8042/over/there?name=ferret#nose
foo
Schema
example.com:8042 Authority
/over/there
Path
name=ferret
Query
nose
Fragment
Zeichensatz:
US-ASCII-Zeichen in der Codierung 'der Umgebung' (umgebender Text /
Übertragungs-Protokoll)
a .. z, A .. Z, 0 .. 9, -, ., _, ~ (Alphanumerisch, Punkt, Bind-/Unterstrich, Tilde)
Zeichen mit besonderer Bedeutung: / ? # [ ] @ : ! $ & ' ( ) * + , ; = %
%HEX-Code für alle anderen und die mit besonderer Bedeutung
z.B. %25 für % . Sonderformen möglich, z.B. + für ' ' (Blank)
Hexcode ist abhängig von der (impliziten) Codierung!
Verteilte Systeme
Th Letschert, FH Giessen
49
URL in Java
java.net Class URL
Umschlagklasse für einen URL: java.net.URL
mit:
Konstruktoren zur Konstruktion
getter-/setter-Methoden für die URL-Komponenten
Methoden zum Aufbau einer Verbindung zur Ressource
Verbindungsaufbau
basiert auf Protocol-Handler
Protocol-Handler
von JVM implementiert (abhängig von der JVM)
von der Anwendung zur Verfügung gestellt
Verteilte Systeme
Th Letschert, FH Giessen
50
URL in Java
Beispiel : Test welche Protokoll-Handler stellt die JVM zur Verfügung ?
import java.net.MalformedURLException;
import java.net.URL;
public class JVMProtocolHandler {
public static void main(String[] args) {
String[] standardProtocols = {
"http", "https", "ftp", "mailto",
"telnet", "file", "ldap"};
for ( String p : standardProtocols)
try {
URL url = new URL(p+"://some.where");
System.out.println(p + "\t is OK");
} catch(MalformedURLException e) {
System.out.println(p
+ "\t is not supported");
}
}
}
mögliche Ausgabe
Verteilte Systeme
Th Letschert, FH Giessen
Die Tests auf
Wohlgeformtheit der
URL sind grob und
nicht Protokollspezifisch (z.B.
mailto-URL ist nicht
korrekt). Die
Verfügbarkeit des
Handlers wird
geprüft. - Kein Test
ob die URL
erreichbar ist.
http
https
ftp
mailto
telnet
file
ldap
is
is
is
is
is
is
is
OK
OK
OK
OK
not supported
OK
not supported
51
Zugriff auf URL-Ressource
java.net Class URL
Zugriff auf die Daten der Ressource auf die eine URL zeigt
mit Hilfe der URL-Methoden:
InputStream
openStream();
verbindet sich mit der Ressource liefert InputStream zum Lesen der Daten
URLConnection
openConnection();
erzeugt Verbindung zur Ressouce zm lesen / schreiben von Daten,
Zugriff auf weitere Info
URLConnection
openConnection(Proxy proxy);
erzeugt Verbindung via Proxy
Object
getContent();
liest Daten der Ressource und erzeugt ein Objekt aus diesen Daten
Object
getContent(Class[] classes);
liest Daten und erzeugt ein Objekt daraus, die Klassen sind
Vorschläge für die Klasse des neu erzeugten Objekts
Verteilte Systeme
Th Letschert, FH Giessen
52
Zugriff auf URL-Ressource / Beispiel openStream
public class URLViewer {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String urlString = scan.nextLine();
try {
URL url = new URL(urlString);
InputStream inS = url.openStream();
int c;
while ( (c = inS.read()) != -1 ) {
System.out.print((char)c);
}
} catch (MalformedURLException e) {
System.err.println("malformed url "+e);
} catch (IOException e) {
e.printStackTrace();
}
}
}
erzeugt:
Zugriff auf lokalen Tomcat mit
der URL-Eingabe:
http://127.0.0.1:8080
<!doctype html public "-//w3c//dtd html 4.0 transitional//en"
"http://www.w3.org/TR/REC-html40/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Apache Tomcat/5.0</title>
.... etc ...
Verteilte Systeme
Th Letschert, FH Giessen
53
Zugriff auf URL-Ressource / Beispiel getContent
public class URLContentGetter {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String urlString = scan.nextLine();
Class[] urlTypes = { String.class, Image.class, InputStream.class };
try {
URL url = new URL(urlString);
Object obj = url.getContent(urlTypes);
if ( obj instanceof String ) {
System.out.println("String found at "+urlString);
} else if ( obj instanceof Image ) {
System.out.println("Image found at "+urlString);
} else if ( obj instanceof InputStream ) {
System.out.println("InputStream found at "+urlString);
} else
System.out.println("Can not handle "+urlString);
} catch (MalformedURLException e) {
System.err.println("malformed url "+e);
} catch (IOException e) { e.printStackTrace(); }
}
}
Eingabe:
file:///home/thomas/Documents/Pictures/applelogo.gif
Ausgabe:
Image found at file:///home/thomas/Documents/Pictures/applelogo.gif
Verteilte Systeme
Th Letschert, FH Giessen
54
Zugriff auf URL-Ressource / Beispiel openConnection
public class ConnectionOpener {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String urlString = scan.nextLine();
try {
URL url = new URL(urlString);
URLConnection connection = url.openConnection();
System.out.println(connection.getContentEncoding());
System.out.println(connection.getContentType());
Object obj = connection.getContent(
new Class[]{ String.class, InputStream.class});
if ( obj instanceof String ){
System.out.println("String found: "+(String)obj);
}
if ( obj instanceof InputStream ){
System.out.println("InputStream found ");
}
} catch (MalformedURLException e) { System.err.println("malformed "+e);
} catch (IOException e) { e.printStackTrace(); }
}
}
Verteilte Systeme
Eingabe:
http://127.0.0.1:8080
Ausgabe:
null
text/html;charset=ISO-8859-1
InputStream found
Th Letschert, FH Giessen
55
Abstraktionen oberhalb der Socket-Ebene in Java
Einfache Abstraktionen über der Socket-Ebene in Java:
URI
Verteilte Systeme
Th Letschert, FH Giessen
56
URI Uniform Resource Identifier
Ein URI identifiziert eine Ressource
Verallgemeinerung der URL
URL lokalisiert
URI identifiziert die Identifikation kann auch lokalisieren,
sie muss aber nicht.
Alle URLs sind URIs (aber nicht umgekehrt)
URI Verwendung: als URL / zur Identifikation in div. XML-Technologien
Beispiele:
http://en.wikipedia.org/wiki/Uniform_Resource_Identifier
tel:+1-816-555-1212
urn:isbn:0-395-36341-1
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
URI Aufbau
Scheme Name
Beispiel
:
Schema-spezifischer Teil
Verteilte Systeme
urn :
oasis:names:specification:docbook:dtd:xml:4.1.2
Th Letschert, FH Giessen
57
URI Uniform Resource Identifier
URI Schemes Beispiele (http://www.iana.org/assignments/uri-schemes.html)
URI Scheme
Description
Reference
acap
application configuration access protocol
[RFC2244]
cid
content identifier
[RFC2392]
dns
Domain Name System
[RFC4501]
fax
fax
[RFC3966]
file
Host-specific file names
[RFC1738]
ftp
File Transfer Protocol
[RFC1738]
http
Hypertext Transfer Protocol
[RFC2616]
https
Hypertext Transfer Protocol Secure
[RFC2818]
imap
internet message access protocol
[RFC2192]
info
Information Assets with Identifiers in Public Namespaces [RFC4452]
ldap
Lightweight Directory Access Protocol
[RFC4516]
mailto
Electronic mail address
[RFC2368]
news
USENET news
[RFC1738]
nfs
network file system protocol
[RFC2224]
nntp
USENET news using NNTP access
[RFC1738]
pop
Post Office Protocol v3
[RFC2384]
tel
telephone
[RFC3966]
telnet
Reference to interactive sessions
[RFC4248]
urn
Uniform Resource Names
[RFC2141]
Verteilte Systeme
Th Letschert, FH Giessen
58
URI / URL / URN
URI
Uniform: Syntax entspricht RFC 2396: Uniform Resource Identifiers (URI): Generic
Syntax.
Resource: Irgendetwas
Identification: Identifizieren / Lokalisieren / Holen
URL URN URI Entwicklung: Identifizieren / Lokalisieren
Ausgangskonzept URL: Identifizieren / Holen
URI : Verallgemeinerung von URL
URN: Uniform Resource Name
Identifikation einer Ressource unabhängig von Ort und
Zugriffsmethode/Möglichkeit („Ein http-URI ist ein URL“)
URN wird (eventuell) abgebildet auf URL-1, URL-2, ...
URI seit 2001 (http://www.w3.org/TR/uri-clarification)
URI ist Oberbegriff
URL informales Konzept lokalisierbarer Ressourcen („Klick-bar“)
URN ist Schema (hierachisch aufgebaut) (urn:xx:yy:zz)
Resolution (Auflösung): nicht global geklärt
(dns-URIs haben global definierte Auflösung, andere nicht)
Verteilte Systeme
Th Letschert, FH Giessen
59
URI in Java
java.net Class URI
java.net.URI
Umschlagklasse für URIs (konstruieren / analysieren)
Vergleich zur java.net.URL
eher konform zu aktuellen WEB-Standards
URI identifiziert nur: kein (direkter) Verbindungsaufbau
relative und absolute URIs möglich
Verteilte Systeme
Th Letschert, FH Giessen
60
URI / URL / URLConnection
Idee
Schema -> Protokoll -> Protokoll-Handler
Klassen
„In the early days of Java, Sun promised
that protocols could be installed at runtime
from the server that used them. [...]
However, the loading of prtocol handlers
from web sites was never implemented,
and Sun doesn't talk much about it
anymore.
Elliotte Rusty Harold
in Java Network Programming, O'Reilly
URL / URLStreamHandler / URLConnection ...
definieren zusammen
Protokoll-Handler
Bewertung
OK für vordefinierte Schemata (Protokolle)
speziell für HTTP GET / POST (?)
Neue Protokolle ~> müssen JVM bekannt gegeben werden
Umständliche / Verwirrende API, kaum Mehrwert gegen Sockets
Kaum genutzt
Neue / Eigene Protokolle ~> Socket-Kommunikation
Verteilte Systeme
Th Letschert, FH Giessen
61
URI in Java / Beispiel get-Abfrage Verbindungsaufbau via URL
public class URIViewer {
public static void main(String[] args) {
try {
URI uri = new URI(
"http",
//Scheme
null,
//Authority
"192.168.187.196",
//Host
8080,
//Port
"/hg51WebApp/GetFactorizer", //Path
"zahl=12&submit=los+gehts",
//Query
null
//Fragment
);
URL url = uri.toURL();
InputStream inS = url.openStream();
int c;
while ( (c = inS.read()) != -1 ) {
System.out.print((char)c);
}
} catch (MalformedURLException e){ e.printStackTrace();
} catch (URISyntaxException e) { e.printStackTrace();
} catch (IOException e) { e.printStackTrace(); }
}
}
Verteilte Systeme
Th Letschert, FH Giessen
62
URI in Java / Beispiel get-Abfrage / HTML als HTML anzeigen
public class URIViewer {
public static void main(String[] args) {
try {
URI uri = new URI( "http",null,"192.168.187.196",
8080,"/hg51WebApp/GetFactorizer",
"zahl=12&submit=los+gehts",null);
URL url = uri.toURL();
InputStream inS = url.openStream();
byte[] byteA = new byte[1024];
int c; int i = 0;
while ( (c = inS.read()) != -1 ) {
byteA[i++] = (byte)c;
}
JEditorPane jp = new JEditorPane();
jp.setContentType("text/html");
jp.setText(new String(byteA, 0, i, "UTF8"));
JFrame jf = new JFrame("Result");
jf.setContentPane(jp);
jf.setSize(512, 254);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
} catch (MalformedURLException e){ e.printStackTrace();
} catch (URISyntaxException e) { e.printStackTrace();
} catch (IOException e) { e.printStackTrace(); }
}
}
Verteilte Systeme
Th Letschert, FH Giessen
63