【问题标题】:Running concurrent API requests in PHP using Beanstalkd/Gearman使用 Beanstalkd/Gearman 在 PHP 中运行并发 API 请求
【发布时间】:2015-04-27 20:34:28
【问题描述】:

我有一个相当大的 PHP Web 应用程序,它通过他们的 API 从许多其他供应商那里获取其产品,通常响应一个大的 XML 来解析。目前有 20 家供应商,但这将进一步增加。

我们当前的设置使用 multi curl 来发出请求,这需要大约 30-40 秒才能完成,而且时间太长。该脚本在后台运行,而前端轮询数据库以查找结果,然后在它们进入时显示它们。

为了改进这个过程,我们考虑使用作业服务器在后台运行,每个供应商请求都是一个单独的作业。我们已经看到 beantalkd 和 Gearman 被提及。

那么我们是否在寻找正确的方向,例如,工作服务器是正确的方式吗?我们正在考虑尽快进行一些促销活动,以便我们可以让 200 多个用户同时搜索 30 个供应商,因此如果我们必须进行负载平衡,正确的选择需要很好地扩展。

任何建议都非常棒。

【问题讨论】:

  • 后台作业,用于处理多个源,以及大量缓存以避免多次执行相同的工作(至少在基础数据发生变化之前)。然后前端将轮询缓存以获取产品详细信息。

标签: php performance curl gearman beanstalkd


【解决方案1】:

您可以使用 Beanstalkd,因为您可以自定义作业的优先级和 TTR time-to-resolve,默认为 60 秒,但对于您的场景,您必须增加它。 Beanstalkd 有一个不错的 admin console panel

您还应该利用多个 Curl 调用,因此您应该使用并行请求。为了使用 Keep-alive,您还需要维护一个 CURL 句柄池并保持它们温暖。见high performance curl tips。您还需要调优Linux network stack

如果您在云中运行,请确保使用多台微型机器而不是一台重型机器,因为当您有多个可用资源时吞吐量会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 2022-10-24
    • 2019-03-25
    • 2011-10-15
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多