在服务器场中共享定期任务的最佳策略

时间:2009-12-11 11:25:46

标签: architecture server-farm

我有一个问题。假设您有一个业务定期任务,例如每个月产生余额。该任务可以在服务器场中运行,因此如果运行定期任务的计算机出现故障,则必须将其传递给另一台计算机。

那么,我怎么能坚持定期任务并在农场安全?我在一个持久的共享队列中思考过,但我很困惑。

有什么想法吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

从1到> 1始终是一大步。

选项1

你需要(除其他外):

  • 主管机器
  • 心跳协议/故障检测
  • 作业调度程序的选举协议
  • Job Scheduler
  • 工作报告

选项2

只需让多台机器完成任务并从其中一台机器中选择成功输出(或者如果您认为需要,可以使用多数投票)。

答案 1 :(得分:1)

您的问题中缺少很多因素。你是如何访问任务的?它是一个Web服务吗?远程程序调用?它是自己运行,然后将结果存储在共享文件夹中吗?

如果它只是Web服务,那么解决方案可能只是按顺序查询它们,如果一个不可用,那么继续下一个...可能rpc只能用相同的程序处理。当然,这不是很好的扩展,它有点特别,但如果你没有时间做其他事情,它可能就是诀窍。

如果你有足够的时间和金钱来进行真正的扩展,你应该看一下control reconfiguration,这是你正在寻求的那种容错的基础。当然,这意味着一个控制器(监督机器,如@jldupont称之为),以及许多机制和努力,以保持一切。

只有你真的需要它才值得。对时间和金钱都是一笔巨大的投资,所以不要因为很酷而大胆地去做。

答案 2 :(得分:1)

不确定您的技术堆栈是什么,但如果您使用.NET堆栈,请查看Quartz(或Quartz.net)。 Quartz是一个企业作业调度程序,具有强大的故障转移/ HA功能。