我是 aws lambda 的新手,我正在将基于 spring boot 2.x 的项目转移到 lambda。但我在 lambda 冷启动和热身方面遇到了困难。我尝试了这个链接中提到的一些东西:https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring-Boot,但应用程序仍然需要大约 45 秒才能启动.
我尝试过的事情:
来自上述链接的异步初始化。它确实有所帮助,但还不够。
跳过 lambda 的 Init 阶段。它帮助减少了近 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 在这种情况下是否会收费。