1.后台FunctionCompute于2020年8月创新提供容器镜像功能部署方式,AWSLambda于2020年12月重新发明,等国内FaaS提供商在2021年6月宣布了FaaS支持容器的重磅功能。冷启动一直是FaaS的痛点。在引入比代码压缩包大几十倍的容器镜像后,冷启动的恶化成为开发者最关心的问题。在支持容器镜像的设计阶段,函数计算决定让开发者像代码包一样体验镜像的使用(秒级弹性),既要求易用性又保持了FaaS本身极致的灵活性,免去了需要用户去奋斗和担心。取舍。理想的用户体验是函数调用几乎感受不到远程传输镜像数据带来的额外延迟消耗。优化镜像加速冷启动大致分为两种方式:降低绝对延迟和降低冷启动概率。自容器镜像上线以来,我们通过镜像加速技术分阶段降低绝对延迟。在此基础上,本文介绍使用函数计算的下一代IaaS基础神龙裸机和安全容器,进一步降低绝对延迟,大幅降低冷启动频率。二、优化过程(以某镜像为例)1、第一代架构:ECS虚拟机Phase1(2021年3月):按需加载,减少数据传输过去的问题是在启动之前拉取整个镜像image内部数据,导致无用的图像数据也会被完整下载,占用过多的准备时间。所以我们最初的优化方向是尽可能忽略无用的图片数据,实现按需加载。为此,我们利用图像加速技术,省略了拉取无用数据的时间,实现了函数计算自定义图像冷启动从分钟级提升到秒级的相关技术细节。第二阶段(2021年6月):记录容器实例启动的I/O轨迹,在后续实例启动时提前预取镜像数据。我们发现函数实例的I/O数据访问方式在容器启动和初始化阶段是高度一致的。根据FaaS平台基于应用运行模式调度资源的特点,我们在函数实例首次启动时记录了I/Otrace的脱敏数据,并将trace数据作为预取的提醒图片数据在函数实例启动时提前传到本地,进一步减少冷启动延迟。虽然以上两个加速优化大大降低了冷启动的绝对延迟,但是由于传统的ECSVM在闲置一段时间后会被回收,再次启动新机器时会再次触发冷启动。因此,如何降低冷启动频率成为下一阶段需要攻克的关键问题之一。2、下一代架构:ElasticBareMetalServer(神龙)+microVM在设计下一代架构时,我们不仅要考虑解决冷启动频率的问题,还要注意缓存对启动延迟的影响。于是我们创新发明了ServerlessCaching,根据不同存储服务的特点,构建数据驱动、智能高效的缓存体系,实现软硬件协同优化,进一步提升CustomContainer的体验。函数计算后台神龙的变化时间远大于ECS虚拟机的空闲恢复时间。对于用户端,热启动频率大大提高。冷启动后缓存会继续保留在神龙机器上,缓存命中率可达90%以上。.与ECS虚拟机相比,神龙裸机+微虚拟机架构为镜像加速带来了更大的优化空间:降低回源带宽压力,减少重复数据存储。与ECSVM相比,同时启动数千个实例时,镜像仓库的读放大和磁盘存储空间的写放大至少降低了两个数量级。虚拟机级别的安全隔离,使得函数计算组件可以安全地形成可用区级别的缓存网络,传输速度甚至比云盘还快。函数计算自定义容器在CPX上线后,也提高了资源利用率,降低了成本,对用户和服务器维护来说是双赢的。ServerlessCaching架构可以在不增加资源使用成本的情况下提供更多的优化潜力。(L1~L4是不同级别的缓存,距离和延迟从小到大)3.横向比较至此,我们已经将镜像加速优化到了一个更高的级别。我们从函数计算的公开用例中选取了4个典型的形象,适配国内外几家大型云厂商(名称分别用厂商A和厂商B代替)进行横向对比。以上图像每3小时调用一次。反复多次,得到如下结果:1.AI在线推理——猫狗识别本图包含一个基于TensorFlow深度学习框架的图像识别应用。阿里云函数计算和厂商A都可以正常运行,但是厂商A性能较差。供应商B无法正常运作。下图中,阿里云函数计算和厂商A的延迟数据包括镜像拉取、容器启动、推理操作执行的端到端延迟,而厂商B的数据只是拉取镜像的延迟图像部分,这已经是最慢的了。.FC比较稳定,可以看出函数计算在AI推理等CPU消耗上有更大的优势。基于云盘的热启动(灰色),比较各厂商的额外成本(颜色)2.PythonFlaskWebService此图为常见的网络服务,内部使用Python配合Flask服务框架。这张图的目的是为了测试不同的云产品是否能够高效的按需加载。FC和厂商A均有波动,但后者波动最为明显。基于云盘热启动(灰色),比较各厂商的额外成本(颜色)3.Python机器学习计算镜像也包含Python运行环境。可见各家厂商还是保持着自己的特色。厂商B完整下载,厂商A部分要求优化但不稳定。基于云盘热启动(灰色),比较各厂商的额外成本(颜色)4.CypressHeadlessChrome本图包含无头浏览器测试过程,厂商A由于编程模型限制和不兼容无法运行运行环境。但是VendorB速度太慢,只能在规定时间内用71.1秒完成应用初始化。不难看出,函数计算在重I/O镜像方面还是有不错的表现的。以云盘热启动(灰色)为基础,比较各厂商的额外成本(颜色),绿色部分为优于baseline的端到端耗时。4.推荐的最佳实践支持容器技术是FaaS的一个本质特征。提升便携性和交付敏捷性,同时云服务降低运维和闲置成本,提供弹性伸缩能力。自定义镜像和函数计算的结合,最直接的解决了用户为云厂商定制大容量业务逻辑带来的问题。FaaS在运行容器时需要尽可能消除额外的开销,使用户体验类似于本地运行的场景。稳定快速的运行也是一个优秀的FaaS的标准。FC提供图片加载优化,大幅降低冷启动频率,为稳定快速运行提供保障。不仅如此,在应用可移植性方面,更需要做到流畅,不限制开发模式,同时尽可能降低用户使用门槛。函数计算自定义镜像支持标准HTTP服务,自由配置可用端口,可同时读写,提供多工具链和多样化部署方案,无需等待镜像准备完成时间,自带HTTP触发器并且不依赖于其他云服务,支持自定义域名等一系列优质解决方案。函数计算自定义镜像适用于但不限于人工智能推理、大数据分析、游戏结算、在线课程教育、音视频处理等,推荐使用阿里云容器镜像服务企业版实例ACREE,自带镜像加速功能,省去了使用ACR镜像时手动开启加速拉取和加速镜像准备的步骤。1.AI/ML在线推理和推理计算依赖于大体量的底层训练框架和大量的数据处理。Tensorflowimages等常见的AI框架可以轻松达到国标级别,对CPU的要求已经很高了。这更具挑战性。函数计算的自定义镜像可以很好的解决这样的需求。用户只需直接使用底层训练框架镜像,将其与数据处理逻辑封装到新镜像中即可,轻松省去运行环境变化带来的移植开销。也能满足弹性伸缩带来的快速训练效果。歌曲偏好推理、图片AI识别分析等可以与函数计算无缝对接,实现对大量动态在线推理请求的弹性满足。2、轻量灵活的ETL服务都依赖于数据,数据处理往往??会消耗大量资源以满足高效快速的数据变更请求。与其他函数计算运行时一样,自定义镜像可以满足数据处理过程中的安全隔离,同时保留方便用户自由地将数据处理部分的业务逻辑封装到镜像中的能力。在提供平滑迁移的同时,也满足镜像启动极低的附加延迟,满足用户对数据库管理、物联网等应用场景的安全、高效、灵活的数据处理需求。3、游戏战斗结算各种游戏通常会设置日常任务等场景,在短时间内聚集大量玩家,需要进行战斗结算等数据处理。为了防止游戏玩家失去耐心,战斗数据验证通常需要在短短几秒钟内完成。在一段时间内完成,单个玩家的数据结算单位时间不能随着玩家人数的增加而恶化。这类数据处理的业务逻辑通常比较复杂,重复性很强。将玩家数据处理逻辑封装到函数计算自定义镜像中,可以在短时间内灵活满足大量类似的玩家结算请求。5.未来规划与优化函数计算自定义镜像的初衷是为了避免用户体验容器镜像传输带来的额外延迟,给云原生开发者最极致的体验。优化不会停止。我们的最终目标是几乎消除容器镜像拉取的额外开销,镜像仓库在大规模扩容时成为瓶颈,从而实现极速扩容。在进一步完善ServerlessCaching的同时,CustomContainer功能将帮助Kubernetes上的Web应用和未来的Job工作负载在函数计算上无缝运行。Kubernetes负责处理流量稳定的常驻工作负载,而Serverless服务将逐渐成为共享波动较大的计算的最佳云原生实践。函数计算的公共用例:https://github.com/awesome-fc
