2026-01
使用 AWS Step Functions 调用异步外部 API 架构博客
使用 AWS Step Functions 调用异步外部 API
文章要点
外部供应商 API 可助力企业提升运营效率、降低成本并改善客户服务。本文介绍如何使用 AWS Step Functions 构建异步外部 API 的调用架构,确保系统的可靠性。适用于包括电商、医疗和金融等多行业的各种应用场景。在现代商业中,外部供应商 API 可以帮助组织提升运营效率、降低开支并提供更好的客户服务。然而,在与第三方服务集成时,安全性、可靠性和成本等挑战是不可忽视的。组织必须确保其系统能够应对性能瓶颈或停机时间。此外,调用外部 API 可能涉及如许可证费用等额外成本。如果已与外部 API 供应商签订了最大请求每秒 (RPS) 合同,系统就必须进行相应调整。
在本文中,我们将展示如何利用 AWS Step Functions 创建一个调用外部供应商 API 的架构,并提供有关可靠性的具体指导。这种编排方法适用于任何依赖技术和数据的行业,这些行业受益于外部供应商 API 的集成。例如,包括电商应用与第三方支付网关、运输公司,或健康和银行领域的应用等。
异步外部 API 调用概述
此解决方案概述了如何使用 AWS 服务构建一个控制第三方服务调用速率的调度器,这些服务通过服务回调模式来处理长期运行的作业。这个 架构 可在 AWS 参考架构图 的部分找到。
如图 1 所示,该架构能够根据最多 RPS 合同,通过 Step Functions 的功能来控制外部服务的调用。Step Functions 会暂停主请求工作流,直到从外部系统接收到指示作业完成的回调。
各步骤的探索
设置 Step Functions 以处理与第三方的长期请求的生命周期。在工作流中,添加一个请求步骤并使用 waitForTaskToken 作为回调暂停此步骤。如果未接收到回调,则设置超时以抛出超时错误。将任务令牌和请求有效载荷发送到一个 Amazon Simple Queue Service Amazon SQS队列。使用 Amazon CloudWatch 监控队列长度。如果队列长度超出基于最大 RPS 的软限制,考虑调整与第三方服务的合同。使用 AWS Lambda 轮询 Amazon SQS,并触发一个 express Step Functions 工作流。通过轮询 批大小、保留并发 和 最大并发性 来控制 Lambda 的调用速率,稍后将详细讨论。可选地,通过 AWS AppConfig 在 Lambda 中添加动态延迟,以便在系统仍需要较低的调用速率以符合合同 RPS 时进行控制。Step Functions 会调用一个配置了速率限制的 Amazon API Gateway HTTP 代理 API,以符合合同 RPS。API Gateway 是一重保障代理,以确保您的系统不违反 RPS 合同,并能动态调整调用速率参数。调用外部第三方异步服务 API,发送从请求队列中获取的有效载荷并接收来自服务的 jobID。 使用 Amazon SQS 将失败的请求发送到死信队列 (DLQ)。将主工作流的任务令牌和来自第三方服务的 jobID 存储在一个 Amazon DynamoDB 表中。用于将 jobID 与任务令牌关联。当外部服务完成时,通过实现 API Gateway 的回调 webhook 端点接收完成的 jobID。通过 API Gateway 的映射模板转换外部回调,将有效载荷和 jobID 添加到 Amazon SQS 队列,并立即响应调用者。使用 Lambda 轮询回调的 Amazon SQS 队列,然后查询存储的令牌。使用令牌调用 SendTaskSuccess 来解除等待的工作流,并将失败的信息存储在回调 DLQ 中。在主工作流中,将 jobID 传递到下一个步骤,并调用 Step Functions 处理器以获取第三方结果。最后,处理外部服务的结果。控制外部 API 的调用速率
为了遵守第三方 RPS 合同,采用一种机制以控制系统的调用速率。从请求 Amazon SQS 中轮询消息 (或架构中的步骤 3) 的速率直接影响您的调用速率。
可以使用不同的参数来控制 Lambda 的调用速率,其中 Amazon SQS 作为其触发“事件源”,例如:
鲸鱼官方正版官方入口参数描述批大小每个批次发送到函数的记录数。对于标准队列,最多可达 10000 条记录;对于先进先出 (FIFO) 队列,最多为 10 条记录。仅使用批大小无法限制调用速率,应与其他参数结合使用。批窗口收集记录之前调用函数的最大时间以秒计。此参数仅适用于标准队列。最大并发性设置 Amazon SQS 事件源可以调用的函数的最大并发实例数。最大并发性是事件源级的设置。触发配置如图 2 所示。
图 2 触发 Lambda 的配置参数
其他 Lambda 配置参数也可以用于控制调用速率,例如:
参数描述保留并发保证函数的最大并发实例数。当某个函数具有保留并发性时,其他函数无法使用此并发性。这可以用来限制并降低调用速率。预配置并发初始化请求的执行环境数量,以便可以立即响应您的函数调用。注意,配置预配置并发会给您的 AWS 账户造成费用。这些额外的 Lambda 配置参数在图 3 中展示。
最大化外部 API 架构
在实现这项架构时,考虑一些用例以确保您构建了一个成熟的调度器。
让我们讨论一些示例:
如果外部系统在步骤 8 中未能对 API 请求做出响应,则会在步骤 1 中发生超时异常。应在主状态机的步骤 1 中配置合理的超时,超时值应考虑外部系统的最大响应时间。AWS Step Functions 开发者指南中的错误处理能力部分 提供了针对不同错误类型实施自定义逻辑的能力。使用 StatesTimeout 错误状态配置超时错误。
在 Lambda 函数中的动态延迟如步骤 4 所述仅应用于流量激增的短期临时解决方案。如果外部方的 RPS 合同非常低,考虑其他替代方案来引入延迟。例如,Amazon EventBridge Scheduler 可以用来定期触发 Lambda 函数以消费来自 Amazon SQS 的消息,从而避免 Lambda 函数在空闲/等待状态下造成的费用。
结论
本文讨论了如何构建端到端的编排来管理请求的生命周期,以及五种不同参数来控制第三方服务的调用速率,并根据最大 RPS 合同限制对外部服务 API 的调用。
我们还考虑了使用 Step Functions 中的错误处理能力和通过 CloudWatch 监控系统的用例。此外,该架构采用了完全托管的 AWS 无服务器服务,从而消除了在 AWS 构建高可用、可靠、安全且具成本效益的系统中的不必要繁重工作。
作者简介
Jorge Fonseca
Jorge 是一名高级解决方案架构师/企业家,在 IT 行业有超过 20 年的经验,拥有 13 项 AWS 认证,以及计算机科学和企业管理的两个硕士学位和敏捷管理认证。他通过将复杂挑战转化为可操作的路线图,推动客户的云转型。他在迁移和现代化、旅行和酒店业、混沌工程和情感智力等领域是主题专家。
Hossam EbrahimHossam Ebrahim 是位于英国伦敦的亚马逊 AWS 解决方案架构师。他与 AWS 的新客户合作,帮助他们在各个阶段进行云采用旅程。他在软件工程方面有超过 13 年的工作经验,包括企业解决方案的架构、设计和开发。在工作之外,他喜欢与家人共度时光,外出活动和观看电影。
Shirisha VivekShirisha Vivek 是亚马逊 AWS 的解决方案架构师,位于英国伦敦。她与客户合作,在 AWS 云中构建良好架构的解决方案。在加入 AWS 之前,她在大型企业工作了超过 20 年,设计和构建关键商业应用。在工作之外,她喜欢阅读、烘焙、烹饪以及与家人和朋友共度时光。