我使用PHP,并且有10项需要运行的任务。它们中的每一个都不应超时,但是所有10个任务都可能超时。
在新的http请求中使用模块化方法是否是一个好的解决方案?
像这样的东西:
http://example.com/some/module/fetch
http://example.com/some/module/parse
http://example.com/some/module/save
也许这些url各自执行一项任务。如果成功,请执行该任务的下一个任务。一种连锁反应。一个路径调用下一个路径(卷曲)。
利弊?这是一个好方法吗?如果没有,还有什么更好的选择?
模块化方法是一个好主意(如果一个“单元”失败,工作将按您的意愿停止;另外,调试/测试每个单独的单元也更简单)。
它将起作用,但是您的链接方法存在一些问题:
为了获得更多控制,您应该使用排队系统进行此类操作。
使用PHP(实际上是任何语言),您的基本过程是:
每个“单元”都是一个永无休止的不断循环的php脚本*
每个“单元”过程都监听一个排队系统;当作业到达它可以处理的队列时,它将其从队列中移出
当每个单元完成作业时,它确认已处理并推送到下一个队列。
如果单位决定该作业不应该继续,请确认已处理该作业,但不要推送到下一个队列。
好处:
关于“不断循环PHP”的旁注:这是通过将max_execution_time设置为“ 0”来完成的。确保您不会引起“内存泄漏”并保持干净。您可以在启动时自动启动该过程(取决于操作系统,是systemd或任务计划程序),也可以手动运行以进行测试。如果您不希望它连续循环,请在5分钟后超时并重新启动cron / task Scheduler。
关于队列的旁注:对于简单的应用程序,您可以使用内存高速缓存数据库“自己动手”(例如,使用数据库系统可以轻松地每小时在队列中处理100,000个项目),但是避免冲突/管理状态/重试有点一门艺术。更好的选择是RabbitMQ(https://www.rabbitmq.com/)。安装有点麻烦,但是一旦安装它,请按照PHP教程进行操作,您将永远不会回头!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句