

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

# 使用 Amazon SWF 开发工作流程组件
<a name="intro"></a>

开发分布式应用程序需要协调许多组件，并处理远程通信固有的延迟和不可靠性。

借助 Amazon Simple Workflow Service (Amazon SWF)，您可以通过提供编程模型和基础设施来协调分布式组件并以可靠的方式维护其执行状态，从而开发异步和分布式应用程序。借助 Amazon SWF，您可以专注于构建令应用程序与众不同的功能。

## 工作流程的组成部分
<a name="swf-dev-overview-concepts"></a>

[工作流程的组成部分工作流程组件](#swf-dev-overview-concepts)*Amazon SWF 中的基本概念是工作流程。*工作流程是一组开展一些目标的*活动*，以及协作这些活动的逻辑。例如，工作流程可以接收客户订单，并采取任何必要的措施来履行订单。

 每个工作流程都在名为域的资源中运行，该*域*控制着工作流程的范围。一个 AWS 账户可以有多个域，每个域可以包含多个工作流，但不同域中的工作流不能交互。

在设计 Amazon SWF 工作流程时，您需要定义每项必需的活动。然后将每个活动作为一个活动类型在 Amazon SWF 中注册。您将提供名称、版本和超时值。例如，客户可能期望订单在 24 小时内发货。

工作流程执行过程中，有些活动可能需要执行多次，可能要用不同的输入。例如，在客户订购工作流程中，您可能要执行一个处理已购买项目的活动。如果客户购买了多件商品，则该活动必须运行多次。Amazon SWF 有*活动任务*的概念，表示对活动的一次调用。在我们的示例中，每一个项目的处理都可以用一个活动任务表示。

*活动工作人员*是一个接收活动任务、执行活动任务并提供结果的程序。该任务实际上可能由一个人执行。例如，统计分析师可能会收到一组数据，对数据进行分析，然后将分析结果发送回去。

活动任务以及执行这些任务的活动工作人员可以同步或异步运行。工作人员可以在一个地点运行，也可以分布在多台计算机上，可能位于不同的地理区域。不同的活动工作程序可以用不同的编程语言编写，且可运行在不同的操作系统上。例如，一个活动工作人员可能在亚洲的服务器上运行，而另一个活动工作人员可能在北美的移动设备上运行。

工作流程中的协作逻辑包含在被称为*决策程序*的软件程序中。决策者安排活动任务，向活动工作人员提供输入，处理在工作流程进行时到达的事件，并在目标实现后结束（或关闭）工作流程。

Amazon SWF 服务的角色可以充当一个可靠的中央枢纽，决策程序、活动工作线程和其他相关实体（如工作流管理人员）可以通过它来交换数据。Amazon SWF 还将维护每个工作流执行的状态，这样，您的应用程序就不必持久存储状态。

决策程序会接收 Amazon SWF 的决策任务并将决策结果反馈给 Amazon SWF，以此来管理工作流。决策代表一个或一组操作，它们是工作流程中的后续步骤。一般的决策为排定活动任务。决策还可用于通过计时器延迟任务、请求取消正在进行的任务以及完成工作流程。

活动工作线程和决策程序接收任务（分别为活动任务和决策任务）的机制是轮询 Amazon SWF 服务。

Amazon SWF 向决策程序告知工作流的状态，其中包括每个决策任务以及当前工作流的执行历史记录。工作流程执行历史由事件组成，其中事件代表工作流程执行状态的重要更改。事件的示例包括任务完成、任务超时或计时器过期。历史是工作流程进程的完整、一致且权威的记录。

Amazon SWF 访问控制使用 AWS Identity and Access Management (IAM)，因此您可以控制对资源的访问权限。 AWS 例如，您可以允许用于访问您的账户，但只运行其在特定的域中运行特定工作流程。

## 运行你的工作流程
<a name="swf-dev-overview-execution"></a>

以下内容概述了在 Amazon SWF 中开发和运行工作流程所需的步骤：

1. 编写**活动工作人员**来执行工作流程中的处理步骤。

1. 编写一个**决策者**来处理工作流程的协调逻辑。

1. 向 Amazon SWF 注册您的活动和工作流。

   您可以通过编程方式完成此步骤，也可以使用。 AWS 管理控制台

1. 启动您的活动工作程序和决策程序。

   这些操作者能够在可访问 Amazon SWF 端点的任何计算设备上运行。例如，您可以使用云中的计算实例，例如亚马逊弹性计算云 (Amazon EC2)；数据中心的服务器；甚至是移动设备，来托管决策者或活动工作者。启动后，决策程序和活动工作线程应该轮询 Amazon SWF 以查找任务。

1. 启动工作流程的一个或多个执行。

   您可以通过编程方式启动工作流程，也可以通过。 AWS 管理控制台

   每一个执行都独立运行，您可以为每个执行提供其自己的输入数据集。执行启动后，Amazon SWF 会计划初始决策任务。作为回应，您的决策者开始生成启动活动任务的决策。执行会继续，直到您的决策程序做出关闭执行的决策。

1. 使用查看工作流程执行情况 AWS 管理控制台。

   您可以筛选和查看正在运行和已完成的执行的完整详细信息。例如，您可以选择打开的执行以查看哪些任务已完成以及其结果如何。

## 设置开发环境
<a name="swf-dg-dev-amzn-swf"></a>

您可以选择使用支持的任何一种编程语言为 Amazon SWF 进行开发。 AWS对于 Java 开发人员 AWS Flow Framework ，也可以使用。有关更多信息，请[AWS Flow Framework](https://aws.amazon.com/swf/flow/)访问网站，并参阅AWS Flow Framework 《[Java 开发人员指南》](https://docs.aws.amazon.com/amazonswf/latest/awsflowguide/)。

为了减少延迟并将数据存储在符合您要求的位置，Amazon SWF 在不同区域提供了**终端节点**。

Amazon SWF 中的每个终端节点都是完全独立的。您在一个地区注册的任何域、工作流程和活动都不会与其他区域的域名、工作流程和活动共享数据或属性。

当您注册 Amazon SWF 域名、工作流程或活动时，该域名、工作流程或活动*仅存在于您注册的区域内*。例如，您可以注册一个名为两个不同区域`SWF-Flows-1`的域名，但它们彼此之间不会共享任何数据或属性——每个区域都充当一个完全独立的域。

有关 Amazon SWF 端点的列表，请参阅 [Regions and Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html)。

## 与之一起开发 AWS SDKs
<a name="aws-sdks"></a>

 AWS SDKs 适用于 Java、.NET、Node.js、PHP、Python 和 Ruby 的 Amazon SWF 支持，这为以你选择的编程语言使用 Amazon SWF HTTP API 提供了一种便捷的方式。

您可以使用这些库公开的 API 开发*决策者**、*活动工作人员*或工作流程启动者*。而且，您可以通过这些库使用可视性操作，从而开发自己的 Amazon SWF 监控和报告工具。

要下载用于开发和管理应用程序的工具（包括） SDKs，请访问[开发者中心](https://aws.amazon.com/developer/tools)。 AWS

有关每个软件开发工具包中的 Amazon SWF 操作的详细信息，请参阅该软件开发工具包的特定语言参考文档。

## 考虑一下 AWS Flow Framework
<a name="aws-flow-framework"></a>

 AWS Flow Framework 是一款增强版 SDK，用于编写在 Amazon SWF 上作为工作流程运行的分布式异步程序。该框架可用于 Java 编程语言，并提供用于编写复杂分布式程序的类。

使用 AWS Flow Framework，您可以使用预配置的类型将工作流程的定义直接映射到程序中的方法。 AWS Flow Framework 支持标准的面向对象的概念，例如基于异常的错误处理。使用编写的程序 AWS Flow Framework 可以完全在您的首选编辑器或 IDE 中创建、运行和调试。有关更多信息，请[AWS Flow Framework](https://aws.amazon.com/swf/flow/)访问网站，并参阅AWS Flow Framework 《[Java 开发人员指南》](https://docs.aws.amazon.com/amazonswf/latest/awsflowguide/)。