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

    浏览量

    6674
  • 华为云
    +关注

    关注

    3

    文章

    2445

    浏览量

    17399
收藏 人收藏

    评论

    相关推荐

    华为云全域 Serverless 8 月更新盘点

    CCE Autopilot、Serverless 应用托管 CAE、云数据仓库 DWS、事件网格 EventGrid 等。华为云函数工作流 FunctionGraph 一项基于事件驱动的函数托管
    的头像 发表于 09-27 00:06 827次阅读
    华为云全域 <b class='flag-5'>Serverless</b> 8 月更新盘点

    基于DPU的容器冷启动加速解决方案

    Serverless计算方式,极大地简化了开发人员的工作,使他们能够专注于应用的构建与运行,而不再需要承担服务器管理的负担。 然而,FaaS模式也并非没有缺陷,其中最为人诟病的便是“冷启动”问题。所谓
    的头像 发表于 09-13 11:50 386次阅读
    基于DPU的容器<b class='flag-5'>冷启动</b>加速解决方案

    bq05504冷启动电压600mV,在微弱光线下小型太阳能板达不到这么大怎么办?

    bq05504管理芯片数据手册显示冷启动电压600mV,在微弱光线下小型太阳能板达不到这么大怎么办,那就是启动不了,那还怎么收集uW级~mW的电能?
    发表于 08-13 07:28

    TC3x CAN20在冷启动复位时出现MTU故障怎么解决?

    我们观察到,由于 CAN20 在冷启动复位时出现无法纠正的错误,MTU 出现故障。 出现此问题的原因是冷开机复位后 RAM 初始化不正常。 有什么具体方法可以初始化 RAM 吗?
    发表于 05-29 08:30

    PMP31114.1-适合 3V 冷启动的同步 SEPIC PCB layout 设计

    电子发烧友网站提供《PMP31114.1-适合 3V 冷启动的同步 SEPIC PCB layout 设计.pdf》资料免费下载
    发表于 05-22 11:28 0次下载
    PMP31114.1-适合 3V <b class='flag-5'>冷启动</b>的同步 SEPIC  PCB layout 设计

    PMP22063.1-具有热/冷启动功能的汽车仪表组和显示电源 PCB layout 设计

    电子发烧友网站提供《PMP22063.1-具有热/冷启动功能的汽车仪表组和显示电源 PCB layout 设计.pdf》资料免费下载
    发表于 05-14 14:53 0次下载
    PMP22063.1-具有热/<b class='flag-5'>冷启动</b>功能的汽车仪表组和显示电源 PCB layout 设计

    设置应用冷启动优化案例

    整个转场过程不突兀。 应用启动概念 对于应用启动,首先,引入应用启动概念: 冷启动:首次打开app或者app彻底销毁后再次打开app。 热启动
    发表于 04-22 16:31

    华为云 Serverless 应用中心:一键开启 AI 文生图新时代,引领行业创新浪潮

    随着数字化时代的快速发展,AI 技术已成为推动行业创新的关键动力。华为云紧跟时代步伐,全新上线 Serverless 应用中心,为用户提供海量应用模板,实现一键部署函数和周边依赖资源,您轻松拥抱
    的头像 发表于 03-19 22:57 456次阅读

    华为云 Serverless 应用中心崭新上线,一键部署 AI 文生图应用引领创新潮流

    近日,华为云再次展现其技术实力,全新推出了 Serverless 应用中心,为用户提供了海量的应用模板,一键部署函数及关联资源成为现实,极大提升了应用的部署效率。无论是开发者还是运维工程师,都可以
    的头像 发表于 03-19 22:56 509次阅读
    华为云 <b class='flag-5'>Serverless</b> 应用中心崭新上线,一键部署 AI 文生图应用引领创新潮流

    鸿蒙原生应用元服务实战-Serverless华为账户认证登录需尽快适配

    一、ArkTS\\\\API9,服务器端基于serverless开发的应用与元服务华为账号注册登录功能暂时是不支持的 二、3月1日后的审核要求 3月1日的时间是快到了。 三、会导致的结果
    发表于 02-20 10:14

    鸿蒙应用/元服务开发实战-Serverless云存储没法创建处理方式

    新账户,Serverless云存储没法创建 ,没法进行下一步。 解决方式 请按照这个方式修改一下就能正常创建了,浏览器中打开控制台输入 window.top.cfpConfig.cloudStorageSwitch=‘off’ 后再创建桶
    发表于 02-19 11:21

    在MCAL中禁用了ALM8 [10] 和 ALM8 [17],为什么SMU AG8在冷启动时仍会报告错误?

    如图所示,我在 MCAL 中禁用了 ALM8 [10] 和 ALM8 [17],但是 SMU AG8 在冷启动时仍会报告这两个错误,而 WDG 工作正常。 但是,如果我使用调试器重置程序,则不会报告这些警报。 我能有一些建议吗? 谢谢。
    发表于 01-18 10:32

    GD32 MCU启动后如何运行到main函数

    GD32 MCU启动后如何运行到main函数入口?你是否也有这样的疑虑。在执行到main函数之前MCU干了哪些事情呢?下面为大家解答。
    的头像 发表于 01-15 10:00 1065次阅读
    GD32 MCU<b class='flag-5'>启动</b>后如何运行到main<b class='flag-5'>函数</b>

    鸿蒙原生应用/元服务开发-Serverless账户验证码的问题

    在应用/元服务早期使用过程中,-Serverless账户验证码的格式是[AGC][应用/元服务名称],如下图。 但是,在最近,[应用/元服务]名称直接变成了【default】,用户收到这种验证码后,心里存有疑虑的,这是哪里配置或者设置的问题吗?大家有遇到同样的问题吗?如何调整?
    发表于 12-27 15:55

    光谱响应函数如何计算

    光谱响应函数是描述光谱传感器对不同波长的光的响应程度的函数。在光谱技术和光学领域中,光谱响应函数被广泛应用于光谱仪器的校准、传感器的设计以及光谱数据的处理与分析。本文将详细介绍光谱响应函数
    的头像 发表于 12-19 10:43 3007次阅读