amazon-web-services - 在 Amazon SWF 中,我可以滥用决策任务来实际执行工作吗

标签 amazon-web-services amazon-swf

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

我现在按照它应该完成的方式实现它:

  • 请求工作流执行
  • 决策者发现并安排事件
  • 工作人员了解事件请求,执行结果并返回结果
  • 决策者注意到结果并将其复制到工作流完成中

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

    所以回到我的问题:我可以有一个决策者自己执行工作并立即完成“工作流程”吗?

    最佳答案

    是的。实际上,我认为您提出了一个有趣的用例:使用最小工作流作为分布式系统中一次性操作的集中锁定机制 - 例如从多个主机中的单个主机执行的 cron 作业(主机具有首先进行选举,赢得锁的人将执行操作)。使用 Amazon SWF 和最少的代码可以实现相同的效果:

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

    对决策者进行编码:

    #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
    

    启动决策程序:
    $ ipython -i decider.py
    In [1]: while OneShotDecider().run(): print 'polling SWF for decision tasks'
    

    最后,启动工作流程:
    $ 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>
    

    回到决策器窗口,您将看到如下内容:
    polling SWF for decision tasks
    polling SWF for decision tasks
    got the decision task, doing the work
    

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

    关于amazon-web-services - 在 Amazon SWF 中,我可以滥用决策任务来实际执行工作吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17819250/

    相关文章:

    php - 升级运行 Upstart + PHP + SWF 事件脚本直到事件完成

    amazon-web-services - 亚马逊 SWF : at least one worker has to be running, 为什么?

    javascript - AWS Lambda 无法通过 AJAX 工作

    amazon-web-services - AWS Flow Framework 的开源等效项

    amazon-web-services - 我应该如何在 Amazon AWS 中使用新实例自动缩放,包含 WAR 文件和 Tomcat 服务器,因为它是第一个实例?

    amazon-web-services - DynamoDB : List all partition keys

    microservices - 如何在 Netflix Conductor 中向 Task 注册微服务(或其方法)?

    java - Amazon Simple Workflow 和子工作流程

    python - 使用 uvicorn + fastapi 在 AWS EC2 上出现 uvicorn 错误

    ruby - 针对 S3 资源的 AWS 用户权限策略不限制特定用户