Vorherige und kausale Ordnung


7

Ich lese Lamports "Zeit, Uhren und die Reihenfolge von Ereignissen in einem verteilten System" und es gibt ein Detail, das mich nervt.

Lamport definiert die Teilreihenfolge "passiert vor", die ich verstehe. Dann sagt er: "Eine andere Art, die Definition zu betrachten, besteht darin, zu sagen, dass a -> b bedeutet, dass das Ereignis a das Ereignis b kausal beeinflussen kann."

Betrachten Sie nun zwei Ereignisse a und b, die Nachrichtenempfänge bei einem Prozess P1 sind, so dass a vor b auftritt. Nehmen wir weiter an, dass a und b die einzigen zwei Ereignisse sind, die jemals bei P1 auftreten. Nach der Definition der Beziehung vor dem Ereignis haben wir a -> b (was sinnvoll ist, da P1 diese Ereignisse in dieser Reihenfolge beobachtet hat).

Ich sehe jedoch nicht, wie es möglich ist, dass Ereignis a Ereignis b kausal beeinflusst. Diese beiden Ereignisse haben nichts miteinander zu tun und könnten in einer anderen Reihenfolge geschehen sein.

Was fehlt mir hier?

Antworten:


3

Beachten Sie, dass Kausalität ein undefinierter Begriff in der Arbeit ist. Lamport verwendet es in einer informellen Erklärung. Er geht davon aus, dass dies ein intuitives Konzept sein könnte, das für seine Leser dasselbe bedeutet wie für ihn. Ich denke für Lamportein könnte kausal beeinflussen bbedeutet eigentlich etwas mehr wie Informationen könnten fließen ausein zu b oder ein könnte das Verhalten von beeinflussen b, als die klassische aristotelische Idee von b ist eine physische Folge von ein.

Angenommen, ein Computer führt ein Programm mit zwei Anweisungen aus:

a: X := 1
b: print X

Ich denke, wir könnten uns alle einig sein, dass die Anweisung a vorher passiert, b aber ich würde nicht sagen, dass "das Ausführen der Zuweisungsanweisung (Ereignis a) das Programm veranlasst hat , die printAnweisung (Ereignis b) auszuführen ". Andererseits könnte ich etwas anderes sagen: "Ereignis a(Zuweisung des Werts 1 zu X) hat den vom Ereignis gedruckten Wert beeinflusst b."

Nehmen wir nun ein (möglicherweise) kontroverses Beispiel.

a: X := 1
b: Y := 1

a passiert vorher b , aber ich denke, die meisten Leute würden sagen: "Es gibt keinen kausalen Zusammenhang zwischen aund b." Aber in diesem Artikel gibt es einen kausalen Zusammenhang zwischen aundb . Ich werde versuchen, dies so kurz wie möglich zu erklären, aber es wird lange dauern.

Das Papier handelt von Zustandsautomaten

Hier ist , was Lamport über das Papier auf seiner Homepage zu sagen hat :

Ein verteiltes System kann als eine bestimmte sequentielle Zustandsmaschine beschrieben werden, die mit einem Netzwerk von Prozessoren implementiert ist. Die Fähigkeit, die Eingabeanforderungen vollständig zu ordnen, führt sofort zu einem Algorithmus, um eine beliebige Zustandsmaschine durch ein Netzwerk von Prozessoren zu implementieren und somit jedes verteilte System zu implementieren. Also habe ich dieses Papier geschrieben, in dem es darum geht, eine beliebige verteilte Zustandsmaschine zu implementieren. ...

Dies ist meine am häufigsten zitierte Arbeit. ... Aber ich habe selten jemanden getroffen, der wusste, dass die Zeitung etwas über Staatsmaschinen sagte. Die Leute scheinen zu denken, dass es entweder um die Kausalitätsbeziehung von Ereignissen in einem verteilten System oder um das Problem des verteilten gegenseitigen Ausschlusses geht. Die Leute haben darauf bestanden, dass in der Zeitung nichts über Staatsmaschinen steht. Ich musste sogar zurückgehen und es noch einmal lesen, um mich davon zu überzeugen, dass ich mich wirklich an das erinnerte, was ich geschrieben hatte.

Jeder Prozess ist eine Zustandsmaschine, und die Zusammensetzung der Prozesse zu einem verteilten System / Algorithmus ist eine Zustandsmaschine.

Lamport verwendet implizit eine Kurzschreibweise, die wir im digitalen Design Registerübertragungen nennen , und jeder Prozess ist (implizit) eine algorithmische Zustandsmaschine . Was uns wirklich wichtig ist, ist, wie jedes Ereignis den gesamten Status jedes Prozesses beeinflusst. Jede Registerübertragungsanweisung ist eine prägnante Art, über eine Reihe von Zustandsübergängen zu sprechen, die vom vorherigen Zustand abhängen.

