8

现在,我们有一个带有 cronjob 选项卡的服务器,可以每天发送电子邮件。我们想扩展该服务器。该应用程序是部署在亚马逊云中的centos服务器上的标准zend框架应用程序。

我们已经处理了负载平衡、内容管理和管理部署。但是,cronjob 对我们来说仍然是一个问题,因为我们需要授权某些作业只执行一次。

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

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

  1. 将其中一台服务器设为“主控”服务器,该服务器仅发送每日电子邮件。如果服务器出现故障,这将是一个问题,而且通常我们不希望拥有“特殊”服务器。这也意味着我们需要跟踪哪个服务器是主服务器。
  2. 有一个要执行的计划任务队列。每个服务器打开该队列并查看需要执行哪些任务。第一个“抓取”任务的服务器将执行任务并将其标记为已完成。我正在寻找亚马逊简单排队服务作为队列的解决方案。

这两种解决方案都有优点和缺点,我想知道是否有人考虑过其他人可以帮助我们。

4

3 回答 3

6

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

于 2011-06-20T17:44:41.933 回答
0

Beanstalkd也可能是您的选择。

于 2013-03-07T08:59:19.667 回答
0

我有同样的问题。我所做的非常简单。

  1. 我在 AWS 上启动了最便宜的 EC2 实例。
  2. 我只在这台服务器上创建了 cronjob(s)。
  3. cron 作业只运行只向我的端点/api(即 api.mydomain.com)发出简单请求的作业。
  4. 在我的 api 上,我只有一条路线来监视这些特殊请求,这些请求将运行我想要的工作。所以基本上,我所做的不是使用 cronjob 运行任务,而是通过 http 请求运行任务。

我希望这是有道理的!现在,无论您拥有多少台服务器,它都会扩展!此外,您的 cronjob 服务器的唯一功能是运行死的简单作业来发送请求,仅此而已。

于 2017-10-23T14:49:33.507 回答