用于数据库修改的典型Gearman流是什么?

问题描述 投票:1回答:1

[在理解Gearman与PHP结合使用(其中包括其他功能)的一系列任务时,将有助于理解典型的最佳实践。

这里是基本情况:

用户通过基于Web的界面上传一组图像文件。响应POST请求的php代码会在数据库中为每个文件生成一个条目,其中大多数列中都为空条目,为每个文件排队以使用Gearman进行分析的作业,生成状态页并退出。

Gearman工作者获得了一份文件的工作,并开始了相对长期的分析。分析的结果是一组参数,需要将这些参数重新插入该文件的数据库记录中。

我的问题是,这样做的普遍接受的方法是什么?我应该使用一个回调程序,该回调程序最终将启动另一个将要进行修改的php脚本,还是应由worker函数本身来进行数据库修改?

当前所有内容都在同一台计算机上运行;我正在计划使用Gearman进行后台调度,而不是通过将其扩展到其他计算机进行扩展,但是无论如何,无论在何处,任何功能都可以连接到数据库。

任何想法都受到赞赏;只是寻找一些有关通常如何组织结构以及什么可以被视为最佳实践的见解。

php gearman
1个回答
0
投票

您确定要使用Gearman吗?我只问这是因为它是大约15年前的事实上的PHP作业服务器,但在相当长的一段时间内一直不是可靠的解决方案。我不确定在过去的12个月中情况是否有明显改善,但是我上次评估Gearman时,它没有生产能力。

现在,开始讨论问题。

什么是普遍接受的方法?我应该使用一个回调程序,该回调程序最终将启动另一个将要进行修改的php脚本,还是应由worker函数本身来进行数据库修改?

您将在任何作业队列中遵循此常规模式:

  • 收集工作单元。您的情况将是其中一张图片,以及该图片所属的任何信息,用户ID等。
  • 使用此信息将工作提交到作业队列。
  • Job Queue的工作进程处理了该工作,并开始对其进行处理。这是我在数据库中创建记录的位置,因为您可以选择在作业失败时不创建记录。

作业队列将跟踪已完成的作业以及通常的完成状态。如果您使用的是Gearman,则这是Gearmand的过程。您还需要一些接送工作和可以执行的过程,我将其称为工作工作者。并发发生的地方是工作人员,这是我认为您所说的“启动另一个php脚本”时所指的内容。您只需隔一定时间就可以启动PHP脚本(与主管或cronjob一起使用),以进行轮询和分叉。这不是最有效的方法,但听起来似乎对您的应用程序用例并不重要。您还可以在PHP中使用pcntl_fork或pthreads来获得对并发进程的更多控制并实现工作池模式,但是它比触发脚本要复杂得多。如果您有兴趣尝试在PHP中实现一些并发性,那么我可以在GitHub上找到beantalkd的概念验证作业工人,该工人同时使用fork和pthreads实现工人池。我还提供了关于并发的其他一些资源。

© www.soinside.com 2019 - 2024. All rights reserved.