【问题标题】:Fail fast or fail safe?快速失败还是安全失败?
【发布时间】:2010-08-05 10:55:54
【问题描述】:

我正在从事一个小型项目,该项目涉及创建一个旨在由大型产品在后台运行的控制台程序。

该程序应该一方面与主要产品 (IP21) 通信,另一方面充当服务器,处理多个客户端。

我已经开始研究架构并提出了一些基于reactor 处理事件的东西,例如连接或主要产品生成的事件。客户端处理部分在单独的线程中处理,每个客户端一个。

但我不同意我的一位同事对这种架构的看法。他说我应该把反应堆和其他几个在主线程中运行的组件放在一个单独的线程中。主线程应该尽可能简单。如果这部分发生,我会这样做,以便程序不会崩溃。他说拥有一个完全没有功能的程序总比一个剧烈的崩溃要好。

我说最好快点失败。如果程序的这个(关键)部分崩溃,则没有理由尝试使其保持活动状态。而且我相信它会给用户带来麻烦;他会注意到有问题,但是如果他查看任务列表(我们的产品作为某种任务管理器,它列出了应该运行的任务并允许轻松跟踪崩溃的任务)他不会注意到程序崩溃了!

我希望您可以通过给一方或另一方一些论据来帮助我们;)

编辑:感谢您的回答,但我们不同意将反应堆和其他一些组件放在单独的线程中以防严重的编程相关问题(段错误/死锁)的有用性/)。我认为让程序在没有这个线程的情况下运行既危险又毫无意义。

【问题讨论】:

标签: architecture


【解决方案1】:

使用Proactor 模式:)

故障安全。但这取决于任务(关键与否)和用户的忠诚度。稳定。您失去了一位或全部用户。

【讨论】:

    【解决方案2】:

    取决于您需要做什么以及它的重要性。如果您可以处理某些步骤失败而其他步骤失败,那么请失败这些步骤并继续前进。 (想想发送邮件之类的事情;如果一条消息发送失败,您不希望它阻止其余的通过。)只有当一个步骤的失败使其余的无法可靠地完成时,才使整个过程失败。

    【讨论】:

      猜你喜欢
      • 2016-12-21
      • 2012-06-22
      • 2018-09-26
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多