工作队列 - cron会工作吗?

时间:2011-10-13 04:31:03

标签: php architecture queue

我正在构建一个小型应用程序,要求人们通过电子邮件上传图像。它使用MySQL和S3构建在PHP(无框架)中。

到目前为止,在我的场景中:电子邮件存储在POP3帐户中。脚本每分钟运行一次,获取最旧的电子邮件,调整图像大小,将其上传到S3,将其路径存储在数据库中,删除电子邮件。

在更大范围内,如何管理? cron工作是处理这种情况的最佳方式吗?如果这个过程花费的时间超过一分钟会怎么样:它会重叠并最终失败,对吧?或者如果不到一分钟呢?考虑到我会以更大的规模每小时发出超过60个请求,我会得到不必要的空闲时间......

也许我应该使用.forward文件处理电子邮件,但我再也不会控制流程。

我相信大多数情况都有效,我对最佳做法感到好奇。

谢谢!

2 个答案:

答案 0 :(得分:3)

稍加修改的方法可能是:

  • 每分钟从cron运行脚本
  • 您的脚本检查其中的另一个实例是否已在运行,是否存在
  • 正在运行的脚本处理剩余的队列,直到为空或有多个元素(例如最大10)

如果上次完成的备份超过一定时间,我曾经有一个备份程序,每小时备份一次客户目录。这种做法很有效,直到一些客户拥有太多Gb数据并且脚本需要一个多小时来进行备份。

如果没有检查,下一个小时脚本将再次运行同一个客户,这将花费一个多小时,依此类推,直到机器变得无响应并且运行级别非常高。

我实现的修复是描述的检查,如果另一个实例正在运行,只需退出并等待下一个周期。在修复之后,我多年来一直没有遇到过问题。

答案 1 :(得分:1)

尝试长时间运行的过程。它检查邮件,并处理所有邮件。如果它完成后无法再找到邮件,那么它会进入睡眠状态一分钟。

如果您遇到稳定性问题,可以随时使用supervise