繁体   English   中英

使用 AWS 网关长时间运行的作业 - Lambda - RDS

[英]Long running jobs with AWS Gateway - Lambda - RDS

我的架构是 AWS 网关 - Lambda - RDS 我已将客户的数据作为 xlsx 文件。

我有2个步骤

1.处理文件并存储到事务表中。

2.After user approval Process data to Active tables.

我的问题是针对大文件,由于时间限制(AWS 网关 30 秒,Lambda 15 分钟)和同步过程,我无法完成这些过程。 请建议我 AWS 中的任何服务都可以执行需要与 RDS 持续交互的长时间运行的作业,以将文件数据与系统数据进行比较。

通常,您会希望所有HTTP 请求尽可能短,这意味着您永远不会在 HTTP 请求中执行任何实际工作。 所有实际工作都将在通过其他方式调用的 Lambda 函数中完成,而不是 API 网关。 一般流程是这样的:

  1. 客户端上传大文件,作为回报为这次上传获取一个唯一的 id。
  2. 服务器将文件解析为数据库记录。
  3. 服务器开始处理这些数据库记录。
  4. 客户端可以随时使用 id 查询处理状态。

例如,我以这种方式实现了这样的系统:

  1. 浏览器上传 Excel 大文件,该文件逐行读取并写入数据库,一次成批数百行,所有文件都标记有相同的随机 UUID。 当请求结束时,该文件将自然丢弃。 这种批量读取/写入经过优化,因此即使是非常大的文件也可以在几秒钟内推送到数据库中。
  2. 作为结束上传过程之前的最后一个操作,SQS 消息与上传记录的 UUID 一起排队。
  3. SQS 队列调用 Lambda function 查询所有具有该 UUID 的记录,并将新的 SQS 消息放入队列中,每条记录的 ID 为几十个(即“处理记录 1-20”的消息,“ 21-40" 等)。
  4. 队列再次调用另一个 Lambda 处理程序,该处理程序逐条处理每条记录。

因此,大型上传已分解为单独的记录,然后是单独的批次记录,然后单独处理每个记录,每个单独的步骤不会超过几秒钟,并分布在单独的 Lambda 个实例中。

这不仅允许并行处理许多记录,而且永远不会接近 15 分钟 Lambda 超时。 HTTP 请求也永远不会接近 30 秒的限制,因为初始的解析和存储步骤不会花费很长时间,并且每个后续请求只需要查看数据库的处理状态并且不会做任何事情本身。 根据您的需要,即使初始解析和存储步骤也需要超过 30 秒,您可以将文件上传到 S3,然后触发 Lambda function 从那里处理它。

如果这些步骤中的任何一个,即使像这样最小化和分解,花费的时间超过 15 分钟 Lambda 超时,那么 Lambda 不是这项工作的正确平台。

1.处理文件并存储到事务表中。
我的问题是针对大文件

API 网关有一些负载限制,所以它真的不适合传递更大的负载。

大型内容的常见做法是使用 API 服务返回预签名的url ,客户端可以轻松使用它来将内容上传到 S3

然后,您可以使用另一个 API 资源或S3 事件来调用对 object 创建的操作(启动进程、批处理作业等)。

2.After user approval Process data to Active tables.

现在的问题是什么是审批流程,什么是“流程数据”,可能需要多长时间,需要什么资源。

如果假设它是一个包含多个步骤的长时间运行的过程,也许使用AWS Step Function来协调任务可能是一个不错的选择,但这取决于您的用例。

对于长时间运行的作业,如果您设法将工作分解为可管理的部分,则有 AWS Batch、EMR(或其他计算资源)甚至 SQS+Lambda。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM