【问题标题】:Best Practices of fault toleration and reliability for scheduled tasks or services计划任务或服务的容错和可靠性最佳实践
【发布时间】:2011-02-24 17:44:19
【问题描述】:

我一直在开发许多作为 Windows 服务或计划任务运行的应用程序。

现在,我想确保这些应用程序具有容错性和可靠性。例如;我有一个每小时运行一次的服务。如果服务在运行或运行时崩溃,我希望应用程序在同一时期再次运行(这涉及到几件事,包括数据处理的事务),以避免数据丢失。此外,我希望程序能够详细报告错误。我的目标是避免数据丢失并且不落后于运行程序。

我已经构建了一个用户可以导入到项目中的类库。库应该保存程序运行实例的信息,即。程序读取和写入运行间隔、运行状态等信息。这些数据存储在数据库中。

我很好奇,是否有一些最佳实践可以使计划任务/Windows 服务具有容错性和可靠性。

编辑:我说的是不同服务器上的独立任务或服务。我的目标是确保服务继续运行,报告任何故障并从中恢复。

【问题讨论】:

  • 我发现的最好的广告是 FireDaemon。不知道它是如何运行的,我现在正在检查它。但它宣传的功能很棒。
  • 谢谢,我确实检查过了。我宁愿编写代码并控制它。

标签: c# .net reliability fault-tolerance


【解决方案1】:

我对其他人的看法很感兴趣,但我会告诉你我偶然发现的几点:

  1. 为未处理的异常创建事件处理程序。通过这种方式,您可以清理资源、写入日志文件、向管理员发送电子邮件或任何您需要做的事情,而不是让它崩溃。

    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(AppUnhandledExceptionEventHandler);

  2. 在应用程序的主要部分覆盖您需要的任何 servicebase 事件处理程序。 OnStart 和 OnStop 非常重要,但您还可以使用许多其他方法。 http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase%28v=VS.71%29.aspx

  3. 小心计时器。 Windows 窗体计时器无法在服务中正常工作。用户 System.Threading.Timers 或 System.Timers.Timer。 Best Timer for using in a Windows service

  4. 如果您在线程上更新,请确保在关键部分使用 lock() 或监视器以确保一切都是线程安全的。

  5. 注意不要使用任何特定于用户的内容,因为服务在没有特定用户上下文的情况下运行。我注意到我的一些 SQL 连接字符串不再适用于 Windows 授权等。还听说有人在映射驱动器方面遇到问题。

  6. 永远不要使用 UI 提供服务。事实上,对于 Vista 和 7,它们几乎不可能做到。它不应该需要用户交互,你能做的最多就是发送一个带有 WIN32 功能的消息。 MSDN 声称制作交互式服务是不好的做法。 http://msdn.microsoft.com/en-us/library/ms683502%28VS.85%29.aspx

  7. 出于调试目的,让服务作为控制台应用程序运行非常酷,直到你让它按照你的意愿运行。很棒的教程:http://mycomponent.blogspot.com/2009/04/create-debug-install-windows-service-in.html

无论如何,希望能有所帮助,但这只是我自己摸索的几件事。

【讨论】:

    【解决方案2】:

    一些显而易见的事情 - 不要同时运行所有任务。尝试安排它们,以便在任何时候(如果可能)只有一项任务正在使用一些昂贵的资源。例如,如果您需要发送时事通讯和一些特定通知,请将它们安排在不同的时间。如果两个任务需要清理数据库中的某些内容,让一个接一个运行。

    还将任务安排在正常工作时间之外运行 - 显然是在晚上。

    【讨论】:

    • 我说的是不同服务器上的独立任务或服务。我的目标是确保服务能够继续运行,报告任何故障并从中恢复,同时尽量减少或不丢失数据。
    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2014-01-27
    • 2014-07-07
    • 2011-02-18
    相关资源
    最近更新 更多