FaasCache | 青训营笔记

304 阅读5分钟

摘要

函数及服务(也称为无服务计算)有望彻底改变应用程序使用云资源的方式。但是,由于函数资源在开始执行之前需要初始化代码以及数据依赖,因此存在冷启动问题。在函数执行完成后,保持所需资源预热状态能够缓解冷启动的开销。

文章的关键见解是函数资源预热与缓存存在类似性。文章提出缓存启发的混合贪心保活策略相比于现有策略能够有效地减少3倍以上的冷启动开销。除此之外,文章将重用距离以及命中率曲线等缓存概念用于自动拓展服务器资源配置,该资源配置策略能够使平台供应商处理实际工作负载的资源需求减少30%。

问题背景

函数保活

在函数即服务(Function as a Server,Faas)平台上,函数通常运行在容器或轻量级虚拟机中。由于启动新的虚拟执行环境(容器或虚拟机)以及导入库文件和其他数据依赖来初始函数的开销,函数执行会带来不容忽视的“冷启动”开销。

当保存函数的容器被创建并且完成函数执行,容器仍可以保持活动状态,该函数的后续调用可以重用保持活动的容器,这种方式被称为函数保活。函数保活机制能够减轻容器冷启动带来的开销。

缓存

缓存领域中,基于时间局部性以及频率信息进行驱逐的算法具有悠久的历史。由于FaaS平台中函数在内存占用方面表现出多样性,同时函数保活受到服务器内存的限制,基于大小感知的缓存方法具有较好的应用价值。同时,缓存领域中具有丰富的分析和建模技术能够确定缓存在不同工作负载下的性能。命中率曲线(Hit Ratio Curve,HRC)广泛用于调整缓存大小以达到目标性能,可以用来指导FaaS平台服务器资源配置。

保活策略权衡

由于FaaS平台上运行的应用程序具有多样性,且规模不断扩大,设计函数保活策略并非易事。保活策略必须在容器的资源足迹以及保持容器活动之间进行权衡,满足大多数应用程序的运行。

保活策略的目标是减少初始化时间以及冷启动延时,文章从以下几个特征对保活策略进行设计:初始化时间、总运行时间、资源足迹以及函数调用频率。由于服务器的资源是有限的,根据上述特征决定不同函数保持活动状态的优先级具有重要性。

缓存启发的保活策略

这篇论文的核心观点是,让函数保持活动状态等同于将对象保存在缓存中。函数保持活动状态可减少其执行延迟,就像缓存对象可减少其访问延迟。当服务器资源都被充分利用时,函数不保活的问题相当于对象从缓存中逐出的问题。缓存的目标是改善对象访问时间的分布,类似于减少函数延迟的目标。

混合贪心保活策略

混合贪心保活策略基于Greedy-Dual-Size-Frequency对象缓存机制,该方法提供了一个设计和实施保活策略的框架,能够根据不同函数调用的频率、新近度、初始化频率和资源足迹对优先级进行评估。

服务器资源配置策略

FaaS平台工作负载资源配置问题的根本挑战是性能与资源分配之间的权衡。文章提出了一种静态资源配置策略,用于确定给定工作负载的服务器内存大小。除此之外,文章开发了一种弹性拓展策略处理工作负载的时间动态特征。

静态资源配置策略

由于HRC能够刻画不同大小下缓存的性能,因此被广泛地用于缓存配置和性能建模。获得HRC后,可以根据系统要求来配置缓存大小。本文使用函数HRC来确定不同服务器内存大小下的热启动百分比,完成函数HRC构建后,根据拐点调整服务器内存大小。

弹性拓展策略

HRC同样用于弹性拓展策略,用于根据工作负载特性动态地调整服务器大小。弹性拓展策略基于实现的比例控制器,比例控制器根据冷启动比率定期调整虚拟机内存大小,旨在回收未使用的资源并减少其占用空间,提高云平台的功效。

实验评估

文章实验数据集来源于Azure Function trace,相关实验在操作系统为Ubuntu 16.04.5,硬件配置为250 GB RAM,48 cores CPU的机器上完成。文章主要开展了两部分实验内容:函数保活策略评估实验以及资源配置策略评估实验

函数保活策略评估实验结果:对于代表性/罕见数据集Greedy-Dual策略能够提高性能,并缩小内存大小;随机采样数据集LRU策略(Greedy-Dual策略的变种)具有较大性能优势。

资源配置策略评估实验结果:资源配置策略可以在不影响性能的情况下减少服务器配置资源,释放的资源可用于容纳额外的工作负载。