2 - Verteilte Synchronisation & Lockprotokoll von Lamport [ID:34370]
50 von 97 angezeigt

Hallo zusammen. In diesem Video geht es darum, wie man mithilfe der logischen Zeit,

die ihr im vorherigen Video kennengelernt habt, Synchronisation in einem verteilten

System realisieren kann. Dazu schauen wir uns auch das Log-Protokoll von Lampard an,

das ihr in dieser Aufgabe implementieren sollt. Wenn mehrere Prozesse gleichzeitig auf ein

gemeinsames Betriebsmittel zugreifen, braucht es eine Koordination dieser Zugriffe, also eine

Art wechselseitiger Ausstoß. Das gilt natürlich nicht nur bei mehrfädigem Programm, sondern auch

in einem verteilten System. Dabei gibt es verschiedene Möglichkeiten. Man kann einen

zentralen Koordinator einsetzen. Alle Zugriffe, egal von welchem Prozess, werden dann an dieser

einen Stelle koordiniert. Man kann sich die Prozesse aber auch untereinander selbstständig

koordinieren lassen. In beiden Fällen kann man einen exklusiven Zugriff auf eine Ressource aber

äquivalent zu der Bestimmung einer totalen Ordnung auf diese Ressource ansehen. Die Komponenten

einigen sich quasi darauf, in welcher Reihenfolge die Ressource verwendet werden darf. Also wann ein

Prozess den kritischen Abschnitt für diese Ressource betreten kann und realisieren so die

Koordinierung. Wie funktioniert das jetzt mit einem zentralen Koordinator? Hier wird ein Prozess

bestimmt, der für die Zuteilung zuständig ist. Alle anderen Prozesse müssen, wenn sie auf die

Ressource zugreifen wollen, bei diesem Koordinator anfragen. Diese sammelt die Anfragen, ordnet sie

und gibt jeweils dem nächsten Prozess, der an der Reihe ist, die Ressource frei, damit dieser dann

die Ressource verwenden kann, also den kritischen Abschnitt betreten kann. Wenn der Prozess fertig

ist, gibt es dem Koordinator Bescheid. Dieser kann nun im nächsten Prozess die Ressource zuteilen.

Auch wenn die Synchronisation mit einem zentralen Koordinator relativ einfach ist,

hat sie doch den Nachteil, dass alle Zugriffe eben über diesen zentralen Koordinator laufen

müssen und dort recht schnell ein Bottleneck entsteht. Daher gibt es die andere Möglichkeit,

die Synchronisation durch Einigung der Prozesse untereinander zu koordinieren.

Ein Algorithmus zur Synchronisation ohne zentralen Koordinator ist das Log-Protokoll von Lampard.

Hier verwendet man die durch den logischen Zeitstempel generierte totale Ordnung,

um Log-Anfragen an eine Ressource zu koordinieren. Es gibt einige Voraussetzungen,

damit der Algorithmus überhaupt erst funktioniert. Man braucht einen FIFO-Kanal für die Nachrichten.

Zuerst versendete Nachrichten müssen also auch zuerst ankommen. Die Reihenfolge der

Nachrichten darf nicht verändert werden. Zudem muss der Kanal zuverlässig sein. Es dürfen also

keine Nachrichten verloren gehen. Zusätzlich toleriert der Algorithmus ohne weiteres erst einmal

keine Ausfälle von den Prozessen. Wenn diese Voraussetzungen erfüllt sind, läuft das Protokoll

dann aber folgendermaßen ab. Erstens, wenn ein Prozess eine geteilte Ressource verwenden möchte,

schickt er eine Request-Nachricht per Broadcast an alle anderen Prozesse.

Jeder Prozess verwaltet jetzt eine Warteschlange mit allen aktuellen Request-Anfragen,

in der auch die eigene Anfrage eingereitet wird. Jetzt wartet ein Prozess, bis seine

eigene Anfrage ganz vorne in der Warteschlange ist und es keine andere Möglichkeit gibt,

dass ein anderer Prozess sich noch vor ihm in dieser Warteschlange einreihen könnte.

Diese Entscheidungen werden anhand der logischen Zeitstempel der Request-Nachrichten getroffen.

Wenn ein Prozess dann anhand dieser Kriterien als nächstes an der Reihe ist, kann er den

kritischen Abschnitt betreten und die Ressource verwenden. Anschließend, also wenn er mit der

Ressource fertig ist, sendet er per Broadcast eine Release-Nachricht an alle anderen Prozesse,

die dadurch wissen, dass der Prozess fertig ist und die Anfrage aus der Request-Warteschlange

gelöscht werden kann. Dann geht es mit dem nächsten Eintrag in der Warteschlange und im

nächsten Prozess weiter und so wird die ganze Sache koordiniert. Betrachten wir die einzelnen

Schritte aber noch mal genauer. Um zu wissen, welche Anfrage als nächstes an der Reihe ist,

verwaltet jeder Prozess eine Warteschlange für alle Request-Nachrichten. Alle eingehenden

Request-Nachrichten werden dort eingereicht. Das schließt auch die selbst gesendeten Nachrichten

mit ein. Die Sortierung der Warteschlange wird anhand der total geordneten Zeitstempel der logischen

Uhr durchgeführt. Ein Element wird dabei dann erst vom Kopf der Warteschlange entfernt,

wenn man ein korrespondierendes Release empfangen hat. Auch hier wird wieder nicht unterschieden,

Teil einer Videoserie :
Teil eines Kapitels:
Verteilte Synchronisation

Zugänglich über

Offener Zugang

Dauer

00:07:41 Min

Aufnahmedatum

2021-06-15

Hochgeladen am

2021-06-15 13:58:32

Sprache

de-DE

Synchronisation in verteilten Systemen

Einbetten
Wordpress FAU Plugin
iFrame
Teilen