

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

# AWS Flow Framework 基本概念：可靠执行
<a name="awsflow-basics-reliable-execution"></a>

异步分布式应用程序必须处理常规应用程序不会遇到的可靠性问题，包括：
+ 如何在异步分布式组件之间*提供可靠通信*，如在远程系统上长时间运行的组件。
+ 如何在组件故障或断开连接时*确保结果不会丢失*，特别是长时间运行的应用程序。
+ 如何*处理故障的分布式组件*。

应用程序可以依靠 AWS Flow Framework 和 Amazon SWF 来管理这些问题。我们将探讨 Amazon SWF 如何提供一些机制来确保工作流以可靠且可预测的方式运行，即使这些工作流长时间运行并依赖通过计算和人机交互执行的异步任务。

## 提供可靠的通信
<a name="awsflow-basics-reliable-execution-communication"></a>

AWS Flow Framework 使用 Amazon SWF 向分布式活动工作人员分派任务并将结果返回给工作流程工作人员，从而在工作流程工作人员与其活动工作人员之间提供可靠的通信。Amazon SWF 使用以下方法来确保工作线程及其活动之间的可靠通信：
+ Amazon SWF 可持久存储安排的活动和工作流任务，并确保它们最多执行一次。
+ Amazon SWF 可确保活动任务要么成功完成并返回有效结果，要么通知工作流工作线程任务失败。
+ Amazon SWF 可持久存储每个已完成的活动的结果，对于失败的活动，它还将存储相关的错误信息。

 AWS Flow Framework 然后，使用来自 Amazon SWF 的活动结果来确定如何继续执行工作流程。

## 确保结果不会丢失
<a name="awsflow-basics-reliable-execution-history"></a>

### 保留工作流程历史记录
<a name="maintaining-workflow-history"></a>

对 PB 级数据执行数据挖掘操作的活动可能需要*几小时*才能完成；指示工作人员执行复杂任务的活动可能需要*几天*甚至*几周*才能完成！

为了适应此类场景， AWS Flow Framework 工作流程和活动可能需要任意长时间才能完成：工作流程*的执行上限为一年*。要可靠地执行长时间运行的进程，需要采用某种机制以持续永久存储工作流程的执行历史记录。

通过依赖 Amazon SWF 来 AWS Flow Framework 处理这个问题，Amazon SWF 会维护每个工作流程实例的运行历史记录。工作流程的历史记录提供了工作流程进度的完整且权威的记录，包括已计划并完成的所有工作流程和活动任务以及完成或失败的活动返回的信息。

AWS Flow Framework 应用程序通常不需要直接与工作流程历史进行交互，但它们可以在必要时访问它。对于大多数用途，应用程序可以直接让该框架在后台与工作流程历史记录进行交互。有关工作流历史记录的全面讨论，请参阅 *Amazon Simple Workflow Service Developer Guide* 中的 [Workflow History](https://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dg-basic.html#swf-dev-about-workflow-history)。

### 无状态执行
<a name="stateless-execution"></a>

执行历史记录允许工作流程工作线程是*无状态*的。如果具有多个工作流程或活动工作线程实例，则任何工作线程可以执行任何任务。工作线程会从 Amazon SWF 接收执行任务所需的所有状态信息。

该方法使工作流程变得更可靠。例如，如果某个活动工作线程失败，您不必重新启动工作流程。只需重新启动工作线程，它将开始轮询任务列表并处理列表上的任何任务，不受失败何时发生的影响。您可以使用两个或更多工作流程和活动工作线程 (可能在不同的系统上)，以使整个工作流程具有容错功能。然后，如果一个工作线程失败，其他工作线程继续处理计划任务，工作流程进度不会发生任何中断。

## 处理故障的分布式组件
<a name="awsflow-basics-reliable-execution-errors"></a>

活动通常由于临时原因而失败 (如短暂断开连接)，因此，处理失败活动的常见策略是重试活动。应用程序可以依赖 AWS Flow Framework，而不是通过实施复杂的消息传送策略来处理重试过程。它提供了几种机制以重试失败的活动，并提供内置异常处理机制以处理工作流程中的任务的异步分布式执行。