Upload
lisa-kohl
View
218
Download
2
Embed Size (px)
Citation preview
Realisierung verteilter Anwendungen
Voraussetzungen Datenstrukturen und Algorithmen, Java, HTML, XML
Übungen im Rahmen des Software-PraktikumsLernziele allgemein:
Grundprinzipien, Werkzeuge und SystemeInhalt heute:
Einleitung Nebenläufigkeit und Synchronisation (in Java)
Ralf Möller, FH-Wedel
Literatur, Details und Zusatzinformationen
http://www.fh-wedel.de/~mo/lectures/vsys.html
Verteiltes System: Definition 1
Andrew Tanenbaum: Ein verteiltes System ist eine Kollektion
unabhängiger Computer, die den Benutzern als ein Einzelcomputer erscheinen (Transparenz).
Impliziert, daß die Computer miteinander verbunden sind und
die Ressourcen wie Hardware, Software und Daten gemeinsam benutzt werden.
Vernetzung
intranet
ISP
desktop computer:
backbone
satellite link
server:
network link:
Verteiltes System: Definition 2
Leslie Lamport: Ein verteiltes System ist ein System, mit dem
ich nicht arbeiten kann, weil irgendein Rechner abgestürzt ist, von dem ich nicht einmal weiß, daß es ihn überhaupt gibt.
Oft die Realität...Wird aber besser...Neue Prinzipien des Systemdesigns
Verteilung: Allgemeine Aspekte
Verlassen der „heilen Welt“ des lokalen Prozessors Heterogenität Kommunikation (kann Engpaß sein) Ressourcen stehen temporär nicht zur Verfügung Notwendigkeit zur Fehlertoleranz Nebenläufigkeit, fehlende globale Kontrolle/Uhr Neue Art des Vorgehens bei der Entwicklung:
Systemdesign, Modellierung, Programmierung Organisationsprinzipien: Server-Client vs. Peer-to-Peer Dienstbegriff, Komponentenbegriff
Ansätze zur Verteilung
Mehrprozessorsysteme / Verteilte Algorithmen Verteilte Datenbanken
ODBC, JDBC, JDO Kommunikationsströme:
Sockets Hochsprachen:
Standard/prozedural: RPC Java: RMI, Mobiler Programmcode Virtuelle Maschine, Just-in-time-Übersetzung Multiple Programmiersprachen: CORBA Ereignisse und Notifikationen
the rest of
email server
Web server
Desktopcomputers
File server
router/firewall
print and other servers
other servers
Local areanetwork
email server
the Internet
Fehler
Verlust der Auftragsnachricht (1)Verlust der Ergebnisnachricht (2)Ausfall des Servers (3)Ausfall des Klienten (4)
Klient
Server
(1) (2)
(4)
(3)
Fehlerbehebung und Probleme
Client wartet und versucht...... nach Timeout ein erneutes Senden,kann aber nicht zwischen verschiedenen
Fehlersituationen unterscheiden.Erneutes Senden führt zur erneuten Ausführung.Client antizipiert eventuell neuen Zustand nicht.
Transaktionskonzept erforderlich (teuer!)
Festlegung von Dienstgüte-Kriterien
Fehlerbehandlungsstrategien
MaybeAt-least-onceAt-most-onceExactly-once
FehlerfreierAblauf
Nachrichten-verluste
Server-ausfall
A: 1 E: 1
A: 1 E: 1
A: 1 E: 1
A: 1 E: 1
A: 0/1 E: 0/1
A: ≥ 1 E: ≥ 1
A: 1 E: 1
A: 1 E: 1
A: 0/1 E: 0/1
A: ≥ 0 E: ≥ 0
A: 0/1 E: 0/1
A: 1 E: 1
A: Ausführung, E: Ergebnis
Inhalte: ein Überblick Einführung, Nebenläufige Kontrollflüsse, Kommunikation Middleware, Entfernter Methodenaufruf, RMI, Corba Objektmigration und technische Grundlagen von Agenten, Voyager Spontane Vernetzung und entfernter Datenbankzugriff, Jini Multitier-Architekturen, J2EE:
Dynam. Generierung von Web-Seiten Konfigurierbare Komponenten für Geschäftsanwendungen Grundlagen der Transaktionsbehandlung Fortsetzung Transaktionsbehandlung und Aspekte der Sicherheit
Dienste und Dienstvermittlung, SOAP, WSDL, UDDI Kryptographie und Sicherheitsdienste Zahlungssysteme im Internet Verteilte Multimediasysteme, Quality of Service (QoS)
Überblick: Verteilung und Kommunikation Finden von Objektreferenzen
Namen vs. Objektbeschreibungen Lokale Referenzen (Stub) vs. Objekte in Wirtsumgebung Marshalling/Unmarshalling
Externe Datenrepräsentation (mit pragm. Einschränkungen) Serialisierung von Objektstrukturen Ggf.: Kommunikation von Klassendefinitionen
Kontrollaspekte Dynamische Integration/Anmeldung (Abmeldung?) Synchrone vs. asynchrone Kommunikation Ereignisbenachrichtigung
Nutzungsrechte, Gültigkeitseinschränkungen (z.B. Leasing)
„Middleware“
Verteilung: Probleme und Herausforderungen
Zusatzaufwand (Overhead)Bestimmung der „Grenze“ der
übermittelten Objektstrukturen: Balancierung
Synchronisation, Serialisierbarkeit, Locking, Deadlocks, TransaktionenSicherheit, Verfügbarkeit, Gültigkeit, Reservierung (QoS)Abrechnungswesen
Nebenläufigkeit
Ausführung mehrerer Programme (Betriebssystem)Oder: mehrere Kontrollflüsse in einem Programm:
(in Java Threads genannt) Zugriff auf gemeinsamen Speicher Besser: Referenzierung gemeinsamer Objekte
Einsatzspektrum Problem läßt sich in mehrere Kontrollflüsse zerlegen In verteilten Systemen häufig:
Abspaltung von Prozessen um Server nicht zu blockieren
Motivation Nebenläufigkeit
ServerClient1 Client2
Handler1
Handler2
Nebenläufigkeit und Synchronisation
Ggf. müssen Threads auf andere Threads wartenMeist kein aktives Warten auf Partner
(busy waiting) gewünschtVerwaltung von Threads durch „Laufzeitsystem“Zustände eines Threads:
laufend lauffähig (aber ein anderer ist gerade „dran“) blockiert, in Warteschlange wartend blockiert, reaktivierbar nach Zeitlimit
ProblemeVerklemmung (deadlocks)
wechselseitiges Warten auf reservierte BetriebsmittelVerhungern (livelocks)
Warten auf Ressourcen, die nie zur Verfügung stehenUngleichbehandlung (unfairess)
Bevorzugung von bestimmtenProzessen bei der Ressourcenverteilung
Wettlaufeffekte (race conditions) Ergebnis einer Berechnung hängt von
Ausführungsreihenfolge ab (-> transiente Fehler)
Threads in Java (1)
class ExampleThread extends Thread { ... ExampleThread(int param) { ... } public void run() { ... } public static void main(String[] args) {
ExampleThread t = new ExampleThread(42); t.start(); } }
Nichts mitschreiben: Verwendeter Beispielcode unter:
http://www.dpunkt.de/leseproben/3-932588-32-0/jivs_code.zip
Threads in Java (2)
class ExampleRunnable extends SomeClass implements Runnable { ExampleRunnable(int param) { ... } public void run() { ... } public static void main(String[] args) {
ExampleRunnable r = new ExampleRunnable (42); new Thread(r).start(); } }
Ein Beispiel: Primzahlen
Primzahl?(n): Sieb des Eratosthenes
Bis sqrt(n)
PrimCalculator: die simple Variante
public class PrimCalculator { public boolean isPrim(int n) {
Sieve sieve = new Sieve(n+1); return sieve.isPrim(n); }
public static void main(String[] args) { int n = Integer.parseInt(args[0]); boolean result = (new PrimCalculator()).isPrim(n); System.out.println("Value "+ n +" is" + (result?"":" not") +" a prim"); } }
$ java PrimCalculator 1053
Sieb
public class Sieve { ... public Sieve(int n) { ... } public isPrim(int n) {
for (int aPrim = 2; aPrim <= rootN; aPrim = nextPrimAfter(aPrim)) { filter(aPrim); } return isMarked(n); }
private void filter(int prim) { ... } private int nextPrimAfter(int prim) { ... } }
Sieb: ein Beispiel
Motivation: Nebenläufige Markierung
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
PrimCalculator: mit Threads (1)public class PrimCalculator extends Thread {
int n; PrimCalculator (int n) { this.n = n; } public void run() {
Sieve sieve = new Sieve(n+1); boolean result = sieve.isPrim(n); System.out.println("Value "+ n +" is" + (result?"":" not") +" a prim"); }
PrimCalculator: mit Threads (2)
public static void main(String[] args) { for(int i=0; (i<args.length); i++) { int n = Integer.parseInt(args[i]); (new PrimCalculator(n)).start(); System.out.println("Started Thread for "+n); } } }
$ java PrimCalculator 7 1053 63
PrimCalculator: eine weitere Variante
Nebenläufiges Herausfiltern
Synchronisation / Zugriff auf gemeinsame Daten
Public class Bank { ... public float getAmount(Object o); { ... } public void incrAmount(Object o, float amount);
{ ... } }public class Client extends Thread {
Bank b; public Client(Bank b) {
this.b = b; b.setAmount(this,0.0); } public synchronized void addToSalary(float amount) {
float oldAmount = b.getAmount(this); b.setAmount(oldAmount + amount) }
Nebenläufigkeit und Verteilung: Server
public class Server extends Thread { public Server() { this.start() } public static void main(String[] args) {
new Server(); } Public void run() {
while (true) { System.out.println("waiting for new task"); try { System.in.read(); } catch (...) { ... } Handler handler = new Handler } } }
Nebenläufigkeit und Verteilung: Handler
public class Handler extends Thread { public Handler() { this.start() } Public void run() {
System.out.println ("Doing some work ..."); try{ Thread.sleep(1000); } catch ( ... ) { ... } System.out.println ("done"); } }
Asynchrone Aufrufe
Callback vs. Polling
Verteilung und Kommunikation
Kommunikationsprotokoll Beispiel: TCP/IP Schicht 4 (bzw. 3) des ISO/OSI
Referenzmodells Transport von Informationen über ein
Netzwerk Zwei Arten:
TCP UDP
Physical
ApplicationPresentation
SessionTransportNetworkData link
the rest of
email server
Web server
Desktopcomputers
File server
router/firewall
print and other servers
other servers
Local areanetwork
email server
the Internet
Was haben wir heute gelernt?
Thema: Nebenläufigkeit und Verteilung Probleme bei Nebenläufigkeit Erste Lösungsansätze in Java