Die Ăbersetzung des Artikels wurde speziell fĂŒr Studenten des Kurses
âHigh Load Architectâ vorbereitet, der diesen Monat beginnt.

Blockchain ist ein dezentrales System, das aus verschiedenen Einheiten besteht, die abhĂ€ngig von ihren Anreizen und den Informationen, ĂŒber die sie verfĂŒgen, handeln.
Immer wenn eine neue Transaktion ĂŒber das Netzwerk gesendet wird, können Knoten diese Transaktion in eine Kopie ihres Hauptbuchs aufnehmen oder ignorieren. Wenn die meisten Netzwerkteilnehmer beschlieĂen, einen bestimmten Status zu akzeptieren, wird ein Konsens erzielt.
Ein grundlegendes Problem bei
verteilten Computer- und
Multiagentensystemen besteht darin, die GesamtsystemzuverlÀssigkeit bei einer Reihe von nicht betriebsbereiten Prozessen zu erreichen.
Dies erfordert hÀufig, dass die Prozesse einen Wert untereinander koordinieren, der wÀhrend der Berechnung benötigt wird.Diese Prozesse werden als Konsens bezeichnet.
- Was passiert, wenn ein Teilnehmer beschlieĂt, die Regeln nicht zu befolgen und in den Zustand seines Hauptbuchs einzugreifen?
- Was passiert, wenn viele solcher Teilnehmer im Netzwerk sind, aber nicht die Mehrheit?
Damit ein Konsensprotokoll sicher ist, muss es fehlertolerant sein.
ZunĂ€chst werden wir kurz auf das unlösbare Problem zweier GenerĂ€le eingehen. Betrachten Sie dann das Problem der byzantinischen GenerĂ€le und diskutieren Sie die byzantinische Fehlertoleranz in verteilten und dezentralen Systemen. Lassen Sie uns ganz am Ende darĂŒber sprechen, wie dies alles mit der Blockchain-Technologie zusammenhĂ€ngt.
Die Aufgabe zweier GenerÀle
Diese
Aufgabe, die erstmals 1975 veröffentlicht und 1978 benannt wurde, beschreibt ein Szenario, in dem zwei GenerĂ€le einen gemeinsamen Feind angreifen. Der erste General gilt als AnfĂŒhrer und der zweite als AnhĂ€nger. Die Armee eines jeden Generals allein reicht nicht aus, um die feindliche Armee zu besiegen, daher mĂŒssen sie gleichzeitig kooperieren und angreifen. Dieses Szenario sieht einfach aus, aber es gibt eine EinschrĂ€nkung:
Damit sie kommunizieren und sich auf eine Zeit einigen können, muss der erste General einen Boten durch das feindliche Lager schicken und dem zweiten General eine Nachricht mit dem Zeitpunkt des Beginns des Angriffs ĂŒbermitteln. Es ist jedoch wahrscheinlich, dass der Messenger von Gegnern gefangen genommen wird und die Nachricht nicht zugestellt wird. Dies wird dazu fĂŒhren, dass die Armee des ersten Generals angreift und die zweite an Ort und Stelle bleibt.
Selbst wenn die erste Nachricht zugestellt wird, muss der zweite General bestĂ€tigen (ACK (BestĂ€tigen), beachten Sie die Ăhnlichkeit mit dem Drei-Wege-Handshake in
TCP ), dass er die Nachricht empfangen hat, und sendet den Messenger zurĂŒck, um das vorherige Szenario zu reproduzieren, in dem der Messenger erfasst werden kann . Dies flieĂt in endlose ACKs, und aus diesem Grund können die GenerĂ€le keine Einigung erzielen.
Es gibt keine Möglichkeit, die zweite Bedingung zu garantieren, dh, dass jeder General völlig zuversichtlich ist, dass der andere dem Angriffsplan zustimmt. Beide GenerÀle werden immer nicht wissen, ob der Bote seinen Kameraden erreicht hat.
Es wurde bewiesen, dass die Aufgabe zweier GenerÀle unlösbar ist.
Die Aufgabe der byzantinischen GenerÀle
Die 1982 von Lamport, Shostak und Piz beschriebene Version dieses Problems erwies sich als Höhepunkt. Sie beschreibt dasselbe Szenario, in dem sich anstelle von zwei GenerĂ€len mehr GenerĂ€le auf den Zeitpunkt des Angriffs einigen sollten. Eine zusĂ€tzliche Komplikation besteht darin, dass ein oder mehrere GenerĂ€le VerrĂ€ter sein können, dh sie können ĂŒber ihre Absichten lĂŒgen (zum Beispiel sagt der General, dass er sich bereit erklĂ€rt, um 09:00 Uhr anzugreifen, dies aber nicht tut).
Das in der Aufgabe zweier GenerĂ€le beschriebene Paradigma des Leader-Followers verwandelt sich in eine untergeordnete Anordnung des Kommandanten. Um hier einen Konsens zu erzielen, mĂŒssen sich der Kommandant und jeder Untergebene auf dieselbe Lösung einigen (Angriff oder RĂŒckzug).

