2012-11-30 80 views
1

我正在开发一个网站(使用LAMP堆栈),它必须处理许多用户自定义的调度任务。它的工作原理如下:用户创建一个事件并设置一个日期,其他用户(多达63个)可以加入。在设定日期前几个小时,系统必须通过电子邮件向订阅该事件的每个用户发送电子邮件。就是这样。如何处理Web服务器上的大量计划任务?

但是,我从来没有处理过调度,我知道的唯一工具(很差)是cron和at。我的计划是为每个事件创建一份工作,该工作将调用一个脚本来获取所有订阅者的电子邮件并发送邮件。

我的问题是:我的计划/设计很好吗?它是否可扩展?我应该注意哪些更好的选择?

回答

1

,如果您考虑使用的应用服务器适当的框架(而不是一个简单的Web服务器),Springtask scheduling layer这是简单易用。在服务器上安排作业确实需要的不仅仅是一个简单的LAMP安装,但我暂时还没有使用过PHP,所以也许有一个等价的东西。

Here's这篇文章比较了一些选项。

+0

这看起来比我想象的要复杂得多......但也似乎是一个强大的解决方案。我认为花费一些额外的时间来学习应用服务器是值得的,而不是半分配计划任务。您提供的链接非常有用!坦克! – drakenation

2

为什么每个事件都有单独的cron作业?我为cron作业做了一些类似的事情,每小时只运行一次,如果有任何新闻稿要发送,它只是处理它们。在你的情况下,你会有一个脚本每小时运行一次,并获取用户列表,以便在所需的时间间隔内发生事件。

它会工作。至于可伸缩性,至少要确保脚本运行在它自己的进程中,以免不必要地使服务器陷入困境。

也许创建一个php-cli脚本?

我做我的大部分工作在Rails的今天,并有丰富的后台处理库,其中一个是Resque它使用Redis的服务器,以保持工作 的轨迹我发现了一个PHP克隆https://github.com/chrisboulton/php-resque

可能是矫枉过正为您的使用情况,但给它一个镜头也许

+0

对于通讯,这似乎是一个合理的解决方案。但是,我不知道cron作业是否会对我的用例有好处,因为它有一个用户定义的日期,用户可以选择一分钟。每分钟运行一次cron作业都会影响性能,而在更大的时间范围内运行可能无法达到我想要的水平。我可以将创建事件的分钟数限制为15或30的倍数(这会更容易处理),但我宁愿尝试其他方法。 – drakenation

+0

用cron很难做到实时响应。把最短时间限制在15分钟左右是合理的,这样你就不会这么做了。我的观点是有一个不影响网络服务器的进程发件人。即使你使用了诸如救援的图书馆,如果你每分钟运行一次,它也可能是太多活动。 –