亚马逊刚刚发布了一份白皮书与代码示例,其中包含了 Amazon Simple Workflow Service 手册。
Amazon Simple Workflow Service(SWF)是:
……面向创造可扩展、弹性应用的工作流服务。不论是金融或者保险应用中的业务流程自动化,构建复杂的数据分析应用,还是管理云基础设施的服务,亚马逊 SWF 能可靠地协调应用中的每个处理步骤。
SWF 的最大优点在于,它是完全管理的服务,用户不需要在硬件或管理维护上进行任何额外的投资,即,不需要进行调优、打补丁或升级。它提供了简单的 API,并允许在 EC2 或任何联网的计算机上执行工作流步骤。SWF 基于轮询(Polling)实现,因此运行在内部(企业内部)的程序可以向 SWF 轮询以获取新的任务。最后,AWS 管理控制台还可以为工作流提供当前状态及执行历史的详细报告。
SWF 的实现要求给新的 / 现有的应用增加决策(decider)代码,该代码通过指定工作顺序、分时、故障条件来定义工作流的协作逻辑。另外还需要实现活动(activities),即用来执行工作流每一步的组件。决策程序和活动组成工作流。一旦决策程序和活动就位,SWF 服务代表应用协调所有工作。
尽管 AWS SWF 有这些优点,但由于缺乏示例和有关实现的最佳实践,搭建 SWF 应用并不是件容易事。亚马逊新发布的白皮书填补了这个空白。该白皮书提供大量工作流模式的实施范例,并提供了实现这些模式的代码。白皮书覆盖了如下几类模式和实现的相关信息:
反复执行某一活动,包括:
- 指定次数循环重复执行某一活动
- 指定次数递归执行异步活动
- 在条件满足的情况下递归执行异步活动
同步执行多个活动,包括:
- 固定数目活动的分支聚合
- 动态决定活动数目的分支聚合
- 分裂多个活动并使用第一个完成的活动的执行结果
工作流逻辑的条件执行,包括:
- 基于条件执行多个活动中的一个活动
- 基于条件执行一个更大群体中的多个活动
人工完成一个活动任务:人工活动实现
异步执行的异常处理:
- 处理异步代码(如活动)产生的异常以及通过 try/catch/finally 清理资源
- 处理其他异步代码调用另一个异步代码产生的异常
重试执行失败的异步代码:
- 重试某项活动直到成功,或者重试达到一定的次数
- 注解一个活动以便框架可以通过使用时间递增重试策略进行自动重试,即,每次重试间隔增长,在达到指定值后停止
- 通过 RetryDecorator 类实现时间递增重试,即在运行时指定重试策略,也可按需修改
- 通过 AsyncRetryingExecutor 类实现指数重试,即允许运行时指定重试策略。另外,白皮书还展示了在实现 run 方法中 AsyncRunnable 抽象的用法,即,在每次重试的时候 AsyncRetryingExecutor 都会要求执行活动。
- 实现定制的重试策略
工作流的信号传送:实现在执行前等待某一信号一定时间的工作流
新发布的 SWF 手册为实现新的定制工作流了提供了了一个绝佳的起点。
查看英文原文: Amazon Provides Simple Workflow Service Recipes
感谢杨赛对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论