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

本文涉及的产品
简介: 函数计算与冷启动的那些事 本文首先简单介绍冷启动对使用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

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
9月前
|
人工智能 弹性计算 Kubernetes
2023 云原生编程挑战赛火热报名中!导师解析 Serverless 冷启动赛题
2023 云原生编程挑战赛火热报名中!导师解析 Serverless 冷启动赛题
|
9月前
|
Serverless
函数计算减少冷启动对性能的影响
函数计算减少冷启动对性能的影响
311 1
|
12月前
|
运维 Cloud Native Java
云计算再爆新热点,SnapStart解决Serverless冷启动问题
云计算再爆新热点,SnapStart解决Serverless冷启动问题
176 0
|
前端开发 Serverless
Serverless 服务中的前端解决方案——函数冷启动的时机
Serverless 服务中的前端解决方案——函数冷启动的时机自制脑图
113 0
Serverless 服务中的前端解决方案——函数冷启动的时机
|
Serverless
《函数计算冷启动加速》电子版地址
《函数计算冷启动加速》PPT
55 0
《函数计算冷启动加速》电子版地址
|
弹性计算 运维 Kubernetes
闲置计费 | Serverless冷启动与成本间的最优解
在真实的使用场景中,为了保证应用请求的低延时,即使在没有请求时,也要保持一定数量的预留实例,这就造成了成本的上升。有没有办法既做到低延时,又做到低成本呢?函数计算为了帮助用户降低这种场景下的使用成本,推出了预留实例的闲置计费功能。
264 1
闲置计费 | Serverless冷启动与成本间的最优解
|
弹性计算 运维 Kubernetes
闲置计费 | Serverless 冷启动与成本间的最优解
函数计算 (FC) 一直致力于为用户提供高弹性、免运维、低成本的全托管计算服务。本次闲置计费功能的发布,能够帮助用户进一步降低使用预留实例的成本,让用户只为真实使用的预留资源付费。函数计算会逐步释放更多 Serverless 的技术红利,在性能、成本、体验上不断为用户提供更极致的表现。
闲置计费 | Serverless 冷启动与成本间的最优解
|
机器学习/深度学习 存储 缓存
冷启动延时缩短50%-80%,阿里云函数计算发布冷启动加速技术
近日,阿里云函数计算重磅发布冷启动加速技术,将原本属于开发者的镜像优化负担转由函数计算承担,进一步帮助开发者提高生产效率,专注业务创新。该技术源于阿里集团超大规模和场景高度复杂的容器环境,对镜像存储、加速技术有深厚的积累,并出色地承担了3年双十一,双十二,春节等大促秒杀场景的严苛的挑战。
4448 1
冷启动延时缩短50%-80%,阿里云函数计算发布冷启动加速技术
|
机器学习/深度学习 存储 人工智能
蚂蚁金服首次在ASPLOS'20发布两篇重磅论文:机密计算和Serverless冷启动优化
近日,ACM编程语言和操作系统大会(ASPLOS'20)在官方网站宣布,蚂蚁金服两篇重磅论文入选。
2191 0
蚂蚁金服首次在ASPLOS'20发布两篇重磅论文:机密计算和Serverless冷启动优化

热门文章

最新文章