22.11.2013 Aufrufe

Verteilte Systeme

Verteilte Systeme

Verteilte Systeme

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Begriffe<br />

<strong>Verteilte</strong> <strong>Systeme</strong><br />

Jürgen Nehmer, SS 2003<br />

Gruppenkommunikation:<br />

Grundlagen<br />

• Unicast<br />

– Message an genau einen Empfänger<br />

• Multicast<br />

– Message an eine Gruppe von Empfängern<br />

• Broadcast<br />

– Message an alle potentiellen Empfänger<br />

Sender<br />

1<br />

N Empfänger<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 1<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 2<br />

Wozu Multicast/Broadcast?<br />

• In einer verteilten Anwendung muss häufig mehreren<br />

Rechnern/Prozessen dieselbe Information geschickt werden<br />

– Aufforderung an alle Gruppenmitglieder: lokalen Zustand schicken<br />

– Zustand aller Gruppenmitglieder korrigieren (z. B. Uhrzeit)<br />

– neue Erkenntnis an alle Gruppenmitglieder verteilen<br />

• Beispiele für Gruppen<br />

– alle Rechner eines lokalen Netzes<br />

– alle Prozesse einer verteilten Anwendung<br />

• alle Prozesse eines Lastverbundes<br />

• alle Prozesse eines Funktionsverbundes<br />

• alle Prozesse eines Überlebensverbundes<br />

• alle Clients eines Client/Server-Verbundes<br />

• alle Server eines Client/Server-Verbundes<br />

Client<br />

Beispiel: <strong>Verteilte</strong>r Druck-Dienst (1)<br />

Belegen;<br />

Benutzen;<br />

Freigeben;<br />

Gruppe von Druck-Servern<br />

Server<br />

Lastverbund<br />

• Koordinierungsproblem zwischen der Gruppe der Clients und der Gruppe der Server<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 3<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 4


Beispiel: <strong>Verteilte</strong>r Druckdienst (2)<br />

Beispiel: <strong>Verteilte</strong>r Druckdienst (3)<br />

• Zentraler Gruppenkoordinator<br />

Client<br />

zentraler<br />

Koordinator<br />

• Nachteile:<br />

• Koordinator ist potentieller Engpass<br />

• Koordinatorausfall<br />

Gruppe von Druck-Servern<br />

Server<br />

Lastverbund<br />

• Client-basierte Gruppenkoordination<br />

• alle Clients bilden eine Gruppe<br />

• Zugriffskoordinierung z.B. durch verteilten kritischen Abschnitt<br />

Koordination<br />

• Nachteil: potentiell große Anzahl Clients<br />

Gruppe von Druck-Servern<br />

Server<br />

Lastverbund<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 5<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 6<br />

Beispiel: <strong>Verteilte</strong>r Druckdienst (4)<br />

Multicast-Varianten<br />

• Server-basierte Gruppenkoordination<br />

• alle Server bilden eine Gruppe<br />

• Koordination durch Einigungsprotokolle (agreement)<br />

Client<br />

multicast<br />

Anwendung<br />

Koordinator<br />

Anwendung<br />

Gruppe von Druck-Servern<br />

Koordinator<br />

Koordinator<br />

Anwendung<br />

Anwendung<br />

Koordinator<br />

Anwendung<br />

Anwendung<br />

Koordinator<br />

Koordinator<br />

• Sender-gesteuert<br />

– Sender bestimmt die Gruppenzusammensetzung (keine Gruppentransparenz)<br />

– Auflösung des Multicast in N Unicast-Operationen<br />

• Empfänger-gesteuert<br />

– Repräsentation der Gruppe durch eine Gruppenadresse<br />

– die Gruppenzusammensetzung bleibt den Sendern verborgen<br />

(Gruppentransparenz)<br />

– Realisierung durch Broadcast möglich<br />

• Prädikat-gesteuert<br />

– die Message erreicht alle Empfänger, bei denen die lokale Prädikatauswertung<br />

TRUE ergibt<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 7<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 8


API für einen Empfänger-gesteuerten Multicast-<br />

Mechanismus<br />

Zuverlässigkeitsgrade eines Multicast<br />

• groupId createGroup () //Erzeugen einer Gruppe; der Erzeuger wird erstes Mitglied<br />

