预定任务PHP替代方案

时间:2017-03-23 13:06:58

标签: php server cron scheduled-tasks e-commerce

我正在开发一个现有的自定义电子商务PHP应用程序,该应用程序目前每15分钟运行一次资源密集型的CRON。

它的要点是:客户可以为他们感兴趣的产品设置复杂的过滤器,并根据这些过滤器接收电子邮件。每15分钟运行一次的CRON会检查自上次运行以来列出的所有新产品,并将它们与每个客户过滤器进行比较。如果产品与客户过滤器匹配,则会通过amazon SES发送电子邮件。

到目前为止,这种方法一直运行正常,但随着活跃客户数量的快速增长,CRON开始每15分钟对应用程序进行一次显着的性能下降,持续一两分钟运行。

我一直在用其他想法来帮助分散服务器上的负载,例如每次列出产品时执行任务,因此服务器不需要一次赶上多个产品

接近这样的事情时,通常最好的做法是什么?

2 个答案:

答案 0 :(得分:0)

我推荐的方法是使用一个rabbitmq队列,你的cron将发送消息。然后设置几个消费者(将在队列的另一端等待的脚本)逐个接收消息,撰写电子邮件并将其发送给客户。 这样,您可以扩展消费者数量以匹配需要发送的电子邮件量。 如果队列不是您熟悉的,请查看RabbitMQ教程:https://www.rabbitmq.com/tutorials/tutorial-one-php.html

答案 1 :(得分:0)

消息队列非常适合您,您可以轻松地使用enqueue库来使用它们。关于你为什么要选择它的几句话:

  • 它支持a lot of transports从最简单的(文件系统)到企业的(RabbitMQ或Amazon SQS)。
  • 它带有非常强大的bundle
  • 它具有顶级抽象,可以非常轻松地使用。
  • 还有更多可能派上用场的东西。

您需要一个supervisord(或任何其他进程管理器),而不是定义cron任务。必须将其配置为运行consume命令。有关详情,请参阅doc

每当消息发布时,它都会被传递给消费者(由经纪人)并且正在处理中。

我建议使用RabbitMQ经纪人。