2016-05-13 34 views
0

Ich habe mehrere Dokumente über Floß gelesen und ich habe widersprüchliche Informationen über das Commit bekommen. Ich bekomme, dass ein Eintrag nur begangen werden kann, wenn es bekannt ist, in den meisten Servern gespeichert zu werden, aber gibt es eine andere Bedingung? Ich habe gelesen, dass es zwingend erforderlich ist, dass ein Eintrag aus dem aktuellen Begriff auf jedem Server gespeichert wird, aber einige andere Dokumente sagen nichts darüber aus. Irgendeine Hilfe?RAFT: Bedingung für einen Eintrag

Antwort

2

Es ist technisch nicht wahr, dass ein Eintrag, der auf einer Mehrzahl von Servern gespeichert ist, festgeschrieben ist. Es ist ist True, dass der Leiter bestimmt, dass ein Eintrag festgeschrieben wird, sobald es auf einer Mehrheit der Server gespeichert wurde, aber nur innerhalb seiner aktuellen Laufzeit. Ein Eintrag von einem anderen Begriff kann auf einer Mehrzahl von Servern gespeichert werden, aber niemals begangen werden und tatsächlich später von einem anderen Führer überschrieben werden. Dies ist in Fig. 8 in dem Floßpapier gezeigt.

Aus diesem Grund muss ein Leader sicherstellen, dass ein Eintrag aus seiner aktuellen Laufzeit übergeben wird, bevor er (zusätzliche) Einträge aus früheren Termen berücksichtigen kann. Sobald ein Anführer gewählt ist, ist es für diesen Anführer möglich, Einträge von einem früheren Ausdruck zu einer Mehrheit von Knoten zu replizieren, ohne dass sie festgeschrieben werden. Wenn dieser Führer dann abstürzt, kann ein anderer Führer, der Einträge von einem späteren Begriff hat, gewählt werden und die Einträge überschreiben, die auf einer Mehrheit des Clusters gespeichert wurden. Dies ist, was in Abbildung 8 gezeigt wird, und es ist der Grund, warum die technische Definition der Verpflichtung lautet: Ein Eintrag in der aktuellen Amtszeit des Leiters ist verpflichtet, sobald es auf einer Mehrheit des Clusters gespeichert ist, und einmal ein Eintrag aus dem Begriff des Führers ist verpflichtet, alle Einträge aus früheren Begriffen im Protokoll des Führers sind implizit festgeschrieben.

Was bedeutet dies in der Praxis ist, wenn ein Führer gewählt wird, es typischerweise eine No-Op-Eintrag verpflichtet, ein Commit in seiner aktuellen Laufzeit zu erzwingen. Der Leader erhöht seine commitIndex nicht, bis der No-Op-Eintrag auf einer Mehrzahl von Servern gespeichert ist.