【发布时间】:2011-03-31 14:21:19
【问题描述】:
考虑一个 PHP Web 应用程序,其目的是接受用户请求以启动通用异步作业,然后创建一个工作进程/线程来运行该作业。这些作业不是特别占用 CPU 或内存,但预计会经常阻塞 I/O 调用。每秒启动的作业不应超过一到两个,但由于运行时间较长,可能同时运行许多作业。
因此,并行运行作业至关重要。此外,每个作业都必须由负责杀死挂起的工作人员、根据用户请求中止工作人员等的管理器守护进程进行监控。
实施此类系统的最佳方法是什么?我可以看到:
- 从经理那里分派一个工人 - 这似乎是最低级别的选项,我必须自己实施一个监控系统。 Apache 是 Web 服务器,因此该选项似乎需要通过 FastCGI 启动任何 PHP 工作程序。
- 使用某种作业/消息队列。 (gearman、beantalkd、RabbitMQ 等) - 最初,这似乎是显而易见的选择。经过一些研究,我对所有选项都有些困惑。例如,Gearman 看起来像是为大型分布式系统设计的,其中有固定的工人池……所以我不知道它是否适合我的需要(每个工作一个工人)。
【问题讨论】:
标签: php asynchronous message-queue task-queue gearman