快速失败或失败安全?

时间:2010-08-05 10:55:54

标签: architecture

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

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

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

但我不同意我的同事对这个架构的看法。他说我应该把反应堆和少数其他组件放在主线程中,在一个单独的线程中。主线程应该尽可能简单。我这样做,以便程序不会崩溃,如果这部分。他说,拥有一个完全无功能的程序比暴力崩溃更好。

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

我希望你可以通过向一方或另一方提出一些论据来帮助我们;)

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

2 个答案:

答案 0 :(得分:3)

使用Proactor模式:)

安全失败。但这取决于任务(关键与否)和用户忠诚度。稳定性。您丢失了一个用户或全部用户。

答案 1 :(得分:0)

取决于您需要做什么以及它有多重要。如果你可以处理其他人工作时失败的某些步骤,那么就应该失败并继续前进。 (想想发送邮件;如果一封邮件发送失败,你不希望它让其他邮件无法通过。)如果一步的失败使其他邮件无法可靠地完成,那么整个过程都会失败。