【问题标题】:How to optimize speed for multiple CURL get requests in PHP?如何优化 PHP 中多个 CURL 获取请求的速度?
【发布时间】:2016-10-31 18:39:52
【问题描述】:

我正在通过 CURL GET 使用 PHP 连接到 API,我收到了一个包含近 5000 个订单的 json。对于每个订单,我都会进行另一个 CURL GET 并接收订单详细信息(基本上是 2 个 foreach)。之后,我使用 LARAVEL 在数据库中进行了一些插入和更新(基本的东西)。

最大的问题是,对于这 5000 个订单,我的加载时间将近一小时。我需要每晚(超过 5000 个)使用 cron 来完成此操作。

我有一个具有 2GB 内存和 2 个核心处理器的云解决方案。

我也尝试过 Zebra Curl,但不能在 curl 请求中使用它。

【问题讨论】:

  • 1) 这个 CRON 是否必须每天运行一次才能获得 5000?它可以每小时运行一次以获取约 200 个订单吗?我的建议是尽可能让它每小时运行多次,添加到队列中,然后让另一个 CRON 以稳定的速率处理队列。
  • 您可以使用multi-curl一次执行多个下载。
  • 这只是一个拥有 5000 个订单的组织。我需要 40-50 个组织——每晚。这是一个有趣的想法,排队等候约 200 人。 @yergo:第二个 curl 需要第一个 curl 的响应 - 我不能使用 multi-curl。
  • 您可以使用单卷曲下载订单列表,而不是在多卷曲中下载每个请求的特定订单。要么是可行的,要么你提供的信息太少。也许您可以分享一些代码和请求结构,以便我可以进一步提供帮助?
  • 我假设您的 API 请求中有某种标识符,仅返回某个 ID 或时间戳之后的结果。如果是这种情况,那么您可以将其设置为每 15 分钟运行一次,它将抓取大约 50 行。然后你的 CRON 可以每分钟运行一次,每次运行处理 2-3 个。这样一来,处理就分散在一天中,而不是每天进行一次非常紧张的工作。

标签: php api laravel curl optimization


【解决方案1】:

如果 2% 的日常工作(50 个组织中的 1 个)需要将近 4% 的时间,那么您肯定需要并行处理。

有几种解决方案:

  • 为每个组织运行一个 cron 作业。
  • 在 1 次多卷电话中处理多个公司的条目。
  • 使用多台服务器。

我可能会使用第一个:您可以进行一次 cron 作业检查(每分钟?)哪些组织仍需要处理,哪些组织目前正在处理,如果有剩余,则选择一个。

这样,每个作业仍然需要 1 小时,但所有作业都将在每晚 2 小时的时间跨度内处理完毕。

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多