首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Amazon中,我是否可以滥用决策任务来实际执行这项工作?

在Amazon中,我是否可以滥用决策任务来实际执行这项工作?
EN

Stack Overflow用户
提问于 2013-07-23 19:23:44
回答 2查看 1K关注 0票数 4

我需要Amazon分发一些工作,确保它是异步完成的,确保它以可靠的方式存储,并自动重新启动。但是,我需要的工作流逻辑非常简单:它只是让单个任务执行。

我现在按照应该做的方式来实现它:

  1. 请求工作流执行
  2. 做决定并安排一项活动。
  3. 工作人员查找活动请求,执行结果并返回结果。
  4. Decider注意到一个结果,并将其复制到工作流完成中。

在我看来,我可以让决策者完成工作--就像以前一样--并立即完成工作流的执行。这将照顾到,很多代码的。(活动也可能失败,超时等,所有我目前需要满足的事情。)

因此,回到我的问题:我能有一个决策者来执行工作本身并立即完成“工作流”吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-24 08:13:37

是。实际上,我认为您想出了一个有趣的用例:使用最小的工作流作为分布式系统中一次性操作的集中式锁定机制--比如从多个集群中的单个主机执行cron作业(主机必须首先进行选举,无论哪一个锁成功执行一个操作)。在Amazon和最低代码量方面也可以做到这一点:

一个小型Python示例,使用boto.swf (使用1.From this post来设置域):

要对决定器进行编码:

代码语言:javascript
复制
#MyDecider.py
import boto.swf.layer2 as swf

class OneShotDecider(swf.Decider):

    domain = 'stackoverflow'
    task_list = 'default_tasks'
    version = '1.0'

    def run(self):
        history = self.poll()
        if 'events' in history:
            decisions = swf.Layer1Decisions()
            print 'got the decision task, doing the work'
            decisions.complete_workflow_execution()
            self.complete(decisions=decisions)
            return False
        return True

要开始做决定:

代码语言:javascript
复制
$ ipython -i decider.py
In [1]: while OneShotDecider().run(): print 'polling SWF for decision tasks'

最后,要启动工作流:

代码语言:javascript
复制
$ ipython
In [1]: wf_type = swf.WorkflowType(domain='stackoverflow', name='MyWorkflow', version='1.0', task_list='default_tasks')

In [2]: wf_type.start()
Out[2]: <WorkflowExecution 'MyWorkflow-1.0' at 0x32e2a10>

回到决策窗口,你会看到这样的东西:

代码语言:javascript
复制
polling SWF for decision tasks
polling SWF for decision tasks
got the decision task, doing the work

如果您的工作流可能会发展其业务逻辑或增加活动的数量,那么最好坚持让决策者执行业务逻辑和工作人员解决任务的标准方法。

票数 2
EN

Stack Overflow用户

发布于 2014-10-14 23:28:24

虽然是的,但您可以这样做(正如另一个答案所指出的),在这样做之前有一些事情需要考虑:

  1. 为什么要使用SWF来执行此任务?如果您可以通过更直接地调用您的代码来获得同样的好处,那么为什么要将其设置为工作流并为"StartWorkflow“执行付费呢?如果需要跟踪执行提交和完成情况,只需使用SQS队列即可获得相同的结果。
  2. 您的工作流现在可能非常简单,但随着时间的推移,它们经常会并且确实会变得更加复杂。从长远来看,从一开始就设计它可以节省时间。您是否希望将来的开发人员在您的代码上工作,认为他们应该为工作流添加更多的逻辑?他们会知道如何查找如何使用活动,还是只遵循您已经开始使用的现有模式?(提示-他们可能会复制您的模式-开发人员很懒:)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17819250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档