Hallo zusammen, in diesem Video werden wir einen Blick auf die Übungsaufgabe werfen,
in der eine einfache Anwendung mit Hilfe von Raft repliziert werden soll.
Und zwar wollen wir dafür einen einfachen Zählerdienst nutzen, der einen Zähler bereitstellt,
den ein Client dann auf Wunsch incrementieren und auslesen kann.
Der Zähler sollte mit Hilfe des Protokolls Raft aktiv repliziert werden, damit die Anwendung
dann auch Replikatausfälle trafierern kann.
Die Anwendung und der Client sind dabei bereits komplett vorgegeben und für das Raft-Protokoll
gibt es einen Codegerüst.
Der grundlegende Teil der Aufgabe besteht zum einen darin, die Anführerwahl von Raft
zu implementieren.
Der so gewählte Anführer ist dann für das konsistente Replizieren von Anfragen zuständig,
sodass am Ende alle Client-Anfragen auch auf allen Replikaten landen.
Die Anfragen werden dann ausgeführt und der Client bekommt eine Antwort.
In der erweiterten Variante der Übungen sollen auch noch Sicherungspunkte zwischen Replikaten
übertragen werden können.
Mit der Zeit sammelt sich nämlich auf den Replikaten ein immer größer werdendes Log
aus Anfragen an.
Dieses Log soll jetzt mit Hilfe von Sicherungspunkten gekürzt werden.
Zusätzlich erlauben es die Sicherungspunkte auch effizient den aktuellen Zustand der Anwendung
zwischen Replikaten zu übertragen und so andere Replikate auf den aktuellen Stand zu
bringen.
Das ist besonders dann interessant, wenn zum Beispiel ein Replikat nach einem Ausfall seinen
kompletten Zustand verloren hat.
Für die Interaktion zwischen der vorgegebenen Zähleranwendung und dem zu implementierenden
Raft-Protokoll gibt es folgende Schnittstellen.
Beim Starten ruft der Counter-Server zum Initialisieren die Init-Methode des Raft-Protokolls auf,
das dann auch eine Referenz auf den Counter-Server erhält.
Mit der Referenz kann das Raft-Protokoll dann wiederum Aufrufe am Counter-Server tätigen.
Die Init-Methode soll dabei dann auch die Kommunikation zwischen den Replikaten aufsetzen
und ein Protokollsread starten, in dem das Raft-Protokoll dann läuft.
Dazu erzähle ich gleich auch noch etwas mehr.
Dann gibt es noch eine Order-Request-Methode, mit der das Protokoll von der Anwendung Anfragen
zum Replizieren übergeben bekommt.
Auf Seiten des Counter-Servers gibt es zum einen die Status-Methode, mit der das Protokoll
den Counter-Server informiert, in welche Rolle dieses Raft-Replikat hat, also beispielsweise
ob es Leader oder Follower ist.
Zusätzlich enthält der Aufruf die ID des aktuellen Anführers, damit die Anwendung
den Client auch immer zum tatsächlichen Anführer-Replikat weitergeleitet kann, falls
der Client eben ein anderes Replikat kontaktiert hatte.
Das Gegenstück zum vorhin erwähnten Order-Request ist dann die Apply-Request-Methode.
Wenn die Anfrage erfolgreich repliziert wurde, dann sollte dabei entstandene Log-Eintrag
mit Hilfe der Apply-Request-Methode an die Anwendung übergeben werden, die dann die
Anfrage ausführen kann und dafür sorgt, dass der Client seine Antwort bekommt.
In der erweiterten Variante der Übungen sind dann noch die Methoden zum Erzeugen von Snapshots
und zum Wiedereinspielen in die Anwendung relevant.
Create-Snapshot erzeugt dabei eine Kopie des aktuellen Anwendungszustands und Apply-Snapshot
spielt diesen Zustand wieder in die Anwendung ein.
Als nächstes wollen wir uns mal genauer anschauen, was alles passiert, um eine Anfrage zu replizieren.
Ganz grundlegend brauchen wir zuerst eine Möglichkeit, um zwischen den Replikaten zu
kommunizieren.
Presenters
Michael Eischer
Zugänglich über
Offener Zugang
Dauer
00:14:31 Min
Aufnahmedatum
2021-06-09
Hochgeladen am
2021-06-09 17:08:05
Sprache
de-DE
Überblick und Hinweise zu Aufgabe 5: Replikation