

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

# 亚马逊 SWF 中的演员
<a name="swf-dev-actors"></a>

**Topics**
+ [什么是 Amazon SWF 中的操作者](#what-is-an-actor-swf)
+ [工作流程启动程序](#swf-dev-actors-starters)
+ [决策程序](#swf-dev-actors-deciders)
+ [活动工作程序](#swf-dev-actors-activities)
+ [参与者之间的数据交换](#swf-dev-actors-dataex)

## 什么是 Amazon SWF 中的操作者
<a name="what-is-an-actor-swf"></a>

在运行过程中，Amazon SWF 会与许多不同类型的程序*操作者*进行交互。参与者可以是 [工作流程启动程序](#swf-dev-actors-starters)、[决策程序](#swf-dev-actors-deciders)或[活动工作程序](#swf-dev-actors-activities)。这些操作者通过其 API 与 Amazon SWF 通信。您可以用任何编程语言开发这些参与者。

下图显示了 Amazon SWF 架构，其中包括 Amazon SWF 及其操作者。

![\[Amazon SWF 工作流中的不同实体或“操作者”。\]](http://docs.aws.amazon.com/zh_cn/amazonswf/latest/developerguide/images/swf-overview-actors.png)


## 工作流程启动程序
<a name="swf-dev-actors-starters"></a>

工作流程启动程序是能启动工作流程执行的任何应用程序。在电子商务示例中，一个工作流程启动程序可以是客户下订单所在网站。而另一个工作流程启动程序可以是客户服务代表代表客户下订单时所用移动应用程序或系统。

## 决策程序
<a name="swf-dev-actors-deciders"></a>

决策程序是工作流程写作逻辑的执行。决策程序控制工作流程执行中的活动任务流程。只要工作流程执行过程中发生更改 (如任务完成)，都会向决策程序传递包含整个工作流程历史记录的决策任务。当决策程序从 Amazon SWF 接收决策任务时，它会分析工作流执行历史记录，以确定工作流执行过程中的下一个相应步骤。决策程序使用*决策*将这些步骤传递回 Amazon SWF。决策是一种 Amazon SWF 数据类型，用于代表接下来的各种操作。要查看可能的决策列表，请参阅《Amazon Simple Workflow Service API Reference》中的 [Decision](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_Decision.html)。

下面是 JSON 格式的决策示例，该决策通过这种格式传送到 Amazon SWF。此决策会排定新活动任务。

```
{
   "decisionType" : "ScheduleActivityTask",
   "scheduleActivityTaskDecisionAttributes" : {
      "activityType" : {
         "name" : "activityVerify",
         "version" : "1.0"
      },
      "activityId" : "verification-27",
      "control" : "digital music",
      "input" : "5634-0056-4367-0923,12/12,437",
      "scheduleToCloseTimeout" : "900",
      "taskList" : {
         "name": "specialTaskList"
      },
      "scheduleToStartTimeout" : "300",
      "startToCloseTimeout" : "600",
      "heartbeatTimeout" : "120"
   }
}
```

决策程序会在工作流程执行启动时以及每当工作流程执行状态发生更改时接收决策任务。决策程序通过接收决策任务和使用更多决策响应 Amazon SWF 来不断推进工作流执行，直到决策程序确定工作流执行完成为止。然后，它会回应决策，以关闭工作流程执行。工作流执行关闭后，Amazon SWF 不会为该执行安排其他任务。

在电子商务示例中，决策程序会决定每个步骤是否都适当执行，然后回排定下一步或管理任何错误条件。

决策程序代表的是单个计算过程或线程。多个决策程序可为同一种工作流程类型处理任务。

## 活动工作程序
<a name="swf-dev-actors-activities"></a>

活动工作程序是一种过程或线程，用于执行*活动任务*这一工作流程组成部分。活动任务表示的是您在应用程序中标识的任务之一。

要在工作流程中使用活动任务，必须使用 Amazon SWF 控制台或操作对其进行注册。[RegisterActivityType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterActivityType.html)

每个活动工作人员都会轮询 Amazon SWF 以获取适合该活动工作线程执行的新任务；某些任务只能由特定活动工作线程执行。接收任务后，活动工作线程处理该任务直至完成，然后向 Amazon SWF 报告该任务已完成并提供结果。然后，活动工作程序会轮询新任务。与活动流程执行相关的活动工作程序会用此方式继续处理任务，直到工作流程执行本身已完成。在电子商务示例中，活动工作程序是信用卡处理人员和物流人员等执行过程中单独步骤的人所使用的独立过程和应用程序。

活动工作程序表示单个计算过程（或线程）。多个活动工作程序可处理同一种活动类型的任务。

## 参与者之间的数据交换
<a name="swf-dev-actors-dataex"></a>

工作流程执行启动时会提供输入数据到工作流程执行。同样地，当活动工作程序排定活动任务时会提供输入数据给工作程序。活动任务完成后，活动工作线程可将结果返回到 Amazon SWF。同样地，决策程序会在执行完成时报告工作流程执行的结果。每个操作者都可以通过用户自定义形式的字符串将数据发送到 Amazon SWF 或从 Amazon SWF 接收数据。根据数据的大小和敏感性，您可以直接传递数据，或传递指向存储在其他系统或服务上的数据的指针（如 Amazon S3 或 DynamoDB）。直接传递的数据和指向其他数据存储的指针都会记录在工作流执行历史记录中；但是，Amazon SWF 不会从外部存储复制或缓存任何数据作为历史记录的一部分。

由于 Amazon SWF 会维护每个工作流执行的完整执行状态（包括任务的输入和结果），所有操作者都可能是无状态的。因此，工作流程处理具有高度可扩展。随着系统负载增加，您可以简单增加更多参与者来提高容量。