Amazon Simple Workflow Service 资源 - Amazon Simple Workflow Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Simple Workflow Service 资源

本章提供了使用 Amazon SWF 开发工作流时需要的其他资源和参考信息。

Amazon SWF 超时类型

为确保工作流执行正确运行,您可以通过 Amazon SWF 设置不同类型的超时。一些超时指定工作流程的总运行时长。其它超时指定活动任务在被分配给工作程序之前所花费的时间以及从排定到完成所花费的时间。Amazon SWF API 中的所有超时都以秒为单位。Amazon SWF 还支持将字符串 NONE 作为超时值,表示没有超时。

对于与决策任务和活动任务相关的超时,Amazon SWF 会在工作流执行历史中添加一个事件。事件的属性提供了所发生超时类型的信息以及以及受影响的决策任务或活动任务。Amazon SWF 还会计划决策任务。当决策者收到新的决策任务时,它将在历史记录中看到超时事件,并通过调用操作来采取适当的RespondDecisionTaskCompleted行动。

任务被视为从排定时开始到其关闭为止都处于开启状态。因此,当工作程序处理任务时,任务被报告为开启状态。当工作程序将任务状态报告为已完成已取消失败时,任务关闭。Amazon SWF 也可能会因超时而关闭任务。

工作流程和决策任务中的超时

下图显示工作流程和决策超时如何与工作流程的生命周期相关:

工作流程的生命周期,具有超时。

与工作流程和决策任务相关的超时类型有两个:

  • 工作流启动到关闭 (timeoutType: START_TO_CLOSE) - 该超时指定了完成工作流执行所需的最长时间。工作流程注册期间,这一超时被设置为默认值,但当工作流程启动时,可用其它值覆盖该默认值。如果超过此超时时间,Amazon SWF 将关闭工作流程执行并在工作流程执行历史中WorkflowExecutionTimedOut添加类型的事件。除了 timeoutType 之外,事件属性还会指定对此工作流程执行有效的 childPolicy。子策略指定上级工作流程执行超时或终止时子工作流程执行的处理方法。例如,如果 childPolicy 被设置为 TERMINATE,则子工作流程执行将被终止。一旦工作流程执行超时,则不能对其执行可视性调用之外的其他任何操作。

  • 决策任务启动到关闭 (timeoutType: START_TO_CLOSE) – 该超时指定了相应决策程序完成决策任务所需的最长时间。该超时在工作流程类型注册期间设置。如果超过此超时时间,则该任务将在工作流程执行历史中标记为超时,Amazon SWF 会在工作流程历史记录中添加DecisionTaskTimedOut类型的事件。当此决策任务被排定 (scheduledEventId) 且启动 (startedEventId) 时,事件属性中将包含对应事件的 ID。除了添加事件外,Amazon SWF 还会计划新决策任务以警告决策程序此决策任务已超时。此超时发生后,使用 RespondDecisionTaskCompleted 完成超时决策任务的尝试将失败。

活动任务中的超时

下图显示超时如何与活动任务的生命周期相关:

任务的生命周期,具有超时

与活动任务相关的超时类型有四个:

  • 活动任务启动到关闭 (timeoutType: START_TO_CLOSE) – 该超时指定了活动工作线在接收到任务后处理任务所需的最长时间。尝试使用RespondActivityTaskCanceledRespondActivityTaskCompleted和关闭超时活动任务RespondActivityTaskFailed将失败。

  • 活动任务检测信号 (timeoutType: HEARTBEAT) – 该超时指定了任务在通过 操作提供其进程前可以运行的最长时间。

  • 活动任务计划到开始 (timeoutType: SCHEDULE_TO_START) – 该超时指定了在没有工作线执行活动任务时 Amazon SWF 在活动任务超时前等待的时间。一旦超时,过期的任务就不能分配给另一工作程序。

  • 活动任务安排到关闭 (timeoutType: SCHEDULE_TO_CLOSE) – 该超时指定了任务从计划到完成所需的时间。作为最佳实践,此值不应大于任务 schedule-to-start 超时和任务超时之和。 start-to-close

注意

每一个超时类型都有默认值,一般设置为 NONE (无限)。但是任何活动执行的最长时间均被限制为一年。

您在活动类型注册期间设置这些活动的默认值,但当您排定活动任务时您可以用新值覆盖默认值。当其中一个超时发生时,Amazon SWF 将在工作流程历史记录中添加一个ActivityTaskTimedOut类型的事件。此事件的 timeoutType 值属性将指定发生了何种超时。对于其中每一个超时,timeoutType 的值都显示在括号中。当活动任务被排定 (scheduledEventId) 且启动 (startedEventId) 时,事件属性中还将包含对应事件的 ID。除了添加事件外,Amazon SWF 还会计划新决策任务以警告决策程序已发生超时。

Amazon Simple Workflow Service 端点

Amazon Web Services 一般参考 中提供了当前 Amazon SWF 区域和端点的列表,以及其他服务的端点。

