0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Serverless 冷启动:如何让函数计算更快更强?

jf_81200783 来源:jf_81200783 作者:jf_81200783 2023-09-06 23:08 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

问题背景

Serverless 计算也称服务器无感知计算或函数计算,是近年来一种新兴的编程模式。其致力于大幅简化云业务开发流程,使得应用开发者从繁杂的服务器运维工作中解放出来(例如自动伸缩、日志和监控等)。借助 Serverless 计算,开发者仅需上传业务代码并进行简单的资源配置便可实现服务的快速构建部署,云服务商则按照函数服务调用量和实际资源使用收费,从而帮助用户实现业务的快速交付(fastbuilt&Relia.Deliv.)和低成本运行。

然而,Serverless 计算的无状态函数编程在带来高度弹性和灵活性的同时,也导致了不可避免的冷启动问题。由于函数通常在执行完请求后被释放,当请求到达时,如果没有可用实例则需要从零开始启动新的实例处理请求(即冷启动)。当冷启动发生时,Serverless 平台需要执行实例调度、镜像分发、实例创建、资源配置、运行环境初始化以及代码加载等一系列操作,这一过程引发的时延通常可达请求实际执行时间的数倍。相对于冷启动调用,热调用(即请求到达时有可用实例)的准备时间可以控制在亚毫秒级。在特定领域例如 AI 推理场景,冷启动调用导致的高时延问题则更为突出,例如,使用 TensorFlow 框架的启动以及读取和加载模型可能需要消耗数秒或数十秒。

wKgaomT3Py6AX8QLAANxG8UqQdQ951.png

因此,如何缓解 Serverless 函数的冷启动问题,改善函数性能是当前 Serverless 领域面临的主要挑战之一。

解决方案

从研究思路上看,目前工业界和学术界主要从两个方面入手解决冷启动问题:

(1)加快实例启动速度:当冷启动调用发生时,通过加速实例的初始化过程来减少启动时延;

当冷启动发生时,Serverless 平台内部实例的初始化过程可以划分为准备和加载两个阶段。其中,准备阶段主要包括控制面决策调度/镜像获取、Runtime 运行时初始化、应用数据/代码传输几个部分。而加载阶段位于实例内部,包括用户应用框架和代码的初始化过程。在工业界和学术界公开的研究成果中,针对实例启动过程中的每个阶段都有大量的技术手段和优化方法。如下图所示,经过优化,实例冷启动的准备阶段和加载阶段时间可被极大得缩短。

wKgZomT3Py-APKKHAAINSvP5RBw082.png

下面列举了一些近年来发表在计算机系统领域知名会议的相关工作,主要可以分为五个方面:

1、调度优化/镜像快速分发/本地池化:

