VPC 中的 AWS Lambda 与数据库交互
AWS Lambda in VPC interacting with Database
我最近在 QA session 中向一位教授提出了一个问题。由于当天问的问题太多,我没有机会跟进这个问题。
所以问题是:
人们(通常)如何绕过与 RDS 交互的 VPC 中的 AWS Lambda 冷启动时间?
他的回答是:
作为流程较长部分的 ENI 仅附加在容器的开头。因此,如果您每分钟左右 运行 在数据库中 select 排名前 1 位,它将保持连接打开,而不必附加 ENI
所以我的后续问题是,
我有多个 lambda 函数。我应该在单个 lambda 函数上 运行 SELECT TOP 1,还是如果事件来自 cloudwatch,我应该从 cloudwatch(和 select TOP 1)ping 我的所有 lambda 函数?
谢谢!
问题不在于 RDS,而在于 Lambda 配置。当你有一个 "cold" lambda 作业(一个不是 运行ning 并且没有分配给任何容器实例)时,整个 ENI 就会发生。当您尝试 运行 "cold" Lambda 作业时,无论如何您最终都会遇到相当大的延迟:AWS 系统必须找到一个空闲实例,将您的作业复制到那里,提供额外的资源(ENI,路由 table 条目等),然后才执行您的代码(如果您使用 Java 或 C#,执行延迟本身也可能相当高)。
为了防止您的作业继续 "cold",您不必对数据库执行 ping 操作。您只需确保该作业被定期且足够频繁地调用,即使它什么都不做(您可以将一个字段添加到您的作业参数或环境中以调 "do nothing and exit")。
我最近在 QA session 中向一位教授提出了一个问题。由于当天问的问题太多,我没有机会跟进这个问题。
所以问题是: 人们(通常)如何绕过与 RDS 交互的 VPC 中的 AWS Lambda 冷启动时间?
他的回答是: 作为流程较长部分的 ENI 仅附加在容器的开头。因此,如果您每分钟左右 运行 在数据库中 select 排名前 1 位,它将保持连接打开,而不必附加 ENI
所以我的后续问题是,
我有多个 lambda 函数。我应该在单个 lambda 函数上 运行 SELECT TOP 1,还是如果事件来自 cloudwatch,我应该从 cloudwatch(和 select TOP 1)ping 我的所有 lambda 函数?
谢谢!
问题不在于 RDS,而在于 Lambda 配置。当你有一个 "cold" lambda 作业(一个不是 运行ning 并且没有分配给任何容器实例)时,整个 ENI 就会发生。当您尝试 运行 "cold" Lambda 作业时,无论如何您最终都会遇到相当大的延迟:AWS 系统必须找到一个空闲实例,将您的作业复制到那里,提供额外的资源(ENI,路由 table 条目等),然后才执行您的代码(如果您使用 Java 或 C#,执行延迟本身也可能相当高)。
为了防止您的作业继续 "cold",您不必对数据库执行 ping 操作。您只需确保该作业被定期且足够频繁地调用,即使它什么都不做(您可以将一个字段添加到您的作业参数或环境中以调 "do nothing and exit")。