• deleteGroup(groupId) // Vernichten einer Gruppe durch den Erzeuger<br />

• joinGroup(myPort, groupId) //Beitritt zu einer Gruppe<br />

• leaveGroup(myPort, groupId) //Verlassen einer Gruppe<br />

• sendGroup(groupId, message) //Multicast an eine Gruppe<br />

• receive(myPort, message) //Empfang einer Multicast-Message<br />

• Achtung: der Ausfall (Crash-Fehler) eines Prozesses hat dieselbe Wirkung wie der<br />

Aufruf von leaveGroup()<br />

• Best Effort<br />

– es wird keine Garantie gegeben, wie viele intakte Gruppenmitglieder die<br />

Nachricht erhalten<br />

• k-zuverlässig<br />

– es wird garantiert, daß mindestens k intakte Gruppenmitglieder die<br />

Nachricht erhalten<br />

• zuverlässig<br />

– es wird garantiert, daß alle intakten Gruppenmitglieder die Nachricht<br />

erhalten<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 9<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 10<br />

Ordnungsgrade beim Multicast<br />

• ungeordneter Multicast<br />

– keine Garantie über die Empfangsreihenfolge von Multicast-Nachrichten bei den<br />

Gruppenmitgliedern<br />

• FIFO-geordneter Multicast<br />

– Sendet ein Prozess erst die Multicast-Nachricht m 1<br />

und anschließend die<br />

Multicast-Nachricht m 2<br />

, dann müssen alle Gruppenmitglieder die Nachrichten in<br />

der Reihenfolge m 1<br />

,m 2<br />

empfangen<br />

• kausal geordneter Multicast<br />

– empfängt ein Gruppenmitglied erst die Multicast-Nachricht m 1<br />

und sendet dann<br />

die Multicast-Nachricht m 2<br />

, dann müssen alle Gruppenmitglieder diese in der<br />

Reihenfolge m 1<br />

, m 2<br />

empfangen<br />

• total geordneter Multicast<br />

– empfängt ein Gruppenmitglied eine Multicast-Nachricht m 1<br />

und danach die<br />

Multicast-Nachricht m 2<br />

, dann müssen alle übrigen Gruppenmitglieder diese in<br />

der Reihenfolge m 1<br />

→ m 2<br />

empfangen<br />

Gruppe<br />

Beispiel: FIFO- geordneter Multicast<br />

a) korrekt b) Verletzung<br />

m 1 m 2 m 1 m 2<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 11<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 12


Beispiel: kausal geordneter Multicast<br />

Beispiel: total geordneter Multicast<br />

a) korrekt b) Verletzung<br />

a) korrekt b) Verletzung<br />

m 1<br />

m 2<br />

m 1<br />

m 2<br />

m 1<br />

m 2<br />

m 1<br />

m 2<br />

Gruppe<br />

Gruppe<br />

• Ein total geordneter Multicast ordnet kausal unabhängige Multicast-Nachrichten auf<br />

Empfänger-Seite<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 13<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 14<br />

Offene und geschlossene Gruppen<br />

• Geschlossene Gruppe<br />

– Multicast ist nur innerhalb einer Gruppe definiert und zulässig<br />

• Offene Gruppe<br />

– Die Gruppe kann von außen über eine Multicast-Nachricht angesprochen werden<br />

– inhärentes Problem offener Gruppen:<br />

• wie gewinnt der außerhalb der Gruppe angesiedelte Sender eine konsistente<br />

Gruppensicht?<br />

Sender<br />

Koordinator<br />

offene Gruppe<br />

Einigungsprotokolle<br />

Einigungsprotokolle (Agreement-Protokolle) erzwingen unter gleichberechtigten<br />

Mitgliedern einer Gruppe die Einigung auf eine konsistente Sicht<br />

• Beispiele<br />

– Wer darf als nächster auf eine Ressource zugreifen?<br />

– Wer darf den nächsten Auftrag bearbeiten?<br />

– Wer geht als Sieger aus einem Wettbewerb hervor? (Leader-Election-<br />

Problem)<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 15<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 16


Leader-Election mittels Broadcast<br />

• Jeder Prozess besitzt zwei lokale Variable:<br />

L enthält am Ende die PID des Siegers (initial= undefiniert)<br />

