函数计算与冷启动的那些事

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 函数计算与冷启动的那些事 本文首先简单介绍冷启动对使用FaaS (Function as a service)的开发者的影响,并介绍函数计算冷启动流程和最佳实践。最后会分享函数计算冷启动性能优化现阶段成果,希望对于被冷启动延时所困扰的开发者有所帮助。

函数计算与冷启动的那些事

本文首先简单介绍冷启动对使用FaaS (Function as a service)的开发者的影响,并介绍函数计算冷启动流程和最佳实践。最后会分享函数计算冷启动延时优化现阶段成果,希望对于被冷启动延时所困扰的开发者有所帮助。

冷启动影响

函数计算的开发者们相信对冷启动的概念并不陌生,其对业务的影响可以总结为:

  1. 延迟毛刺: 容器启动,下载代码,runtime初始化,业务逻辑初始化这些时间加起来可能将请求耗时拉高至500ms-30s,对于延迟敏感(< 100ms)的应用这样的延迟不可接受。
  2. 额外工作量: 开发者为了减少冷启动的出现,通常要实现与业务逻辑无关的定时预热功能,例如函数handler需要支持预热,预热函数需要控制并发度。
  3. 额外费用: FaaS平台通常根据请求时长收费,定时的预热会产生不必要的费用。对初始化时间很长的应用(如深度学习模型初次加载),频繁的冷启动产生额外的费用。

冷启动频率增大是Serverless vs. Serverful 架构引入的一个新的挑战,过高的延迟可能会让对长尾延迟(P99)敏感的业务望而却步。在函数计算中,有什么办法可以减小冷启动的影响呢?

冷启最佳实践

cold_start_shared_responsibility

上图介绍了函数计算冷启动的流程。冷启动的优化是一个共享的责任(shared responsibility),它要求开发者:

  1. 精简紧凑的代码包: 开发者要尽可能瘦身代码包,去掉不必要的依赖。降低Download/Extract Code的时间。例如对Nodejs函数使用npm prune, 对Python函数使用autoflake , autoremove 去除没有使用的依赖。另外一些第三方库中可能会包含test源代码,无用binary,和数据文件。有选择地删除无用文件可以降低函数代码下载解压时间。
  2. 选择合适的函数语言: 下文图中会看到Python2.7的冷启动时间远低于Nodejs8;函数计算Java8运行时通常冷启动时间要高于其他语言。对于冷启动延迟敏感的应用。在热启动延迟差别不大的情况下,使用Python这样的轻量语言可以大幅降低长尾延迟。
  3. 选择合适的内存: 下文图中会看到在并发量一定的情况下,函数内存越大,冷启动表现越优。
  4. 避免不必要的配置: 例如函数A需要访问用户自己VPC而函数B不需要,这时可以新建一个Service,不配置VPC并在新建Service中创建函数B。VPC的初始化需要引入创建并挂载用户ENI,这个操作可能是数秒级别的。因此对于没有需求的函数,不配置VPC功能对冷启动有很大帮助。
  5. 降低冷启动概率:

    1. 使用定时触发器 预热函数
    2. 使用Initializer 函数入口,函数计算会异步调用初始化接口,消除掉“User Code Init” 的时间,在函数计算系统升级或者函数更新过程中,用户对冷启动几乎无感知。

函数计算冷启动延时优化史

在Shared Responsibility另一端,函数计算平台层面做了多层优化:

  1. 精简系统耗时
  2. 加速代码下载解压
  3. 降低容器和进程启动时间
  4. 降低冷启动概率

相比较6个月前冷启动表现,函数计算延时最多减少80%。在Python2.7大内存的配置下,小代码包 (小于1KB)平均冷启动延迟降低至200ms左右,P95延迟稳定,达到FaaS平台顶级水平。

cold_start_yunqi_avg

cold_start_yunqi_p95

  • 注:benchmark方法为各个函数20并发执行sleep(20s) 函数,调用结束后,间隔30-60分上进行下一次20并发调用。上图是重复在上海region重复跑1星期统计到的数据。

总结

冷启动是Serverless运行环境中开发者必须面对的痛点。开发者可以通过精简代码,选择合适配置降低冷启动的影响。函数计算也将会针对冷启动延时做持续不断的优化,力争让业务函数对冷启动无感知,让Serverless更加完美。

函数计算使用过程中如遇到任何问题欢迎加入 函数计算官网客户群 提问反馈交流。
31243845f6e99e97578a7e6921a0a06db0f0b587

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
4月前
|
Rust Cloud Native Java
Java演进问题之Serverless应用或函数的冷启动如何解决
Java演进问题之Serverless应用或函数的冷启动如何解决
|
4月前
|
运维 监控 Serverless
函数计算产品使用问题之如何优化冷启动时间
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
5月前
|
运维 Serverless KVM
函数计算产品使用问题之如何处理冷启动时间过长的问题
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
人工智能 弹性计算 Kubernetes
2023 云原生编程挑战赛火热报名中!导师解析 Serverless 冷启动赛题
2023 云原生编程挑战赛火热报名中!导师解析 Serverless 冷启动赛题
|
Serverless
函数计算减少冷启动对性能的影响
函数计算减少冷启动对性能的影响
380 1
|
运维 Cloud Native Java
云计算再爆新热点,SnapStart解决Serverless冷启动问题
云计算再爆新热点,SnapStart解决Serverless冷启动问题
275 0
|
前端开发 Serverless
Serverless 服务中的前端解决方案——函数冷启动的时机
Serverless 服务中的前端解决方案——函数冷启动的时机自制脑图
145 0
Serverless 服务中的前端解决方案——函数冷启动的时机
|
Serverless
《函数计算冷启动加速》电子版地址
《函数计算冷启动加速》PPT
81 0
《函数计算冷启动加速》电子版地址
|
弹性计算 运维 Kubernetes
闲置计费 | Serverless冷启动与成本间的最优解
在真实的使用场景中,为了保证应用请求的低延时,即使在没有请求时,也要保持一定数量的预留实例,这就造成了成本的上升。有没有办法既做到低延时,又做到低成本呢?函数计算为了帮助用户降低这种场景下的使用成本,推出了预留实例的闲置计费功能。
302 1
闲置计费 | Serverless冷启动与成本间的最优解
|
弹性计算 运维 Kubernetes
闲置计费 | Serverless 冷启动与成本间的最优解
函数计算 (FC) 一直致力于为用户提供高弹性、免运维、低成本的全托管计算服务。本次闲置计费功能的发布,能够帮助用户进一步降低使用预留实例的成本,让用户只为真实使用的预留资源付费。函数计算会逐步释放更多 Serverless 的技术红利,在性能、成本、体验上不断为用户提供更极致的表现。
闲置计费 | Serverless 冷启动与成本间的最优解