在多台服务器上扩展cronjobs

时间:2011-06-20 17:18:09

标签: php zend-framework centos amazon-sqs

现在,我们有一个服务器,其中包含一个发送每日电子邮件的cronjob标签。我们想扩展该服务器。该应用程序是部署在亚马逊云的centos服务器上的标准zend框架应用程序。

我们已经负责了负载平衡,内容管理和管理部署。然而,对于我们来说,cronjob仍然是一个问题,因为我们需要承认某些工作只执行一次。

例如,每日电子邮件cronjob只能由一台服务器执行一次。我正在寻找最好的方法,只有一个服务器只会执行一次。

我正在考虑两种解决方案,但我想知道其他人是否有同样的问题。

  1. 让其中一个服务器“主”,只发送每日电子邮件。如果服务器出现故障,这将是一个问题,通常我们不希望拥有“特殊”服务器。这也意味着我们需要跟踪哪个服务器是主服务器。
  2. 准备要执行的计划任务队列。每个服务器打开该队列,并查看需要执行的任务。第一个“抓住”任务的服务器将执行任务并将其标记为已完成。我一直在寻找亚马逊简单的排队服务作为队列的解决方案。
  3. 这两种解决方案都有优点和缺点,我想知道是否有人想到可能会帮助我们的其他人。

3 个答案:

答案 0 :(得分:6)

当您需要扩展cron作业时,最好使用像Gearman这样的职位经理

答案 1 :(得分:0)

Beanstalkd也可以作为您的选择。

答案 2 :(得分:0)

我遇到了同样的问题。我做的很简单。

  1. 我在AWS上发布了最便宜的EC2实例。
  2. 我只在这台服务器上创建了cronjob。
  3. cron作业只运行只向我的端点/ api发出简单请求的作业(即api.mydomain.com)。
  4. 在我的api上,我只是有一条路线正在观察这些特殊的请求,这些请求将运行我想要的工作。所以基本上,我正在做的只是使用cronjob运行任务,我通过http请求运行任务。
  5. 我希望这是有道理的!现在,无论您拥有多少台服务器,它都只会扩展!此外,您的cronjob服务器的唯一功能是运行死的简单作业来发送请求,仅此而已。