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