

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

# AWS Flow Framework 基本概念：应用程序结构
<a name="awsflow-basics-application-structure"></a>

从概念上讲， AWS Flow Framework 应用程序由三个基本组件组成：*工作流启动器*、*工作流程工作人员*和*活动*工作者。一个或多个主机应用程序负责向 Amazon SWF 注册工作线程（工作流和活动）、启动工作线程和处理清理。工作线程处理执行工作流程的机制，可以在几个主机上实现工作线程。

下图代表了一个基本的 AWS Flow Framework 应用程序：

![原理图 AWS Flow Framework 应用程序](http://docs.aws.amazon.com/zh_cn/amazonswf/latest/awsflowguide/images/swf-application-model.png)


**注意**  
从概念上讲，在三个单独的应用程序中实现这些组件是非常方便的，但您可以通过多种方式创建应用程序以实现该功能。例如，您可以在活动和工作流程工作线程中使用单个主机应用程序，或者使用单独的活动和工作流程主机。也可以使用多个活动工作线程，每个工作线程在单独的主机上处理一组不同的的活动，等等。

这三个 AWS Flow Framework 组件通过向管理请求的 Amazon SWF 发送 HTTP 请求来间接交互。Amazon SWF 将执行以下操作：
+ 保留一个或多个决策任务列表，这些列表确定工作流程工作线程要执行的下一步骤。
+ 保留一个或多个活动任务列表，这些列表确定活动工作线程将执行的任务。
+ 维护工作流程执行的详细 step-by-step历史记录。

使用后 AWS Flow Framework，您的应用程序代码无需直接处理图中所示的许多细节，例如向 Amazon SWF 发送 HTTP 请求。你只需调用 AWS Flow Framework 方法，框架就会处理幕后的细节。

## 活动工作线程角色
<a name="aws-flow-concepts-activity-worker"></a>

活动工作线程执行工作流程必须完成的各种任务。它包含以下内容：
+ 活动实现，它包含一组为工作流程执行特定任务的活动方法。
+ 一个[ActivityWorker](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/flow/ActivityWorker.html)对象，它使用 HTTP 长轮询请求来轮询 Amazon SWF 以确定要执行的活动任务。需要执行任务时，Amazon SWF 通过发送执行任务所需的信息来响应请求。然后，该[ActivityWorker](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/flow/ActivityWorker.html)对象调用相应的活动方法，并将结果返回给 Amazon SWF。

## 工作流程工作线程角色
<a name="aws-flow-concepts-workflow-worker"></a>

工作流程工作线程协调各种活动的执行情况，管理数据流以及处理失败的活动。它包含以下内容：
+ 工作流程实现，它包含活动协调逻辑，处理失败的活动，等等。
+ 活动客户端，它作为活动工作线程的代理，并允许工作流程工作线程计划要异步执行的活动。
+ 一个[WorkflowWorker](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/simpleworkflow/flow/WorkflowWorker.html)对象，它使用 HTTP 长轮询请求轮询 Amazon SWF 以执行决策任务。如果工作流任务列表上具有任务，Amazon SWF 将通过返回执行任务所需的信息来响应请求。然后，该框架会执行工作流以执行任务，并将结果返回到 Amazon SWF。

## 工作流程启动程序角色
<a name="aws-flow-concepts-workflow-starter"></a>

工作流程启动程序启动工作流程实例 (也称为*工作流程执行*)，并且可以在执行期间与实例交互，以便将额外数据传递给工作流程工作线程或获取当前工作流程状态。

工作流程启动程序使用工作流程客户端启动工作流程执行，在执行期间根据需要与工作流程交互以及处理清理。工作流程启动器可以是本地运行的应用程序、Web 应用程序， AWS CLI 甚至. AWS 管理控制台

## Amazon SWF 如何与您的应用程序交互
<a name="aws-flow-concepts-swf-app-interaction"></a>

Amazon SWF 负责协调工作流组件之间的交互，并维护详细的工作流历史记录。Amazon SWF 不会启动与组件的通信，它会等待来自组件的 HTTP 请求，并根据需要管理这些请求。例如：
+ 如果请求来自工作线程，目的是轮询以获取可用的任务，则 Amazon SWF 会在任务可用时直接响应工作线程。有关长轮询的更多信息，请参阅 *Amazon Simple Workflow Service Developer Guide* 中的 [Long Polling](https://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dg-basic.html#swf-dev-comm-proto)。
+ 如果请求是活动工作线程发出的说明任务已完成的通知，Amazon SWF 会将该信息记录在执行历史记录中，并在决策任务列表中添加一个任务，以通知工作流工作线程任务已完成，可以继续执行下一步骤。
+ 如果请求是工作流工作线程发出的，指示执行活动，Amazon SWF 会将该信息记录在执行历史记录中，并在活动任务列表中添加一个任务，以指示活动工作线程执行相应的活动方法。

这种方法允许工作人员在任何有互联网连接的系统上运行，包括 Amazon EC2 实例、公司数据中心、客户端计算机等。它们甚至不必运行相同的操作系统。由于 HTTP 请求来自于工作线程，因此，不需要使用外部可见的端口；工作线程可以在防火墙后面运行。

## 了解更多信息
<a name="for-more-information"></a>

有关对 Amazon SWF 工作原理的更深入讨论，请参阅 [Amazon Simple Workflow Service Developer Guide](https://docs.aws.amazon.com/amazonswf/latest/developerguide/)。