K speichert ein Vergleichskriterium (K i<br />

≠K j<br />

für alle i,j, das größte K gewinnt)<br />

Leader-Election auf logischen Ringen<br />

P 1 P 2 P 3 P n<br />

• Initiator P i<br />

L=i;<br />

broadcast (K,i);<br />

• Empfänger P r<br />

receive (K ext<br />

,L ext<br />

);<br />

if (K>K ext<br />

) {L=r; broadcast (K,r)}<br />

else L=L ext<br />

;<br />

Bei globaler Terminierung enthält L jedes Prozesses den Sieger<br />

• Modellannahmen:<br />

– asynchrones Systemmodell<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 17<br />

• Initiator P i<br />

L=i;<br />

send (K,i) to P i+1 mod n<br />

;<br />

• Empfänger P r<br />

receive (K ext<br />

,L ext<br />

);<br />

if (K>K ext<br />

) {L=r; send(K,r) to P r+1 mod n<br />

}<br />

else if (K


<strong>Verteilte</strong>r Druckdienst mittels Leader-Election:<br />

Der Client<br />

<strong>Verteilte</strong>r Druckdienst mittels Leader-Election:<br />

Auftragsempfang bei einem Server<br />

client {<br />

sendGroup(druckserverGroup, druckTask);<br />

receive (ackNachricht);<br />

}<br />

taskReceive (task) {<br />

if (task ⊂ missing) remove task from missing;<br />

else {<br />

add task to taskQ;<br />

if !busy {<br />

contention-Nachricht mit taskId, MyPID, MyPrio an<br />

rechten Ringnachbarn senden;<br />

}<br />

}<br />

}<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 21<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 22<br />

<strong>Verteilte</strong>r Druckdienst mittels Leader-Election:<br />

Ankunft einer contention-Nachricht beim Server<br />

<strong>Verteilte</strong>r Druckdienst mittels Leader-Election:<br />

Ankunft einer contention-Nachricht beim Server<br />

contentionReceive (c) {<br />

if (c.PID == MyPID) {<br />

busy = true;<br />

activeTask = Top(taskQ);<br />

Druckauftrag(activeTask) bearbeiten;<br />

send (clientId, ACK);<br />

delete activeTask;<br />

busy = false;<br />

{<br />

else { //fremde contention-Nachricht<br />

if (c.taskId ⊄ taskQ) {//task ist unbekannt<br />

add c.taskId zu missing;<br />

c weiterleiten auf Ring;<br />

}<br />

else {//task ist bekannt<br />

if (!Konflikt) {//kein Wettbewerb um diesen Auftrag<br />

remove c.taskId from taskQ;<br />

c weiterleiten auf Ring;<br />

}<br />

else {//Konflikt, d h. Wettbewerb um den Auftrag<br />

if (MyPrio < c.Prio) {//ich bin Verlierer<br />

remove c.taskId from taskQ;<br />

c weiterleiten;<br />

}<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 23<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 24


<strong>Verteilte</strong>r Druckdienst mittels Leader-Election:<br />

Ankunft einer contention-Nachricht beim Server<br />

Nachrichtenkomplexität<br />

}<br />

}<br />

}<br />

}<br />

else {//ich bin der Sieger<br />

//fremde contention-Nachricht wird<br />

//vernichtet<br />

}<br />

}<br />

• Best Case<br />

– exakt ein Server bewirbt sich um einen neu eintreffenden Auftrag<br />

N Nachrichten (1 Umlauf einer contention-Nachricht)<br />

• Worst Case<br />

– alle Server bewerben sich um einen neu eintreffenden Auftrag<br />

P N<br />

bewirkt N contention-Nachrichten (Sieger)<br />

P N-1<br />

bewirkt N-1 contention-Nachrichten<br />

P N-2<br />

bewirkt N-2 contention-Nachrichten<br />

P 1<br />

bewirkt 1 contention-Nachricht<br />

Σ = N(N+1)/2 contention-Nachrichten<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 25<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 26<br />

Literatur<br />

D. Wybranietz: Multicast-Kommunikation in verteilten <strong>Systeme</strong>n, Informatik-<br />

Fachberichte 242, Springer-Verlag 1990<br />

<strong>Verteilte</strong> <strong>Systeme</strong>-VI 27

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!