Warum ist das Konsensproblem beim verteilten Computing so wichtig?


19

Im Bereich des verteilten Rechnens scheint das Konsensproblem eines der zentralen Themen zu sein, das intensiv erforscht wurde. Insbesondere die Arbeit "Impossibility of Distributed Consensus with One Faulty Process" wurde 2001 mit dem PODC Influential Paper Award ausgezeichnet .

Warum ist das Konsensproblem so wichtig? Was können wir mit Konsens sowohl in der Theorie als auch in der Praxis erreichen?

Hinweise oder Ausstellungen wären sehr hilfreich.

Antworten:


18

Das von Ihnen erwähnte Papier ist aus zwei Gründen wichtig:

  1. Es zeigt, dass es keinen asynchronen deterministischen Konsensalgorithmus gibt, der auch nur einen einzigen Absturzfehler toleriert. Beachten Sie, dass es in der synchronen Einstellung einen deterministischen Algorithmus gibt, der in Runden endet, wenn Absturz verarbeitet.ff+1f
  2. Es führt die Bivalenz und Univalenz von Konfigurationen (*) ein, die später in vielen Untergrenzen und Unmöglichkeitsbeweisen verwendet werden.

Anwendungen

Eine wichtige Anwendung des Konsensproblems ist die Wahl eines Koordinators oder Leiters in einem fehlertoleranten Umfeld, um globale Maßnahmen einzuleiten. Ein Konsensalgorithmus ermöglicht es Ihnen, dies im laufenden Betrieb zu tun, ohne zuvor einen "Supernode" zu reparieren (was einen einzigen Fehlerpunkt zur Folge hätte).

Eine andere Anwendung gewährleistet die Konsistenz in einem verteilten Netzwerk: Angenommen, Sie haben verschiedene Sensorknoten, die dieselbe Umgebung überwachen. Für den Fall, dass einige dieser Sensorknoten abstürzen (oder aufgrund eines Hardwarefehlers sogar fehlerhafte Daten senden), stellt ein Konsensprotokoll die Robustheit gegen solche Fehler sicher.


(*) Ein Lauf eines verteilten Algorithmus ist eine Folge von Konfigurationen. Eine Konfiguration ist ein Vektor der lokalen Zustände der Prozesse. Jeder Prozess führt eine deterministische Zustandsmaschine aus. Jeder korrekte Konsensalgorithmus muss schließlich eine Konfiguration erreichen, in der jeder Prozess (unwiderruflich) denselben Eingabewert festgelegt hat. Eine Konfiguration ist - wertig, wenn alle möglichen Erweiterungen von zu einem Entscheidungswert von führen , egal was der Gegner tut . Analog können wir - Valenz definieren . Eine Konfiguration ist zweiwertig, wenn beide Entscheidungen von aus erreichbar sind1 C 1 0 C C CC1C10CC(Welcher der beiden erreicht wird, hängt vom Gegner ab). In einer zweiwertigen Konfiguration kann sich eindeutig kein Prozess entschieden haben , da wir sonst einen Widerspruch zur Übereinstimmung bekommen! Wenn wir also eine unendliche Folge solcher zweiwertigen Konfigurationen konstruieren können, haben wir gezeigt, dass es in dieser Einstellung keinen Konsensalgorithmus gibt.C


2
@AJed Als Ergänzung: Ich habe über das Papier warf einen Blick Synchronisation von Maurice Herlihy und kann nun einen weiteren großen theoretischen Implikationen der Konsens Problem darstellen. Unter Verwendung der Idee der Konsenszahl kann gezeigt werden, dass es eine unendliche Hierarchie von Synchronisationsprimitiven gibt, so dass kein Primitiv auf einer Ebene für eine wartefreie Implementierung von Primitiven auf höheren Ebenen verwendet werden kann. Einfach gesagt, Konsens Problem severs als einheitliche Theorie über die relative Definition von Leistung von primitiven Synchronisationsvorgängen. Es ist elegant.
Hengxin

1
Ich habe einige Schwierigkeiten, den Beweis für das Ergebnis der FLP-Unmöglichkeit zu verstehen. Könntest du mir ein paar Tipps geben? Weitere Informationen finden Sie unter [FLP proof] ( stackoverflow.com/q/15131730/1833118 ). Vielen Dank.
Hengxin

"wo jeder Prozess entschieden hat" sollte vielleicht "wo jeder richtige Prozess entschieden hat" sein?
nbro

Sie sollten erklären, wer der Gegner ist, "egal was der Gegner tut".
nbro

"Alle möglichen Erweiterungen von C", was meinst du mit "Erweiterung von C"? Was ist eine Erweiterung einer Konfiguration im Allgemeinen?
nbro

7

