我为 lambda 配置了简单的触发器,该触发器在到达 S3 时会处理图像。 通常, lambda 会以最小的延迟触发,在 S3 收到图像的同一秒内会发生多次。 但是,有时候,大约有7%的情况是收到的图片和 ObjectCreated 事件之间存在延迟,该延迟可能长达 19秒! >(平均9-10秒)。
有什么办法避免这种延迟吗?
这种延迟使我无法将 S3-> Lambda 触发器用于高性能实时应用。
答案 0 :(得分:2)
过一会儿,尝试进行调查和谷歌搜索。
在同时询问AWS支持此案的同时,我终于从AWS那里得到了答案:
-
.. Lambda在我们收到后立即调用了该函数 事件,但是您共享的特定请求ID是用于调用 必须进行冷启动,这增加了近 10秒的额外延迟。
该功能位于 VPC 中,在这种情况下,冷启动通常需要很少的时间 更长的时间。 冷启动不能消除,但要大批量生产 功能一旦定标,冷启动的发生率应降低 以及更多的容器可供重用。
从答案中可能会看到,如果您要制作高性能/高流量实时应用程序,则S3-> Lambda将不符合您的要求。
我的下一个问题是,如果我直接从上传图像的脚本中触发lambda,这会有所帮助吗? 还是我应该避免在此类应用程序上完全使用lambda并将其仅留给后台数据处理?
希望这个答案对其他人有帮助。
答案 1 :(得分:1)
2019年11月28日之后,由于AWS Lambda服务的改进,VPC内部的Lambda的冷启动不再造成那么多的延迟。您可以在此处找到有关它的更多信息:
https://aws.amazon.com/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/
还有很多其他方法可以减少Lambda中的冷启动,但主要取决于用例。最常见的是减小Lambda的代码大小或使用其他运行时,例如Node或Python。