• Keine Ergebnisse gefunden

Nebenläufigkeit und Verteilung

N/A
N/A
Protected

Academic year: 2022

Aktie "Nebenläufigkeit und Verteilung"

Copied!
32
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Realisierung verteilter Anwendungen

 Voraussetzungen

 Datenstrukturen und Algorithmen, Java, HTML, XML

 Übungen im Rahmen des Software-Praktikums

 Lernziele allgemein:

 Grundprinzipien, Werkzeuge und Systeme

 Inhalt heute:

 Einleitung

 Nebenläufigkeit und Synchronisation (in Java)

Ralf Möller, FH-Wedel

(2)

Literatur, Details und Zusatzinformationen

http://www.fh-wedel.de/~mo/lectures/vsys.html

(3)

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.

(4)

Vernetzung

intranet ISP

desktop computer:

backbone

satellite link

server:

network link:

(5)

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

(6)

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

(7)

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

Desktop computers

File server

router/firewall print and other servers

other servers print Local area

network

email server

the Internet

(8)

Fehler

 Verlust der Auftragsnachricht (1)

 Verlust der Ergebnisnachricht (2)

 Ausfall des Servers (3)

 Ausfall des Klienten (4)

Klient

Server

(1) (2)

(4)

(3)

(9)

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

(10)

Fehlerbehandlungsstrategien

 Maybe

 At-least-once

 At-most-once

 Exactly-once

Fehlerfreier

Ablauf 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

(11)

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)

(12)

Ü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“

(13)

Verteilung: Probleme und Herausforderungen

 Zusatzaufwand (Overhead)

 Bestimmung der „Grenze“ der übermittelten Objektstrukturen: Balancierung

 Synchronisation,

 Serialisierbarkeit, Locking,

 Deadlocks, Transaktionen

 Sicherheit, Verfügbarkeit,

 Gültigkeit, Reservierung (QoS)

 Abrechnungswesen

(14)

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

(15)

Motivation Nebenläufigkeit

Server Client1 Client2

Handler1 Handler2

(16)

Nebenläufigkeit und Synchronisation

 Ggf. müssen Threads auf andere Threads warten

 Meist kein aktives Warten auf Partner (busy waiting) gewünscht

 Verwaltung 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

(17)

Probleme

 Verklemmung (deadlocks)

 wechselseitiges Warten auf reservierte Betriebsmittel

 Verhungern (livelocks)

 Warten auf Ressourcen, die nie zur Verfügung stehen

 Ungleichbehandlung (unfairess)

 Bevorzugung von bestimmten

Prozessen bei der Ressourcenverteilung

 Wettlaufeffekte (race conditions)

 Ergebnis einer Berechnung hängt von

Ausführungsreihenfolge ab (-> transiente Fehler)

(18)

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

(19)

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(); } }

(20)

Ein Beispiel: Primzahlen

 Primzahl?(n): Sieb des Eratosthenes

Bis sqrt(n)

(21)

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

(22)

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) { ... } }

(23)

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

(24)

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"); }

(25)

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

(26)

PrimCalculator: eine weitere Variante

 Nebenläufiges Herausfiltern

(27)

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) }

(28)

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 } } }

(29)

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"); } }

(30)

Asynchrone Aufrufe

 Callback vs. Polling

(31)

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 Application Presentation

Session Transport

Network Data link

the rest of

email server Web server

Desktop computers

File server

router/firewall print and other servers

other servers print Local area

network

email server

the Internet

(32)

Was haben wir heute gelernt?

 Thema: Nebenläufigkeit und Verteilung

 Probleme bei Nebenläufigkeit

 Erste Lösungsansätze in Java

Referenzen

ÄHNLICHE DOKUMENTE

Wenn Sie auf den Pfeil mit der linken Maustaste gehen, dann können Sie eine Standard - Suchabfrage auswählen... Wählen Sie ungenaue Suche als Option, wenn Sie auch

Tag: Abbotsford - Melrose Abbey - Rückfahrt nach Hull zur Nachtfähre nach Rotterdam/Zeebrügge.. Am Südufer des Flusses Tweed gelegen, bietet Abbotsford House einen

Basel - Straßbourg - Speyer - Mannheim - Rüdesheim - Koblenz - Cochem - Köln - Volendam - Amsterdam.. Eine Reise auf ,,Väterchen&#34; Rhein, der wahrscheinlich wichtigsten

Am Morgen legt das Schiff in Mannheim an. Der heutige Ausflug führt Sie in die Studentenstadt Heidelberg. Hier empfängt Sie eine weitgehend erhaltene barocke Altstadt

Erleben Sie die berühmten Windmühlen auf Mykonos, die farbenfrohe türkische Strandstadt Kusadasi, das antike Ephesos, Stätte eines der sieben Weltwunder der Antike, sowie die

Düren kann den Vertrag fristlos kündigen, wenn bei der Anmeldung keine vollständigen Angaben gemacht wurden (z.B. Rollstuhlfahrer*in) oder wenn der/die Teilnehmer*in

Eine Besonderheit dieser wunderschönen Insel ist ihre Sprache: Auf La Gomera wird das weltweit einzigartige „El Silbo“ gesprochen, eine Pfeifsprache, die den Gomeros einst half,

Neben den Sonder-Impfaktionen an den Hochschulen stehen allen Erwachsenen ab 18 Jahren weiterhin die Möglichkeit zur Verfügung, sich über das Impfportal des Landes für eine Impfung