希望得到一些帮助,以理解将Gearman与PHP结合使用(以及其他事项(执行一系列任务的典型最佳实践。
以下是基本方案:
用户通过基于 Web 的界面上传一组图像文件。响应 POST 请求的 php 代码在数据库中为每个文件生成一个条目,列中大多有空条目,为每个作业排队以使用 Gearman 进行分析,生成状态页并退出。
Gearman 工作线程获取文件作业并开始相对长时间运行的分析。该分析的结果是一组参数,需要将其插入回该文件的数据库记录中。
我的问题是,普遍接受的方法是什么?我应该使用一个回调来最终启动一个不同的 php 脚本来执行修改,还是应该由 worker 函数本身进行数据库修改?
所有内容当前都在同一台计算机上运行;我计划使用 Gearman 进行后台调度,而不是通过耕种到不同的机器进行扩展,但无论如何,任何功能都可以连接到数据库,无论它在哪里。
任何想法都值得赞赏;只是在寻找一些关于这通常如何构建以及什么可能被认为是最佳实践的见解。
你确定要使用 Gearman 吗? 我只是问,因为它是大约 15 年前事实上的 PHP 作业服务器,但在相当长的一段时间内一直不是一个可靠的解决方案。 我不确定在过去的12个月里情况是否有了很大的改善,但上次我评估Gearman时,它没有生产能力。
现在,进入问题。
普遍接受的方法是什么?我应该使用一个回调来最终启动一个不同的 php 脚本来执行修改,还是应该由 worker 函数本身进行数据库修改?
对于任何作业队列,您将遵循以下常规模式:
- 收集工作单元。 在您的情况下,它将是其中 1 个图像以及有关该图像所属者、用户 ID 等的任何信息。
- 使用此信息将工作提交到作业队列。
- 作业队列的工作进程选取工作并开始处理它。 这是我在数据库中创建记录的地方,因为您可以选择在作业失败时不创建它们。
- 作业辅助角色(线程(
- 作业工作者(叉子(
- PHP 守护程序示例
- PHP IPC 示例