Wie kann 'at lease once' sichergestellt werden, wenn der Server bei/vor Ausführung des Requests crasht bzw. alle Requests verloren gehen?
(dies ist ja die Begründung, dass bei 'at-most-once' es passieren kann, dass der Request/die Berechnung nicht ausgeführt wird)
At lease once - Semantik
-
- Neuling
- Beiträge: 4
- Registriert: 8. Jul 2008 13:08
-
- Nerd
- Beiträge: 681
- Registriert: 26. Okt 2006 14:04
- Kontaktdaten:
Re: At lease once - Semantik
Nur mal ne Anmerkung: Das soll doch mit aller Sicherheit "at-least-once" heißen, oder?
-
- Computerversteher
- Beiträge: 325
- Registriert: 11. Dez 2005 13:14
- Wohnort: Darmstadt
Re: At lease once - Semantik
Ein Proxy vor dem Server könnte z.B. beim Empfangen einer Nachricht diese irgendwo speichern und erst dann löschen, wenn vom Server das passende "ich bin fertig mit der Berechnung" kommt. Wenn dann der Server crasht, schickt der Proxy alle gespeicherten Nachrichten nochmal zum Server. Manchmal ist aber nur eine "ich bin fertig"-Meldung beim Proxy nicht angekommen, der Server bearbeitet also eine bestimmte Nachricht möglicherweise mehrmals.
Das deckt bestimmmt nicht alle Fehlerfälle ab (z.B. "Proxy crasht" fehlt), aber meistens wird so ein System eine Nachricht "at least once" ausführen, denk ich.
Schwieriger finde ich da schon die "at most once"-Semantik zu implementieren, denn dafür braucht man dann Transactions und Roll-Backs oder ähnliches, wenn ich nicht gerade eine ganz einfache Möglichkeit übersehe.
Edit: Ok, ich hab wohl das einfachste von allem übersehen: Den Servercrash ignorieren und beim Server-Neustart alle alten Aufträge komplett wegschmeißen, falls noch Reste vorhanden sind. Ein Problem ist dann vielleicht, das ein Auftrag halbfertig sein könnte, und erst um *das* zu vermeiden braucht man sowas was ich oben genannt hatte.
btw, ich nehme an, dass das ein Tippfehler in den Folien ist und es eigentlich "at least once" heißen sollte, hat ja nichts mit leasing zu tun.
Das deckt bestimmmt nicht alle Fehlerfälle ab (z.B. "Proxy crasht" fehlt), aber meistens wird so ein System eine Nachricht "at least once" ausführen, denk ich.
Schwieriger finde ich da schon die "at most once"-Semantik zu implementieren, denn dafür braucht man dann Transactions und Roll-Backs oder ähnliches, wenn ich nicht gerade eine ganz einfache Möglichkeit übersehe.
Edit: Ok, ich hab wohl das einfachste von allem übersehen: Den Servercrash ignorieren und beim Server-Neustart alle alten Aufträge komplett wegschmeißen, falls noch Reste vorhanden sind. Ein Problem ist dann vielleicht, das ein Auftrag halbfertig sein könnte, und erst um *das* zu vermeiden braucht man sowas was ich oben genannt hatte.
btw, ich nehme an, dass das ein Tippfehler in den Folien ist und es eigentlich "at least once" heißen sollte, hat ja nichts mit leasing zu tun.
"I believe in the fundamental interconnectedness of all things." (Dirk Gently)
Re: At lease once - Semantik
Denke ich auch, steht im Foliensatz 7 auf S.23 falsch und auf S.24 richtig.yourmaninamsterdam hat geschrieben:Nur mal ne Anmerkung: Das soll doch mit aller Sicherheit "at-least-once" heißen, oder?
Ich hätte jetzt eher vermutet, dass der Client einen Timeout setzt und wenn er dann kein Ergebnis hat, einfach noch mal einen Request schickt und sich das wiederholt, bis der Server geantwortet hat.Christoph-D hat geschrieben:Ein Proxy vor dem Server könnte z.B. beim Empfangen einer Nachricht diese irgendwo speichern und erst dann löschen, wenn vom Server das passende "ich bin fertig mit der Berechnung" kommt.
-
- Computerversteher
- Beiträge: 325
- Registriert: 11. Dez 2005 13:14
- Wohnort: Darmstadt
Re: At lease once - Semantik
Stimmt, das ist auch viel einfacher und zuverlässiger zu implementieren als meine Idee.Edoat hat geschrieben:Ich hätte jetzt eher vermutet, dass der Client einen Timeout setzt und wenn er dann kein Ergebnis hat, einfach noch mal einen Request schickt und sich das wiederholt, bis der Server geantwortet hat.Christoph-D hat geschrieben:Ein Proxy vor dem Server könnte z.B. beim Empfangen einer Nachricht diese irgendwo speichern und erst dann löschen, wenn vom Server das passende "ich bin fertig mit der Berechnung" kommt.
"I believe in the fundamental interconnectedness of all things." (Dirk Gently)
-
- Neuling
- Beiträge: 4
- Registriert: 8. Jul 2008 13:08
Re: At lease once - Semantik
Danke erstmal für die Antworten.
Aber meine eigentliche Frage wurde nicht wirklich beantwortet.
Das Problem ist, dass ich bei 'at-least-once' nicht sicherstellen kann, da z.B. ALLE (auch zukünftige) Anfragen auf dem Weg verloren gehen können!
[Daraus folgt auch eine weitere Frage. Wenn man 'at-least-once' und 'at-most-once' wirklich realisieren könnte, dann könnte man auch 'exactly-once' realisieren, oder schließen die beiden Ansätze sich gegenseitig aus? Wenn ja aus welchem grund?]
Aber meine eigentliche Frage wurde nicht wirklich beantwortet.
Das Problem ist, dass ich bei 'at-least-once' nicht sicherstellen kann, da z.B. ALLE (auch zukünftige) Anfragen auf dem Weg verloren gehen können!
[Daraus folgt auch eine weitere Frage. Wenn man 'at-least-once' und 'at-most-once' wirklich realisieren könnte, dann könnte man auch 'exactly-once' realisieren, oder schließen die beiden Ansätze sich gegenseitig aus? Wenn ja aus welchem grund?]
-
- Computerversteher
- Beiträge: 370
- Registriert: 15. Okt 2006 18:28
- Wohnort: Wiesbaden
- Kontaktdaten:
Re: At lease once - Semantik
du willst sicherstellen können das alle Anfragen auf dem Weg verloren gehn können?
naja, wenn du annimmst das at-least-once nicht sicherstellen kann, das jemals ne Anfrage / ne Antwort ankommt, dann musst du da schon zugrunde legen das der Server auf der Mülldeponie gelandet, das Netzwerk für alle zeiten abgeschaltet ist oder sonstwas, und dann ist das Modell ja eh hinfällig.
Ansonsten stimmen die Semantiken so und sollen ja nur Fehler des Systems regeln, und nicht den Fall das das System garnich so existiert.

naja, wenn du annimmst das at-least-once nicht sicherstellen kann, das jemals ne Anfrage / ne Antwort ankommt, dann musst du da schon zugrunde legen das der Server auf der Mülldeponie gelandet, das Netzwerk für alle zeiten abgeschaltet ist oder sonstwas, und dann ist das Modell ja eh hinfällig.
Ansonsten stimmen die Semantiken so und sollen ja nur Fehler des Systems regeln, und nicht den Fall das das System garnich so existiert.
Re: At lease once - Semantik
Dann versuche doch mal, deine Frage deutlicher zu formulieren.daniel-schreiber hat geschrieben:Aber meine eigentliche Frage wurde nicht wirklich beantwortet.
Ich habe das "at-least-once" so verstanden, dass man so lange Requests sendet, bis es klappt (deshalb "infinite retries" auf S. 23 bei den Distributed Programming Folien).