- 产品›
- Amazon SWF›
- 常见问题
一般性问题
什么是 Amazon SWF?
Amazon Simple Workflow Service (SWF) 是能够轻松协调各分布式应用程序组件中任务的网络服务。Amazon SWF 能够以协调任务的方式来设计适用于各种使用案例的应用程序,包括媒体处理、Web 应用程序后端、业务处理工作流及分析管道。任务代表调用应用程序中的各种步骤,这一操作可通过可执行代码、Web 服务调用、人工操作和脚本来执行。
任务协调包括根据应用程序的逻辑流管理执行任务的依赖性、调度及并发性。使用 Amazon SWF,开发人员可全面控制流程步骤实施及协调推动各步骤的任务,而不用担心跟踪进度和保存状态等底层复杂的工作。Amazon SWF 还提供 AWS Flow Framework,以帮助开发人员在开发应用程序过程中使用异步编程。使用 Amazon SWF,开发人员可受益于编程的简易性,并能够改进其应用程序的资源利用率、延迟及吞吐量。
分别应在何时使用 Amazon SWF 和AWS Step Functions?
AWS Step Functions 是一项完全托管服务,使您能够轻松地使用可视化工作流来协调分布式应用程序和微服务的组件。无需编写决策者计划,您即可以 JSON 格式定义状态机。AWS 客户应考虑对新的应用程序使用 Step Functions。如果 Step Functions 无法满足您的需求,您应考虑使用 Amazon Simple Workflow (SWF)。Amazon SWF 可使您完全控制您的编排逻辑,但也会增加开发应用程序的难度。您可以使用自己选择的编程语言编写决策程序,也可以使用 Flow Framework,以便使用为您构建异步交互的编程结构。AWS 将继续提供 Amazon SWF 服务和 Flow Framework,并且支持所有 Amazon SWF 客户。
以协调任务的方式设计应用程序有哪些好处? Amazon SWF 可帮助我做些什么?
在 Amazon SWF 中,任务即代表调用应用程序中的逻辑步骤。任务由工作程序来处理,即与 Amazon SWF 交互以获取任务、处理任务并返回任务结果的程序。工作程序执行应用程序处理步骤。您可以用不同的编程语言来构建工作程序,甚至可以重新使用现有的组件来快速创建工作程序。例如,您可以使用云服务、企业应用程序、旧式系统甚至简单的脚步来执行工作程序。通过独立控制处理每类任务的工作程序数量,可以有效控制应用程序的吞吐量。
要协调各工作程序中的应用程序执行,您可以用所选的编程语言编写一个“决策程序”。分开处理步骤及其协调,即可以控制方式管理应用程序,并使您能够灵活地独立部署、运行、扩展和更新它们。您可以选择在云(例如 Amazon EC2 或 Lambda)中部署工作程序和决策程序,也可以在企业防火墙后的机器上部署。由于工作程序和决策程序的解耦,您的业务逻辑可以为动态的,所以能快速更新应用程序来适应新的要求。例如,您可以删除、跳过或重试任务,并可通过更改决策程序,轻松地创建新的应用程序流。
在执行工作程序和决策程序前,您需要关注差异化的应用程序逻辑,因为它们与执行实际的处理步骤及协调它们息息相关。Amazon SWF 可处理底层的细节,例如任务分配前存储任务、监控分配的任务以及完成时提供一致的信息。使用 Amazon SWF,还可通过 API 和控制台在每个任务级别持续监控。
Amazon SWF 可以用来做什么?
使用分布式组件构建应用程序时,可使用 Amazon SWF 解决出现的多项挑战。例如,您可以使用 Amazon SWF 和附送的 AWS Flow Framework 执行以下操作:
- 使用简单的编程结构以异步程序形式编写用来提取细节的应用程序,例如启动任务以远程运行及跟踪程序的运行时状态。
- 保存应用程序的执行状态(例如,已完成哪些步骤、正在运行哪些步骤等)。您不必非要使用数据库。定制系统或专用解决方案来保存执行状态。
- 各应用程序组件之间的工作流通信和管理。使用 Amazon SWF,您无需设计消息发送协议,也不必担心任务丢失和重复。
- 集中协调应用程序中的步骤。协调逻辑不必分布于不同的组件,可以封装在单一程序中。
- 将各种程序和组件集成到应用程序中,包括旧式系统和第三方云服务。通过允许应用程序在任何位置、以任何组合形式灵活部署应用程序组件,Amazon SWF 可帮助您逐步将应用程序组件从私有数据中心迁移到公共云基础设施,而不会中断应用程序可用性或性能。
- 自动执行工作流,包括长时间运行的人工任务(例如,批准、审核、调查等) Amazon SWF 能够可靠地跟踪运行长达数天或数月的处理步骤的状态。
- 基于 Amazon SWF 构建应用程序层,以支持特定于最终用户的域的语言。由于 Amazon SWF 允许您完全灵活地选择编程语言,所以您可以方便地为特殊语言(如 XPDL)构建编译程序及构建定制的用户界面(包括建模工具)。
- 详细审查跟踪并查看应用程序运行的所有实例。您也可以使用 Amazon SWF 提供的 API 将其查看功能加到自己的用户界面。
客户已使用 Amazon SWF 来构建应用程序,用于视频解码、社交商务、基础设施预配置、MapReduce 管道、业务流程管理及其他一些使用案例。有关使用案例的更多详细信息,请参见“使用 SWF 可解决哪些使用案例?”要立即查看客户使用 Amazon SWF 的情况,请阅读我们的案例研究。
Amazon SWF 相对于自主解决方案及现有的工作流产品有哪些好处?
在分布式环境中构建解决方案来协调任务时,开发人员必须考虑一些变量。推进处理步骤的任务可能要长时间运行,也可能出现故障、超时或需要重新启动。它们完成时的吞吐量和延迟通常各不相同。在这些情况下,跟踪和查看任务不仅非常困难,而且工作毫无差别。随着应用程序和任务增加,开发人员将面临难以解决的分布式系统问题。例如,他们必须确保每个任务只分配一次,在存在意外故障和中断的情况下可靠地跟踪结果。使用 Amazon SWF,开发人员可以专注于其存在差异的应用程序逻辑,即处理任务和协调任务的方式。
现有的工作流产品通常会强迫开发人员学习专门的语言,托管昂贵的数据库,并会放弃任务执行控制。这些专门语言使得表达复杂应用程序变得困难,而且不能灵活、快速应用更改。而 Amazon SWF 是基于云的服务,允许使用常见的编程语言,并让开发人员控制在哪里处理任务。Amazon SWF 对于分布式应用程序采用松散耦合的模型,可以灵活地进行变更。
什么是工作程序和决策程序?
在 Amazon SWF 中,通过构建工作程序和决策程序实施应用程序,它们将直接与服务通信。工作程序的作用是与 Amazon SWF 交互来获取任务、处理收到的任务及返回结果。决策程序是根据应用程序逻辑控制任务顺序、并发性及调度等协调工作的程序。工作程序和决策程序可以在云基础设施(例如 Amazon EC2)中运行,也可以在防火墙后的机器中运行。Amazon SWF 负责执行工作程序和决策程序之间的交互。它允许决策程序统一查看任务的进度并持续启动新任务。同时,Amazon SWF 可存储任务,在就绪后将它们分配给工作程序,并监控其进度。确保每个任务只分配一次,永远不会重复。因为 Amazon SWF 可持久保存应用程序的状态,所以工作程序和决策程序不必跟踪执行状态。它们可以独立运行,并快速扩展。请参阅 Amazon SWF 详细信息页面的功能部分,了解使用 Amazon SWF 构建应用程序的详细步骤信息。
在 Amazon SWF 中,您可以并行运行一些工作流。每个运行是指工作流执行或一项执行任务。执行任务具有唯一的名称标识。您可以使用 Amazon SWF 管理控制台(或查看 API)来查看整体执行情况,并深入给定的执行任务查看任务级的详细信息。
Amazon SWF 可为写入应用程序提供哪些编程便利?
如同其他 AWS 服务,Amazon SWF 提供用于 Web 服务 API 的核心开发工具包。此外,Amazon SWF 还提供名为 AWS Flow Framework 的开发工具包,让您能够快速、轻松地开发基于 Amazon SWF 的应用程序。AWS Flow Framework 使用熟悉的编程结构提取任务级协调的细节。运行程序时,该框架会调用 Amazon SWF,使用 Amazon SWF 保存的执行历史记录跟踪程序的执行状态,并在合适的时间调用相关的部分代码。通过提供直观的编程框架来访问 Amazon SWF,AWS Flow Framework 让开发人员能够以工作流中构建的异步交互方式编写应用程序。有关更多详细信息,请参阅什么是 AWS Flow Framework?
Amazon SWF 与 Amazon SQS 有何不同?
Amazon SQS 和 Amazon SWF 服务都有利于集成应用程序或微服务:
- Amazon Simple Queue Service (Amazon SQS) 提供高度可扩展的可靠托管队列,用于存储在应用程序或微服务之间传送的消息。Amazon SQS 用于在分布式应用程序组件之间传送数据,可帮助您解耦这些组件。
- Amazon Simple Workflow Service (Amazon SWF) 是一项 Web 服务,它能够轻松协调各分布式应用程序组件中的任务。
Amazon SQS 与 Amazon SWF 的主要区别如下:
- Amazon SWF API 操作面向任务。Amazon SQS API 操作面向消息。
- Amazon SWF 可跟踪应用程序中的所有任务和事件。Amazon SQS 要求您自行实施应用程序级跟踪,特别是在应用程序使用多个队列时。
- Amazon SWF 控制台和可见性 API 提供以应用程序为中心的视图,允许您搜索执行任务、深入查看执行任务的细节、管理执行任务等。Amazon SQS 要求您自行实施此类额外功能。
- Amazon SWF 提供的一些功能可加速应用程序开发,例如在任务之间传送数据、信号传送、灵活分配任务等。Amazon SQS 要求您自行实施某些应用程序级功能。
- 除了调用服务 API 的核心开发工具包以外,Amazon SWF 还提供 AWS Flow Framework,借助它可以轻松地使用编程结构编写分布式应用程序来构建异步交互。
虽然可以使用 Amazon SQS 来构建用于协调分布式应用程序的基本工作流程,但这对于 Amazon SWF 而言是一项开箱即用的功能,并且 Amazon SWF 还能提供其他应用程序层面的功能。
我们建议您同时试用 Amazon SQS 和 Amazon SWF,以确定哪款解决方案最符合您的需求。
使用 Amazon SWF 可解决哪些使用案例?
Amazon SWF 已应用于媒体处理、业务流程自动化、数据分析、迁移至云及批处理等使用案例。一些示例如下:
使用案例 #1:使用 Amazon S3 和 Amazon EC2 的视频解码。在此使用案例中,以组块形式将大型视频上传到 Amazon S3。必须监控组块的上传过程。上传组块后,通过将其下载到 Amazon EC2 实例进行解码。解码的组块将存储到另一 Amazon S3 位置。以这种方式对所有组块解码后,将它们合并成一个完整的解码文件,整个放回 Amazon S3。此过程可能会由于一个或多个组块出现解码错误而失败。这种故障需要检测和处理。
使用 Amazon SWF:整个应用程序以工作流形式构建,其中每个视频文件将作为一项工作流执行任务处理。下面这些任务由不同的工作程序处理:将组块上传到 Amazon S3、从 Amazon S3 下载组块到 Amazon EC2 实例并对其解码、将组块放回 Amazon S3、将多个组块合并成单个文件,并将整个文件上传到 Amazon S3。决策程序将启动并发任务,在此使用案例下利用并行机制。它会启动一项任务对上传的组块解码,而不必等待要上传的其他组块。如果某个组块的任务失败,决策程序会针对该组块重新运行任务。Amazon SWF 保存的应用程序状态可帮助决策程序控制工作流。例如,决策程序用它来检测所有组块均已解码和提取其 Amazon S3 位置以进行合并的时间。在 Amazon SWF 管理控制台,可持续跟踪执行任务的进度。如果出现故障,将标明失败的特定任务,由此准确找到出现故障的组块。
使用案例 #2:使用 Amazon Mechanical Turk 处理大型产品目录。验证大型目录中的数据,同时对目录中的产品进行批处理。不同批次可同时处理。对于每批,将从数据中心的服务器中提取产品数据,并将其转换成 Amazon Mechanical Turk 的 Requester User Interface (RUI) 要求的 CSV(逗号分隔值)文件。上传 CSV 以填充和运行 HIT(人工智能任务)。完成 HIT 后,反向转换生成的 CSV 文件,使数据返回原始格式。然后,评估结果;如果认可结果,为 Amazon Mechanical Turk 工作程序付费。故障将会去除及重新处理,而使用认可的 HIT 结果来更新目录。在批处理过程中,系统需要跟踪 Amazon Mechanical Turk 工作程序的质量并相应地调整费用。出现故障的 HIT 会重新进行批处理,并重新通过管道发送。
使用 Amazon SWF:以上使用案例按一组工作流的方式实施。BatchProcess 工作流可处理单个批次。它拥有提取数据、转换数据并通过 Amazon Mechanical Turk 发送数据的工作程序。BatchProcess 工作流会输出认可和失败的 HIT。它们将用作其他三个工作流的输入信息:MTurkManager、UpdateCatalogWorkflow 和 RerunProducts。MTurkManager 工作流负责对认可的 HIT 付费、响应生成失败 HIT 的人工工作程序及更新自己的数据库以跟踪结果质量。UpdateCatalogWorkflow 根据认可的 HIT 更新主目录。RerunProducts 工作流等待,直到形成足够大的一批失败 HIT 产品。然后,它将创建一个批次,将其发送回 BatchProcess 工作流。整个端到端目录处理由 CleanupCatalog 工作流执行,它将启动以上工作流的子执行任务。凭借良好定义的工作流系统,使其可以为包含数百万产品的目录架构、审查和系统地运行这种使用案例。
使用案例 #3:从数据中心迁移组件到云中。业务关键操作由私有的数据中心托管,但需要整体迁移到云中,而不会导致中断。
使用 Amazon SWF:基于 Amazon SWF 的应用程序可以将包含数据中心所运行组件的工作程序与云中运行的工作程序合并在一起。要无缝过渡数据中心工作程序,首先会在云中部署相同类型的新工作程序。数据中心的工作程序与基于云的新工作程序,继续照常运行。通过向基于云的工作程序传送部分负载,对它们进行测试和验证。测试期间,应用程序不会中断,因为数据中心的工作程序一直在运行。测试成功后,逐步停止数据中心的工作程序,并放大在云中的工作程序,直到最后全部在云中运行。数据中心的所有其他工作程序均可重复这个过程,以便让应用程序完整迁移到云中。如果出于一些业务原因,某些处理步骤必须继续留在私有数据中心执行,则可以继续在私有数据中心运行这些工作程序,并让它们仍然参与应用程序。
请参阅我们的使用案例,了解开发人员和企业使用 Amazon SWF 构建的更多有趣的应用程序和系统。
Amazon 在自己的应用程序中是否使用 Amazon SWF?
符合。Amazon 中的开发人员每天使用 Amazon SWF 处理各种项目并运行数百万个工作流执行任务。他们的使用案例包括 Amazon.com 和 AWS 网站后台的关键业务流程、实施一些 AWS Web 服务及其 APIs、对操作决策进行 MapReduce 分析及管理网页、视频和 Kindle 书籍等面向用户的内容。
入门
如何开始使用 Amazon SWF?
要注册 Amazon SWF,请访问 Amazon SWF 详细信息页面,然后单击“立即注册”按钮。如果没有 Amazon Web Service 账户,系统将会提示您创建一个。注册后,即可在 AWS 管理控制台逐步运行示例,它们将指导您了解使用 Amazon SWF 运行简单的图像转换应用程序的步骤。您也可以下载 AWS Flow Framework 示例,了解该服务的各种功能。要在应用程序中开始使用 Amazon SWF,请参阅 Amazon SWF 文档。
是否有示例工作流可用来试用 Amazon SWF?
符合。开始使用 Amazon SWF 时,您可以在 AWS 管理控制台逐步尝试示例,它们将指导您注册域和类型、部署工作程序与决策程序及开始工作流执行任务。您可以下载此逐步介绍中使用的工作程序和决策程序的代码,在自己的基础设施中运行它们,甚至对其进行修改来构建自己的应用程序。此外,也可以下载 AWS Flow Framework 示例,它们描述了分布式数据处理、Cron 任务和应用程序堆栈部署等各种使用案例中对 Amazon SWF 的使用情况。通过查询随附的源代码,您可以详细了解 Amazon SWF 的功能及如何使用 AWS Flow Framework 来构建自己的分布式应用程序。
有哪些不同的方式可以访问 SWF?
您可以下面任何方式访问 SWF:
- 适用于 Java、Ruby、.NET 和 PHP 的 AWS 开发工具包
- 适用于 Java 的 AWS Flow Framework(适用于 Java 的 AWS 开发工具包随附)
- Amazon SWF Web 服务 API
- AWS 管理控制台
功能
什么是注册?
注册是为各种不同类型的工作流和活动执行的一次性步骤。您可以编程方式或通过 Amazon SWF 管理控制台注册。注册时,您需要为每种活动和工作流类型提供唯一类型的 ID。还要提供运行工作流时使用的默认信息,例如超时值和任务分配参数。
什么是域?
在 SWF 中,您要为自己的应用程序资源定义逻辑容器,称为域。域只能在 AWS 账户级别创建,不能嵌套。域可以使用用户定义的任何名称。每个应用程序资源(例如,工作流类型、活动类型或执行任务)只属于一个域。注册时,您需要指定在哪个域下注册工作流或活动类型。开始执行任务时,将自动在与其工作流类型相同的域中进创建任务。资源标识符的唯一性(如类型 ID、执行 ID)范围限于域内,即您可以在不同的域中重复使用标识符。
如何管理分布于不同环境和组中的应用程序资源?
您可以使用域来整理应用程序资源,因为它们易于管理,且不会无意中影响彼此。例如,您可以为开发、测试和生产环境创建不同的域,并在每个域中创建相应的资源。虽然可以在以上每个域中注册相同的工作流类型,但在各个域中会将其视为独立的资源。您可以在开发域中更改其设置,也可以在测试域中管理执行任务,而不会影响生产域中所对应的资源。
决策程序在 Amazon SWF 中如何协调工作流?
决策程序可视为特殊类型的工作程序。同工作程序一样,可以任何语言编写决策程序,并且它可从 Amazon SWF 获取任务。不过,它处理的是特殊任务,称为决策任务。当工作流执行任务发生转变(例如正在完成活动任务或活动任务超时)时,Amazon SWF 将发布决策任务。决策任务包含输入、输出及先前启动的活动任务的当前状态等信息。决策程序使用这些数据来确定后续步骤,包括任何新的活动任务及将数据返回 Amazon SWF。Amazon SWF 继而制定这些决策,根据需要启动新活动任务并监控它们。决策程序通过持续响应决策任务,控制活动任务的顺序、时间和并发性,由此执行应用程序中的处理步骤。开始执行任务时,SWF 发布第一个决策任务。自此以后,Amazon SWF 将制定决策程序提出的决策以推动执行任务。执行将一直继续,直到决策程序作出完成执行的决策。
为帮助决策程序作出决策,SWF 会持续保存有关执行中所有任务详细信息的记录。此记录称为历史记录,对于每个执行任务是唯一的。执行任务开始时,会启动新的历史记录。这时,历史记录中包含执行的输入数据等初步信息。之后,随着工作程序处理活动任务,Amazon SWF 会用其输入和输出数据及最新状态来更新该历史记录。当决策程序收到决策任务时,它可以检查执行的历史记录。Amazon SWF 确保历史记录准确反映了决策任务发布时的执行状态。因此,决策程序可使用历史记录来确定执行中发生的事情并决定相应的后续步骤。
如何确保工作程序或决策程序仅获取其了解的任务?
您可以使用任务列表来确定如何分配任务。任务列表是 Amazon SWF 资源,启动的任务会添加到当中,并从中请求任务。任务列表由用户定义的名称标识。任务列表可能包含不同类型 ID 的任务,但它们必须属于活动任务或决策任务。注册时,您要为每种活动和工作流类型指定一个默认任务列表。Amazon SWF 还允许您在运行时创建任务列表。创建任务列表方法非常简单,对其命名并开始使用它即可。任务列表的使用方法如下:
- 启动活动任务时,决策程序可将其添加到特定的任务列表,也可以请求 Amazon SWF 将其添加到其活动类型的默认任务列表。
- 开始执行时,您可以请求 Amazon SWF 将其所有决策任务添加到特定的任务列表或添加到该工作流类型的默认任务列表。
- 请求任务时,决策程序和工作程序可以指定它们分别希望从哪个任务列表接收任务。如果列表中存在任务,SWF 会在响应中将其发送并包括其类型 ID。
综上所述,您可以控制任务添加到哪个任务列表以及每个程序从哪个列表中获取任务。因此,您可以确保工作程序和决策程序仅获取其了解的任务。
什么是 AWS Flow Framework? 它能如何帮助我协调工作流?
AWS Flow Framework 是一种编程框架,让您可以快速、轻松开发基于 Amazon SWF 的应用程序。它会提取任务级协调的细节,并与简单的编程结构异步交互。Amazon SWF 中的工作流协调包含启动需要不同时间完成的远程操作(例如,活动任务)及正确实施各任务之间的依赖性。
AWS Flow Framework 让您可以通过熟悉的编程理念方便地表达协调的不同方面。例如,像调用一种方法一样简单地启动活动任务。AWS Flow Framework 会自动将调用转换为决策以启动活动任务,并让 Amazon SWF 向工作程序分配任务,进行监控并在完成时反馈报告。该框架在从方法调用返回值时,以代码形式向您提供任务结果,包括其输出数据。为表达对任务的依赖性,您只需向处理常见的方法调用一样,在代码中使用返回的值。该框架的运行时将自动等待任务完成,并仅在结果可用时继续执行。在后台,该框架的运行时会从 Amazon SWF 接收工作程序和决策任务,在正确的时间从程序中调用相关方法,并制定决策返回到 Amazon SWF。通过提供直观的编程框架来访问 Amazon SWF,AWS Flow Framework 让用户能够在应用程序开发时轻松加入异步和事件驱动编程。
工作程序和决策程序如何与 Amazon SWF 通信? 轮询协议不是要耗用大量资源吗?
通常,基于轮询的协议要求开发人员确定一个最优的轮询频率。如果开发人员轮询频率过高,许多轮询可能会返回空结果。这样,将导致轮询耗费大量应用程序和网络资源,但没有返回有意义的结果来进一步推动执行任务。如果开发人员所定的轮询频率过低,保留消息可能会持续较长时间,从而增加应用程序延迟。
为克服轮询内在的效率低下问题,Amazon SWF 提供了长时间轮询。长时间轮询可大大降低轮询返回空任务的次数。当工作程序和决策程序轮询 Amazon SWF 获取任务时,如果没有任务可用,该连接将保留一分钟。如果在该段期间产生可用任务,它们将返回响应长时间轮询的请求。通过将连接保留一段时间,可避免该段期间返回空结果的其他轮询。借助长时间轮询,您的应用程序将获益于轮询的安全性和流量控制优势,而不会损害推送 Web 服务提供的延迟和效率优势。
是否可以将现有的 Web 服务作为工作程序使用?
工作程序使用标准的 HTTP GET 请求从 Amazon SWF 获取任务并返回结果。要将现有的 Web 服务作为工作程序,您可以创建一个包装程序从 Amazon SWF 获取任务,根据需要调用该 Web 服务的 API,并向 Amazon SWF 返回结果。在包装程序中,将任务提供的输入数据转换为适用于该 Web 服务 API 的参数。同理,还要将该 Web 服务 API 的输出数据转换为适用于任务的结果并向 Amazon SWF 返回。
Amazon SWF 是否会限制我使用特定的编程语言?
不会,您可以使用任何编程语言来编写工作程序或决策程序,只要您能使用 Web 服务 API 与 Amazon SWF 通信即可。当前提供适用于 Jave、.NET、PHP 和 Ruby 的 AWS 开发工具包。适用于 Java 的 AWS 开发工具包包括 AWS Flow Framework。
我希望确保每次激活业务流程(如交易、提交或分配)只会执行一次。如何实现该愿望?
当开始执行新工作流时,您需要为该工作流执行任务提供一个 ID。这让您能够将执行任务与业务实体或操作(例如,客户 ID、文件名、串行号码)关联起来。在运行时,Amazon SWF 可确保该执行任务的 ID 是唯一的。在此期间,尝试启动相同 ID 的执行任务会失败。这让您可以轻松满足要求针对给定业务操作不得运行多个执行任务的业务需求,例如交易、提交或分配。以在网站上注册新用户的工作流为例。当用户单击提交按钮时,可以使用该用户的唯一电子邮件地址来命名执行任务。如果该执行任务已存在,调用启动执行任务将失败。无需其他代码,以防注册时单击按钮的多个用户导致产生冲突。
当工作流执行完成后(成功或失败),您可以相同 ID 启动另一工作流执行任务。这样,将以相同的执行 ID 运行新的工作流执行任务,但运行 ID 不同。运行 ID 由 Amazon SWF 生成,工作流执行 ID 相同的多个执行任务可以凭借运行 ID 加以区分。通过允许您以这种方式重新使用工作流执行 ID,Amazon SWF 可帮助您满足重试等使用案例。例如,以上述用户注册为例,假使为用户创建数据库记录时,工作流执行失败。您可以相同的执行 ID(用户的电子邮件地址)再次启动工作流执行,而不用创建新的 ID 来重试注册。
Amazon SWF 如何帮助扩展应用程序?
Amazon SWF 允许您扩展应用程序,让您能够完全控制为每种活动类型运行的工作程序数及为决策程序运行的实例数。通过增加工作程序或决策程序实例数量,可以增加为相应处理步骤分配的计算资源,由此增加这些步骤的吞吐量。要自动扩展,您可以使用 Amazon SWF 通过其 API 提供的运行时数据。例如,Amazon SWF 提供任务列表中的任务数。由于数量增加意味着工作程序赶不上负载,所以当待处理的任务达到阈值时,您可以自动加速新的工作程序。
我运行了大量关键任务型应用程序执行任务。如何监控和扩展它们?
除管理控制台外,Amazon SWF 提供一整套查看 API。您可以使用它们来获取运行时信息,监控所有执行任务并根据负载自动扩展执行任务。您可以获取每种工作流类型的详细数据,例如特定时间范围内开放和关闭的执行任务数。使用查看 API,还可以构建自定义的监控应用程序。
我有许多随时运行的执行任务,但其中一小部分总是出现故障或停止。如何检测这些存在问题的执行任务并排除故障?
Amazon SWF 允许您通过管理控制台和查看 API 搜索执行任务。您可以按各种条件进行搜索,包括执行开始或完成的时间间隔、当前状态(即开放或关闭)及标准的故障模式(例如,超时、终止)。要组合工作流执行任务,开始执行时,可以使用多达 5 个标签将自定义文本与工作流执行任务关联起来。在 AWS 管理控制台中,可以使用标签搜索工作流执行任务。
要查找可能已停止的执行任务,您可以从基于时间搜索开始,深入到运行时间超过预期的执行任务。接下来,可以监控它们来了解任务级细节,并确定特定任务的运行时间是否已过长或失败,或者决策程序是否没有启动任务。这样,可帮助您准确查明任务级的问题。
我有一种可以在多个应用程序中使用的活动类型。是否可在这些应用程序范围内共享该活动?
符合。如果应用程序和活动全部在相同的域中进行了注册,则多个应用程序可以共享给定的活动类型。为此,您可以让不同的决策程序为该活动类型启动任务,并将其添加到任务列表中以便工作程序对该活动轮询。然后,该活动类型的工作程序将从所有不同的应用程序获取活动任务。如果要说明某个活动任务来自哪个应用程序,或者是否要为不同的应用程序部署不同的工作程序集,您可以使用多个任务列表。请参阅如何确保工作程序或决策程序仅获取其了解的任务?
安全性与可靠性
是否可以使用 AWS Identity and Access Management (IAM) 来管理 Amazon SWF 的访问权限?
符合。您可以授予 IAM 用户访问 Amazon SWF 的许可权限。IAM 用户只能访问您指定的 SWF 域和 API。
是否可以在防火墙后运行我的工作程序?
符合。工作程序使用标准 HTTP GET 请求从 Amazon SWF 获取任务并返回计算结果。由于工作程序总是向 Amazon SWF 启动请求,所以您不必配置防火墙来允许入站请求。
作为工作程序和决策程序,是否存在曝露我的业务逻辑的安全风险?
工作程序使用标准 HTTP GET 请求从 Amazon SWF 获取任务并返回计算结果。因此,您不必曝露工作程序的任何终端节点。而且,Amazon SWF 仅在决策程序启动任务时才向工作程序提供这些任务。鉴于决策程序由您编写,所以您能够完全控制何时以及如何启动任务,包括通过这些任务发送到工作程序的输入数据。
Amazon SWF 在我的应用程序中对于协调任务可靠性有何帮助?
Amazon SWF 围绕任务分配提供可靠的保证。它可确保任务永远不会重复,且只分配一次。因此,即使有多个特定活动类型的工作程序(或大量决策程序实例),Amazon SWF 为特定的任务仅提供一个工作程序(或一个决策程序实例)。此外,Amazon SWF 对于工作流执行,每次最多保留一个待定的决策任务。因此,您可以运行多个决策程序实例,而不必担心同时针对同一执行任务运行两个实例。借助这些功能,您可以协调工作流,而不必担心任务重复、丢失或冲突。
限制
可以在 Amazon SWF 中注册多少工作流类型、活动类型和域?
每个域中最多可以注册或淘汰 10000 个工作流和活动类型(总计)。在 AWS 账户中,最多可以拥有 100 个 Amazon SWF 域(包括注册和弃用的域)。
我可以同步运行的工作流执行任务数是否有限制?
在任何给定时间,您的域中最多可以拥有 100000 个开放的执行任务。对于运行的执行任务累计数或 Amazon SWF 保留的执行任务数,没有其他限制。
工作流执行任务可以运行多长时间?
每个工作流执行任务最长可以运行 1 年。每个工作流执行历史记录最多可以增长到 25000 个事件。如果您的使用场景需要超出此限制,可以使用 Amazon SWF 提供的功能,借助子工作流执行来继续执行和规划您的应用程序。
如果我的工作流执行任务闲置较长的一段时间,会怎么样?
如果工作流执行任务闲置了较长的一段时间,Amazon SWF 不会进行任何专门操作。闲置的执行任务受您配置的超时约束。例如,如果您已将执行任务的最大持续时间设置为 1 天,则如果闲置的执行任务超出 1 天,它将会超时。此外,闲置的执行任务还受 Amazon SWF 对于执行任务可以运行的时间限制(1 年)约束。
工作程序处理一项任务需要多长时间?
Amazon SWF 不会对工作程序处理一项任务所需的时间强加特定限制。它会执行超时,即您为活动任务指定的最大持续时间。请注意,由于 Amazon SWF 限制一项执行任务最长可运行 1 年,所以工作程序处理一项任务的时间不能超过该限制。
在工作程序寻求任务前,Amazon SWF 对于任务可以保留多长时间?
Amazon SWF 不会对工作程序轮询前保留任务的时间强加特定限制。不过,在注册活动类型时,您可以对 Amazon SWF 保留该类活动任务的时间设置默认的超时。此外,在调度活动任务时,还可以通过决策程序代码指定此超时或覆盖默认的超时。由于 Amazon SWF 限制一项工作流执行任务最长可运行 1 年,所以如果没有指定超时,任务的保留时间不能超过 1 年。
我是否可以通过发布一项决策安排多个活动任务?
可以,您可以在一个决策中安排调度多达 100 个活动任务,还可以相继发布多个决策。
在一项工作流执行任务及多个执行任务中,我可以拥有多少个工作程序任务、信号和标记?
对于工作流执行期间使用的活动任务、信号及定时器数,没有限制。不过,当前每个工作流执行最多只能包含 1000 个开放活动任务。其中包括已经启动和工作程序正在处理的活动任务。同理,每个工作流执行最多可包含 1,000 个开放定时器,及多达 1,000 个开放子执行任务。
我可以在工作流执行任务中传输多少数据?
对于工作流执行期间传输的数据总量,没有限制。不过,Amazon SWF API 会对执行中用来传送数据的参数强加特定的最大限制。例如,传入活动任务的输入数据和使用信号发送的输入数据每项最多可以包含 32,000 个字符。
Amazon SWF 是否会保留完成的执行任务? 如果是,保留多长时间?
Amazon SWF 可在您指定的任意天数内保留已完成执行任务的历史记录,最长可保留 90 天(即大约 3 个月)。在保留期间,您可以编程方式或通过控制台访问历史记录和搜索执行任务。
何时会限制 API 调用?
除了少见的峰值以外,如果您在很短时间内调用大量 API,可能会受到限制。
访问和可用性
Amazon SWF 可以在哪些区域使用?
有关提供服务的地区,请参阅 AWS 全球基础设施区域表。
Amazon SWF 是否可以跨可用区域使用?
是,Amazon SWF 可以跨 3 个可用区域管理工作流执行历史记录及工作流的其他细节,所以即使在某一可用区域出现故障,您的应用程序仍可以继续依赖于 Amazon SWF。
什么是 Amazon SWF 服务接入点?
请访问 AWS 一般参考文档,了解更多关于访问端点的信息。
计费
定价中包含税费了吗?
除非另行说明,否则我们的价格不包含适用的税费和关税(包括增值税和适用销售税)。 使用日本账单地址的客户若要使用 AWS,则需缴纳日本消费税。