使用 php 和 cron 扩展 curl

Scaling curl with php and cron

我正在尝试使用 PHP 创建一个网站监控网络应用程序。目前,我正在使用 curl 从不同的网站收集 headers 并在网站状态发生变化时更新 MySQL 数据库(例如,如果 'up' 的网站变为 'down' ).

我正在使用 curl_multi(通过我稍微调整过的 Rolling Curl X class)并行处理 20 个站点(这似乎给出了最快的结果)并且CURLOPT_NOBODY 以确保仅收集 headers 并且我已尝试简化脚本以使其尽可能快。

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

那么我该如何缩放呢?是否可以并行 运行 多个 cron,或者这 运行 会变成 bottle-necking 问题吗?

我突然想到我可以将数据库分成 400 个组,运行 为这些组编写一个单独的脚本(例如 ID 1-400、401-800、801- 1200 等可以 运行 分隔脚本)所以不会有数据库损坏的危险。这样每个脚本都会在一分钟内完成。

但是感觉这可能行不通,因为一个脚本 运行ning curl_multi 似乎在并行处理 20 个请求时达到了性能最大化。那么这会奏效还是有更好的方法?

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

例如。 crontab 列表
* * * * * php /user/script.php 1 400
* * * * * php /user/script.php 401 800

或者使用单个脚本,您可以触发多线程(PHP 中的多线程与 pthreads)。但是cron间隔应该以完成800个站点为基准。

参考:How can one use multi threading in PHP applications

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