原文: https://hackernoon.com/cold-starts-in-aws-lambda-f9e3432adbf0
作者:Serhat Can
译者:donghui
有许多关于 AWS Lambda 中冷启动的博客文章。我正在做一些研究,想在这里列出一些好的文章以及一些要点,以便快速了解该主题。
译注:除了原文的内容外,译者也参考了其他博客,并将其中一些有用的观点整合到该文章(特别是解决方案部分)。
什么是冷启动?
冷启动是触发函数时遇到的延迟。
仅当没有空闲容器等待运行代码时,才会发生冷启动。这一切对于用户都是不可见的,AWS 完全控制何时终止容器。
冷启动有什么影响?
- 由于响应缓慢而使用户沮丧
- 为速度付出更多的钱(有时)
- 如果不仔细考虑,则会出现调用函数中的超时-连锁反应
- 关心与你无关的运营问题
何时应该关注冷启动?
- 如果你使用的是 Java 和 C# 之类的静态类型语言
- 如果你有面向客户/同步的应用程序
- 如果你的请求量少或稀疏
- 部署新版本后(所有容器均被销毁)
- 配置中的更改(环境变量,安全组,内存限制等),新容器必须以新的配置启动
什么因素会增加冷启动时间?
- 语言选择
- 内存大小
- 代码大小
- VPC
- HTTPS 调用
- 需要类路径扫描的事物(Java)
这个问题有什么解决方案吗?
首先,接受你不能保证不会遭受冷启动的感觉。最终的解决方案必须来自云提供商。我们只能尝试改进。
- 如果这不是一个大问题,那么什么也不做(建议)
- 等待 AWS 对其进行改进(例如 AWS 提供了预置并发功能、并针对 VPC 网络做了改进等)
- 使用动态编程语言(例如 Python、NodeJS 或 PHP ),而不要使用静态类型的编程语言(例如:C 、C# 或 Java)
- 使用 HTTP 而不是 HTTPS
- 增加内存(并支付更多)
- 做一些预热(在 AWS 没有提供预置并发之前,可以尝试定时触发函数以保持函数实例是热的)
一些有用的资源
译注:除了原作者提供的下面下面前4个链接资源外,译者也增添了一些很有参考意义的资源链接,它们对于研究冷启动都非常有帮助。
How does language, memory and package size affect cold starts of AWS Lambda?
https://read.acloud.guru/does-coding-language-memory-or-package-size-affect-cold-starts-of-aws-lambda-a15e26d12c76
Dealing with cold starts in AWS Lambda
https://medium.com/thundra/dealing-with-cold-starts-in-aws-lambda-a5e3aa8f532
Resolving Cold Start️ in AWS Lambda
https://medium.com/@lakshmanLD/resolving-cold-start️-in-aws-lambda-804512ca9b61
How to Warmup
https://docs.thundra.io/docs/how-to-warmup
Dealing With Serverless Cold Starts, Once and For All!
https://dzone.com/articles/dealing-with-serverless-cold-starts-once-and-for-a
Cold start / Warm start with AWS Lambda
https://blog.octo.com/en/cold-start-warm-start-with-aws-lambda/
AWS Lambda Performance and Cold Starts
https://dzone.com/articles/aws-lambda-performance-and-cold-starts
New for AWS Lambda – Predictable start-up times with Provisioned Concurrency
https://aws.amazon.com/cn/blogs/compute/new-for-aws-lambda-predictable-start-up-times-with-provisioned-concurrency/
Announcing improved VPC networking for AWS Lambda functions
https://aws.amazon.com/cn/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/
Java Cold Starts in AWS Lambda
https://www.graycelltech.com/java-cold-starts-in-aws-lambda/
Using Amazon RDS Proxy with AWS Lambda
https://aws.amazon.com/blogs/compute/using-amazon-rds-proxy-with-aws-lambda/
Serverless in 2020 gets even better with re:Invent improvements for AWS Lambda - cold starts are "finally gone"
https://www.rwilinski.me/blog/serverless-at-reinvent-2019/