Java AWS Lambda弹簧靴冷启动问题
我是aws lambda的新手,我正在将基于spring boot 2.x的项目转移到lambda。但我正在努力解决lambda冷启动和预热的问题。我尝试了在这个链接中提到的一些事情,但应用程序仍然需要大约45秒才能启动 我尝试过的事情: 从上述链接进行异步初始化。这确实有点帮助,但还不够 跳过lambda的初始阶段。它帮助减少了近8秒 提供了并发性,但就我所见,这也没有帮助。当我看到日志时,每次都会初始化spring上下文,如果在15-20分钟的间隔后出现任何请求 我的lambda在不同场景下的响应时间为:Java AWS Lambda弹簧靴冷启动问题,java,spring-boot,aws-lambda,warm-up,cold-start,Java,Spring Boot,Aws Lambda,Warm Up,Cold Start,我是aws lambda的新手,我正在将基于spring boot 2.x的项目转移到lambda。但我正在努力解决lambda冷启动和预热的问题。我尝试了在这个链接中提到的一些事情,但应用程序仍然需要大约45秒才能启动 我尝试过的事情: 从上述链接进行异步初始化。这确实有点帮助,但还不够 跳过lambda的初始阶段。它帮助减少了近8秒 提供了并发性,但就我所见,这也没有帮助。当我看到日志时,每次都会初始化spring上下文,如果在15-20分钟的间隔后出现任何请求 我的lambda在不同场景下
1. 3008 MB memory/first request/ response time: ~25 secs.
2. 3008 MB memory/2nd request immediately after 1st req/ response time: ~600ms.
3. 1024 MB memory/1st req/ postman request times out.
4. 1024 MB memory/2nd req immediately after 1st req/response time: ~750ms.
5. 1792 MB memory/1st req/ response time: ~27sec.
6. 1792 MB memory/ 2nd req immediately after 1st req/response time: ~650ms
为了缩短响应时间,我考虑每5或10分钟对lambda进行一次REST调用,以便将spring上下文保存在内存中,从而帮助更快地处理请求。此呼叫将类似于健康检查呼叫,更不用说根本没有处理
这是明智的做法吗?还是有更好的方法来实现这一目标
我不清楚AWS在这种情况下会收取多少费用。一个5分钟的通话量将达到每月8600次左右。如果你连10万个电话都能打,根据3GB内存的计算器,这仍然是免费的
要将Cloudwatch配置为ping您的Lambda,请首先创建规则Cloudwatch->Rules,并每5分钟运行一次:
然后,让它运行您的Lambda:
本例中我的Lambda名为SnapshotHandler,它接受一个小JSON对象。注意,这直接调用Lambda,而不是通过API网关。这可能不是Lambda代码所期望的,因此您可能需要更新
如果希望通过HTTP/S API调用此Lambda,则需要设置一个SNS主题以将Cloudwatch事件发布到,并让SNS主题通过HTTP调用您的API。这有点复杂,但并不可怕
总之,您可以做到这一点,但成本取决于您的API得到多少正常调用。每月1000000次呼叫,3GB/800ms Lambda的价格约为33美元。1000万美元,将近400美元。但是如果你平均每秒接到230个电话,你似乎不太可能也需要心跳。一个5分钟的通话量大约是每月8600个电话。如果你连10万个电话都能打,根据3GB内存的计算器,这仍然是免费的
要将Cloudwatch配置为ping您的Lambda,请首先创建规则Cloudwatch->Rules,并每5分钟运行一次:
然后,让它运行您的Lambda:
本例中我的Lambda名为SnapshotHandler,它接受一个小JSON对象。注意,这直接调用Lambda,而不是通过API网关。这可能不是Lambda代码所期望的,因此您可能需要更新
如果希望通过HTTP/S API调用此Lambda,则需要设置一个SNS主题以将Cloudwatch事件发布到,并让SNS主题通过HTTP调用您的API。这有点复杂,但并不可怕
总之,您可以做到这一点,但成本取决于您的API得到多少正常调用。每月1000000次呼叫,3GB/800ms Lambda的价格约为33美元。1000万美元,将近400美元。但是,如果平均每秒收到的呼叫数为230次左右,您似乎不太可能也需要心跳。您确定将其移动到lambda是个好主意吗?我知道在lambda中使用spring boot这样的重型框架是不可取的,但我需要这样做。如果配置的并发性没有帮助,您可能在正确配置时遇到问题。您确定将其移动到lambda是一个好主意吗?我知道在lambda中不建议使用像spring boot这样的重型框架,但我需要这样做。如果配置的并发性没有帮助,您可能在正确配置时遇到问题。谢谢@stdunbar,这听起来很有希望。虽然我需要做一些调整,但我会试试这个。谢谢@stdunbar,这听起来很有希望。虽然,我将不得不做一些调整,我会尝试这个。