Ich würde gerne besser verstehen, was ausfallsicher und ausfallfrei ist.
Auf den ersten Blick sieht es so aus, als ob Fail-Fast bedeutet, dass wir das System eindeutig zum Scheitern bringen wollen, wenn etwas Unerwartetes passiert. Ich meine zum Beispiel, wenn eine Fabrik keine Instanz eines Objekts erstellen kann, wollen wir wirklich nicht, dass die Fabrik null oder ein leeres Objekt oder ein teilweise initialisiertes Objekt zurückgibt, das zufällig von der Anwendung korrekt verwendet werden könnte -> meistens hätten wir ein unerwartetes Verhalten oder eine unerwartete Ausnahme, die auf einer anderen Ebene ausgelöst würde, die es uns nicht erlauben würde, zu wissen, dass das eigentliche Problem in der Fabrik liegt. Was bedeutet dieses Prinzip?
Das Prinzip der Ausfallsicherheit ist für mich ziemlich schwer zu verstehen. Das häufigste Beispiel in Java sind die Sammlungen, ihre Iteratoren und der gleichzeitige Zugriff. Man sagt, dass eine Sammlung/ein Iterator, der es erlaubt, eine Liste zu ändern, während man über sie iteriert, ausfallsicher ist. Normalerweise wird dies durch abschließende Iteration über eine Kopie der ursprünglichen Liste erreicht. Aber in diesem Beispiel verstehe ich nicht wirklich, wo das System versagt... und daher, obwohl es ausfallsicher ist... Wo ist der Fehler? Wir iterieren einfach über eine Kopie oder nicht, je nach unseren Bedürfnissen... Ich sehe keine Übereinstimmung mit der Wiki-Definition von Fail-Safe...
So in solchen Artikeln wie: http://www.certpal.com/blogs/2009/09/iterators-fail-fast-vs-fail-safe/ Das Gegenteil von ausfallsicher ist ausfallsicher... ich verstehe nur nicht, warum wir diese Iteration über eine Kopie ausfallsicher nennen...
Ein weiteres Beispiel habe ich hier gefunden: http://tutorials.jenkov.com/java-exception-handling/fail-safe-exception-handling.html Es scheint viel mehr mit der ursprünglichen Definition des Fail-Safe-Prinzips zu tun zu haben. Unter Ausfallsicherheit verstehe ich, dass wir bei einem Systemausfall sicherstellen müssen, dass der Fehlerbehandler nicht ausfällt oder, falls doch, dass das eigentliche Problem nicht durch den Ausfall des Handlers verdeckt wird. In diesem Beispiel liegt der Handler in der Nähe des ursprünglichen Fehlercodes, aber das ist nicht immer der Fall. Ausfallsicherheit bedeutet für mich eher, dass wir die Fehler, die in den Fehlerbehandlungsroutinen auftreten können, korrekt behandeln oder so ähnlich...
Daher scheinen mir diese beiden Grundsätze nicht unvereinbar zu sein. Was meinen Sie dazu? Kann ein System nicht schnell und sicher ausfallen???