【问题标题】:AWS Lambda long running http requestsAWS Lambda 长时间运行的 http 请求
【发布时间】:2017-10-05 07:11:23
【问题描述】:

我有一个 AWS Lambda 函数,它在 Algorithmia 上调用一个深度学习函数,对结果进行一些后处理,然后返回一些数据。 Algorithmia 提供了一个 python client,我正在使用它,它只是让向 Algorithmia 平台上的算法发送请求变得更容易一些。

问题如下:当一个 Algorithmia 函数有一段时间没有被调用时,它被卸载并且第一次调用来预热它(冷启动)需要一段时间,可能是 30 秒。如果我的 Lambda 函数要等待 30 秒以等待响应,而每当它碰巧从冷启动触发 Algorithmia 函数时,这将是非常昂贵和浪费的。

是否有某种方法可以在 Lambda 中发送 HTTP 请求,并且当请求完成时,结果会通过管道传输到新的 Lambda 函数中,从而不需要 Lambda 函数一直等待并浪费资源?我不希望这样,因为我不确定这实际上是如何工作的 - 关于如何避免等待一段时间等待响应并浪费 Lambda 资源,是否有人有其他想法?

编辑:在大多数情况下(很明显,Algorithmia 算法从冷启动加载需要一段时间的情况除外)延迟是一个问题,我无法通过采取一些解决方法来增加延迟使用 Algorithmia 函数编写它对 S3 的响应(例如)然后触发 Lambda 函数的方法。

【问题讨论】:

  • 这是在什么环境下运行的?桌面?网络服务器? Linux?视窗?等
  • 对不起,我不确定你的意思。如果您需要,Algorithmia 是托管的云 ML 服务。
  • 我认为除了使用具有与您的 lambda 必须相同的触发器的 VM(工作机器)来操作算法然后 VM 处理结果或传递到触发 lambda 的队列之外没有其他方法用于后处理。
  • 呃,我没用过 Algorithmia,你不能触发一个事件来启动函数,一旦它完成了吗?
  • 旧线程,但我支持@johni 的方法。我有一个类似的问题(冷启动约 1 分钟,需要

标签: python amazon-web-services lambda aws-lambda algorithmia


【解决方案1】:

许多输出文件的 Algorithmia 函数允许您指定输出位置(通常是输入 JSON 的output 参数)。如果该假设适用于您的情况,那么您可以让 Algorithmia 函数直接写入 S3 存储桶并让 S3 触发单独的 lambda 函数。该过程如下所示:

  • Add an S3 data source 到您的 Algorithmia 帐户,并根据您的需要配置权限。

  • 调用算法时,将输出参数设置为使用该 S3 数据源,例如"output": "s3://algorithm-name/sample-0001.png"

  • 配置 Algorithmia 的 python 客户端以忽略输出。这会导致请求立即返回,而不是等待函数完成:

from Algorithmia.algorithm import OutputType

client.algo("username/algoname")
    .set_options(output=OutputType.void)
    .pipe(input)

【讨论】:

  • 感谢您的想法,但如果您查看我帖子中的编辑,我提到这种解决方案可能无法满足我的需求。每毫秒计数并将一个文件写入 S3,然后触发一个 lambda 函数,我认为这将是相当昂贵的,至少花费几百毫秒(或者可能是几秒钟 - 我不知道它有多快)。
  • 啊...我将“昂贵”误解为定价问题而不是延迟问题。像@joarleymoraes 提到的那样,定期 ping 服务是今天的一种选择。
【解决方案2】:

您可以创建一个 Lambda 函数来不时调用 Algorithmia API,为您的主要处理函数“保温”。您可以为此使用 Lambda 计划事件。

【讨论】:

  • 我同意@joarleymoraes 这就是我所说的 ping 函数。它也不一定必须是单独的 Lambda 函数,您可以在将特定负载传递给现有函数时将该功能添加到现有函数中。在 Cloudwatch Events(这是 Lambda 的调度机制)中,指定要传递给函数的有效负载,例如 {"ping": True } 和在您的 lambda 函数中,每当您收到该事件时调用 Algorithmia 以使其保持温暖。如有必要,您可以将其安排为每分钟发生一次。
  • 这在某些情况下是可行的,但是对于您必须多久调用一次以“保持温暖”并没有太多保证。如果您对保持 lambda 运行 30 秒的成本敏感,那么我猜您可能也对不断 ping 函数的成本敏感。 (编辑:我似乎误解了原始问题的“成本敏感性”。)
猜你喜欢
  • 2011-01-12
  • 2012-08-20
  • 2015-10-27
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
相关资源
最近更新 更多