Я бы хотел лучше понять, что такое отказоустойчивость и отказоустойчивость.
На первый взгляд мне кажется, что отказоустойчивость означает, что мы хотим, чтобы система явно отказывала, когда происходит какая-то неожиданная вещь.
Я имею в виду, например, если фабрика не может создать экземпляр объекта, по принципу отказоустойчивости мы действительно не хотим, чтобы фабрика возвращала нулевой или пустой объект, или частично инициализированный объект, который мог бы, случайно, использоваться правильно приложением -> в большинстве случаев мы будем иметь неожиданное поведение или неожиданное исключение, возникающее на другом уровне, которое не позволит нам узнать, что на самом деле происходит на фабрике.
Это что означает этот принцип?
Принцип отказоустойчивости довольно сложен для меня.
Наиболее распространенный пример в Java - о коллекциях, их итераторах и параллельном доступе.
Говорят, что коллекция / итератор, который позволяет изменять список при переборах, называется отказоустойчивой. Обычно это делается путем итерации по копии исходного списка.
Но в этом примере я не совсем понимаю, где происходит сбой системы ... и, следовательно, пока она отказоустойчива ... Где сбой? Мы просто перебираем копию или нет, в зависимости от наших потребностей ...
Я не вижу соответствия с вики определением отказоустойчивости ...
Таким образом, в таких статьях, как:
http://www.certpal.com/blogs/2009/09/iterators-fail-fast-vs-fail-safe/
Они напротив от отказоустойчивого до отказоустойчивого ... я просто не понимаю, почему мы называем отказоустойчивым эту итерацию поверх копии ...
Я нашел еще один пример здесь:
http://tutorials.jenkov.com/java-exception-handling/fail-safe-exception-handling.html
Кажется, гораздо больше связано с первоначальным определением принципа отказоустойчивости.
Что я думаю о отказоустойчивости, так это то, что при сбое системы мы должны убедиться, что обработчик ошибок не вышел из строя, или, если это произойдет, убедиться, что настоящая первоначальная проблема не скрыта из-за сбоя обработчика. В данном примере обработчик находится рядом с исходным кодом ошибки, но это не всегда так. Отказоустойчивость означает для меня что-то вроде того, как мы правильно обрабатываем ошибки, которые могут произойти в обработчиках сбоя, или что-то в этом роде ...
Таким образом, для меня эти два принципа не кажутся несовместимыми.
Как вы думаете?
Разве система не может быстро и безопасно выйти из строя ???