使用AWS SWF安排任务相同的工作人员

时间:2017-07-30 21:55:05

标签: amazon-web-services amazon-swf

我正在AWS SWF中编写工作流程,并且它具有以下步骤:

DownloadFromS3 - > doSomeProcessing - > UploadResults

我的想法是将每个步骤编写为不同的任务,让决策者安排每个步骤。问题是,我怎样才能保证收到doSomeProcessing的worker与下载文件的worker相同?我正在运行一个大约20名工人的池子。

PS1:我知道我可以为每个工作人员创建一个不同的任务列表并将任务单独分配给他们,但这对我来说似乎是一个黑客而不是一个正确的解决方案。

PS2:在SWF控制台中有一个示例,它有一个下载和上传任务,但它是用Java编写的(我无法理解),而且它似乎是在考虑单个工作者的情况下编写的。

PS3:我目前正在使用Go编写的服务器执行所有3个步骤并管理其间的状态。但是,将状态管理卸载到SWF中的决策器会很好,因为doSomeProcessing不是一项简单的任务(工程CFD模拟),并且很多事情都可能出错。

由于

1 个答案:

答案 0 :(得分:2)

你的假设是正确的,你基本上有两种方法可以解决这个问题: - 要么在同一个SWF活动任务中拥有所有3个步骤;这就是我为你所描述的案例所做的工作,因为我们认为从上传/上传到S3是“只是工作”的微不足道的事情 - 在3个不同的活动任务中分开步骤;那么你可以保证使用同一节点的唯一方法是改变第二和第三个任务的任务列表;我们也做了很长时间的任务,而且效果很好。

第二个选项实际上不是hack,你不创建任何对象,它只是一个路由机制。我认为唯一的缺点是,当他们像这样动态时,你没有本地方法来检查积压在给定任务列表中是否过于重要,因为你没有本地方式来列出这些任务列表。这可以通过包装系统来处理,或者您可以依靠超时在节点无法跟上时提醒自己。