我正在开发一个PHP脚本:
Status 200 OK
问题:在高峰时段每秒有1000个请求中有10个:客户端需要等待很长时间才能收到Status 200 OK
。
灵活性:脚本不需要使用计算结果响应客户端。该脚本甚至不需要根据计算的成功/失败来响应Status 200 OK
- 计算可能最终失败并且完全没问题。因此实际计算可能真的在场景后面并行发生。
应该使用哪些工具/包/库/策略来实现PHP上的这种密集请求处理设计?它甚至是PHP方面的东西还是可以从Apache方面解决的?
注意:
Status 200 OK
。 答案 0 :(得分:2)
这是队列的经典用例。在你列出的技术堆栈中,Redis支持队列(查看库的PHP-Resque),或者还有其他可以使用的工具,例如Beanstalkd(我最喜欢的,带有Pheanstalk PHP库)或亚马逊SQS。还有许多其他选项,包括自托管,或作为服务提供。
网站或其他机制接收数据并排队 - 返回200 OK。后端工作者,像基于cron的系统一样简单,或者(更好)多个长时间运行(偶尔重新启动到清理)脚本,从队列中提取项目并执行工作,从而保存结果。
我通过这样的系统实际上运行了数亿个这样的工作。工作人员如果能够到达队列和数据库服务器,甚至不必在同一台机器上运行(我在多台服务器上运行了数十名工作人员)。