2017-02-27 51 views
0

我正在尝试使用PHP创建网站监控webapp。当我使用curl从不同网站收集标题并在网站状态发生变化时更新MySQL数据库(例如,如果某个网站已'停机')。使用PHP和cron缩放卷曲

我正在使用curl_multi(通过我稍微改编的Rolling Curl X类)来并行处理20个网站(这似乎给出了最快的结果)和CURLOPT_NOBODY以确保只收集标题,并且尝试过简化脚本以尽可能快地完成脚本。

它工作正常,我可以处理约40个网站。 2-4秒。我的计划是每分钟通过cron运行脚本......所以看起来我能够每分钟处理大约600个网站。虽然这在当前很好,但从长远来看还不够。

那么我该如何扩展呢?是否有可能并行运行多个cron,还是会遇到瓶颈问题?

我想我可能会将数据库分成400组,并为这些组运行单独的脚本(例如,ids 1-400,401-800,801-1200等可以运行单独的脚本),因此不会有数据库损坏的危险。这样每个脚本将在一分钟内完成。

但是感觉这可能不起作用,因为一个运行curl_multi的脚本似乎在20个并发请求中性能最大。那么这项工作还是有更好的方法?

回答

0

是的,简单的解决方案是使用相同的PHP CLI脚本并传递参数1和2,即表示处理db记录的最小和最大范围包含每个站点信息。

Ex。 crontab的列表
* * * * * PHP /user/script.php 1 400
* * * * * PHP /user/script.php 401 800

或者用简单的脚本,可以触发多线程(用pthreads在PHP中进行多线程)。但克隆间隔时间应以800个站点的完成基准为基础。

Ref:How can one use multi threading in PHP applications

Ex。脚本多线程在3分钟内完成 然后给出*/3的间隔。

+0

谢谢 - 这是一个很大的帮助。我不认为我可以使用pthreads,因为“pthreads扩展名不能在Web服务器环境中使用”,并且这是在Web服务器上。 – Ryan