Es zeigt, dass es keinen fehlertoleranten deterministischen Algorithmus gibt. Ein ziemlich starkes theoretisches Ergebnis, das Designer dazu zwingt, anders mit Fehlertoleranz umzugehen. Einige davon sind Synchronisation und Randomisierung.

Kommentar: Nach meiner Meinung ist die Synchronisation eine zusätzliche Voraussetzung für das System, die in der Praxis kaum anzutreffen ist.

Referenzen finden Sie unter dem Wikipedia-Link . Überprüfen Sie auch diesen Blog für praktische Anwendungen


1
Ja, ich bevorzuge die Randomisierung der Synchronisierung. Die Umgebung, in der verteiltes Computing gespielt wird, ist im Sinne von Asynchronisierung, unbegrenzter Verzögerung, unerwartetem Ausfall und zu viel Nichtdeterminismus sehr schlecht. Wenn es nicht perfekt ist, warum verwenden wir keine Randomisierung, um einige Garantien zu erzielen und gleichzeitig zu viel Komplexität zu vermeiden?
Hengxin

1
Apropos Synchronisation, ich mag die Annahme in der Theorie einfach nicht . In der Industrie wird jedoch häufig eine Synchronisation oder Teilsynchronisation angewendet. Zum Beispiel ist Google Spanner eine global verteilte synchron replizierte Datenbank. Das macht mich weniger entschlossen. Was ist deine Meinung?
Hengxin

Ich denke, es ist besser zu sehen, wie die Synchronisation dort implementiert ist. Aber es ist eine sehr interessante Referenz. - Was ich meine, es ist kein natürliches Merkmal des Systems. Es muss hinzugefügt werden.
AJed

Im Allgemeinen sollten Sie Wikipedia nicht als Referenz angeben. Ich habe gerade diesen Wikipedia-Artikel gelesen: Er ist ziemlich unvollständig und unorganisiert. es könnte auch verwirrend sein.
nbro

5

Ein Grund, warum Konsensprobleme wichtig sind, ist, dass sie sehr einfach sind und eine Art universelles Problem für verteilte Computersysteme darstellen.

Wenn wir einen Konsens in einem asynchronen verteilten System lösen können, können wir damit Aktionen auf gemeinsam genutzten Objekten linearisieren und Linearisierbarkeit für gemeinsam genutzte Objekte erzielen.

Wie viele Probleme sind Ihrer Meinung nach der Einfachheit halber einfacher, als sich auf einen Wert zu einigen?

Das Ergebnis der Unmöglichkeit eines Konsenses in (reinen) asynchronen verteilten Systemen zeigt, dass wir Probleme, die wir in (reinen) asynchronen verteilten Systemen lösen wollen, nicht ohne zusätzliche "Dinge" lösen können. Dies führt zu asynchronen Modellen, in denen wir einen Konsens lösen können, z. B. randomisierte Algorithmen, Fehlerdetektoren, Teilsynchronisationsmodelle usw.

Dies ist auch der Grund, warum in der Praxis konsenslösende Algorithmen wie Lamports Paxos, Googles Chubby, Apache ZooKeeper und in jüngerer Zeit Raft im Mittelpunkt verteilter Systeme stehen, bei denen wir häufig einen Status zwischen Servern replizieren möchten.


0

Ich möchte nur hinzufügen, dass die Art der Berechnung immer mehr auf den Stapel verteilt wird: viele CPUs, viele Prozesse auf einer Maschine, viele Maschinen, die über LANs verbunden sind, viele LANs, die über Internets verbunden sind.

Dies macht das Problem des gemeinsamen (verteilten / globalen) Zustands zum vorrangigen Problem - jeder Algorithmus nimmt einen bestimmten Zustand an, und wenn die Berechnung an mehr als einem Ort durchgeführt werden soll, muss der Zustand ebenfalls verteilt werden.

Einflussreiche Artikel ( Paxos und kürzlich Raft ) in diesem Bereich wurden nach dem von Ihnen zitierten Artikel veröffentlicht. Beide befassen sich mit den Konsensfragen, wenn einige Fehler vorliegen.

Byzantinische Fehler können in verteilten Systemen mit wenigen Ansätzen vermieden werden.

Werfen Sie einen Blick auf den Wikipedia-Eintrag zu Byzantinischer Fehlertoleranz .


Das Ergebnis der FLP-Unmöglichkeit gilt auch für die Einstellung des grundlegendsten Fehlers (Absturz), sodass ich nicht sicher bin, worum es in diesem Abschnitt bei der Vermeidung von byzantinischen Fehlern geht. Wenn wir keine Fehler haben, ist der Konsens ziemlich einfach: Ein fester Prozess überträgt seinen Wert und jeder Prozess entscheidet über diesen Wert, sobald er empfangen wird.
Kaveh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.