无论好坏,我们已经将整个LAMP Web应用程序从专用机器迁移到云(Amazon EC2机器)。 目前为止,我们做cron的方式是不理想的。 我有一个亚马逊特定的问题,关于如何使用“亚马逊方式”最好地pipe理云中的cron作业。 问题 :我们有多个web服务器,需要运行crons来进行批量作业,比如创buildRSS feed,触发电子邮件,实际上有很多不同的事情。 但是cron作业只需要在一台机器上运行,因为它们经常写入数据库,所以如果在多台机器上运行,就会复制结果。 到目前为止,我们将其中一个networking服务器指定为“主networking服务器”,并且具有其他networking服务器所没有的一些“特殊”任务。 云计算的权衡是可靠的 – 我们不需要一个“主 – networking服务器”,因为这是一个单一的故障点。 我们希望它们都是相同的,并且能够升级和降级,而不用记住不把master-web服务器带出集群。 我们如何重新devise我们的应用程序,将Linux cron作业转换为没有单点故障的暂时性工作项? 我的想法到目前为止: 有一台机器专门只运行crons。 这样会更容易pipe理,但仍然是一个单一的失败点,并会浪费一些金钱有额外的实例。 有些工作可以想象从Linux cron移到MySQL Events,但是我并不是很喜欢这个想法,因为我不想将应用程序逻辑放到数据库层。 也许我们可以在所有的机器上运行所有的cron,但是改变我们的cron脚本,使它们都以一些实现locking机制的逻辑开始,所以只有一个服务器实际上采取行动,其他的只是跳过。 我不是这个想法的粉丝,因为这听起来可能是错误的,我宁愿使用亚马逊的最佳做法,而不是滚动我们自己的。 我想象的是一个工作安排在某个地方的情况,join队列,然后networking服务员可以成为一名工作人员,可以说“嗨,我会拿这个工作的”。 亚马逊简单的工作stream服务听起来正是这样的事情,但我目前不知道太多,所以任何细节将有所帮助。 对于像cron这样简单的东西来说,它似乎有点沉重? 这是正确的服务还是有更合适的亚马逊服务? 更新:由于提问我已经观看了YouTube上的亚马逊简单工作stream服务networking研讨会,并在34:40注意到( http://www.youtube.com/watch?v=lBUQiek8Jqk#t=34m40s ),我瞥见了一个将提及cron作业的幻灯片作为示例应用程序提供。 在他们的文档页面,“ 亚马逊SWF的AWS Flow Framework示例 ”中,亚马逊说他们有crons的示例代码: … > Cron作业在本示例中,长时间运行的工作stream会定期执行一个活动。 演示了将执行继续作为新执行的能力,以便执行可以在非常长的时间内运行。 … 我下载了适用于Java的AWS开发工具包( http://aws.amazon.com/sdkforjava/ ),并确定埋在一个荒谬的层文件夹中有一些Java代码( aws-java-sdk-1.3.6/samples/AwsFlowFramework/src/com/amazonaws/services/simpleworkflow/flow/examples/periodicworkflow )。 问题是,如果我说实话,这并不是真的有帮助,因为我不能用我的技能很容易地消化。 PHP SDK中缺less同样的示例,似乎没有一个教程能够通过这个过程。 所以基本上,我还在寻求build议或提示。