【问题标题】:schedule tasks same worker using AWS SWF使用 AWS SWF 为同一工作人员安排任务
【发布时间】:2018-01-06 09:18:00
【问题描述】:

我正在用 AWS SWF 编写一个工作流,它有以下步骤:

DownloadFromS3 -> doSomeProcessing -> UploadResults

我的想法是将每个步骤写成不同的任务,让决策者安排每个步骤。问题是,我如何保证接收 doSomeProcessing 的工作人员与下载文件的工作人员相同?我正在运行一个由大约 20 名工人组成的池。

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

PS2:SWF 控制台中有一个示例,它有一个下载和上传任务,但它是用 Java 编写的(我看不懂),而且它似乎是用一个工人编写的。

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

谢谢

【问题讨论】:

  • 旁注:Amazon Simple Workflow 的现代替代方案是 Amazon Step Functions,它为 AWS Lambda 函数提供状态机。可能值得探索。
  • 不是每个工人都是独立的,只是被分配了一项任务吗?你不应该期望某个特定的工人得到一份特定的工作。如果您需要这样的关系,那么只需让一名工作人员完成所有关联的任务,而不是单独调用。

标签: amazon-web-services amazon-swf


【解决方案1】:

您的假设是正确的,您基本上有两种方法来处理它: - 在同一个 SWF 活动任务中包含所有 3 个步骤;这就是我为您描述的情况所做的工作,因为我们认为从 S3 下载/上传到 S3 是“正常工作”的微不足道的事情 - 在 3 个不同的活动任务中拆分步骤;那么您可以保证使用相同节点的唯一方法是更改​​第二个和第三个任务的任务列表;我们也为一些很长的任务这样做,而且效果很好。

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

【讨论】:

    猜你喜欢
    • 2017-02-20
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    相关资源
    最近更新 更多