【问题标题】:AWS Lambda Provisioned Concurrency in VPC (ColdStart)VPC 中的 AWS Lambda 预置并发(冷启动)
【发布时间】:2020-10-24 02:11:47
【问题描述】:

我在 VPC(连接到 RDS)中有一个 AWS Lambda,它遇到了典型的冷启动问题。我已经阅读了几篇关于如何让事情变得更快的文章,所以我部署了Provisioned concurrency

详情:.NET Core 3.1 环境,在 AWS Lambda 中运行的 ASP.NET Core 项目,连接 PostgreSQL RDS dbo,VPC 环境。

在测试阶段,为了尽可能降低成本,我只有 3 个预置并发(10 美元)

在预置并发之前,几个小时不活动后的第一个请求需要 15 到 20 秒。不久之后触发的下一个请求只用了不到一秒钟。然后一些请求又随机花费了 15 秒(我认为是由于并行调用)。

在一天不活动后的预置并发后第一个请求需要 14 秒。

我对预置并发的期望是摆脱冷启动。 AWS 博客或其他博客支持了我的愿望,但仍有一个问题。我认为这是由于 VPC。

感谢任何提示或经验分享!

【问题讨论】:

    标签: c# .net-core aws-lambda amazon-vpc


    【解决方案1】:

    我个人更喜欢使用 Cloudwatch 每 5-10 分钟 ping 一次 lambda。以最低的成本提供绝对的享受。另外,您正在记录默认情况下发生的事情,因此很容易管理。

    这里有一个很棒的指南:

    https://read.acloud.guru/how-to-keep-your-lambda-functions-warm-9d7e1aa6e2f0

    我应该补充一下,根据 AWS 的可用性建议,我通常在一个 VPC 中的两个 AZ 上使用 lambda。

    【讨论】:

    • 感谢约翰尼的回复!不幸的是,使用 CloudWatch 的 Lambda 升温不起作用。看起来只有当 Lambda 尝试连接到 DBO(不是通过 ping 调用)时才配置 VPC 的底层网络接口
    • 应该在 cloudwatch ping 发生时配置 Lambda ENI。由于 lambda 需要调用弹性网络面。话虽如此,我使用的 cloudwatch 服务是通过 VPC 端点进行的,因此所有内容都通过 VPC 进行路由,因此 lambda 必须有一个 ENI 附加到要调用的 VPC。
    • 是的,我明白你在说什么。你知道我的设置有什么问题吗?我有 CloudWatch ping(我看到它在日志中每 5 分钟发生一次)但是请求仍然随机从 30 毫秒到 19 秒。
    • 考虑到您的 cloudwatch,lambda 和 postgres 都是 VPC 端点,唯一跳出的是 .net 环境。如果 lambda 容器处于保温状态,如果不经常使用,您的代码仍有可能需要编译。 Lambda 与 python 或 node.js 一起工作最好/最快,因为没有编译时间。我在使用 Java 时看到了滞后,所以我现在倾向于使用 python 来处理所有事情。但是,你有提供并发吗?但有报道称,即使使用 .net 所需的时间也可能是 python 的两倍,尤其是在内存需求较大的情况下。
    • 我想我现在开始问客户的一个问题是为什么在 VPC 中需要 lambda,通常是出于安全目的。但是,我发现这种推理是由于知识上的差距,因此我们会检查 VPC 之外的 lambda 上的所有安全约束,并且在大多数情况下,如果配置正确,他们可以将 lambda 留在 VPC 之外VPC...但是,我知道这并不总是可行的...但它确实消除了很多令人头疼的问题。
    猜你喜欢
    • 1970-01-01
    • 2018-04-14
    • 2019-11-21
    • 1970-01-01
    • 2019-08-07
    • 2021-11-06
    • 2022-10-04
    • 2020-07-02
    • 1970-01-01
    相关资源
    最近更新 更多