为帮助您准备从 Amazon Web Services (AWS) Step Functions 迁移到 Google Cloud上的 Workflows,本页介绍了这两种产品之间的主要相似之处和不同之处。本文旨在帮助已熟悉 Step Functions 的用户使用 Workflow 实现类似的架构。
与 Step Functions 一样,Workflows 是一个全代管式、基于状态的编排平台,该平台会按照您定义的顺序执行服务:工作流。这些工作流可以组合各种服务,包括 Cloud Run 或 Cloud Run functions 上托管的自定义服务、 Google Cloud Cloud Vision AI 和 BigQuery 等服务以及任何基于 HTTP 的 API。
请注意,由于极速工作流的持续时间有限,并且不支持精确一次工作流执行,因此我们在此处未考虑 Step Functions 极速工作流这种 AWS Step Functions 工作流类型。
Hello World
在 Step Functions 中,状态机就是工作流,任务是工作流中的一种状态,表示其他 AWS 服务执行的单个工作单元。步骤函数要求每个状态都定义下一个状态。
在 Workflows 中,一系列使用 Workflows 语法的步骤用于描述要执行的任务。Workflows 会将步骤视为有序列表并逐个执行,直到所有步骤都运行完毕。
以下“Hello World”示例演示了如何在步骤函数中使用状态,以及如何在工作流中使用步骤:
步骤函数
{ "Comment": "Hello world example of Pass states in Amazon States Language", "StartAt": "Hello", "States": { "Hello": { "Type": "Pass", "Result": "Hello", "Next": "World" }, "World": { "Type": "Pass", "Result": "World", "End": true } } }
工作流 YAML
--- # Hello world example of steps using Google Cloud Workflows syntax main: steps: - Hello: next: World - World: next: end ...
工作流 JSON
{ "main": { "steps": [ { "Hello": { "next": "World" } }, { "World": { "next": "end" } } ] } }
比较概览
本部分将更详细地比较这两款产品。
| 步骤函数 | Workflows | |
|---|---|---|
| 语法 | JSON(在工具中为 YAML) | YAML 或 JSON |
| 控制流 | 在状态之间转换 | 包含步骤的命令式流控制 |
| Worker | 资源 (ARN) 和 HTTP 任务 | HTTP 请求和连接器 |
| 可靠性 | 捕获/重试 | 捕获/重试 |
| 最大并行数量 | 支持 | 支持 |
| 状态数据 | 传递状态 | 工作流变量 |
| Authentication | IAM | IAM |
| 用户体验 | Workflow Studio、CLI、SDK、IaC | Google Cloud 控制台、CLI、SDK、IaC |
| 价格 | Step Functions 价格 | Workflows 价格 |
- 语法
Step Functions 主要使用 JSON 来定义函数,不直接支持 YAML;不过,在适用于 Visual Studio Code 的 AWS 工具包和 AWS CloudFormation 中,您可以使用 YAML 来定义 Step Functions。
您可以使用 Workflows 语法描述 Workflows 步骤,这些步骤可以使用 YAML 或 JSON 编写。大多数工作流都是采用 YAML 格式。本页中的示例展示了 YAML 的优势,包括易于读写以及对注释的原生支持。如需详细了解 Workflows 语法,请参阅语法参考文档。
- 控制流
Workflows 和 Step Functions 都将工作流建模为一系列任务:Workflows 中的步骤,Step Functions 中的状态。这两种方式都允许任务指明下一步要执行哪项任务,并且支持类似于开关的条件,以便根据当前状态选择下一个工作单元。一个关键区别是,步骤函数要求每个状态都定义下一个状态,而工作流会按照指定的顺序(包括备选后续步骤)执行步骤。如需了解详情,请参阅条件和步骤。
- 工作器
这两款产品都可以编排函数、容器和其他 Web 服务等计算资源,以便完成各种任务。在 Step Functions 中,工作器由
Resource字段标识,该字段在语法上是 URI。用于标识 Worker 资源的 URI 采用 Amazon 资源名称 (ARN) 格式。如需直接调用任意 HTTP 端点,您可以定义 HTTP 任务。工作流可以向任意 HTTP 端点发送 HTTP 请求并获取响应。借助连接器,您可以更轻松地连接到工作流中的其他 Google Cloud API,并将工作流与 Pub/Sub、BigQuery 或 Cloud Build 等其他 Google Cloud 产品集成。连接器会为您处理请求的格式,从而为您处理请求的格式设置并提供方法和参数,这样您就无需了解Google Cloud API 的详细信息。您还可以配置超时和轮询政策。
- 可靠性
如果任务失败,您的工作流必须能够适当地重试、在必要时捕获异常,并根据需要重新路由工作流。步骤函数和工作流都使用类似的机制来实现可靠性:使用重试捕获异常,并最终将其分派到工作流中的其他位置。如需了解详情,请参阅工作流错误。
- 最大并行数量
您可能希望工作流程并行协调多个任务。步骤函数提供了两种实现此目的的方法:您可以获取一个数据项,并将其并行传递给多个不同的任务;或者,您可以使用数组,并将其元素传递给同一任务。
在工作流中,您可以定义工作流的某个部分,其中两个或更多步骤可以并发执行。您可以定义并发运行的分支,也可以定义迭代并发运行的循环。如需了解详情,请参阅并行执行工作流步骤。
- 状态数据
工作流引擎的一个好处是,它会为您维护状态数据,而无需外部数据存储区。在 Step Functions 中,状态数据会以 JSON 结构的形式从一个状态传递到另一个状态。
在 Workflows 中,您可以在全局变量中保存状态数据。由于您最多可以设置一年的执行时长,因此只要实例仍在执行,您就可以保留状态数据。
- 身份验证
这两款产品都依赖于底层 Identity and Access Management (IAM) 系统进行身份验证和访问权限控制。例如,您可以使用 IAM 角色调用 Step Functions。