PHP 接收并响应数以千计的请求 - 在幕后进行计算
PHP receive and respond to thousands of requests - do calculations behind the scene
我正在编写一个 PHP 脚本:
- 收到客户请求;
- 通过CPU-and-Time-Intensive-binary-computation
处理请求
- 将计算结果存储到 MySQL 数据库中
- 然后用
Status 200 OK
回复客户
问题:当高峰时段每秒有10000000多个请求进来时:客户端必须等待很长时间才能接收Status 200 OK
。
灵活性:脚本不需要用计算结果来响应客户端。该脚本甚至不需要根据计算的 success/failure 响应 Status 200 OK
- 计算最终可能会失败,这完全没问题。所以实际的计算真的可以在幕后并行发生。
在 PHP 上应该使用什么工具/包/库/策略来实现这种密集的请求处理设计?它甚至是 PHP 方面的问题还是可以从 Apache 方面解决?
备注:
- 运行 Apache,MySQL,PHP,Redis Ubuntu [AMPRU]
- 客户端只需发送请求并立即收到
Status 200 OK
。
- 客户端不会等待请求的计算完成。
- 没有适当的自动缩放或负载平衡概念:它是单个 AMPRU 服务器。
- 如果多个计算可以在幕后并行发生就更好了
这是队列的经典用例。在您列出的技术堆栈中,Redis 支持队列(查看 PHP-Resque 库),或者还有其他可以使用的工具,例如 Beanstalkd(我最喜欢的,具有Pheanstalk PHP 库)或 Amazon SQS。还有许多其他选项,既可以自托管,也可以作为服务提供。
网站或其他机制接收数据,并将其排队 - 返回 200 OK。后端工作人员,就像基于 cron 的系统一样简单,或者(更好的)多个 long-运行ning(偶尔重新启动以清理)脚本,从队列中提取项目并执行工作,节省结果。
通过这样的系统,我确实 运行 有数亿个这样的工作。工作人员,如果他们可以访问队列和数据库服务器,甚至不必 运行 在同一台机器上(我 运行 在尽可能多的服务器上部署了数十名工作人员)。
我正在编写一个 PHP 脚本:
- 收到客户请求;
- 通过CPU-and-Time-Intensive-binary-computation 处理请求
- 将计算结果存储到 MySQL 数据库中
- 然后用
Status 200 OK
回复客户
问题:当高峰时段每秒有10000000多个请求进来时:客户端必须等待很长时间才能接收Status 200 OK
。
灵活性:脚本不需要用计算结果来响应客户端。该脚本甚至不需要根据计算的 success/failure 响应 Status 200 OK
- 计算最终可能会失败,这完全没问题。所以实际的计算真的可以在幕后并行发生。
在 PHP 上应该使用什么工具/包/库/策略来实现这种密集的请求处理设计?它甚至是 PHP 方面的问题还是可以从 Apache 方面解决?
备注:
- 运行 Apache,MySQL,PHP,Redis Ubuntu [AMPRU]
- 客户端只需发送请求并立即收到
Status 200 OK
。 - 客户端不会等待请求的计算完成。
- 没有适当的自动缩放或负载平衡概念:它是单个 AMPRU 服务器。
- 如果多个计算可以在幕后并行发生就更好了
这是队列的经典用例。在您列出的技术堆栈中,Redis 支持队列(查看 PHP-Resque 库),或者还有其他可以使用的工具,例如 Beanstalkd(我最喜欢的,具有Pheanstalk PHP 库)或 Amazon SQS。还有许多其他选项,既可以自托管,也可以作为服务提供。
网站或其他机制接收数据,并将其排队 - 返回 200 OK。后端工作人员,就像基于 cron 的系统一样简单,或者(更好的)多个 long-运行ning(偶尔重新启动以清理)脚本,从队列中提取项目并执行工作,节省结果。
通过这样的系统,我确实 运行 有数亿个这样的工作。工作人员,如果他们可以访问队列和数据库服务器,甚至不必 运行 在同一台机器上(我 运行 在尽可能多的服务器上部署了数十名工作人员)。