{"id":37335,"date":"2019-10-31T22:17:01","date_gmt":"2019-10-31T19:17:01","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah\/"},"modified":"2019-10-31T22:17:01","modified_gmt":"2019-10-31T19:17:01","slug":"kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah","title":{"rendered":"Die Katze Schr\u00f6dingers ohne Kiste: das Konsensproblem in verteilten Systemen","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Stellen wir uns vor. In einem Raum sind 5 Katzen eingesperrt, und um ihren Besitzer zu wecken, m\u00fcssen sie sich gemeinsam darauf einigen, denn die T\u00fcr k\u00f6nnen sie nur zu f\u00fcnft aufdr\u00fccken. Wenn eine der Katzen die Katze Schr\u00f6dingers ist und die anderen Katzen nichts von ihrer Entscheidung wissen, stellt sich die Frage: \u201eWie k\u00f6nnen sie das tun?\u201c <\/p>\n<p>In diesem Artikel werde ich Ihnen einfach die theoretischen Grundlagen der verteilten Systeme und die Prinzipien ihrer Funktionsweise erl\u00e4utern. Au\u00dferdem werde ich kurz die zentrale Idee, die Paxos zugrunde liegt, anrei\u00dfen. <\/p>\n<p><img decoding=\"async\" alt=\"Die Katze Schr\u00f6dingers ohne Kiste: das Konsensproblem in verteilten Systemen\" src=\"\/wp-content\/uploads\/2019\/08\/17c1edb1fca739d29dc4922bbbe820ce.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nWenn Entwickler Cloud-Infrastrukturen, verschiedene Datenbanken und Cluster mit einer gro\u00dfen Anzahl von Knoten nutzen, sind sie sich sicher, dass die Daten intakt, gesichert und jederzeit verf\u00fcgbar sind. Aber woher kommen die Garantien?<\/p>\n<p>Im Grunde genommen sind die Garantien, die wir haben, die Garantien des Anbieters. Diese werden in der Dokumentation ungef\u00e4hr wie folgt beschrieben: \u201eDieser Service ist zuverl\u00e4ssig genug, er hat ein vorgegebenes SLA, machen Sie sich keine Sorgen, alles wird verteilt funktionieren, wie Sie es erwarten.\u201c <\/p>\n<p>Wir neigen dazu, das Beste zu glauben, denn kluge Onkels von gro\u00dfen Unternehmen haben uns versichert, dass alles gut werden wird. Wir stellen uns nicht die Frage: Warum k\u00f6nnte das eigentlich funktionieren? Gibt es eine formale Begr\u00fcndung f\u00fcr die Korrektheit solcher Systeme?<\/p>\n<p>Vor kurzem bin ich <noindex><a rel=\"nofollow\" href=\"https:\/\/sptdc.ru\">zu einer Schule f\u00fcr verteilte Berechnungen<\/a><\/noindex> gefahren und war von diesem Thema sehr inspiriert. Die Vorlesungen in der Schule erinnerten mehr an Mathematikanalysis, als an etwas, das mit Computersystemen zu tun hat. Aber genau so wurden zur damaligen Zeit die entscheidenden Algorithmen bewiesen, die wir jeden Tag nutzen, ohne es zu merken. <\/p>\n<p>In den meisten modernen verteilten Systemen wird der Konsensalgorithmus Paxos und seine verschiedenen Modifikationen verwendet. Das Beste daran ist, dass die Begr\u00fcndung und prinzipiell die M\u00f6glichkeit, dass dieser Algorithmus existiert, einfach mit Stift und Papier bewiesen werden kann. Gleichzeitig wird der Algorithmus in der Praxis in gro\u00dfen Systemen eingesetzt, die auf einer riesigen Anzahl von Knoten in Clouds laufen. <\/p>\n<p><b class=\"spoiler_title\">Eine einfache Illustration daf\u00fcr, worum es gleich gehen wird: das Problem der zwei Gener\u00e4le.<\/b>Lassen Sie uns zur Auflockerung die <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%B4%D0%B2%D1%83%D1%85_%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D0%BB%D0%BE%D0%B2\">Aufgabe der zwei Gener\u00e4le betrachten.<\/a><\/noindex>. <\/p>\n<p>Wir haben zwei Armeen \u2013 die Rote und die Wei\u00dfe. Die wei\u00dfen Truppen sind in der belagerten Stadt stationiert. Die roten Truppen unter dem Kommando der Gener\u00e4le A1 und A2 sind auf beiden Seiten der Stadt positioniert. Die Aufgabe der Roten ist es, die wei\u00dfe Stadt anzugreifen und zu siegen. Allerdings ist die Armee jedes roten Generals f\u00fcr sich genommen kleiner als die der Wei\u00dfen.<\/p>\n<p><img decoding=\"async\" alt=\"Die Katze Schr\u00f6dingers ohne Kiste: das Konsensproblem in verteilten Systemen\" src=\"\/wp-content\/uploads\/2019\/08\/2a684a484d4f6cb3d4e33f2367206d9c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie Bedingungen f\u00fcr den Sieg der Roten: Beide Gener\u00e4le m\u00fcssen gleichzeitig angreifen, um einen zahlenm\u00e4\u00dfigen Vorteil gegen\u00fcber den Wei\u00dfen zu erlangen. Dazu m\u00fcssen sich die Gener\u00e4le A1 und A2 einigen. Wenn jeder separat angreift, verlieren die Roten. <\/p>\n<p>Um sich zu verst\u00e4ndigen, k\u00f6nnen die Gener\u00e4le A1 und A2 Boten durch das Gebiet der wei\u00dfen Stadt senden. Ein Bote kann den verb\u00fcndeten General erfolgreich erreichen oder von den Gegnern abgefangen werden. Frage: Gibt es eine solche Abfolge von Kommunikationen zwischen den roten Gener\u00e4len (eine Sequenz von Boten, die von A1 zu A2 und umgekehrt von A2 zu A1 gesendet werden), bei der sie garantiert eine Einigung \u00fcber den Angriff zur Stunde X erreichen? Hierbei wird unter Garantien verstanden, dass beide Gener\u00e4le eine eindeutige Best\u00e4tigung erhalten, dass der Verb\u00fcndete (der andere General) genau zur vereinbarten Zeit X angreift.<\/p>\n<p>Angenommen, A1 sendet einen Boten zu A2 mit der Botschaft: \u201eLass uns heute um Mitternacht angreifen!\u201c. General A1 kann nicht angreifen, ohne eine Best\u00e4tigung von General A2 zu erhalten. Wenn der Bote von A1 angekommen ist, sendet General A2 eine Best\u00e4tigung mit der Botschaft: \u201eJa, lass uns heute die Wei\u00dfen \u00fcberrennen\u201c. Doch jetzt wei\u00df General A2 nicht, ob sein Bote angekommen ist oder nicht, er hat keine Garantien, dass der Angriff gleichzeitig erfolgt. Nun ben\u00f6tigt auch General A2 wieder eine Best\u00e4tigung.<\/p>\n<p>Wenn man ihre Kommunikation weiter ausf\u00fchrt, wird sich Folgendes herausstellen: Egal wie viele Zyklen des Nachrichtenaustauschs es gibt, es gibt keinen Weg, beide Gener\u00e4le garantiert dar\u00fcber zu informieren, dass ihre Nachrichten erhalten wurden (vorausgesetzt, dass einer der Boten abgefangen werden kann).<\/p>\n<p>Die Aufgabe der zwei Gener\u00e4le ist eine hervorragende Illustration eines sehr einfachen verteilten Systems, bei dem es zwei Knoten mit unzuverl\u00e4ssiger Kommunikation gibt. Das bedeutet, dass wir keine 100%ige Garantie haben, dass sie synchronisiert werden. \u00dcber solche Probleme sprechen wir in gr\u00f6\u00dferem Ma\u00dfstab sp\u00e4ter im Artikel.<\/p>\n<h2>Wir f\u00fchren den Begriff der verteilten Systeme ein.<\/h2>\n<p>\nEin verteiltes System ist eine Gruppe von Computern (im Folgenden als Knoten bezeichnet), die Nachrichten austauschen k\u00f6nnen. Jeder einzelne Knoten ist eine gewisse autonome Entit\u00e4t. Der Knoten kann Aufgaben eigenst\u00e4ndig bearbeiten, aber um mit anderen Knoten zu interagieren, muss er Nachrichten senden und empfangen. <\/p>\n<p>Wie genau die Nachrichten implementiert sind und welche Protokolle verwendet werden, interessiert uns in diesem Kontext nicht. Wichtig ist, dass die Knoten des verteilten Systems Daten miteinander austauschen k\u00f6nnen, indem sie Nachrichten senden.<\/p>\n<p>Die Definition selbst scheint nicht sehr komplex zu sein, aber man muss bedenken, dass ein verteiltes System eine Reihe von Attributen hat, die f\u00fcr uns wichtig sein werden.<\/p>\n<h4>Attribute vernetzter Systeme<\/h4>\n<p><\/p>\n<ol>\n<li><b>Nebenl\u00e4ufigkeit<\/b> \u2013 die M\u00f6glichkeit des Auftretens gleichzeitiger oder konkurrierender Ereignisse im System. Dar\u00fcber hinaus werden wir davon ausgehen, dass Ereignisse, die an zwei verschiedenen Knoten aufgetreten sind, potenziell konkurrierend sind, solange wir keine klare Reihenfolge haben, in der diese Ereignisse aufgetreten sind. Und normalerweise haben wir diese nicht.<\/li>\n<li><b>Fehlen globaler Uhren<\/b>. Wir haben keine klare Reihenfolge der Ereignisse aufgrund des Fehlens globaler Uhren. In der normalen Welt der Menschen sind wir es gewohnt, dass wir Uhren haben und die Zeit absolut ist. Alles \u00e4ndert sich, wenn es um verteilte Systeme geht. Selbst hochpr\u00e4zise Atomuhren haben einen Drift, und es kann Situationen geben, in denen wir nicht sagen k\u00f6nnen, welches der beiden Ereignisse zuerst aufgetreten ist. Daher k\u00f6nnen wir uns auch nicht auf die Zeit verlassen.<\/li>\n<li><b>Unabh\u00e4ngiger Ausfall der Knoten im System<\/b>. Es gibt ein weiteres Problem: Etwas kann einfach schiefgehen, weil unsere Knoten nicht ewig sind. Eine Festplatte kann ausfallen, eine virtuelle Maschine in der Cloud kann neu gestartet werden, das Netzwerk kann aussetzen und Nachrichten k\u00f6nnen verloren gehen. Dar\u00fcber hinaus kann es Situationen geben, in denen Knoten funktionieren, aber dabei gegen das System arbeiten. Diese letzte Klasse von Problemen hat sogar einen eigenen Namen erhalten: das Problem der <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%B2%D0%B8%D0%B7%D0%B0%D0%BD%D1%82%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D1%85_%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B0%D0%BB%D0%BE%D0%B2\">byzantinischen Gener\u00e4le<\/a><\/noindex>. Das bekannteste Beispiel f\u00fcr ein verteiltes System mit diesem Problem ist die Blockchain. Aber heute werden wir diese spezielle Klasse von Problemen nicht betrachten. Uns interessieren Situationen, in denen einfach einer oder mehrere Knoten ausfallen k\u00f6nnen.<\/li>\n<li><b>Kommunikationsmodelle (Nachrichten\u00fcbertragungsmodelle) zwischen den Knoten<\/b>. Wir haben bereits festgestellt, dass Knoten \u00fcber den Austausch von Nachrichten kommunizieren. Es gibt zwei bekannte Modelle f\u00fcr den Nachrichtenaustausch: synchron und asynchron.<\/li>\n<\/ol>\n<p><\/p>\n<h4>Kommunikationsmodelle zwischen Knoten in verteilten Systemen<\/h4>\n<p>\n<b>Synchrones Modell<\/b> \u2013 wir wissen genau, dass eine endliche, bekannte Zeitdifferenz besteht, nach der eine Nachricht garantiert von einem Knoten zum anderen gelangt. Wenn diese Zeit abgelaufen ist und die Nachricht nicht eingetroffen ist, k\u00f6nnen wir mit Sicherheit sagen, dass der Knoten ausgefallen ist. In einem solchen Modell haben wir eine vorhersehbare Wartezeit. <\/p>\n<p><b>Asynchrones Modell<\/b> \u2013 in asynchronen Modellen gehen wir davon aus, dass die Wartezeit endlich ist, jedoch gibt es keine solche Zeitdifferenz, nach deren Ablauf wir garantieren k\u00f6nnen, dass der Knoten ausgefallen ist. Das hei\u00dft, die Wartezeit auf eine Nachricht von einem Knoten kann beliebig lang sein. Dies ist eine wichtige Definition, \u00fcber die wir weiter sprechen werden. <\/p>\n<h2>Der Begriff des Konsenses in verteilten Systemen<\/h2>\n<p>\nEhe wir den Begriff Konsens formal definieren, betrachten wir ein Beispiel, in dem er ben\u00f6tigt wird, n\u00e4mlich \u2013 <b>State Machine Replication<\/b>. <\/p>\n<p>Wir haben ein gewisses verteiltes Protokoll. Wir m\u00f6chten, dass es konsistent ist und identische Daten auf allen Knoten des verteilten Systems enth\u00e4lt. Wenn einer der Knoten einen neuen Wert erf\u00e4hrt, den er im Protokoll speichern m\u00f6chte, besteht seine Aufgabe darin, diesen Wert allen anderen Knoten vorzuschlagen, damit das Protokoll auf allen Knoten aktualisiert wird und das System in einen neuen konsistenten Zustand \u00fcbergeht. Dabei ist es wichtig, dass sich die Knoten untereinander einigen: Alle Knoten stimmen zu, dass der vorgeschlagene neue Wert korrekt ist, alle Knoten haben diesen Wert akzeptiert, und nur in diesem Fall k\u00f6nnen alle den neuen Wert im Protokoll speichern. <\/p>\n<p>Mit anderen Worten: Keiner der Knoten hat widersprochen, dass er aktuellere Informationen hat und dass der vorgeschlagene Wert falsch ist. Die Vereinbarung zwischen den Knoten und die Einigung \u00fcber einen einheitlichen, akzeptierten Wert ist der Konsens in einem verteilten System. Im Folgenden werden wir \u00fcber Algorithmen sprechen, die es dem verteilten System erm\u00f6glichen, konsistent Konsens zu erreichen.<br \/>\n<img decoding=\"async\" alt=\"Die Katze Schr\u00f6dingers ohne Kiste: das Konsensproblem in verteilten Systemen\" src=\"\/wp-content\/uploads\/2019\/08\/300b0834985d5d29286a83b00e6775a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nFormell gesagt k\u00f6nnen wir den Konsensalgorithmus (oder einfach Konsensalgorithmus) als eine Funktion definieren, die ein verteiltes System von Zustand A nach Zustand B \u00fcberf\u00fchrt. Dabei ist dieser Zustand von allen Knoten akzeptiert, und alle Knoten k\u00f6nnen ihn best\u00e4tigen. Wie sich herausstellt, ist diese Aufgabe alles andere als trivial, wie es auf den ersten Blick scheint.<\/p>\n<h4>Eigenschaften des Konsensalgorithmus<\/h4>\n<p>\nDer Konsensalgorithmus muss drei Eigenschaften aufweisen, damit das System weiterhin besteht und einen Fortschritt beim \u00dcbergang von einem Zustand zum n\u00e4chsten hat:<\/p>\n<ol>\n<li><b>Einigungszustimmung <\/b> \u2013 alle korrekt funktionierenden Knoten m\u00fcssen denselben Wert akzeptieren (dieses Merkmal wird in den Artikeln auch als Sicherheitsmerkmal bezeichnet). Alle Knoten, die derzeit funktionsf\u00e4hig sind (nicht ausgefallen oder desynchronisiert sind), m\u00fcssen sich einigen und einen bestimmten endg\u00fcltigen gemeinsamen Wert annehmen.\n<p>Hier ist es wichtig zu verstehen, dass die Knoten in dem von uns betrachteten verteilten System sich einigen wollen. Das hei\u00dft, wir sprechen jetzt \u00fcber Systeme, in denen einfach etwas ausfallen kann (zum Beispiel kann ein bestimmter Knoten ausfallen), aber in diesem System gibt es keine Knoten, die absichtlich gegen andere arbeiten (wie bei dem Problem der byzantinischen Gener\u00e4le). Aufgrund dieser Eigenschaft bleibt das System konsistent.<\/li>\n<li><b>Integrit\u00e4t <\/b> \u2013 wenn alle korrekt funktionierenden Knoten denselben Wert vorschlagen <b>v<\/b>, bedeutet das, dass jeder korrekt funktionierende Knoten diesen Wert annehmen muss. <b>v<\/b>. <\/li>\n<li><b>Beendigung <\/b>\u2013 alle korrekt funktionierenden Knoten m\u00fcssen schlie\u00dflich einen bestimmten Wert annehmen (Lebensf\u00e4higkeitseigenschaft), was dem Algorithmus Fortschritt im System erm\u00f6glicht. Jeder einzelne korrekt funktionierende Knoten muss irgendwann den endg\u00fcltigen Wert annehmen und dies best\u00e4tigen: \u201eF\u00fcr mich ist dieser Wert wahr, ich stimme mit dem gesamten System \u00fcberein.\u201c<\/li>\n<\/ol>\n<p><\/p>\n<h4>Beispiel f\u00fcr die Funktionsweise des Konsensalgorithmus<\/h4>\n<p>\nW\u00e4hrend die Eigenschaften des Algorithmus m\u00f6glicherweise nicht ganz klar sind, wollen wir an einem Beispiel veranschaulichen, welche Phasen der einfachste Konsensalgorithmus in einem System mit synchronem Nachrichtenmodell durchl\u00e4uft, in dem alle Knoten ordnungsgem\u00e4\u00df funktionieren, Nachrichten nicht verloren gehen und nichts kaputt geht (passiert das tats\u00e4chlich?)).<\/p>\n<ol>\n<li>Alles beginnt mit dem Vorschlag zur Hand und zum Herzen (Propose). Angenommen, ein Client hat sich mit dem Knoten namens \u201eKnoten 1\u201c verbunden und eine Transaktion gestartet, indem er dem Knoten den neuen Wert \u2013 O \u2013 \u00fcbermittelt hat. Ab diesem Moment nennen wir \u201eKnoten 1\u201c <b>proposer<\/b>. Als proposer muss \u201eKnoten 1\u201c nun das gesamte System dar\u00fcber informieren, dass er frische Daten hat, und er sendet an alle anderen Knoten Nachrichten: \u201eSeht her! Mir wurde der Wert \u201eO\u201c \u00fcbermittelt, und ich m\u00f6chte ihn speichern! Bitte best\u00e4tigt, dass auch ihr \u201eO\u201c in euer Protokoll aufnehmen werdet.\u201c\n<p><img decoding=\"async\" alt=\"Die Katze Schr\u00f6dingers ohne Kiste: das Konsensproblem in verteilten Systemen\" src=\"\/wp-content\/uploads\/2019\/08\/bd6a9394229b8a2a5b0bf987ba53500b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li> Die n\u00e4chste Phase ist die Abstimmung \u00fcber den vorgeschlagenen Wert (Voting). Warum ist sie notwendig? Es k\u00f6nnte sein, dass anderen Knoten aktuellere Informationen zugetragen wurden und sie Daten zu derselben Transaktion haben.\n<p><img decoding=\"async\" alt=\"Die Katze Schr\u00f6dingers ohne Kiste: das Konsensproblem in verteilten Systemen\" src=\"\/wp-content\/uploads\/2019\/08\/7080d6222971c6bab012410ef9e074e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWenn der Knoten \u201eKnoten 1\u201c seinen Vorschlag sendet, \u00fcberpr\u00fcfen die anderen Knoten in ihren Protokollen die Daten zu diesem Ereignis. Wenn es keine Widerspr\u00fcche gibt, erkl\u00e4ren die Knoten: \u201eJa, ich habe keine anderen Daten zu diesem Ereignis. Der Wert \u201eO\u201c ist die aktuellste Information, die wir haben.\u201c <\/p>\n<p>In jedem anderen Fall k\u00f6nnen die Knoten \u201eKnoten 1\u201c antworten: \u201eH\u00f6r zu! Ich habe aktuellere Daten zu dieser Transaktion. Nicht \u201eO\u201c, sondern etwas Besseres.\u201c<\/p>\n<p>In der Abstimmungsphase kommen die Knoten zu einer Entscheidung: Entweder akzeptieren alle einen Wert, oder einer von ihnen stimmt dagegen und zeigt an, dass er aktuellere Daten hat. <\/li>\n<li> Wenn die Abstimmungsrunde erfolgreich war und alle daf\u00fcr waren, geht das System in die n\u00e4chste Phase \u00fcber \u2013 die Annahme des Wertes (Accept). \u201eKnoten 1\u201c sammelt alle Antworten der anderen Knoten und teilt mit: \u201eAlle haben dem Wert \u201eO\u201c zugestimmt! Jetzt erkl\u00e4re ich offiziell, dass \u201eO\u201c unser neues, einheitliches Wert ist! Schreibt es euch in euer Notizbuch, vergesst es nicht. Tragt es in euer Protokoll ein!\u201c\n<p><img decoding=\"async\" alt=\"Die Katze Schr\u00f6dingers ohne Kiste: das Konsensproblem in verteilten Systemen\" src=\"\/wp-content\/uploads\/2019\/08\/c4bc2af053a27d7030824d45c3ad6def.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li> Die anderen Knoten senden eine Best\u00e4tigung (Accepted), dass sie den Wert \u201eO\u201c in ihr Protokoll aufgenommen haben, und es gab in der Zwischenzeit keine neuen Informationen (eine Art zweiphasiger Commit). Nach diesem denkw\u00fcrdigen Ereignis betrachten wir die verteilte Transaktion als abgeschlossen.<br \/>\n <img decoding=\"async\" alt=\"Die Katze Schr\u00f6dingers ohne Kiste: das Konsensproblem in verteilten Systemen\" src=\"\/wp-content\/uploads\/2019\/08\/2a9c49729f2607099385fee29f45d1f3.jpg\" style=\"display:block;margin: 0 auto;\" \/> <\/li>\n<\/ol>\n<p>\nSo besteht der Konsensalgorithmus im einfachsten Fall aus vier Schritten: propose, Abstimmung (voting), Annahme (accept), Best\u00e4tigung der Annahme (accepted).<\/p>\n<p>Wenn wir in einem Schritt keinen Konsens erreichen konnten, wird der Algorithmus neu gestartet, unter Ber\u00fccksichtigung der Informationen, die die Knoten, die sich weigerten, den vorgeschlagenen Wert zu best\u00e4tigen, bereitstellen.<\/p>\n<h2>Konsensalgorithmus in einem asynchronen System<\/h2>\n<p>\nBis jetzt lief alles glatt, denn es ging um ein synchrones Kommunikationsmodell. Aber wir wissen, dass wir in der modernen Welt alles asynchron machen. Wie funktioniert also ein \u00e4hnlicher Algorithmus in einem System mit asynchronem Nachrichtenaustausch, in dem wir annehmen, dass die Wartezeit auf eine Antwort von einem Knoten beliebig lang sein kann (zumal man auch den Ausfall eines Knotens als Beispiel betrachten kann, wenn der Knoten beliebig lange antworten kann). <\/p>\n<blockquote><p>Jetzt, wo wir wissen, wie der Konsensalgorithmus grunds\u00e4tzlich funktioniert, stellt sich die Frage an die neugierigen Leser, die bis hierher gekommen sind: Wie viele Knoten in einem System mit N Knoten und asynchronem Nachrichtenmodell k\u00f6nnen ausfallen, damit das System weiterhin Konsens erreichen kann?<\/p><\/blockquote>\n<p>\n<b class=\"spoiler_title\">Die richtige Antwort und die Begr\u00fcndung sind hinter dem Spoiler.<\/b>Die richtige Antwort: <b>0<\/b>. Wenn in einem asynchronen System auch nur ein Knoten ausf\u00e4llt, kann das System keinen Konsens erreichen. Diese Aussage ist in dem bestimmten Kreisen bekannten FLP-Theorem (1985, Fischer, Lynch, Paterson, Link zum Original am Ende des Artikels) bewiesen: \u201eDie Unm\u00f6glichkeit, verteilten Konsens zu erreichen, wenn mindestens ein Knoten ausf\u00e4llt\u201c.<br \/>\n<img decoding=\"async\" alt=\"Die Katze Schr\u00f6dingers ohne Kiste: das Konsensproblem in verteilten Systemen\" src=\"\/wp-content\/uploads\/2019\/08\/92417aafe00841aaa41cbefe0386e21a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLeute, dann haben wir ein Problem, wir sind es doch gewohnt, dass alles asynchron ist. Und jetzt das. Wie geht es weiter? <\/p>\n<p>Wir haben gerade \u00fcber Theorie, \u00fcber Mathematik gesprochen. Was bedeutet es, dass \u201eKonsens nicht erreicht werden kann\u201c, wenn wir aus der mathematischen Sprache in unsere Ingenieursprache \u00fcbersetzen? Das bedeutet, dass \u201enicht immer erreicht werden kann\u201c, d.h. es gibt einen Fall, in dem Konsens nicht erreichbar ist. Aber was ist das f\u00fcr ein Fall? <\/p>\n<p>Das ist genau das Versagen der liveness property, die oben beschrieben wurde. Wir haben kein gemeinsames Einvernehmen, und das System kann keinen Fortschritt haben (kann nicht innerhalb einer endlichen Zeit abgeschlossen werden), wenn wir keine Antwort von allen Knoten haben. Denn in einem asynchronen System haben wir keine vorhersehbare Antwortzeit, und wir k\u00f6nnen nicht wissen, ob ein Knoten ausgefallen ist oder einfach nur lange antwortet.<\/p>\n<p>Aber in der Praxis k\u00f6nnen wir eine L\u00f6sung finden. Nehmen wir an, unser Algorithmus k\u00f6nnte im Falle von Ausf\u00e4llen lange arbeiten (potenziell unbegrenzt). Doch in den meisten Situationen, wenn die Mehrheit der Knoten korrekt funktioniert, werden wir Fortschritt im System haben. <\/p>\n<p>In der Praxis haben wir es mit teilweise synchronen Kommunikationsmodellen zu tun. Teilweise Synchronit\u00e4t bedeutet, dass wir im Allgemeinen ein asynchrones Modell haben, aber formal wird ein gewisses Konzept der \"globalen Stabilisationszeit\" an einem bestimmten Moment eingef\u00fchrt. <\/p>\n<p>Dieser Moment kann unbegrenzt lange auf sich warten lassen, aber eines Tages muss er eintreten. Ein virtueller Wecker wird klingeln und ab diesem Moment k\u00f6nnen wir die Zeitdifferenz vorhersagen, die ben\u00f6tigt wird, damit die Nachrichten ankommen. Ab diesem Moment wird das System von asynchron in synchron umgewandelt. In der Praxis haben wir es genau mit solchen Systemen zu tun. <\/p>\n<h2>Der Paxos-Algorithmus l\u00f6st Konsensprobleme.<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Paxos_(computer_science)\">Paxos <\/a><\/noindex> ist ein Algorithmusfamilie, die das Konsensproblem f\u00fcr teilweise synchronisierte Systeme l\u00f6st, wobei einige Knoten ausfallen k\u00f6nnen. Der Autor von Paxos ist <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Leslie_Lamport\">Leslie Lamport<\/a><\/noindex>. Er schlug 1989 einen formalen Beweis f\u00fcr die Existenz und Korrektheit des Algorithmus vor. <\/p>\n<p>Aber der Beweis stellte sich als alles andere als trivial heraus. Die erste Ver\u00f6ffentlichung erschien erst 1998 (33 Seiten) mit einer Beschreibung des Algorithmus. Wie sich herausstellte, war er \u00e4u\u00dferst schwer verst\u00e4ndlich, und im Jahr 2001 wurde eine Erl\u00e4uterung zu dem Artikel ver\u00f6ffentlicht, die 14 Seiten umfasste. Die Seitenzahlen wurden erw\u00e4hnt, um zu zeigen, dass das Konsensproblem in Wirklichkeit alles andere als einfach ist und hinter solchen Algorithmen immense M\u00fchen der kl\u00fcgsten K\u00f6pfe stehen.<\/p>\n<blockquote><p>Interessanterweise bemerkte Leslie Lamport in seinem Vortrag, dass es in dem zweiten erl\u00e4uternden Artikel eine Aussage gibt, eine Zeile (er pr\u00e4zisierte nicht welche), die unterschiedlich interpretiert werden kann. Und deshalb funktionieren viele moderne Implementierungen von Paxos nicht ganz korrekt. <\/p><\/blockquote>\n<p>\nEine detaillierte Analyse des Paxos-Algorithmus w\u00fcrde nicht nur einen Artikel in Anspruch nehmen, daher werde ich versuchen, die Hauptidee des Algorithmus sehr kurz zu vermitteln. In den Links am Ende meines Artikels finden Sie Materialien f\u00fcr eine vertiefte Auseinandersetzung mit diesem Thema.<\/p>\n<h4>Rollen in Paxos<\/h4>\n<p>\nIm Paxos-Algorithmus gibt es das Konzept der Rollen. Lassen Sie uns die drei Hauptrollen betrachten (es gibt Modifikationen mit zus\u00e4tzlichen Rollen):<\/p>\n<ol>\n<li><b>Proposers (auch k\u00f6nnen die Begriffe: Leiter oder Koordinatoren verwendet werden)<\/b>. Das sind die Leute, die von einem neuen Wert des Benutzers erfahren und die Rolle des Leaders \u00fcbernehmen. Ihre Aufgabe ist es, eine Runde zur Einf\u00fchrung eines neuen Wertes zu starten und die weiteren Schritte der Knoten zu koordinieren. Paxos erlaubt dabei das Vorhandensein mehrerer Leader in bestimmten Situationen.<\/li>\n<li><b>Akzeptoren (W\u00e4hler)<\/b>. Das sind Knoten, die f\u00fcr die Annahme oder Ablehnung eines bestimmten Wertes stimmen. Ihre Rolle ist sehr wichtig, denn von ihnen h\u00e4ngt die Entscheidung ab, in welchen Zustand das System nach der n\u00e4chsten Phase des Konsensalgorithmus \u00fcbergeht (oder nicht \u00fcbergeht).<\/li>\n<li><b>Lerner<\/b>. Knoten, die einfach den neuen angenommenen Wert akzeptieren und aufzeichnen, wenn sich der Zustand des Systems \u00e4ndert. Sie treffen keine Entscheidungen, sondern erhalten lediglich Daten und k\u00f6nnen diese an den Endbenutzer weitergeben. <\/li>\n<\/ol>\n<p>\nEin Knoten kann in verschiedenen Situationen mehrere Rollen kombinieren. <\/p>\n<h4>Das Konzept des Quorums<\/h4>\n<p>\nWir nehmen an, dass wir ein System aus <b>N<\/b> Knoten haben. Und von diesen k\u00f6nnen maximal <b>F<\/b> Knoten ausfallen. Wenn F Knoten ausfallen, muss unser Cluster mindestens <b>2F + 1<\/b> acceptor-Knoten. <\/p>\n<p>Dies ist notwendig, damit wir immer, selbst in der schlechtesten Situation, eine Mehrheit aus \"guten\", korrekt funktionierenden Knoten haben. Das hei\u00dft, <b>F + 1<\/b> \"gute\" Knoten, die zugestimmt haben, und der finale Wert wird angenommen. Andernfalls k\u00f6nnte es zu einer Situation kommen, in der verschiedene lokale Gruppen unterschiedliche Werte annehmen und sich nicht einigen k\u00f6nnen. Daher ben\u00f6tigen wir eine absolute Mehrheit, um in der Abstimmung zu gewinnen.<\/p>\n<h4>Die allgemeine Idee des Paxos-Konsensusalgorithmus<\/h4>\n<p>\nDer Paxos-Algorithmus besteht aus zwei gro\u00dfen Phasen, die jeweils in zwei Schritte unterteilt sind:<\/p>\n<ol>\n<li><b>Phase 1a: Vorbereiten<\/b>. In der Vorbereitungsphase informiert der F\u00fchrer (proposer) alle Knoten: \u201eWir beginnen eine neue Phase der Abstimmung. Wir haben eine neue Runde. Die Nummer dieser Runde ist n. Jetzt beginnen wir zu votieren\u201c. Er informiert lediglich \u00fcber den Beginn eines neuen Zyklus, ohne jedoch einen neuen Wert bekannt zu geben. Die Aufgabe dieses Schrittes ist es, eine neue Runde einzuleiten und allen seine einzigartige Nummer mitzuteilen. Die Rundenummer ist wichtig; sie muss gr\u00f6\u00dfer sein als alle vorherigen Abstimmungsnummern von allen vorherigen F\u00fchrern. Denn nur durch die Rundenummer werden andere Knoten im System verstehen, wie aktuell die Daten des F\u00fchrers sind. Wahrscheinlich haben die anderen Knoten bereits Abstimmungsergebnisse aus deutlich sp\u00e4teren Runden und werden dem F\u00fchrer einfach mitteilen, dass er hinterherhinkt.<\/li>\n<li><b>Phase 1b: Versprechen<\/b>. Wenn die acceptor-Knoten die Nummer der neuen Abstimmungsrunde erhalten haben, sind zwei Ergebnisse m\u00f6glich: \n<ul>\n<li>Die Nummer n der neuen Abstimmung ist gr\u00f6\u00dfer als die Nummer jeder vorherigen Abstimmung, an der der Akzeptor teilgenommen hat. In diesem Fall sendet der Akzeptor dem F\u00fchrer ein Versprechen, dass er nicht mehr an Abstimmungen mit einer Nummer teilnehmen wird, die kleiner ist als n. Wenn der Akzeptor bereits f\u00fcr etwas abgestimmt hat (d.h. wenn er in der zweiten Phase einen Wert angenommen hat), f\u00fcgt er seinem Versprechen den angenommenen Wert und die Abstimmungsnummer, an der er teilgenommen hat, hinzu.<\/li>\n<li>Andernfalls, wenn der Akzeptor bereits von einer Abstimmung mit einer h\u00f6heren Nummer wei\u00df, kann er einfach die Vorbereitungsphase ignorieren und dem F\u00fchrer nicht antworten.<\/li>\n<\/ul>\n<\/li>\n<li><b>Phase 2a: Akzeptieren<\/b>. Der F\u00fchrer muss auf eine Antwort von der Mehrheit (\u00fcberwiegender Teil der Knoten im System) warten, und wenn die erforderliche Anzahl von Antworten erhalten wurde, hat er zwei M\u00f6glichkeiten: \n<ul>\n<li>Einige der Acceptor haben Werte gesendet, f\u00fcr die sie bereits gestimmt haben. In diesem Fall w\u00e4hlt der Leader den Wert mit der h\u00f6chsten Stimmenzahl. Nennen wir diesen Wert x und er sendet allen Knoten eine Nachricht in der Art: \u201eAccept (n, x)\u201c, wobei der erste Wert die Abstimmungsnummer aus seinem eigenen Propose-Schritt ist und der zweite Wert der ist, f\u00fcr den alle zusammenkamen, das hei\u00dft, der Wert, \u00fcber den wir abstimmen.<\/li>\n<li>Wenn keiner der Acceptor irgendwelche Werte gesendet hat, sondern einfach versprochen hat, in dieser Runde abzustimmen, kann der Leader ihnen vorschlagen, f\u00fcr seinen Wert zu stimmen, den Wert, f\u00fcr den er \u00fcberhaupt zum Leader wurde. Nennen wir diesen y. Er sendet allen Knoten eine Nachricht in der Art: \u201eAccept (n, y)\u201c, analog zum vorherigen Ergebnis.<\/li>\n<\/ul>\n<\/li>\n<li><b>Phase 2b: Akzeptiert<\/b>. Danach stimmen die acceptor-Knoten beim Erhalt der Nachricht \u201eAccept(&hellip;)\u201c vom Leader nur dann zu, wenn sie keinem (anderen) Leader versprochen haben, an Abstimmungen mit der Rundennummer <b>n' &gt; n teilzunehmen.<\/b>, andernfalls ignorieren sie die Best\u00e4tigungsanfrage.\n<p>Wenn die Mehrheit der Knoten dem Leader geantwortet hat und alle den neuen Wert best\u00e4tigt haben, wird der neue Wert als akzeptiert angesehen. Hurra! Wenn jedoch die Mehrheit nicht erreicht ist oder einige Knoten sich weigern, den neuen Wert zu akzeptieren, beginnt alles von neuem.<\/li>\n<\/ol>\n<p>\nSo funktioniert der Paxos-Algorithmus. Jeder dieser Schritte hat viele Feinheiten, wir haben praktisch keine verschiedenen Arten von Ausf\u00e4llen, die Probleme mehrerer Leader und vieles mehr betrachtet, aber das Ziel dieses Artikels ist es, den Leser auf einer hohen Ebene mit der Welt der verteilten Berechnungen vertraut zu machen.<\/p>\n<p>Es ist auch erw\u00e4hnenswert, dass Paxos nicht das einzige seiner Art ist, es gibt auch andere Algorithmen, wie zum Beispiel <noindex><a rel=\"nofollow\" href=\"https:\/\/raft.github.io\/\">Raft<\/a><\/noindex>, aber das ist schon ein Thema f\u00fcr einen anderen Artikel.<\/p>\n<h2>Links zu Materialien f\u00fcr eine weitere Vertiefung<\/h2>\n<p>\nEinsteigerlevel:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/s\/story\/lets-take-a-crack-at-understanding-distributed-consensus-dad23d0dc95\">Wie funktioniert verteilte Konsensbildung?<\/a><\/noindex>, Preethi Kasireddy, Blogartikel auf Medium<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@nevverlander\/paxos-made-simple-for-real-aa221be7d91b\">Paxos einfach erkl\u00e4rt. Wirklich<\/a><\/noindex>, Adi Kancherla, Blogartikel auf Medium<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ittaiab.github.io\/\">Dezentralisierte Gedanken<\/a><\/noindex>, Ittai Abraham, Blog<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ittaiab.github.io\/2019-06-01-2019-5-31-models\/\">Synchronit\u00e4t, Asynchronit\u00e4t und partielle Synchronit\u00e4t<\/a><\/noindex>, Ittai Abraham, Blogartikel<\/li>\n<\/ul>\n<p>\nLesli Lamport Level:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/groups.csail.mit.edu\/tds\/papers\/Lynch\/jacm85.pdf\">Unm\u00f6glichkeit des verteilten Konsens mit einem fehlerhaften Prozess (FLP-Unm\u00f6glichkeit)<\/a><\/noindex>, Fischer, Lynch und Paterson, Forschungsarbeit, 1985<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/lamport.azurewebsites.net\/pubs\/lamport-paxos.pdf\">Das Teilzeit-Parlament<\/a><\/noindex>, Leslie Lamport, Forschungsarbeit, 1998<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/lamport.azurewebsites.net\/pubs\/paxos-simple.pdf\">Paxos einfach erkl\u00e4rt<\/a><\/noindex>, Leslie Lamport, Forschungsarbeit, 2001<\/li>\n<\/ul>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/463469\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0418\u0442\u0430\u043a, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c. \u0412 \u043a\u043e\u043c\u043d\u0430\u0442\u0435 \u0437\u0430\u043f\u0435\u0440\u0442\u044b 5 \u043a\u043e\u0442\u043e\u0432, \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0439\u0442\u0438 \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u0445\u043e\u0437\u044f\u0438\u043d\u0430 \u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431 \u044d\u0442\u043e\u043c, \u0432\u0435\u0434\u044c \u0434\u0432\u0435\u0440\u044c \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u044f\u0442\u0435\u0440\u043e\u043c \u043d\u0430\u0432\u0430\u043b\u0438\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u043d\u0435\u0451. \u0415\u0441\u043b\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u043e\u0442\u043e\u0432 \u2013 \u043a\u043e\u0442 \u0428\u0440\u0451\u0434\u0438\u043d\u0433\u0435\u0440\u0430, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u0442\u044b \u043d\u0435 \u0437\u043d\u0430\u044e\u0442 \u043e \u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0438, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441: \u00ab\u041a\u0430\u043a \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?\u00bb \u0412 \u044d\u0442\u043e\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28009,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37335","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0418\u0442\u0430\u043a, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c. \u0412 \u043a\u043e\u043c\u043d\u0430\u0442\u0435 \u0437\u0430\u043f\u0435\u0440\u0442\u044b 5 \u043a\u043e\u0442\u043e\u0432, \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0439\u0442\u0438 \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u0445\u043e\u0437\u044f\u0438\u043d\u0430 \u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431 \u044d\u0442\u043e\u043c, \u0432\u0435\u0434\u044c \u0434\u0432\u0435\u0440\u044c \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u044f\u0442\u0435\u0440\u043e\u043c \u043d\u0430\u0432\u0430\u043b\u0438\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u043d\u0435\u0451.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043e\u0442 \u0428\u0440\u0451\u0434\u0438\u043d\u0433\u0435\u0440\u0430 \u0431\u0435\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438: \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 \u0432 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0418\u0442\u0430\u043a, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c. \u0412 \u043a\u043e\u043c\u043d\u0430\u0442\u0435 \u0437\u0430\u043f\u0435\u0440\u0442\u044b 5 \u043a\u043e\u0442\u043e\u0432, \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0439\u0442\u0438 \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u0445\u043e\u0437\u044f\u0438\u043d\u0430 \u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431 \u044d\u0442\u043e\u043c, \u0432\u0435\u0434\u044c \u0434\u0432\u0435\u0440\u044c \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u044f\u0442\u0435\u0440\u043e\u043c \u043d\u0430\u0432\u0430\u043b\u0438\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u043d\u0435\u0451.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:17:01+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:17:01+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Schr\u00f6dingers Katze ohne Kiste: Das Konsensproblem in verteilten Systemen | ProHoster","description":"Stellen wir uns vor. In einem Raum sind 5 Katzen eingesperrt, und um ihren Besitzer zu wecken, m\u00fcssen sie sich gemeinsam darauf einigen, denn die T\u00fcr k\u00f6nnen sie nur gemeinsam \u00f6ffnen, indem sie sich zusammen auf sie lehnen.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043e\u0442 \u0428\u0440\u0451\u0434\u0438\u043d\u0433\u0435\u0440\u0430 \u0431\u0435\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438: \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043a\u043e\u043d\u0441\u0435\u043d\u0441\u0443\u0441\u0430 \u0432 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 | ProHoster","og:description":"\u0418\u0442\u0430\u043a, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c. \u0412 \u043a\u043e\u043c\u043d\u0430\u0442\u0435 \u0437\u0430\u043f\u0435\u0440\u0442\u044b 5 \u043a\u043e\u0442\u043e\u0432, \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0439\u0442\u0438 \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u0445\u043e\u0437\u044f\u0438\u043d\u0430 \u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431 \u044d\u0442\u043e\u043c, \u0432\u0435\u0434\u044c \u0434\u0432\u0435\u0440\u044c \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u044f\u0442\u0435\u0440\u043e\u043c \u043d\u0430\u0432\u0430\u043b\u0438\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u043d\u0435\u0451.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/kot-shryodingera-bez-korobki-problema-konsensusa-v-raspredelyonnyh-sistemah","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:17:01+00:00","article:modified_time":"2019-10-31T19:17:01+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37335","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 17:20:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:28:27","updated":"2026-01-23 17:20:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/37335","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=37335"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/37335\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/28009"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=37335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=37335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=37335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}