例如基于树结构的跨节点快速镜像分发FaasNet[ATC'21];Pod 池+特化实例跳过镜像传输[华为 FunctionGraph]。其中,快速镜像分发依赖于 VM 节点的上/下行网络带宽,Pod 池特化技术则是典型的以空间换时间的做法。

2、轻量级虚拟化/安全容器:

例如针对传统容器 Docker 的精简优化工作 SOCK[ATC'21];更侧重安全性的轻量级虚拟化技术(KataContainers,gVisor 等);基于安全容器的进一步的精简优化工作(Catalyzer[ASPLOS'20],REAP[ASPLOS'21])。通过裁剪优化,安全容器的启动时延最快可以被压缩至亚毫秒级。

3、数据共享/跨节点传输优化:

例如基于 RDMA 共享内存减少跨节点启动过程的数据拷贝RemoteFork[OSDI'23];或者利用本地代码缓存跳过代码传输[华为 FunctionGraph,字节 ByteFaaS 等]。基于 RDMA 技术的跨节点数据传输时延可降低至微妙级。

4、用户代码精简/快速加载:

例如针对 Java 语言的 JVM(JavaVirtualMachine)运行时优化技术[FunctionGraph];以及针对 Python 运行时库的裁剪优化工作 FaasLight[arxiv'23]。通过特定的优化,JVM 启动时间可由数秒降低至数十毫秒,而 Python 代码的启动加载时延可降低约 1/3。

5、其它非容器运行时技术:

例如 WASM(即 WebAssembly)技术以及针对 WASM 的内存隔离方面的优化工作 Faasm[ATC'20]。相比容器化技术,直接以进程和线程方式组织运行函数,可在保证低开销函数运行的同时具备高度灵活性。

(2)降低冷启动发生率:通过函数预热、复用或实例共享等方法提高实例的利用效率,减少冷启动调用的发生

尽管已有的一些实例启动加速方法已经可以将运行时环境的初始化时间压缩至数十毫秒甚至是数毫秒,然而用户侧的延迟却仍然存在,例如程序状态的恢复,变量或者配置文件的重新初始化,相关库和框架的启动。具体来讲,在机器学习应用中,TensorFlow 框架的启动过程往往需要花费数秒,即使实例运行时环境的启动时间再短,应用整体的冷启动时延对用户而言依然是无法接受的(注:通常大于 200ms 的时延可被用户察觉)。在这种情况下,可以从另一个角度入手解决冷启动问题,即降低冷启动调用的发生率。例如,通过缓存完整的函数实例,请求到达时可以快速恢复并处理请求,从而实现近乎零的初始化时延(例如 Dockerunpause 操作时延小于 0.5ms)。

wKgaomT3Py-ASHWIAADvv2mnULY181.png

降低冷启动发生率的相关研究可以分为如下几个方面:

1、实例保活/实例预留:

例如基于 Time-to-Live 的 keepalive 保活机制[AWSLambda,OpenWhisk];或者通过并发配置接口预留一定数量的实例[AWSLabmda 等];这些方法原理简单,易于实现,但是在面对负载变化时缓存效率较低。

2、基于负载特征学习的动态缓存:

例如基于请求到达间隔预测的动态缓存方案ServerlessintheWild[ASPLOS'20];学习长短期负载变化特征的动态缓存方案INFless[ASPLOS'22];基于优先级的可替换缓存策略 FaasCache[ATC'21];面向异构服务器集群的低成本缓存方案IceBreaker[ASPLOS'22]。这些动态缓存方案根据负载特征学习决定实例缓存数量或时长,从而在降低冷启动调用率的同时改善缓存资源消耗。

3、优化请求分发提高命中率:

例如兼顾节点负载和本地化执行的请求调度算法CH-RLU[HPDC'22]。通过权衡节点负载压力和缓存实例的命中率来对请求的分发规则进行优化设计,避免节点负载过高导致性能下降,同时兼顾冷启动率。

4、改善并发/实例共享或复用:

例如允许同一函数工作流的多个函数共享 Sandbox 环境SAND[ATC'18];使用进程或线程编排多个函数到单个实例中运行Faastlane[ATC'21];提高实例并发处理能力减少实例创建Fifer[Middle'20];允许租户复用其它函数的空闲实例减少冷启动时间Pagurus[ATC'22]。这些实例共享或者复用技术可以同缓存方案结合使用,降低冷启动带来的性能影响。

总结

Serverless 的无状态设计赋予了函数计算高度弹性化的扩展能力,然而也带来了难以避免的冷启动问题。消除 Serverless 函数的冷启动开销还是从降低函数冷启动率和加速实例启动过程两个角度综合入手。对于冷启动开销比较大的函数,在函数计算框架的设计机制中进行优化,尽量避免冷启动发生;当冷启动发生时,采用一系列启动加速技术来缩短整个过程进行补救。在 Serverless 平台的内部,冷启动的管理在实践中可以做进一步精细的划分,例如针对 VIP 大客户,针对有规律负载的,或是针对冷启动开销小的函数,通过分类做定制化、有目的的管理可以进一步改善系统效率。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数计算机
    +关注

    关注

    0

    文章

    3

    浏览量

    6755
  • 华为云
    +关注

    关注

    3

    文章

    2805

    浏览量

    19093
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    内联函数介绍

    内联函数禁用所有的编译选项。使用__inline修饰函数导致函数在调用处直接替换为函数体。这样代码调用函数
    发表于 12-12 07:08

    三角函数的查表法

    在单片机运算中,以整数形式或说定点数形式进行运算会比以浮点数形式运算快。电机控制中,经常需要用到三角函数,正弦,余弦,或者正切,求解这一类函数对于性能没那么优秀的单片机来说十分吃力,实际表现为计算
    发表于 11-19 08:06

    单片机启动&库函数的构成

    文件,启动文件以“.s”后缀出现,意为start_up。 2.启动文件由汇编语言编写,单片机启动一定会从启动文件开始,而不是C语言下的main函数
    发表于 11-18 08:15

    BNC线束 | 精准传输,信号更快一步

    通信、测试、工业控制 还是 科研实验, 德索都能为你提供值得信赖的 BNC线束解决方案 —— 信号更稳,数据更快
    的头像 发表于 11-13 16:59 516次阅读
    BNC线束 | 精准传输,<b class='flag-5'>让</b>信号<b class='flag-5'>更快</b>一步

    计算程序执行指令数的函数实现

    探究过程 1、官方提供的计算周期数指令数方法为,采用如下这几个函数在所要计算的操作前后获取一次当前指令数和周期数。并求他们的差值,以此得到结果。 2、首先找到这几个函数原型在hbi
    发表于 10-28 06:27

    亚马逊云科技推出Amazon DocumentDB Serverless,简化数据库管理并大幅节省成本

    )的一种全新配置,能够根据应用程序需求自动扩展计算和内存资源。Amazon DocumentDB Serverless简化了数据库管理,无需前期承诺,也不会产生额外成本,与为应对峰值负载而长期预置资源的方式
    的头像 发表于 08-15 13:11 431次阅读

    【HarmonyOS 5】鸿蒙中的UIAbility详解(三)

    冷启动与热启动的Want数据处理 1. 冷启动(Cold Start) 应用首次启动或被系统完全终止后重新创建。 冷启动,应用会从onCr
    的头像 发表于 06-14 22:32 506次阅读

    鸿蒙5开发宝藏案例分享---冷启动优化案例分享

    鸿蒙冷启动优化大揭秘!这些官方宝藏案例我效率翻倍 ? 大家好呀!最近在优化鸿蒙应用时,我偶然发现了官方文档里隐藏的性能优化宝藏案例。这些实战经验我的应用启动速度直接起飞!今天就把这
    发表于 06-12 17:22

    能效提升3倍!异构计算架构AI跑得更快更省电

    电子发烧友网报道(文/李弯弯)异构计算架构通过集成多种不同类型的处理单元(如CPU、GPU、NPU、FPGA、DSP等),针对不同计算任务的特点进行分工协作,从而在性能、能效和灵活性之间实现最优平衡
    的头像 发表于 05-25 01:55 3481次阅读

    HarmonyOS5云服务技术分享--Serverless抽奖模板部署

    (Serverless)\"功能 小贴士:项目地区目前只能选\"中国\" 2️⃣ ​​云函数双保险​​ 如果要用自定义抽奖逻辑,提前创建两个云函数: 开始抽奖回调函数(比如
    发表于 05-22 20:25

    HarmonyOS5云服务技术分享--Serverless搭建抽奖

    startDraw) 结束抽奖回调函数(比如命名finishDraw) 记好函数名称备用(后面配置参数要用到) ? 二、三步部署法(跟着做就行) Step 1️⃣ 模板选择 进入Serverless
    发表于 05-22 20:20

    HarmonyOS5云服务技术分享--ArkTS开发Node环境

    ? 性能优化 ​​冷启动优化​​:保持函数轻量(建议代码包<10MB),使用require按需加载模块。 ​​缓存机制​​:利用云数据库存储高频访问数据,减少重复计算。 ⚠️ 常见问题
    发表于 05-22 17:21

    第六届“先导杯”智能计算创新设计赛启动

    今天,2025全国大学生计算机系统能力大赛在重庆正式启动,由系统能力培养研究专家组发起、全国高校计算机教育研究会主办、中科曙光与中国科学技术大学联合承办的第六届“先导杯”智能计算创新设
    的头像 发表于 05-20 17:22 1184次阅读

    【Simcenter流体和热解决方案】利用CFD和计算化学软件,更快地创新出更出色的产品

    Simcenter流体和热解决方案——利用CFD和计算化学软件,更快地创新出更出色的产品。Simcenter流体和热解决方案域软件适用于计算机辅助设计(CAD)设计师、计算流体力学(C
    的头像 发表于 03-07 16:52 640次阅读
    【Simcenter流体和热解决方案】利用CFD和<b class='flag-5'>计算</b>化学软件,<b class='flag-5'>更快</b>地创新出更出色的产品

    鸿蒙原生页面高性能解决方案上线OpenHarmony社区 助力打造高性能原生应用

    ,大幅缩短了冷启动时间。此外,它提供通用本地缓存库,帮助开发者更快实现缓存逻辑,提高开发效率与应用体验。某头部网盘APP使用该方案后,首页冷启动时间达到0.7秒,缩短50%。 HarmonyOS
    发表于 01-02 18:00