Amazon SWF 域及所有相关工作流和活动必须在同一区域中才能互相通信。此外,一个区域中的任何已注册域、工作流程和活动不存在于其他区域中。例如,如果您在 us-east-1 和 us-west- 2 中都创建了一个名为 “MySampleDomain” 的域,则它们作为单独的域存在:与您的域名关联的所有工作流程、任务列表、活动或数据都不会跨区域共享。

如果您在工作流程中使用其他 Amazon 资源,例如 Amazon EC2 实例,则这些资源也必须与您的 Amazon SWF 资源位于同一区域。唯一的例外是跨区域的服务,如 Amazon S3 和 IAM。在任何支持这些服务的区域中,您都可以从工作流程访问这些服务。

Amazon Simple Workflow Service 的其他文档

除了本开发人员指南之外,以下文档也很有用。

Amazon Simple Workflow Service API Reference

Amazon Simple Workflow Service API Reference 提供了有关 Amazon SWF HTTP API 的详细信息,包括操作、请求和响应结构以及错误代码。

Amazon Flow Framework 文档

Amazon Flow Framework 是一个编程框架,能够简化使用 Amazon SWF 管理其工作流和活动的分布式异步应用程序的实现过程,以便您能够集中精力实现您的工作流逻辑。

每种语言 Amazon Flow Framework 都按照其设计语言的惯用语进行设计,因此您可以自然地使用自己选择的语言来实现具有 Amazon SWF 所有优势的工作流程。

有一个适用于 Java 的 Amazon 流程框架。Amazon Flow Framework 适用于 Java 的《开发人员指南》提供了有关如何获取、设置和使用 Amazon Flow Framework 适用于 Java 的信息。

Amazon 软件开发工具包文档

Amazon 软件开发套件 (SDK) 提供多种不同编程语言的 Amazon SWF 访问权限。这些 SDK 与 HTTP API 密切配合,但也为一些 Amazon SWF 功能提供了特定语言的编程接口。您可以访问以下链接了解有关每个软件开发工具包的更多信息。

注意

此处仅列出了在编写时支持 Amazon SWF 的 SDK。有关可用 Amazon 软件开发工具包的完整列表,请访问亚马逊 Web Services 工具页面。

Java

为 Amazon 基础设施服务 Amazon SDK for Java 提供了 Java API。

要查看可用文档,请参阅 Amazon SDK for Java Documentation 页面。您也可以通过访问以下链接直接转到 SDK 参考中的 Amazon SWF 部分:

JavaScript

Amazon SDK for JavaScript 允许开发人员使用浏览器或服务器上的 Node.js 应用程序内部提供的简单的 easy-to-use API 来构建利用 Amazon 服务的库或应用程序。

要查看可用文档,请参阅 Amazon SDK for JavaScript Documentation 页面。您也可以通过访问此链接直接转到 SDK 参考中的 Amazon SWF 部分:

.NET

Amazon SDK for .NET 是一个可下载的单一软件包,其中包括 Visual Studio 项目模板、 Amazon .NET 库、C# 代码示例和文档。 Amazon SDK for .NET 这使得 Windows 开发人员可以更轻松地为 Amazon SWF 和其他服务构建.NET 应用程序。

要查看可用文档,请参阅 Amazon SDK for .NET Documentation 页面。您也可以通过访问以下链接直接转到 SDK 参考中的 Amazon SWF 部分:

PHP

为 Amazon SWF Amazon SDK for PHP 提供了 PHP 编程接口。

要查看可用文档,请参阅 Amazon SDK for PHP Documentation 页面。您也可以通过访问此链接直接转到 SDK 参考中的 Amazon SWF 部分:

Python

为亚马逊 SWF Amazon SDK for Python (Boto) 提供了 Python 编程接口。

要查看可用文档,请参阅 boto: A Python interface to Amazon Web Services 页面。您也可以通过访问以下链接直接转到文档中的 Amazon SWF 部分:

Ruby

为 Amazon SWF Amazon SDK for Ruby 提供了 Ruby 编程接口。

要查看可用文档,请参阅 Amazon SDK for Ruby Documentation 页面。您也可以通过访问此链接直接转到 SDK 参考中的 Amazon SWF 部分:

Amazon CLI 文档

Amazon Command Line Interface (Amazon CLI) 是用于管理您的 Amazon 服务的统一工具。只需下载和配置一个工具,您就可以从命令行控制多项 Amazon 服务,并通过脚本自动执行这些服务。

有关更多信息 Amazon CLI,请参阅Amazon Command Line Interface页面。

有关 Amazon SWF 可用命令的概述,请参阅《Amazon CLI Command Reference》中 的 swf

Amazon Simple Workflow Service 的 Web 资源

您可以使用多种 Web 资源来了解有关 Amazon SWF 的更多信息,或者获取有关使用该服务和开发工作流方面的帮助。

Amazon SWF 论坛

Amazon SWF 论坛为您提供了一个与其 Amazon SWF 开发人员和 Amazon SWF 开发团队成员交流的场所,以便您提出问题并获得答案。

您可以通过访问该论坛,地址为:Forum: Amazon Simple Workflow Service

Amazon SWF 常见问题

