目前,我们有一台单独的服务器,其中包含一个cronjob标签,用于发送每日电子邮件。我们希望扩展该服务器。该应用程序是在Amazon云中部署的CentOS服务器上的标准Zend Framework应用程序。
我们已经处理了负载均衡、内容管理和管理部署的问题。然而,cronjob对我们来说仍然是一个问题,因为我们需要保证某些作业仅执行一次。
例如,每日电子邮件cronjob必须由单个服务器执行一次。我正在寻找最佳方法,以保证只有一个服务器会执行它一次。
我考虑了两种解决方案,但我想知道是否有其他人遇到过同样的问题。
- 将其中一台服务器设置为“主服务器”,仅用于发送每日电子邮件。如果该服务器发生故障,那将是一个问题,而且通常我们不希望有一个“特殊”的服务器。这也意味着我们需要跟踪哪台服务器是主服务器。
- 拥有一个计划任务队列。每个服务器打开该队列并查看需要执行的任务。第一个“抓取”任务的服务器将执行任务并将其标记为完成。我正在寻找Amazon简单队列服务作为队列的解决方案。
这两种解决方案都有优缺点,我想知道是否有其他人考虑过其他的解决方案可以帮助我们。