亚马逊网络服务-如何使用PHP集成AWS SWF,以便从用户界面进行管理


amazon web services - How to integrate AWS SWF using PHP so it can be managed from a user interface?

我正在使用LAMP构建一个CMS,允许管理员将MP4上传到Amazon S3 Bucket,使用Elastic Transcoder转换多次,并更新本地数据库,以便使用Cloud Front交付。

现在,每一步都按预期进行,一个简单的SWF工作流将其连接起来(只要我从命令行启动启动器、决策器和活动工作者,就像我在各地的示例中看到的那样)。

然而,我很难用一个用户界面将这些部分连接在一起:

  • 当用户开始上传时,启动工作流并使用pcntl_exec启动决策者和活动工作者是正确的方法吗?有其他选择吗
  • 活动工作者和决策者完成了每项任务的执行,因此他们必须再次启动以进行下一个决策或活动,工作流启动者会负责每次启动工作者吗?还是我遗漏了什么
  • 如果1.2.正朝着正确的方向发展,那么在UI中实现反馈应该很简单,使用AJAX调用来检查数据库中记录的状态,这些记录将在每个步骤中更新。否则,还有更好的方法吗

编辑:有些人可能会觉得这很有用,在第2点:

  • http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dg-develop-activity.html

对活动工作者进行编程,使其在完成手头的任务后轮询另一个活动任务。这会创建一个循环,活动工作者在其中不断轮询并完成任务。

不过,在决策者安排活动任务之前,这些民意调查会超时,没有任务,你的员工只会继续进行民意调查。

  • http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dg-dev-deciders.html

如果没有可用的决策任务,AmazonSWF会保持连接打开长达60秒,并在任务可用时立即返回任务。如果没有可用的任务,Amazon SWF会返回一个空响应[…]如果收到空响应,请确保对您的决策器进行编程,以轮询另一个任务。

我建议永久独立于web服务器进程运行活动和决策器工作程序。您可以将它们作为守护程序启动。他们应该循环轮询新任务,并根据您的逻辑进行处理。因此,在任务执行完成后,无需再次启动它们。

工作流实例是从Web服务器进程启动的,因为启动它们是一个相对快速的调用,不需要等待工作流执行完成。

在UI中实现反馈通常是通过Web服务器对特殊活动类型(如"UIFeedback")进行代码轮询来完成的。当工作流需要通知UI某件事时,它会调度此活动,该活动将传递到Web服务器,Web服务器将活动输入数据转发到AJAX代码。