如何在Web服务器上处理大量的计划任务?

时间:2012-11-30 02:51:05

标签: scheduled-tasks lamp

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

但是,我从未处理过调度问题,我所知道的唯一工具(很差)是cron和at。我的计划是为每个事件创建一个at-job,它将调用一个脚本来获取所有订阅者的电子邮件并邮寄它们。

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

2 个答案:

答案 0 :(得分:2)

为什么每个事件都有一个单独的cron作业?我已经为一份简报做了类似的事情,其中​​一个cron作业每小时运行一次,如果有任何新闻简报要发送,它就会处理它们。在您的情况下,您将拥有一个每小时运行一次的脚本,并获取自上次所需时间间隔内发生的事件的用户列表。

它会起作用。就可伸缩性而言,至少要确保脚本在其自己的进程中运行,这样就不会不必要地陷入服务器。

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

我现在正在Rails中完成大部分工作,并且有大量后台处理库,其中一个是Resque,它使用redis服务器来跟踪作业 我发现了一个PHP克隆https://github.com/chrisboulton/php-resque

你的用例可能会有点过分,但可以试一试

答案 1 :(得分:1)

如果您考虑使用应用程序服务器(而不是简单的Web服务器)的正确框架,Spring具有易于使用的task scheduling layer。在服务器上调度作业真的需要的不仅仅是简单的LAMP安装可以做的事情,但是我有一段时间没有使用过PHP,所以也许有一个等价物。

Here's一篇文章,比较了您的一些选择。