C# 高可靠性服务的设计考虑

C# 高可靠性服务的设计考虑,c#,service,reliability,C#,Service,Reliability,我正在编写一个c#windows服务,它将执行一些后台处理——基本上它是工作队列的使用者 它不需要下降(停止处理新项目),如果下降,我需要得到通知 对于a)确保此类服务尽可能可靠,以及b)在出现问题时发送通知,有哪些设计指南和注意事项?例如,我考虑过创建一个观察线程,其唯一任务是确保工作线程仍在处理作业。在这里,您可以做很多事情来帮助提高可靠性,并评估您是否有一个能够满足需要的解决方案 测试 不过,首先也是最重要的是,您所经历的测试过程需要非常可靠,测试那些“意外”情况、网络连接丢失等。确保您正

我正在编写一个c#windows服务,它将执行一些后台处理——基本上它是工作队列的使用者

它不需要下降(停止处理新项目),如果下降,我需要得到通知


对于a)确保此类服务尽可能可靠,以及b)在出现问题时发送通知,有哪些设计指南和注意事项?例如,我考虑过创建一个观察线程,其唯一任务是确保工作线程仍在处理作业。

在这里,您可以做很多事情来帮助提高可靠性,并评估您是否有一个能够满足需要的解决方案

测试

不过,首先也是最重要的是,您所经历的测试过程需要非常可靠,测试那些“意外”情况、网络连接丢失等。确保您正在测试这些情况,并查看发生了什么。关于失败的通知,可能有点“混合袋”。例如,如果没有可用的网络连接,则无法自己发送电子邮件

正确的代码设计

除了设置有效的测试场景外,请确保您的代码尽可能是防弹的,因为您正在创建windows服务,请确保您正在捕获、记录和处理所有可能的错误,就像错误冒泡到操作系统一样,您的服务将停止

监控


考虑进行监控,在我的日常工作中,我们使用了两种类型的监控,在某些情况下,Windows事件日志会报告错误,Microsoft MOM用于通知我们环境中发生的任何/所有问题。我们使用的第二个进程是第二个计划作业,每X分钟验证一次关键作业是否处于“已启动”状态,如果它不处于已启动状态,它将重新启动它。虽然不美观,但它可以工作。

在这里,您可以做很多事情来帮助提高可靠性,并评估您是否有一个能够满足您需求的解决方案

测试

不过,首先也是最重要的是,您所经历的测试过程需要非常可靠,测试那些“意外”情况、网络连接丢失等。确保您正在测试这些情况,并查看发生了什么。关于失败的通知,可能有点“混合袋”。例如,如果没有可用的网络连接,则无法自己发送电子邮件

正确的代码设计

除了设置有效的测试场景外,请确保您的代码尽可能是防弹的,因为您正在创建windows服务,请确保您正在捕获、记录和处理所有可能的错误,就像错误冒泡到操作系统一样,您的服务将停止

监控


考虑进行监控,在我的日常工作中,我们使用了两种类型的监控,在某些情况下,Windows事件日志会报告错误,Microsoft MOM用于通知我们环境中发生的任何/所有问题。我们使用的第二个进程是第二个计划作业,每X分钟验证一次关键作业是否处于“已启动”状态,如果它不处于已启动状态,它将重新启动它。不是很优雅,但它可以工作。

我认为MOM和/或Solar Winds或其他一些监控应用程序,您的系统管理员可能会使用这些应用程序来监控部署服务的机器,并采取适当的措施(发送电子邮件、打电话:)

我认为MOM和/或Solar Winds或其他一些监控应用程序,您的系统管理员可能会使用它们来监控部署服务的机器,并采取适当的措施(发送电子邮件、拨打电话:)