我已经为lambda配置了简单的触发器,它在到达S3时处理图像。通常,lambda以最小延迟触发,当S3接收到图像时,多次在同一秒钟内触发。但是,偶尔,大约7%的情况下,在接收到的图像和ObjectCreated事件之间存在延迟,这种延迟可能高达19秒!!(平均9-10秒)。
知道如何避免这种延误吗?
这种延迟使我无法使用S3->Lambda触发器来实现高性能的实时应用程序。
发布于 2018-11-30 15:45:50
一段时间后,试图调查和谷歌。
同时询问AWS对这个案件的支持,我终于从AWS那里得到了答案:
--
。。Lambda几乎是在我们收到事件后立即调用该函数的,但是您共享的特定请求id是对coldstart的调用,该调用增加了几乎10秒的额外延迟。 该函数位于VPC中,在这里,冷启动往往要花费几秒钟的时间()。Coldstart不能被消除,但是对于高容量函数,一旦您扩展了容器,那么冷启动的发生率就应该更低,并且可以重用更多的容器。
正如你可能从答案中看到的,如果你试图制作一个高性能/高流量的实时应用程序,S3->Lambda将无法满足您的需求。
我的下一个问题是,如果我直接从上传图像的脚本触发lambda,会有帮助吗?或者我应该避免在这种应用程序中使用lambda,而只将它留给后台数据处理?
希望这个答案能帮助到其他人。
发布于 2020-02-26 18:12:52
在2019年11月28日之后,由于AWS Lambda服务的改进,VPC内部的Lambdas冷启动不再造成如此多的延迟。你可以在这里找到更多关于它的信息:
https://aws.amazon.com/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/
在Lambda中有很多其他方法来减少冷启动,但这主要取决于用例。最常见的方法是减少Lambda的代码大小,或者使用其他运行时,例如Node或Python。
https://stackoverflow.com/questions/53560689
复制相似问题