“Amazon SWF 常见问题”提供了有关 Amazon SWF 的常见问题的答案,包括常见使用案例的概述、Amazon SWF 与其他服务的区别等。

您可在此处访问常见问题:Amazon SWF 常见问题

Amazon SWF 视频

上的 Amazon Web Services 频道为包括亚马逊 SWF 在内的所有亚马逊网络服务 YouTube提供视频培训。要查看亚马逊 SWF 相关视频的完整列表,请使用以下查询:亚马逊 Web Services 中的简单工作流程

Ruby Flow 的迁移选项

fo Amazon Flow Framework r Ruby 的版本已不再处于积极开发阶段。现有代码仍将无限期继续运行,但不会再有新功能或新版本。本主题将介绍继续使用 Amazon SWF 的使用和迁移选项,以及有关如何迁移到 Step Functions 的信息。

选项 描述

继续使用 Ruby Flow Framework

目前,Ruby Flow Framework 将继续使用。如果您不执行任何操作,您的代码将继续按现有方式运行。计划在不久的将来迁移出 Amazon Flow Framework 适用于 Ruby 的。

迁移到 Java Flow Framework

Java Flow Framework 仍在进行积极开发,并将继续收到新功能和更新。

迁移到 Step Functions

Step Functions 可通过由状态机控制的可视化工作流程,来协调分布式应用程序的组件。

直接使用 SWF API,无需 Flow Framework 您可以直接使用 SWF API 继续在 Ruby 中工作,而无需使用 Ruby Flow Framework。

无论对于 Ruby 还是 Java,Flow Framework 提供的优势均在于,可让您专注于工作流程逻辑。该架构可处理大多数通信和协作的详细信息,并将某些复杂问题抽象化。您可以通过迁移到 Java Flow Framework 来继续使用相同级别的抽象,也可以直接与 Amazon SWF SDK 交互。

继续使用 Ruby Flow Framework

在 Amazon Flow Framework 短期内,for Ruby 将继续像现在一样发挥作用。如果您在 Ruby 中编写了 Amazon Flow Framework 工作流程,那么这些工作流程将继续起作用。在没有更新、支持或安全修复的情况下,您最好制定明确的计划,以便在不久的将来从适用于 Ruby 的 Amazon Flow Framework 迁移出来。

迁移到 Java Flow Framework

Amazon Flow Framework 适用于 Java 的将继续积极开发中。从概念上讲,for Java 与 Ruby 类似:您仍然可以专注于工作流程逻辑,该框架将有助于管理您的决策者逻辑,并将使 Amazon SWF 的其他方面更易于管理。 Amazon Flow Framework Amazon Flow Framework

迁移到 Step Functions

Amazon Step Functions 提供的服务与 Amazon SWF 类似,但您的工作流程逻辑由状态机控制。借助 Step Functions,您可以使用可视化工作流来协调分布式应用程序和微服务的组件。您可通过能执行离散函数(或称为任务)的各单独组件构建应用程序,这样您能够快速扩展和更改应用程序。Step Functions 提供了一种可靠的方法来协调组件并逐步执行应用程序的函数。图形控制台可将应用程序的组件直观地展示为一系列步骤。它可以自动触发和跟踪各个步骤,并在出现错误时重试,因此您的应用程序每次都能按照预期顺序执行。Step Functions 会记录每个步骤的状态,这样在出现错误时,您就能够迅速诊断并调试问题。

在 Step Functions 中,您可以使用声明性 JSON 编写的状态机来管理各项任务的协调,该状态机是使用 Amazon States Language 定义的。通过使用状态机,您不必编写和维护决定程序来控制您的应用程序逻辑。Step Functions 提供了一种直观、高效且敏捷的方法来使用可视化工作流协调应用程序组件。你应该考虑在所有新应用程序中使用,Step Functions Amazon Step Functions 为你目前在 for Ruby 中实现的工作流程提供了一个很好的迁移平台。 Amazon Flow Framework

为了帮助您将任务迁移到 Step Functions,同时继续利用 Ruby 语言技能,Step Functions 提供了一个 Ruby 活动工作线程示例。该示例采用了实现活动工作线程的最佳实践,可用作将任务逻辑迁移到 Step Functions 的模板。有关更多信息,请参阅《Amazon Step Functions Developer Guide》https://docs.amazonaws.cn/step-functions/latest/dg/中的 Example Activity Worker in Ruby

注意

对于许多客户来说,从 for Ruby 迁移到 Step Amazon Flow Framework Functions 是最佳选择。但是,如果您要求信号干预您的进程,或者需要启动将结果返回给父进程的子进程,请考虑直接使用 Amazon SWF API,或者迁移到 for Java Amazon Flow Framework 的。

有关更多信息 Amazon Step Functions,请参阅:

直接使用 Amazon SWF API

虽然 f Amazon Flow Framework or Ruby 可以管理亚马逊 SWF 的某些复杂性,但你也可以直接使用亚马逊 SWF API。直接使用 API 可通过构建工作流程使您完全控制任务的执行和协作,无需担心跟踪任务进度和维持任务状态等底层复杂性。