【发布时间】:2011-05-19 17:13:03
【问题描述】:
我想更好地了解什么是快速故障和故障安全。
乍一看,fail-fast 意味着我们希望在发生任何意外情况时让系统明显失败。 我的意思是,例如,如果工厂无法创建对象的实例,出于快速失败的原则,我们真的不希望工厂返回 null、空对象或部分初始化的对象,这些对象可能偶然被使用由应用程序正确 -> 大多数时候我们会遇到意外行为,或者在另一个级别引发意外异常,这不允许我们知道真正的问题在工厂中。 这个原理是什么意思?
故障安全原则对我来说很难理解。 Java 中最常见的例子是关于集合、它们的迭代器和并发访问。 据说允许在迭代列表时修改列表的集合/迭代器称为故障安全。它通常通过最终迭代初始列表的副本来完成。 但是在这个例子中,我真的不明白系统在哪里失败......因此虽然它是故障安全的......失败在哪里?我们只是迭代一个副本或不迭代,这取决于我们的需要...... 我没有看到任何与故障安全的 wiki 定义相匹配的内容...
因此在这样的文章中: 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 它似乎与故障安全原则的初始定义更相关。 我对故障安全的看法是,当系统发生故障时,我们必须确保故障处理程序不会失败,或者,如果确实如此,请确保真正的初始问题不会被处理程序的失败所掩盖。在给定的示例中,处理程序就在初始失败代码附近,但并非总是如此。故障安全对我来说意味着更多的东西,比如我们正确处理故障处理程序中可能发生的错误或类似的东西......
因此对我来说,这两条原则似乎并不矛盾。 你怎么看? 系统不能快速安全地失败吗???
【问题讨论】:
标签: language-agnostic exception exception-handling