Wiederanlauf und veraltete Zustände
Der Bericht geht der Frage nach, wie Altmeldungen nach einem Verbindungsabbruch erkennbar werden. Er stellt drei Wiederanlaufregeln anhand eines synthetischen Traces gegenüber und benennt die Grenzen des Fehlermodells. Der Volltext ist der lesbare Bericht.
Kurzfassung
Nach einem Verbindungsabbruch können zwischengespeicherte Meldungen eintreffen, die wie aktuelle Zustände aussehen. Der Bericht vergleicht drei Wiederanlaufregeln für einen einzelnen Zustandsempfänger: eine Regel auf Basis der Sequenznummer, eine auf Basis des Alters (Zeitstempel) und eine Kombination beider mit einer expliziten Neustartregel. Die Gegenüberstellung erfolgt an einem kleinen synthetischen Trace und qualitativ. Es handelt sich um einen Bericht aus dem Szenario; er ist kein wissenschaftlicher Beleg und enthält keine Messungen.
Fragestellung
Im Projekt Wiederanlauf verteilter Zustandsmeldungen lautet die Leitfrage: Welche Kombination aus Sequenznummer, Zeitstempel und Wiederanlaufregel macht veraltete Zustände erkennbar? Veraltet heißt hier: Eine Meldung wird nach einer Unterbrechung ausgeliefert, obwohl der Sender seither einen neueren Zustand gemeldet hat oder die Meldung zu alt ist, um den heutigen Zustand zu beschreiben. Für einen Empfänger, der Zustände anzeigt oder weiterverarbeitet, sind zwei Fehler zu unterscheiden:
- eine Altmeldung wird fälschlich angenommen und überschreibt den aktuellen Zustand;
- eine frische Meldung wird fälschlich verworfen, sodass der Empfänger dauerhaft auf einem alten Zustand verharrt.
Aufbau
Betrachtet wird ein Sender, der den Zustand eines einzelnen Objekts („OFFEN“ oder „GESCHLOSSEN“) meldet, und ein Empfänger mit genau einem gespeicherten Zustand. Jede Meldung trägt drei Angaben: eine Epochennummer e, die der Sender bei jedem Neustart um 1 erhöht und dauerhaft speichert, eine Sequenznummer s, die innerhalb einer Epoche bei 1 beginnt und je Meldung um 1 steigt, sowie den Sendezeitpunkt t in Sekunden. Das Alter einer Meldung ist die Empfangszeit minus t; Sender- und Empfängeruhr gelten im Beispiel als gleich. Als Höchstalter wird 15 s festgelegt. Die drei Regeln lauten:
- Regel A (nur Sequenznummer): Eine Meldung wird angenommen, wenn s größer ist als die Sequenznummer der zuletzt angenommenen Meldung.
- Regel B (nur Alter): Eine Meldung wird angenommen, wenn ihr Alter höchstens 15 s beträgt.
- Regel C (Kombination mit Neustartregel): Eine Meldung wird angenommen, wenn ihr Alter höchstens 15 s beträgt und das Paar (e, s) lexikographisch größer ist als das der zuletzt angenommenen Meldung. Eine höhere Epoche gilt damit immer als neuer, auch wenn s wieder bei 1 beginnt.
Die Vorgehensweise folgt der im Projekt vorgesehenen Vergleichslogik; ein Testaufbau am Netzwerktestplatz ist für diesen Bericht nicht ausgewertet worden. Die dem Projekt zugrunde liegende Ordnung möglicher Fehlerfälle wird in der Methodennotiz Fehlerkatalog für Zustandsnachrichten beschrieben.
Annahmen dieser Darstellung
Dieser Bericht ist ein Dokument; die folgenden Zahlen sind konstruiert und stützen keine Aussage über reale Systeme. Zugrunde liegen diese Annahmen: Es gibt einen Sender und einen Empfänger ohne weitere Teilnehmer. Der Übertragungsweg puffert Meldungen während einer Unterbrechung und liefert sie nach Wiederherstellung aus, in Einzelfällen in vertauschter Reihenfolge. Meldungen gehen nicht verloren und werden nicht dupliziert. Uhren sind gleich, die Epochennummer überlebt einen Neustart. Das Höchstalter von 15 s ist ein frei gewählter Parameter ohne fachliche Begründung. Als „richtig“ gilt eine Entscheidung, wenn der Empfänger genau die Meldungen annimmt, die zum Empfangszeitpunkt weder zu alt noch durch eine neuere Meldung desselben Senders überholt sind.
Illustrative Betrachtung
Konstruiertes Rechenbeispiel, keine Messung. Der Sender meldet in Epoche 1 vier Zustände. Zwischen Sekunde 12 und Sekunde 60 ist die Verbindung unterbrochen; die Meldungen 3 und 4 werden zwischengespeichert und erst bei Sekunde 61 ausgeliefert. Bei Sekunde 55 startet der Sender neu (Epoche 2, Sequenz wieder bei 1). Die Meldungen 5 bis 7 treffen danach ein, Meldung 7 überholt dabei Meldung 6. Die Tabelle nennt die Meldungen in Empfangsreihenfolge.
| Meldung | Epoche e | Sequenz s | Sendezeit t | Empfangszeit | Alter | Zustand |
|---|---|---|---|---|---|---|
| M1 | 1 | 1 | 0 | 1 | 1 | OFFEN |
| M2 | 1 | 2 | 10 | 11 | 1 | GESCHLOSSEN |
| M3 | 1 | 3 | 20 | 61 | 41 | OFFEN |
| M4 | 1 | 4 | 40 | 61 | 21 | OFFEN |
| M5 | 2 | 1 | 58 | 62 | 4 | OFFEN |
| M7 | 2 | 3 | 67 | 68 | 1 | GESCHLOSSEN |
| M6 | 2 | 2 | 65 | 69 | 4 | OFFEN |
Nach den Regeln aus dem Abschnitt „Aufbau“ ergeben sich die Entscheidungen in der nächsten Tabelle. Als richtig gelten die Annahme von M1, M2, M5 und M7 sowie das Verwerfen von M3 und M4 (zu alt) und von M6 (durch M7 überholt). Der zuletzt gesendete Zustand ist GESCHLOSSEN (M7).
| Meldung | Richtig | Regel A | Regel B | Regel C |
|---|---|---|---|---|
| M1 | A | A | A | A |
| M2 | A | A | A | A |
| M3 | V | A | V | V |
| M4 | V | A | V | V |
| M5 | A | V | A | A |
| M7 | A | V | A | A |
| M6 | V | V | A | V |
| Richtige Entscheidungen | 7 von 7 | 3 von 7 | 6 von 7 | 7 von 7 |
| Angezeigter Endzustand | GESCHLOSSEN | OFFEN | OFFEN | GESCHLOSSEN |
Regel A nimmt die zwischengespeicherten Altmeldungen M3 und M4 an, weil deren Sequenznummern größer sind als die von M2. Nach dem Neustart verwirft sie alle frischen Meldungen, da die Sequenz wieder bei 1 beginnt; der Empfänger bleibt bei OFFEN stehen, bis die Sequenz 4 überschreitet. Regel B erkennt die Altmeldungen am Alter, kennt aber keine Reihenfolge und nimmt deshalb M6 nach M7 an. Regel C vermeidet beide Fehler, weil die Epoche den Neustart ausdrückt und die Sequenz die Reihenfolge innerhalb der Epoche.
| Regel | Erkennt Altmeldungen nach Unterbrechung | Erkennt vertauschte Reihenfolge | Übersteht Senderneustart | Voraussetzung |
|---|---|---|---|---|
| A: Sequenz | Nein | Ja | Nein | Dauerhafter Zähler |
| B: Alter | Ja | Nein | Ja | Ausreichend gleiche Uhren |
| C: Kombination | Ja | Ja | Ja | Zähler, Epoche und Uhren |
Der Kommunikationsaufwand wächst bei Regel C nur um die zusätzlichen Felder je Meldung; eine Zahl dafür wird hier nicht genannt, da keine Messung vorliegt.
Grenzen
Das Fehlermodell ist eng. Es kennt nur Pufferung, Neustart und Vertauschung, keine verlorenen oder doppelten Meldungen, keine abweichenden Uhren und keine mehreren Sender. Fällt die Epochenspeicherung des Senders aus, sodass die Epoche nach einem Neustart zurückspringt, scheitert Regel C auf dieselbe Weise wie Regel A. Das Höchstalter von 15 s wurde ohne Bezug zu einem realen Einsatz gewählt; ein größerer Wert würde M4 annehmen, ein kleinerer frische Meldungen auf langsamen Pfaden verwerfen. Der Trace umfasst sieben Meldungen und erlaubt keine Aussage über Häufigkeiten, Zeit bis zum konsistenten Zustand oder Leistung. Betrachtet werden nur modellierte Nachrichtenpfade; eine Eignung für Leitstellen oder Echtzeitbetrieb folgt daraus nicht.
Fazit
Am konstruierten Trace zeigt sich, dass Sequenznummer und Alter jeweils eine andere Fehlerklasse abdecken und der Neustart als eigene Regel behandelt werden muss. Die Kombination aus Epoche, Sequenz und Höchstalter entscheidet hier alle sieben Fälle richtig, allerdings unter den genannten idealisierten Annahmen. Der Wert des Beispiels liegt in der nachvollziehbaren Vergleichslogik, nicht in den Zahlen. Eine belastbare Bewertung würde variierte Verlustmuster, abweichende Uhren und eine unabhängige Prüfung erfordern.
Hintergrundliteratur
Reale, geprüfte Quellen. Sie sind kein Teil des Berichts und belegen dessen Inhalte nicht.
- Lamport, L. (1978). Time, clocks, and the ordering of events in a distributed system. Communications of the ACM, 21(7), 558–565. https://doi.org/10.1145/359545.359563 Relevant für die Frage, warum Zeitstempel allein keine Reihenfolge von Ereignissen in verteilten Systemen festlegen und welche Rolle logische Zähler spielen.
- Banks, A., Briggs, E., Borgendale, K., & Gupta, R. (Eds.). (2019). MQTT Version 5.0 (OASIS Standard, 7 March 2019). OASIS. https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html Relevant als Beispiel dafür, wie ein verbreiteter Nachrichtenstandard Sitzungszustand über Verbindungsabbrüche hinweg (Abschnitt 3.1.2.11.2, Session Expiry Interval) und gespeicherte Zustandsmeldungen (RETAIN-Flag, Abschnitt 3.3.1.3) beschreibt.
- Eddy, W. (Ed.). (2022). Transmission Control Protocol (TCP) (RFC 9293). IETF. https://www.rfc-editor.org/info/rfc9293 Relevant für die Verwendung von Sequenznummern zur Ordnung und Duplikaterkennung (Abschnitt 3.4), auch wenn der Bericht keine TCP-Eigenschaften nachbildet.