繁体   English   中英

计划任务PHP替代方案

[英]Scheduled task PHP alternatives

我正在使用一个现有的自定义电子商务PHP应用程序,该应用程序当前每15分钟运行一次占用大量资源的CRON。

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

到目前为止,这种方法一直有效,但是随着活跃客户数量的迅速增加,CRON开始每15分钟对应用程序进行一次明显的性能下降,在运行过程中持续一两分钟。

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

处理此类问题时通常最好的做法是什么?

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

消息队列非常合适,您可以通过入库轻松使用它们。 简短地说一下为什么要选择它:

  • 它支持从最简单的一种(文件系统)到企业的各种传输 (RabbitMQ或Amazon SQS)。
  • 它带有一个非常强大的捆绑包
  • 它具有顶层抽象,可以最大程度地轻松使用。
  • 还有很多可能会派上用场。

除了定义cron任务,您还需要一个主管(或任何其他流程经理)。 必须将其配置为运行consume命令。 有关此文档的更多信息。

每当发布消息时,它就会(通过代理)传递给消费者并正在处理中。

我建议使用RabbitMQ经纪人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM