运行 PHP 并发 API 请求使用 Beanstalkd/Gearman

Running concurrent API requests in PHP using Beanstalkd/Gearman

我有一个相当大的 PHP 网络应用程序,它通过许多其他供应商的 API 获取其产品,通常以大型 XML 响应进行解析。目前有 20 家供应商,但这一数字还会进一步增加。

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

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

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

任何建议都很好。

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

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

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