揭开 Amazon Lambda 冷启动的神秘面纱并减轻其影响

云计算
re:Invent
0
0
## 视频 <video src="https://dev-media.amazoncloud.cn/30-LibaiGenerate/31-LiBaiRebrandingVideo/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT_-LBrebrandingWCaptionCN.mp4" class="bytemdVideo" controls="controls"></video> ## 导读 无论您是 Amazon Lambda 的新手还是服务器专家,您都可能听说过冷启动。也许他们甚至让您对在架构中使用 Lambda 三思而后行。本论坛在微观级别剖析 Lambda 初始化过程。检查比较常见架构模式的基准测试,然后对各种 RAM 配置和有效负载大小进行基准测试。接下来,测量和讨论可能增加初始化延迟的常见错误,探索和理解主动初始化,并学习可以用于解冻 Amazon Lambda 冷启动的几种策略。 ## 演讲精华 <font color = "grey">以下是小编为您整理的本次演讲的精华,共900字,阅读时间大约是4分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。</font> AJ Steenberg在re:Invent上热情洋溢地发表了一场演讲,分享了关于如何解决亚马逊云科技 Lambda 冷启动问题以及如何减轻其影响的宝贵见解。作为一名自2016-2017年开始使用 Lambda 构建[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用程序以来的新晋亚马逊云科技社区英雄,AJ 带来了丰富的实践经验。 在 Serverless Inc. 期间,他参与了诸如广泛采用的 Serverless Framework 等流行开源库的开发。如今,AJ 在 Datadog 工作,专注于为客户提供(从初创企业到大型企业)[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)可观察性和性能优化。 为了阐述他在应对 Lambda 冷启动方面的问题上所采取的系统化方法,AJ 巧妙地将之与极限运动跳伞和基地跳跃相比拟。学习跳伞的过程也是如此,采用[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)时,明智的做法是从简单开始,然后逐步增加复杂性。 AJ 概述了一个“优先级系统”,跳伞教练会向新手传授以确保安全的理念,这个系统同样适用于驯服 Lambda 冷启动: 1) 拉下你的降落伞以保住性命 2) 在5000英尺的高度拉动以最大限度地提高安全性 3) 在稳定的腹部朝地的位置部署以确保正确部署 4) 在基本技能牢固后,享受探索新技巧的乐趣 这个优先级系统至关重要,因为缩放是在实时发生的,而客户正在等待 Lambda 函数作出响应。令人恐惧的冷启动发生在用户面层的延迟受到按需初始化和加载代码的影响时。 尽管社交媒体上充斥着关于冷启动的神话和恐惧,但客户仍在努力在生产中解决这个问题。AJ 承认了围绕冷启动的普遍挫败感,但警告说,由于阿达马尔定律(Amdahl's Law),不要过度优化整体系统加速。例如,如果冷启动只占所有调用的1%,那么即使巨大的改进仍然几乎不会影响中位延迟。关键在于系统地处理优先事项,而不是被炒作和误解所分散注意力。 首要任务:了解并减少每个函数的代码加载 首要任务是了解并减少每个功能中加载的代码。AJ 指出了一个常见的 Node.js 错误——仅仅为了使用一个客户端(如 SNS)就加载了整个亚马逊云科技 SDK。 对于从单体系统迁移过来的客户而言,相较于仅加载SNS客户端,这将使冷启动延迟增加400-500毫秒。尽管如此,通过树摇动和捆绑有助于解决这个问题,但同时也会带来一些负面影响。通过在多次调用中按需加载导入,可以减少这种惩罚。 AJ使用了Datadog追踪功能来对冷启动性能进行分析,以便量化代码依赖的影响。一个实用的库甚至包含了即使是不需要的亚马逊云科技SDK,这导致了额外的250毫秒的延迟。 一位遇到冷启动问题的企业客户意外地加载了未使用的全局帮助程序依赖项。通过对各种捆绑包大小进行测试,发现它们之间存在线性关系——每增加10MB的代码,大约会增加100毫秒的延迟。 然而,具体细节如内存分配模式、初始化期间的HTTP请求以及JSON解析等因素会导致不同的结果。关键在于进行严格的性能分析和测量。 其次,要准确地观察您的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)环境。冷启动并不总是与日志中的“初始化持续时间”一致。AJ发现了“主动初始化”这一优化方法,即在请求到达之前预热容器,从而减少用户面的延迟。 例如,一个250MB的功能请求需要花费700毫秒,但初始化持续时间仅为170毫秒,因为后者并不包括从S3复制代码的时间。通过测试从0MB到250MB的捆绑包大小以及总体延迟,可以发现这种差异。 尽管初始化持续时间始终保持在170毫秒,但与预加热优化相结合后,80%的初始化过程并未引发用户面延迟。因此,许多被感知的冷启动实际上并未影响用户。仔细的观察是理解何时冷启动重要的关键。这有助于AJ优化并解决初创客户在成本和性能方面的故障。 最后,要与Lambda合作而非对抗。例如,默认内存分配通常太小(128MB),这导致运行时内存不足,进而导致缓慢的交换,从而成倍增加持续时间。 AJ建议采用Lambda Power Tuning之类的工具,以找到优化成本和性能的最佳内存分配方案。在内存增加到1.5GB后,他的测试函数的持续时间明显降低。随着内存的增加,性能会得到提高,但在分配了1.7GB的所有vCPU内存之后,性能将不再继续提升。 在另一个领域中,企业会遵循诸如队列服务等文档,以确保不会因抑制错误而降低并发性。通过开启预先配置的并发性和使用SNAP START功能,有助于避免冷启动问题。对于金融科技行业客户而言,“预热”插件虽然能带来一定的收益,但他们更关注核心优先事项。 第四个重点:尽情享受容器带来的便利 最后一个重点是利用诸如Lambda容器映像等新功能来获得更好的体验。由于亚马逊云科技在广泛缓存和加载优化方面的努力,容器在某些情况下已经能够接近甚至超越基于Zip功能的冷启动性能。例如,经过优化的Bun.js运行时能够在使用容器的场景下实现低于200ms的冷启动速度。测试结果表明,相较于压缩的Node.js,当内存占用超过30MB时,容器的表现更为出色。 对于一位遇到250MB限制的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)客户,容器将冷启动时间缩短了150ms。AJ强调,要设定一个p99冷启动预算,预算为400ms,以便专注于优先事项,而不是无休止地追求边际收益。通过有耐心地遵循这个优先级系统,你还能揭开Lambda的冷启动奥秘。掌握基本原理后,再花时间提高整体应用程序性能,从而提高客户满意度。 **下面是一些演讲现场的精彩瞬间:** AJ Steenberg,最近被任命为亚马逊云科技的社区英雄。 ![](https://d1trpeugzwbig5.cloudfront.net/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT_/images/rebranded/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT__0.png) 自2016年以来,他一直在研究和体验[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)软件以及亚马逊云科技。 ![](https://d1trpeugzwbig5.cloudfront.net/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT_/images/rebranded/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT__1.png) 领导者鼓励大家在稳定地拉起降落伞以确保安全的同时,也要玩得开心。 ![](https://d1trpeugzwbig5.cloudfront.net/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT_/images/rebranded/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT__2.png) 领导者强调了在使用全局助手函数而不了解其内部内容时所犯的常见错误。 ![](https://d1trpeugzwbig5.cloudfront.net/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT_/images/rebranded/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT__3.png) 火焰图分析揭示了导致冷启动延迟的两个主要问题——加载Kinesis客户端和整个亚马逊云科技SDK。 ![](https://d1trpeugzwbig5.cloudfront.net/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT_/images/rebranded/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT__4.png) 亚马逊云科技Lambda团队已经对冷启动时间、缓存和运行时(如Bun)进行了重大改进,使更快的、更安全的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用程序成为可能,而无需开发者额外的工作。 ![](https://d1trpeugzwbig5.cloudfront.net/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT_/images/rebranded/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT__5.png) 演讲者鼓励大家探索在亚马逊云科技Lambda上使用容器来处理大型API或不常使用的遗留应用程序的方法。 ![](https://d1trpeugzwbig5.cloudfront.net/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT_/images/rebranded/COM305-R-Demystifying_and_mitigating_AWS_Lambda_cold_starts__REPEAT__6.png) ## 总结 杰夫·斯特恩伯格的演讲主要关注亚马逊云科技Lambda服务中解决和减轻冷启动问题的方法。他首先解释了函数在首次初始化以响应请求时所出现的冷启动现象,这种现象会导致延迟的增加。 斯特恩伯格提出了优化冷启动的三个关键优先事项。首先,了解并尽量减少初始化函数时的加载代码量。他通过展示只加载所需的具体亚马逊云科技SDK客户端而非整个SDK,从而改善了冷启动时间。其次,使用度量标准而不是仅仅观察初始化持续时间来准确地评估系统中的冷启动情况。第三,接受Lambda架构而非与之对抗。例如,利用已配置的并发性和SnapStart功能。 斯特恩伯格还探讨了一些关于冷启动的常见误区。他打破了一个神话:认为更多的内存或更长的超时时间总能改善冷启动,实际上他发现这两者之间并无直接关系。最后,他建议大家根据最近的性能改进重新审视Lambda容器镜像,因为一些实验已经证明容器性能超过了一直使用的zip部署方式。 总之,斯特恩伯格强调首先要关注那些最具影响力的地方,比如减少初始化代码,并为优化冷启动设定一个p99延迟预算。 ## 演讲原文 ## 想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站! [2023亚马逊云科技re:Invent全球大会 - 官方网站](https://webinar.amazoncloud.cn/reInvent2023/?s=8739&smid=19458 "2023亚马逊云科技re:Invent全球大会 - 官方网站") [点击此处](https://aws.amazon.com/cn/new/?trk=6dd7cc20-6afa-4abf-9359-2d6976ff9600&trk=cndc-detail "点击此处"),一键获取亚马逊云科技全球最新产品/服务资讯! [点击此处](https://www.amazonaws.cn/new/?trk=2ab098aa-0793-48b1-85e6-a9d261bd8cd4&trk=cndc-detail "点击此处"),一键获取亚马逊云科技中国区最新产品/服务资讯! ## 即刻注册亚马逊云科技账户,开启云端之旅! [【免费】亚马逊云科技“100 余种核心云服务产品免费试用”](https://aws.amazon.com/cn/campaigns/freecenter/?trk=f079813d-3a13-4a50-b67b-e31d930f36a4&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技“100 余种核心云服务产品免费试用“") [【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”](https://www.amazonaws.cn/campaign/CloudService/?trk=2cdb6245-f491-42bc-b931-c1693fe92be1&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用“")
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