如何将Linux定时任务转换为“亚马逊方式”?

117
我们已将整个LAMP Web应用程序从专用机器迁移到云端(Amazon EC2机器),这或许是好事,但我们处理crons的方式不够优秀。我有一个关于如何使用“亚马逊方式”在云中最佳管理cron作业的问题。
问题:我们有多个Web服务器,并需要运行批处理作业的cron,例如创建RSS提要,触发电子邮件等很多不同的任务。但是cron作业只需要在一台机器上运行,因为它们经常写入数据库,如果在多台机器上运行,会导致结果重复。
到目前为止,我们指定其中一台Web服务器为“主Web服务器”,并且它有一些其他Web服务器没有的“特殊”任务。云计算的权衡是可靠性-我们不想要“主Web服务器”,因为它是单点故障。我们希望它们都是相同的,并且能够升级和降级,而无需记住不将主Web服务器从集群中删除。
如何重新设计我们的应用程序以将Linux cron作业转换为临时工作项,从而消除单点故障?
到目前为止,我的想法有:
  • 有一台专门运行cron的机器。这会更容易管理,但仍然存在单点故障,并且会浪费一些额外的实例。
  • 一些工作可以从Linux crons移动到MySQL Events,但我不太喜欢这个想法,因为我不想将应用程序逻辑放入数据库层。
  • 也许我们可以在所有机器上运行所有的crons,但更改我们的cron脚本,让它们都以实现锁定机制的一小段逻辑开始,这样只有一个服务器实际上采取行动,其他服务器则跳过。我不太喜欢这个想法,因为它听起来可能存在漏洞,我更愿意使用Amazon最佳实践而不是自己编写。
  • 我想象一种情况,工作被安排在某个地方,加入队列,然后Web服务器可以成为工作者之一,可以说“嘿,我会处理这个”。Amazon Simple Workflow Service听起来像这种东西,但我目前对此了解不多,因此任何具体信息都会有所帮助。它似乎对于像cron这样简单的东西来说有点重量级?它是正确的服务还是有更合适的Amazon服务?

更新:自从我提出这个问题后,我在YouTube上观看了Amazon Simple Workflow Service网络研讨会,并注意到在34:40(http://www.youtube.com/watch?v=lBUQiek8Jqk#t=34m40s),我瞥见一张幻灯片提到cron作业作为一个示例应用程序。在他们的文档页面“AWS Flow Framework samples for Amazon SWF”中,亚马逊表示他们有cron的示例代码:

... > Cron jobs 在这个示例中,一个长时间运行的工作流定期执行一个活动。演示了继续执行作为新执行的能力,以便执行可以运行非常长的时间。 ...

我下载了适用于Java的AWS SDK(http://aws.amazon.com/sdkforjava/),在一堆荒谬的文件夹中,确实有一些Java代码(aws-java-sdk-1.3.6/samples/AwsFlowFramework/src/com/amazonaws/services/simpleworkflow/flow/examples/periodicworkflow)。
问题是说实话,这并没有真正帮助我,因为它不是我可以轻松理解的技能范围内的东西。PHP SDK中缺少相同的示例,并且似乎没有教程可以详细介绍该过程。所以基本上,我仍在寻找建议或提示。

2
可能相关:https://dev59.com/UWoy5IYBdhLWcg3wCpsz - Ilmari Karonen
13个回答

1

我在一个依赖于定时任务的SaaS解决方案中使用了Quartz.NET。其中一些是系统维护任务,但大多数是由最终用户安排的活动。我们所有的任务都写入消息队列(amq),我们有任意数量的幂等服务来处理它们。该API非常好,并允许设置强大的计划。我们没有集群多个Quartz实例,但它确实支持这样做。 - Jerico Sandhorn

0

0

既然没有人提到CloudWatch Event,我认为它是AWS执行cron作业的方式。它可以运行许多操作,例如Lambda函数、ECS任务等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接