使用 AWS Step Functions 调用异步外部 API 架构博客

使用 AWS Step Functions 调用异步外部 API

文章要点

  • 外部供应商 API 可助力企业提升运营效率、降低成本并改善客户服务。
  • 本文介绍如何使用 AWS Step Functions 构建异步外部 API 的调用架构,确保系统的可靠性。
  • 适用于包括电商、医疗和金融等多行业的各种应用场景。

在现代商业中,外部供应商 API可以帮助组织提升运营效率、降低开支并提供更好的客户服务。然而,在与第三方服务集成时,安全性、可靠性和成本等挑战是不可忽视的。组织必须确保其系统能够应对性能瓶颈或停机时间。此外,调用外部 API 可能涉及如许可证费用等额外成本。如果已与外部 API 供应商签订了最大请求每秒 (RPS) 合同,系统就必须进行相应调整。

在本文中,我们将展示如何利用 创建一个调用外部供应商 API 的架构,并提供有关可靠性的具体指导。这种编排方法适用于任何依赖技术和数据的行业,这些行业受益于外部供应商 API的集成。例如,包括电商应用与第三方支付网关、运输公司,或健康和银行领域的应用等。

异步外部 API 调用概述

此解决方案概述了如何使用 AWS 服务构建一个控制第三方服务调用速率的调度器,这些服务通过服务回调模式来处理长期运行的作业。这个 可在 的部分找到。

如图 1 所示,该架构能够根据最多 RPS 合同,通过 Step Functions 的功能来控制外部服务的调用。Step Functions会暂停主请求工作流,直到从外部系统接收到指示作业完成的回调。

![调用异步外部 API删除)

各步骤的探索

  1. 设置 Step Functions 以处理与第三方的长期请求的生命周期。在工作流中,添加一个请求步骤并使用 waitForTaskToken 作为回调暂停此步骤。如果未接收到回调,则设置超时以抛出超时错误。
  2. 将任务令牌和请求有效载荷发送到一个 (Amazon SQS)队列。使用 监控队列长度。如果队列长度超出基于最大 RPS 的软限制,考虑调整与第三方服务的合同。
  3. 使用 轮询 Amazon SQS,并触发一个 。通过轮询 、 和 来控制 Lambda 的调用速率,稍后将详细讨论。
  4. 可选地,通过 AWS AppConfig 在 Lambda 中添加动态延迟,以便在系统仍需要较低的调用速率以符合合同 RPS 时进行控制。
  5. Step Functions 会调用一个配置了速率限制的 HTTP 代理 API,以符合合同 RPS。API Gateway 是一重保障代理,以确保您的系统不违反 RPS 合同,并能动态调整调用速率参数。
  6. 调用外部第三方异步服务 API,发送从请求队列中获取的有效载荷并接收来自服务的 jobID。 使用 Amazon SQS 将失败的请求发送到死信队列 (DLQ)。
  7. 将主工作流的任务令牌和来自第三方服务的 jobID 存储在一个 表中。用于将 jobID 与任务令牌关联。
  8. 当外部服务完成时,通过实现 API Gateway 的回调 webhook 端点接收完成的 jobID。
  9. 通过 API Gateway 的映射模板转换外部回调,将有效载荷和 jobID 添加到 Amazon SQS 队列,并立即响应调用者。
  10. 使用 Lambda 轮询回调的 Amazon SQS 队列,然后查询存储的令牌。使用令牌调用 SendTaskSuccess 来解除等待的工作流,并将失败的信息存储在回调 DLQ 中。
  11. 在主工作流中,将 jobID 传递到下一个步骤,并调用 Step Functions 处理器以获取第三方结果。最后,处理外部服务的结果。

控制外部 API 的调用速率

为了遵守第三方 RPS 合同,采用一种机制以控制系统的调用速率。从请求 Amazon SQS 中轮询消息 (或架构中的步骤 3) 的速率直接影响您的调用速率。

可以使用不同的参数来控制 Lambda 的调用速率,其中 Amazon SQS 作为其触发“事件源”,例如:

