如何将长时间超时的 API 调用拆分为较小的调用

问题描述 投票:0回答:1

我有一个 API js 文件,它由 cronjob 通过curl GET 调用。

这个 js 文件基本上通过

await fetch
向外部 API 进行查询,并通过 await .. updateOne 将响应中的一些数据保存到
MongoDB
上。问题是这种情况在大约 500 个不同值的循环中发生,并且需要超过 10 秒才能完成,而我的无服务器函数的服务器超时限制是 10 秒。

那么如何将其拆分为多个“GET”请求呢? 在 API js 文件中执行

for loop
不是一样吗,因为它仍然算作单个操作?

每次我通过不同的关键字搜索此内容时,它都会找到不相关的内容,我是否遗漏了某些内容?也许很难找到这样的案例?我对整个 cronjob/无服务器功能很陌生,如果这不是要求这个的正确位置,请指出我应该在 Stack Exchange 中将其发布到哪里。

cron serverless vercel
1个回答
1
投票

两种可能的解决方案:

  • 暴力方法是增加超时设置,您可以通过
    serverless.yml
    来完成此操作,可以在
    provider
    部分或直接在函数定义中。 (AWS Lambdas 的最大超时为 900 秒或 15 分钟。)
    (与 Vercel 不相关,企业版的超时为 900 秒,Pro 版为 60 秒,但免费计划为 10 秒。)
  • 在 Lambda 函数内执行 for 循环不会有太大改变。如果您可以将其分解为多个可以参数化的 cron 作业。例如。想象一下一个 cron 作业,它每天都会检查员工列表来进行一些处理。您可以更改您的 cron 作业以接受一系列字母,从而按姓氏过滤员工列表。因此,您可以执行四项任务,而不是一项 cron 任务:A-FG-MN-ST-Z。 (在您的例子中,尝试找到一个参数,将 500 个值分成相等大小的桶。)

当您使用无服务器(至少使用 AWS)按持续时间和内存消耗进行计费时,将其拆分可能没有多大意义,因此增加超时设置可能是更简单的解决方案,但我不知道您的完整信息上下文,所以这只是一个猜测。

© www.soinside.com 2019 - 2024. All rights reserved.