In unserem "kontroversen" Beispiel besteht der Zustand der Maschine aus zwei Teilen X.,Y.. Die Registerübertragungsanweisung Y := 1ist eine Abkürzung für vier verschiedene Zustandsübergänge:0,00,1, 0,10,1, 1,01,1, und 1,11,1. Was also in der Aussage passiert ist, awirkt sich sehr stark auf den durch die Aussage erzeugten Endzustand aus b. In unserem Fall wissen wir, dass der Endzustand ist1,1, und das wäre nicht der Fall gewesen, wäre nicht aausgeführt worden oder awäre eine andere Aussage gewesen (wie X := 0).

In diesem Artikel geht es darum, wie viel eine der verteilten Zustandsmaschinen über die Zustände der anderen Zustandsmaschinen wissen kann. Daher ist es sehr wichtig, welche Reihenfolge auf jeder einzelnen Maschine abläuft.


So interpretiere ich auch Lamports informelle Definition von "möglicher Kausalität". In meinem ersten Beispiel sind a und b Nachrichtenempfänge. Es gibt also keine Möglichkeit für a, b zu beeinflussen.
Nemo

4

Wie sowohl von @kramthegram als auch von @Wandering Logic hervorgehoben wurde, Ereignis ein "passiert vor" Ereignis bist nicht bedeuten , dassein hat physisch verursacht b (passieren).

Eine solche Kausalität, die in Lamports Artikel verwendet wird, wird oft als potenzielle Kausalität bezeichnet . Es erfasst alle Möglichkeiten, führt häufig zu einem riesigen Kausalitätsdiagramm und beeinträchtigt in der Praxis die Skalierbarkeit / Leistung verteilter Systeme.

Um diese Probleme anzugehen, können wir explizite Kausalität oder anwendungsspezifische kausale Abhängigkeiten berücksichtigen . Ein häufiges Beispiel sind Anwendungen in sozialen Netzwerken: Alice hat 100 Kommentare in einem Konversationsthread gelesen und 5 davon mit einem einzigen Kommentar beantwortet. Die unmittelbare Abhängigkeit ihres Kommentars vor der Abhängigkeit konnte nur aus diesen 5 Kommentaren bestehen (anstelle all dieser 100 Kommentare mit potenzieller Kausalität ).

Welches ist die bessere Kausalität ? Es hängt davon ab. Beispielsweise besteht im Forschungsbereich des Debuggens von Multithread-Programmen eine potenzielle Kausalität . Es gibt zwei Hauptgründe (meiner Meinung nach): Erstens haben wir keinen Kontext / keine Semantik, die sagt, ob zwei Ereignisse (lesen oder schreibenOperationen) sind effektiv kausal bedingt oder nicht. Zweitens möchten wir alle möglichen Kausalitäten zwischen Ereignissen erfassen und so viele Debugs wie möglich aufdecken.

Weitere Informationen zu potenzieller Kausalität und expliziter Kausalität finden Sie in diesem Dokument: Die potenziellen Gefahren kausaler Konsistenz und eine explizite Lösung .


2

Sie vermissen die Auswahl des Wortes möglich . Dies bedeutet nicht, dass die Beziehung tatsächlich kausal ist, sondern dass es möglich ist, dass a einen kausalen Effekt auf b hat . Seine Aussagen sind nicht falsch, Sie lesen nur mehr hinein, als er tatsächlich sagt. Nur weil es möglich ist, heißt das nicht, dass es wahr ist. Die stärkere Aussage ist das Gegenteil, wenn ein nicht erledigt erklärt b ist es unmöglich für ein ein haben kausalen Einfluss darauf b . Es ist nur eine Frage der Formulierung.


Aber hier ist es unmöglich, dass a und b kausal zusammenhängen (es sei denn, ich verstehe etwas falsch). Nach Ihrer Logik würde die Beziehung R, die alle Ereignisse in Beziehung setzt, zur Definition von "R (a, b)" passen, dass Ereignis a Ereignis b kausal beeinflussen kann, und Sie würden mir zustimmen, dass es nicht richtig klingt .
Nemo

1
Vielleicht betrachtet er die Ereignisse a und b nur als Dinge, die bei Prozess P1 auftreten, und ignoriert die zusätzlichen Informationen, die durch einen externen Kontext verursacht werden. In diesem Fall kann a das Ereignis b beeinflusst haben.
Nemo

Genau gesagt, die Aussage sagt nicht, dass A eine Auswirkung auf B hat, nur dass A eine Auswirkung auf B haben kann . Wenn A nach B auftritt, hatte der Prozess keine Ahnung über den Zustand von A, als B auftrat, und konnte daher a nicht machen Entscheidung über B unter Verwendung von Informationen aus A. Wenn A jedoch vor B auftritt, kann es Kenntnis von A haben und somit davon betroffen sein.
cmaynard

@Nemo Ich habe das Beispiel im Originalpapier nicht überprüft, aber nach dem, was Sie hier angegeben haben, kann a b beeinflussen: Wenn das Empfangen von a dazu führt, dass P abstürzt oder blockiert, würde b nicht passieren. Dieses Verhalten ist nicht bei allen Modellen möglich.
Gilles 'SO - hör auf böse zu sein'
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.