参数描述
****每个批次发送到函数的记录数。对于标准队列,最多可达 10,000 条记录;对于先进先出 (FIFO) 队列,最多为 10 条记录。仅使用批大小无法限制调用速率,应与其他参数结合使用。
****收集记录之前调用函数的最大时间(以秒计)。此参数仅适用于标准队列。
****设置 Amazon SQS 事件源可以调用的函数的最大并发实例数。最大并发性是事件源级的设置。

触发配置如图 2 所示。

![触发 Lambda删除)

图 2. 触发 Lambda 的配置参数

其他 Lambda 配置参数也可以用于控制调用速率,例如:

参数描述
****保证函数的最大并发实例数。当某个函数具有保留并发性时,其他函数无法使用此并发性。这可以用来限制并降低调用速率。
****初始化请求的执行环境数量,以便可以立即响应您的函数调用。注意,配置预配置并发会给您的 AWS 账户造成费用。

这些额外的 Lambda 配置参数在图 3 中展示。

![Lambda 并发配置选项 - 删除)

最大化外部 API 架构

在实现这项架构时,考虑一些用例以确保您构建了一个成熟的调度器。

让我们讨论一些示例:

  • 如果外部系统在步骤 8 中未能对 API 请求做出响应,则会在步骤 1 中发生超时异常。应在主状态机的步骤 1 中配置合理的超时,超时值应考虑外部系统的最大响应时间。

提供了针对不同错误类型实施自定义逻辑的能力。使用 States.Timeout 错误状态配置超时错误。

  • 在 Lambda 函数中的动态延迟——如步骤 4 所述——仅应用于流量激增的短期临时解决方案。如果外部方的 RPS 合同非常低,考虑其他替代方案来引入延迟。

例如, 可以用来定期触发 Lambda 函数以消费来自 Amazon SQS 的消息,从而避免 Lambda函数在空闲/等待状态下造成的费用。

结论

本文讨论了如何构建端到端的编排来管理请求的生命周期,以及五种不同参数来控制第三方服务的调用速率,并根据最大 RPS 合同限制对外部服务 API 的调用。

我们还考虑了使用 Step Functions 中的错误处理能力和通过 CloudWatch 监控系统的用例。此外,该架构采用了完全托管的 ,从而消除了在 AWS构建高可用、可靠、安全且具成本效益的系统中的不必要繁重工作。

作者简介

![JorgeFonseca](https://d2908q01vomqb2.cloudfront.net/fc074d501302eb2b93e2554793fcaf50b3bf7291/2022/03/28/Jorge- 删除)

Jorge Fonseca

Jorge 是一名高级解决方案架构师/企业家,在 IT 行业有超过 20 年的经验,拥有 13 项 AWS认证,以及计算机科学和企业管理的两个硕士学位和敏捷管理认证。他通过将复杂挑战转化为可操作的路线图,推动客户的云转型。他在迁移和现代化、旅行和酒店业、混沌工程和情感智力等领域是主题专家。

![HossamEbrahim](https://d2908q01vomqb2.cloudfront.net/fc074d501302eb2b93e2554793fcaf50b3bf7291/2023/03/24/internal- 删除)

Hossam Ebrahim

Hossam Ebrahim 是位于英国伦敦的亚马逊 AWS 解决方案架构师。他与 AWS的新客户合作,帮助他们在各个阶段进行云采用旅程。他在软件工程方面有超过 13年的工作经验,包括企业解决方案的架构、设计和开发。在工作之外,他喜欢与家人共度时光,外出活动和观看电影。

![ShirishaVivek](https://d2908q01vomqb2.cloudfront.net/fc074d501302eb2b93e2554793fcaf50b3bf7291/2023/03/24/internal- 删除)

Shirisha Vivek

Shirisha Vivek 是亚马逊 AWS 的解决方案架构师,位于英国伦敦。她与客户合作,在 AWS 云中构建良好架构的解决方案。在加入 AWS之前,她在大型企业工作了超过 20 年,设计和构建关键商业应用。在工作之外,她喜欢阅读、烘焙、烹饪以及与家人和朋友共度时光。

Leave a Reply

Required fields are marked *