Raft-Algorithmus
ist die erste Wahl für die Entwicklung verteilter SystemeKonsensalgorithmus
Beispielsweise sind Etcd und Consul mittlerweile beliebt. Raft 算法
是分布式系统开发首选的共识算法
。比如现在流行 Etcd、Consul。
如果掌握
了这个算法,就可以较容易地处理绝大部分场景的容错
和一致性
需求。比如分布式配置系统、分布式 NoSQL 存储等等,轻松突破系统的单机限制。
Raft 算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。
跟随者(Follower):普通群众
,默默接收和来自领导者的消息,当领导者心跳信息超时的时候,就主动站出来,推荐自己当候选人。
候选人(Candidate):候选人
将向其他节点请求投票 RPC 消息,通知其他节点来投票,如果赢得了大多数投票选票,就晋升当领导者。
领导者(Leader):霸道总裁
Sobald Sie diesen Algorithmus beherrschen, können Sie die meisten Szenen problemlos verarbeiten.<code style="background-color: rgb(231, 243, 237); padding: 0px 3px; border-radius : 4px; overflow-wrap: break-word; text-indent: 0px;">Fehlertoleranz
undKonsistenz
Anforderungen. Beispielsweise können verteilte Konfigurationssysteme, verteilter NoSQL-Speicher usw. die Einschränkungen des Systems auf eine einzelne Maschine leicht überwinden.
Der Raft-Algorithmus erreicht durch alle auf dem Leader basierenden Methoden einen Konsens über eine Reihe von Werten und Konsistenz in den Protokollen jedes Knotens.
Gewöhnliche Leute
, wenn die Herzschlaginformationen des Kandidaten ablaufen , wird er die Initiative ergreifen und sich als Kandidat vorschlagen.
Kandidat: Kandidaten
fordern Abstimmungs-RPC-Nachrichten von anderen Knoten an, um andere Knoten zur Abstimmung zu benachrichtigen. Wenn sie die Mehrheit der Abstimmungsstimmen gewinnen, werden sie zum Anführer befördert.
Leader: Überheblicher Präsident
, alles unterliegt mir. Verarbeiten Sie Schreibanfragen, verwalten Sie die Protokollreplikation und senden Sie kontinuierlich Heartbeat-Informationen, um andere Knoten darüber zu informieren, dass „Ich bin der Anführer, ich lebe noch und Sie möchten nicht“ eine neue Wahl initiieren, ohne einen neuen Anführer als Ersatz finden zu müssen Mich. 3. Einzelknotensystem
3.1 DatenbankserverDatenbankserver
3.2 Client
Der durchgezogene grüne Kreis auf der linken Seite ist der Client und der durchgezogene blaue Kreis auf der rechten Seite ist Knoten a (Knoten a). „Term“ stellt die Amtszeit dar, auf die später eingegangen wird.Client
🎜🎜3.3 Der Client sendet Daten an den Server🎜🎜🎜Der Client sendet einen Aktualisierungsvorgang an den Einzelknotenserver und setzt den in der Datenbank gespeicherten Wert auf 8. In einer eigenständigen Umgebung (einzelner Serverknoten) beträgt der Wert, den der Client vom Server erhält, ebenfalls 8. Konsistenz ist sehr einfach sicherzustellen. 🎜🎜🎜🎜🎜Der Client sendet Daten an den Server🎜🎜🎜3.4 Wie stellen mehrere Knoten die Konsistenz sicher? 🎜🎜🎜Aber wie kann die Konsistenz sichergestellt werden, wenn mehrere Serverknoten vorhanden sind? Beispielsweise gibt es drei Knoten: a, b, c. Wie unten gezeigt. Diese drei Knoten bilden einen Datenbankcluster. Wie kann sichergestellt werden, dass die in den drei Knoten gespeicherten Werte konsistent sind, wenn der Client Aktualisierungsvorgänge für diese drei Knoten durchführt? Dies ist ein Problem der verteilten Konsistenz. Der Raft-Algorithmus soll dieses Problem lösen. Natürlich gibt es auch andere Protokolle, die dies garantieren können. Dieser Artikel konzentriert sich nur auf den Raft-Algorithmus. 🎜Wie stellt der Raft-Algorithmus in einem Cluster mit mehreren Knoten sicher, dass es unter ungewöhnlichen Umständen wie Knotenausfall und Partitionsfehlern gleichzeitig nur einen Anführer im Cluster gibt? Beginnen wir mit der Erklärung des Prozesses der Führerwahl durch den Raft-Algorithmus.
Im Ausgangszustand sind alle Knoten im Cluster Follower.
Wie in der folgenden Abbildung gezeigt, gibt es drei Knoten (Knoten) a, b und c, und der Term (Term) ist 0.
Anfangszustand
Der Raft-Algorithmus implementiert die Funktion eines zufälligen Timeouts, und das Timeout-Intervall, in dem jeder Knoten auf die Heartbeat-Informationen des Leader-Knotens wartet, ist zufällig. Beispielsweise beträgt das Wartezeit-Timeout-Intervall von Knoten A 150 ms, das von Knoten B 200 ms und das von Knoten C 300 ms. Dann kommt es zunächst zu einer Zeitüberschreitung, da nicht auf die Heartbeat-Informationen des Anführers gewartet wird. Wie in der Abbildung unten gezeigt, beginnen die Timeout-Timer für die drei Knoten zu laufen.
Timeout
Wenn das Timeout von Knoten A abläuft, wird Knoten A zum Kandidaten, erhöht seine Termnummer, aktualisiert den Termwert von 0 auf 1 und gibt eine Stimme für sich selbst ab.
Kandidat werden
Mal sehen, wie ein Kandidat zum Anführer wird.
Anführerwahl
Das englische Wort ist Amtszeit, und Führungskräfte haben eine Amtszeit.
Angenommen, ein Cluster besteht aus N Knoten, dann ist die Mehrheit mindestens N/2+1. Beispiel: Bei einem Cluster mit 3 Knoten sind die meisten 2.
Um zu verhindern, dass mehrere Knoten gleichzeitig eine Abstimmung einleiten, wird jedem Knoten ein zufälliges Wahl-Timeout zugewiesen. Während dieser Zeit kann der Knoten kein Kandidat werden und nur bis zur Zeitüberschreitung warten. Im obigen Beispiel läuft beispielsweise Knoten A zuerst ab und wird zuerst zum Kandidaten. Durch dieses clevere Design initiiert in den meisten Fällen nur ein Serverknoten zuerst die Wahl, anstatt die Wahl gleichzeitig zu initiieren, was die Anzahl von Wahlfehlschlägen aufgrund von Stimmenteilung reduziert.
Kandidat werden
Wenn der Führungsknoten ausfällt, wird eine neue Wahlrunde ausgelöst. Wie in der folgenden Abbildung dargestellt, wählen Knoten B und Knoten C den Anführer erneut, wenn der Anführerknoten A ausfällt.
Leader-Fehler
Der Raft-Algorithmus verwendet die folgenden Methoden zur Durchführung von Führungswahlen und stellt so sicher, dass es in einer Amtszeit nur einen Anführer gibt, wodurch die Zahl der Wahlfehlschläge erheblich reduziert wird.
In diesem Artikel wird erläutert, wie der Raft-Algorithmus Führungskräfte anhand animierter Grafiken wählt.
Das obige ist der detaillierte Inhalt vonEin Konsensalgorithmus, den verteilte Systeme kennen müssen: Raft. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!