冗余的周期性任务执行

时间:2013-11-18 13:58:35

标签: c# .net architecture amazon-web-services

我的服务器系统需要每分钟运行一组任务。执行这些任务非常重要(一些小的延迟是可以的,但是没有执行两次)所以我需要以冗余的方式构建执行系统,即使单个服务器停止响应也能存活。从架构/系统组件的角度来看,我一直在寻找一些最佳实践,但似乎找不到合适的东西。

问题已经简化。

发送有关会议的通知电子邮件,以便为我的系统中已预订会议的日历的所有用户启动。 - 会议可以在任何给定的时间开始。 - 通知应始终在会议开始前10分钟 - 相同的通知不应发送两次 - 服务器停止响应(或需要更换或更新)。

我一直在调查Amazon Webservices简单工作流管理,但它似乎更适合具有已定义的开始和结束的任务。

我的系统目前在Amazon Web Services,.NET和C#中运行。

那里有任何建议?

谢谢大卫

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是使用aws SQS并为每个需要发送的电子邮件通知将一条消息放入队列。

您可以让多个工作进程(服务器)从队列中请求“工作”,一次下载一条消息(如果需要,可以一次下载一条消息),然后如果该进程成功完成工作进程将从队列中删除该消息。

如果服务器在请求邮件后死亡,但在发送电子邮件之前,SQS将自动使该项目在队列中可用,以便在分配的超时后处理另一个工作人员/服务器。

根据您可能需要处理的消息数量,以及您是否有可能看到要完成的工作偶尔出现高峰,您还可以使用SQS队列的大小作为指标来启动其他ec2服务器帮助处理流量峰值并为队列提供服务 - 然后您可以自动删除服务器,因为要处理的消息中的峰值下降到预定义的级别。

就一分钟间隔的处理而言,您可以使用Windows服务,也可以使用比每隔60秒设置一次的简单计划任务(个人喜好)。