我正在开发一个消费者网络应用程序,该应用程序需要执行与每个客户请求相关的长时间运行的后台进程。长跑是指1到3分钟之间的任何地方。
这是一个示例流程。对象/小部件并不重要。
- 客户来到站点并指定他们正在寻找的对象/小部件。
- 我们搜索/清理/过滤匹配某些初始条件的小部件。<-- 长时间运行的进程
- 客户进一步配置有关他们正在寻找的小部件的更多详细信息。
- 当长期运行的过程完成后,客户可以完成转换前的最后几个步骤。
第 3 步和第 4 步并不重要。我之所以提到它们,是因为我们可以在进行长期运行的过程中争取一些时间。
我们工作的环境是一个 LAMP 堆栈——目前使用的是 PHP。让长时间运行的进程占用 mod_php(或 fastcgi 进程)中的 apache 线程似乎不是一个好的设计。我们应用程序的 apache 层应该专注于提供内容而不是数据处理 IMO。
几个问题:
- 我们的想法是否正确,我们应该将这个“长期运行”的部分从 apache/web 应用程序层中分离出来?
- 在 Linux/Apache/MySQL/PHP 下是否有标准/典型的方法来解决这个问题(如果合适,我们愿意使用不同的语言进行处理)?
- 关于如何打破它的任何建议?例如,我们是否创建了一个通过 FIFO 队列搅动的守护进程?
编辑:澄清一下,只有大约 1/4 的长期运行过程是以数据库为中心的。我们正在努力优化这部分。我们可能会做一些工作,但我们现在能做的事情是有限的。
谢谢!