假设我有一个 AWS lambda 函数
**String lambdaFunction1() {
//some processing
}**
假设 lambdaFunction1 在 SNS 主题中的任何新消息上触发。10 条 SNS 消息会触发多少个 JVM 实例?
AWS lambda 是在其自己的 JVM 中执行每个 lambda,还是重新利用相同的 JVM 实例。
假设我有一个 AWS lambda 函数
**String lambdaFunction1() {
//some processing
}**
假设 lambdaFunction1 在 SNS 主题中的任何新消息上触发。10 条 SNS 消息会触发多少个 JVM 实例?
AWS lambda 是在其自己的 JVM 中执行每个 lambda,还是重新利用相同的 JVM 实例。
引用https://aws.amazon.com/de/blogs/compute/container-reuse-in-lambda/
假设您的函数完成,并且经过了一段时间,然后您再次调用它。Lambda 可能会重新创建一个新容器,在这种情况下,体验就像上面描述的一样。如果您更改代码,肯定会出现这种情况。
但是,如果您没有更改代码并且没有太多时间过去,Lambda 可能会重用以前的容器。这为双方提供了一些性能优势:Lambda 可以跳过 nodejs 语言初始化,而您可以跳过代码中的初始化。如果沙箱被重用,您上次写入 /tmp 的文件仍然存在。
请记住,您不能依赖于重复使用的容器,因为创建一个新容器是 Lambda 的特权。
如前所述:您不能依赖被重用的容器,但是当 AWS 认为它可以提高性能时,很有可能。
或者让它更简单:AWS 可能知道如何使您的 Lambda 尽可能高效,因此您可能不应该过度考虑这一点。
此外,虽然此博客针对的是 Node.js,但 AWS 似乎根据他们的这篇文章为 Java 做了类似的事情。