首页 > 解决方案 > 我如何架构师轮询以前为我提供了“已完成状态”的长时间运行的异步操作 ID 的外部 API?

问题描述

一点背景知识,我正在使用第三方 API,这个 API 为我的用户存储帐户信息。一些用户不想被存储在这个第三方服务中,当他们表示要删除他们的帐户时,我向这个外部 API 发送一个删除请求,并在返回语句中立即收到一个操作 ID。API 中的此删除请求是一个长时间运行的异步操作,可能需要不到一秒或一小时才能完成。

然后,我可以获取此操作 ID 并通过调用另一个端点来轮询 API,该端点具有我之前提供的操作 ID 以查看其完成状态(“待处理”、“已完成”等)

我应该如何使用 Amazon Web Services 来构建这个架构?理想情况下,当操作完成时,外部 API 会向我的一个 Lambda 函数抛出一个 webhook,但不幸的是,这一次不是一个选项。

标签: amazon-web-servicesapirestasynchronousaws-lambda

解决方案


虽然对此可能有几种意见,但我会从一个 Lambda 开始,它接受操作 id 并询问远程 API 是否已完成该 id 的删除操作。

当用户请求删除时,您将以编程方式创建一个Cloudwatch 事件,该事件被设置为以任何有意义的时间间隔运行 Lambda——比如每 10 分钟一次。

Cloudwatch 事件将使用传递给 Lambda 的参数创建 - 操作 ID。每次调用 Lambda 时,都会将此操作 id 传递给 Lambda。Lambda 调用远程 API 以查看该操作 ID 的删除操作是否成功。

如果删除操作未完成,则 Lambda 将退出,稍后将由 Cloudwatch 事件再次运行。但是,如果删除操作完成,那么 Lambda 会执行成功删除所需的任何操作 - 可能会向用户发送一封电子邮件,告诉他们删除工作或使用状态更新数据库。但另一个重要部分是删除触发 Lambda 的 Cloudwatch 事件,这样它就不会继续轮询删除操作。

Lambda 并非微不足道,因为当删除成功时它有很多事情要做。有些人甚至可能将成功删除的操作拆分到其他 Lambda 中。这是您的电话,并且在某种程度上取决于您能够处理多少devops。


推荐阅读