BildĂŒbersetzung:
Die Aufgabe der byzantinischen GenerÀle. Der Generalkommandant muss seinen n-1 Untergebenen einen Befehl senden, so dass:
- Alle loyalen untergeordneten GenerÀle gehorchen einem Befehl.
- Wenn der Generalkommandant loyal ist, gehorchen alle seine loyalen Untergebenen seinen Befehlen.
Neben dem zweiten Punkt muss auf eine interessante Tatsache hingewiesen werden: Wenn der Kommandant ein VerrÀter ist, muss noch ein Konsens erzielt werden. Infolgedessen haben alle Leutnants die Mehrheit.
Der Konsensalgorithmus basiert in diesem Fall auf der Bedeutung der meisten Entscheidungen, die Untergebene sehen.
Satz: FĂŒr jedes
m erreicht der
OM (m) -Algorithmus einen Konsens mit mehr als
3 Millionen GenerÀlen und maximal
m VerrÀtern.
Dies bedeutet, dass der Algorithmus einen Konsens erzielen kann, wÀhrend 2/3 der Teilnehmer ehrlich sind. Wenn die VerrÀter mehr als 1/3 sind, wird kein Konsens erzielt, die Armeen können ihre Angriffe nicht koordinieren und der Feind gewinnt.
OM-Algorithmus (0)
- Der Kommandant sendet seinen Wert an jeden der Untergebenen.
- Jeder Untergebene verwendet den Wert, den er vom Kommandanten erhÀlt, oder den Wert DELAY, wenn er keinen Wert erhÀlt.
OM-Algorithmus (m), m> 0
- Der Kommandant sendet mit seiner Wichtigkeit an jeden der Untergebenen.
- FĂŒr jedes i sei vi der Wert, den der i-te Untergebene vom Kommandanten erhĂ€lt, oder der RESET-Wert wird verwendet, wenn der Untergebene keinen Wert erhĂ€lt. Der i-te Untergebene fungiert als Kommandant im OM-Algorithmus (m-1) und sendet einen Wert an jeden der n-2 verbleibenden Untergebenen.
- Unter der Voraussetzung, dass jïči ist, sei vj der Wert, den der i-te Untergebene in Schritt (2) vom j-ten Untergebenen empfangen hat (unter Verwendung des OM-Algorithmus (m-1)), oder verwendet den Wert DELAY if bekommt keine Bedeutung. Der i-te Slave verwendet den Mehrheitswert (v1, ..., vn-1).
Wenn m = 0 ist, gibt es keine VerrĂ€ter, jeder Untergebene folgt der Reihenfolge. FĂŒr m> 0 geht jede endgĂŒltige Wahl eines Untergebenen vom vorherrschenden Teil der Wahl aller Untergebenen aus.Es wird klarer, wenn Sie die Situation aus der Sicht des zweiten Untergebenen betrachten - sei C der Kommandant und L {i} der i-te Untergebene.
OM (1): Untergebener 3 ist ein VerrÀter. Die Situation aus Sicht des zweiten Untergebenen.Schritte:
- Der Kommandant sendet v an alle Untergebenen.
- L1 sendet L2 den Wert von v oder L3 sendet L2 den Wert von x.
- L2 â Mehrheit (v, v, x) == v
Die endgĂŒltige Entscheidung wird mit der Mehrheit der Stimmen von L1, L2 und L3 getroffen, wodurch ein Konsens erzielt wird.
Es ist wichtig, sich daran zu erinnern, dass die meisten Untergebenen das Ziel haben, dieselbe Lösung zu wÀhlen, anstatt eine bestimmte.
Schauen wir uns den Fall an, in dem der Kommandant ein VerrÀter ist.
OM (1): Der Kommandant ist ein VerrÀter.Schritte:
- Der Kommandant sendet L1, L2, L3 die Werte von x, y, z;
- L1 sendet den Wert von x an die Slaves L2, L3 | L2 sendet L1, L3 den Wert von y | L3 sendet L1, L2 den Wert von z;
- L1 â Mehrheit (x, y, z) | L2 â am meisten (x, y, z) | L3 â Mehrheit (x, y, z)
Sie haben alle den gleichen Wert, so dass ein Konsens erzielt wird. Beachten Sie, dass der
Mehrheitswert (x, y, z) fĂŒr alle drei Untergebenen gleich
ist , auch wenn die Werte von x, y, z alle unterschiedlich sind. Wenn x, y, z völlig unterschiedliche Ordnungen sind, können wir davon ausgehen, dass sie gemÀà dem Standardplan - RESET - funktionieren.
Um einen praktischen Ansatz fĂŒr ein komplexeres Beispiel mit 7 GenerĂ€len und 3 VerrĂ€tern zu betrachten, empfehle ich Ihnen, diesen
Artikel zu lesen.
Byzantinische Fehlertoleranz
Die byzantinische Fehlertoleranz ist ein Merkmal, das ein System definiert, das eine Fehlerklasse zulÀsst, die zur Aufgabe "Byzantinische GenerÀle" gehört. Byzantinisches Versagen ist die komplexeste Klasse
von Versagensarten . Es impliziert keine EinschrĂ€nkungen und macht keine Annahmen darĂŒber, welche Art von Verhalten ein Knoten haben kann (zum Beispiel kann ein Knoten beliebige Daten generieren und sich als ehrlicher Teilnehmer ausgeben).
Byzantinische Fehler sind am schwierigsten zu beheben. Byzantinische Fehlertoleranz war in Flugzeugtriebwerkssystemen, in Kernkraftwerken und in praktisch jedem System erforderlich, dessen Wirkung von den Ergebnissen einer groĂen Anzahl von Sensoren abhĂ€ngt. Selbst SpaceX sieht darin eine
potenzielle Anforderung fĂŒr seine Systeme.
Der im vorherigen Abschnitt erwĂ€hnte Algorithmus entspricht der byzantinischen Fehlertoleranz, bis die Anzahl der VerrĂ€ter ein Drittel aller GenerĂ€le ĂŒberschreitet. Es gibt andere Möglichkeiten, um diese Aufgabe zu erleichtern, einschlieĂlich der Verwendung digitaler Signaturen oder der EinfĂŒhrung von EinschrĂ€nkungen fĂŒr die Kommunikation zwischen Peers.
Wie hÀngt das alles mit der Blockchain zusammen?
Blockchain sind dezentrale HauptbĂŒcher, die per Definition nicht von der zentralen Behörde kontrolliert werden. Aufgrund der darin gespeicherten Werte haben Angreifer einen guten wirtschaftlichen Anreiz, einen Fehler auszulösen. Trotzdem sind die byzantinische Fehlertoleranz und damit die Lösung des byzantinischen allgemeinen Problems fĂŒr die Blockchain einfach notwendig.
Ohne byzantinische Fehlertoleranz kann ein Peer falsche Transaktionen ĂŒbertragen und veröffentlichen, wodurch die ZuverlĂ€ssigkeit der Blockchain vollstĂ€ndig aufgehoben wird. Erschwerend kommt hinzu, dass es keine zentrale Behörde gibt, die Verantwortung ĂŒbernehmen und SchĂ€den reparieren kann.
Als
Bitcoin erfunden wurde, war ein groĂer Durchbruch die Verwendung von Beweisen
fĂŒr die probabilistische Lösung des Problems der byzantinischen GenerĂ€le. Es wurde von Satoshi Nakamoto in dieser
E-Mail ausfĂŒhrlich beschrieben.
Fazit
In diesem Artikel haben wir einige grundlegende Konzepte des Konsenses in verteilten Systemen untersucht.