运行 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。
如果您 运行 在云中执行此操作,请确保使用多台微型机器而不是一台重型机器,因为当您有多个可用资源时吞吐量会更好。
我有一个相当大的 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。
如果您 运行 在云中执行此操作,请确保使用多台微型机器而不是一台重型机器,因为当您有多个可用资源时吞吐量会更好。