我有一个PHP应用程序,目前有5k用户,并将在可预见的未来继续增加。每周一次我运行一个脚本:
此脚本最后一次运行时,由于30秒的最大执行时间错误,它在死亡前仅处理了1400个用户。我想到的一个解决方案是让主脚本仍然获取所有用户,但是它不会执行维护过程本身,而是对一个新脚本进行异步cURL调用(每个用户1个),该脚本将为该脚本执行维护。特别是用户。
我担心的是5k + cURL调用可能会导致服务器崩溃。这可以通过使用消息队列而不是cURL调用来解决吗?我没有使用过的经验,但从我看过的内容看起来似乎有帮助。如果是这样,你会推荐哪种消息排队系统?
一些背景信息:
非常感谢任何建议和帮助。
答案 0 :(得分:2)
如果可能的话,我会做一个更频繁运行的计划任务(cron作业)并使用LIMIT 100
(或其他一些号码)一次处理有限数量的用户。
答案 1 :(得分:2)
一些想法:
set_time_limit()
last_check
添加一个字段,并将该字段设置为针对该用户执行的上一次成功“保养”操作的日期/时间。last_check
字段,可以轻松识别自上次更新以来时间最长的字段,并设置处理频率的阈值。与单个流程相比,设置所有这些可能听起来像很多工作,但它可以让您处理增加的用户量,并为您可能在轨道上看到的任何进一步维护任务奠定坚实的基础。 / p>
答案 2 :(得分:1)
为什么你还没有使用cURL的想法,而是只为每个用户处理一个用户,将一堆用户分成1000个或更多的组。
答案 3 :(得分:0)
您是否考虑过更改逻辑以在处理每个用户时提交更改?听起来您可能正在运行单个事务来处理所有用户,这可能不是必需的。
答案 4 :(得分:0)
如何增加PHP的执行时间限制?
此外,考虑是否可以改善维护程序以使其更快也可以提供帮助。根据你究竟在做什么,你也可以考虑将它扩散一点。偶尔做一对,而不是一次做所有人。但取决于你当然在做什么。