函数计算镜像加速:从分钟到秒的跨越

简介: 函数计算 FC 正式发布容器镜像加速,经过按需读取和更高效的解压技术在不一样场景下加速 50%-80%,即便 GB 级别的镜像也能够在几秒内完成端到端启动。

FaaS 和容器

容器镜像因其颠覆式创新成为云原生时代应用部署格式的事实标准。头部云厂商 FaaS (Function-as-a-Service) 服务如阿里云函数计算、AWS Lambda 也相继在2020年支持使用容器镜像部署函数,全面拥抱容器生态。自发布以来,开发者陆续将机器学习、音视频处理、事件驱动离线数据处理、前端自动化等多个场景使用镜像快速无服务器化,提升效率、下降成本。然而,冷启动一直是 Serverless 没法绕开的问题。容器镜像须要将数据经过网络远程下载并解压,对于GB级别的镜像,拉取时间可能高达分钟级别,客观上放大了冷启动反作用,阻碍实时应用的 Serverless 演进。前端

函数计算镜像加速功能

传统的镜像拉取加速强调"开发者负责",如精简镜像,合理分配镜像层,multi-stage 构建,使用工具(如 docker-slim)去除不须要的数据,遵循构建最佳实践等。这些工做不只加剧了用户负担,加速效果有限,且有运行时稳定性风险。阿里集团超大规模和场景高度复杂的容器环境,对镜像存储、加速技术有深厚的积累,出色地承担了3年双十一,双十二,春节等大促秒杀场景的严苛的挑战。阿里云 Serverless 同容器镜像、存储等服务深度合做,将内部创新在函数计算输出:杭州、北京、上海、美东、美西正式发布了镜像加速功能。该功能将本来属于开发者的镜像优化负担转由函数计算承担,进一步帮助开发者提升生产效率,专一业务创新。python

加速效果

咱们在选择了内部生产环境和开源社区的工做负载,覆盖机器学习、人工智能、前端自动化、Web 应用等7种镜像大小、IO 访问模式、启动命令的不一样组合做为 benchmark,部署在 FC 北京区域。以下图所示,函数计算开启镜像加速功能后加速广泛超过 50%,对于机器学习场景中常见的臃肿镜像(如多个团队共享基础镜像, ml-small-import, ml-large-import, ai-cat-or-dog)加速效果更为明显(约 70%-86%),镜像越大优化空间每每越高。web

函数计算镜像加速:从分钟到秒的跨越

函数计算镜像加速:从分钟到秒的跨越

使用方式

镜像加速能够经过控制台、CLI 工具或是 FC SDK 开启,详细步骤参加镜像拉取加速文档
• 方式一:在函数计算控制台函数配置下选择“开启镜像加速”。算法

函数计算镜像加速:从分钟到秒的跨越

• 方式二:使用 Funcraft 工具部署docker

在已有的 CustomContainerConfig 配置下添加 AccelerationType: Default 如需关闭则配置 AccelerationType:
Noneflask

CustomContainerConfig:
          Image: registry-vpc.cn-beijing.aliyuncs.com/fc-demo/python-flask:v0.1
          AccelerationType: Default

功能特色

FC 镜像加速具有如下特色:缓存

  1. 使用简单:只需在函数上开启镜像加速,函数计算会自动制做加速镜像和缓存,转换完成后(5分钟之内),函数自动采用加速镜像缓存。
  2. 专一业务创新:开发者无需花费时间刻意精简优化镜像大小或严格区分 Serverless 和 Serverfull 应用镜像的构建方式,FC 负责按照应用实际使用数据拉取和解压。
  3. 加速免费,使用门槛低:镜像加速开启不产生额外费用,也不须要开发者额外购买或升级任何其余服务。事实上因为镜像拉取时间变短,相应的请求费用也随之下降。
  4. 极速弹性、缩容到 0、事件触发:FaaS 结合容器镜像已经极大简化了应用迁移至 Serverless,加速功能进一步解锁了实时、准实时工做负载,曾经须要分钟级别的容器启动如今能够几秒内快速启动,真正实现缩容到0。

镜像拉取为何慢?

一个 OCI V1 容器镜像包含多个层(layer),每层都是一个压缩打包的文件系统(文件夹),一般以 tar.gz 格式存储在远端服务(如对象、文件存储)。拉取镜像时步骤以下:服务器

  1. 将各个 layer 对应的 tar.gz 文件完整下载至本地
  2. 每层顺序解压
  3. 将各个层合并(如 Overlay)做为 rootfs 启动容器

上述步骤虽然简单,倒是镜像拉取慢的主要缘由:
• 文件格式缺陷、粗粒度数据分层、顺序解压:gzip 层致使没法细粒度随机读取应用实际须要的数据,且要求全部层单线程顺序解压。实际观察发现镜像层能够经过并发下载提升速度,然而解压环节在 gzip 格式下却很难优化。
• 低效的压缩/解压缩算法:镜像层采用的 gzip,benchmark gzip 解压速度对比 lz4 平均慢接近9倍。
• 全量数据下载:一样因为粗粒度的分层和 gzip 格式(不支持 seek),镜像数据不管是否实际有用,都要被完整下载至本地。
综上原理,镜像拉取时间和镜像大小成正比,而容器镜像构建过程当中运行 apt/yum install, 无用的测试、数据文件,构建过程当中执行 chmod/chown 等命令形成同一数据复制多份,极易引入大量应用不须要的数据。网络

加速原理

函数计算将阿里集团成熟的镜像加速技术应用在公共云服务中,加速技术围绕两个核心思路:
• 按需加载:仅读取应用真实须要的数据,极大减小数据传输量
• 更高效的存储和算法:相同大小的数据,更快地解压并发

按需加载

Benchmark 中包含镜像数据加载率在 12% - 84% 之间,除了镜像较小的 web 应用,大部分场景数据利用率低于 50%。以层(layer)做为数据分发单位的原始镜像被转换成支持细粒度按需读取的数据格式,并存放在延迟和吞吐都更优的存储中。

函数计算镜像加速:从分钟到秒的跨越

高效解压

除了按需加载带来的下载步骤延时节省,镜像加速技术在数据解压步骤也一样作了大量优化。下图能够看出即便在加载 70% 以上全量数据的状况下,优化效果仍然超过 60%。

函数计算镜像加速:从分钟到秒的跨越

将来规划

函数计算正式发布了容器镜像加速,经过按需读取和更高效的解压技术在不一样场景下加速 50%-80%,即便 GB 级别的镜像也能够在几秒内完成端到端启动。加速功能结合函数计算极致弹性和事件触发的特色,解锁了更多对实时要求高的工做负载。容器应用能够更容易地享受 Serverless 特性,真正作到缩容到0以及快速大规模扩容。FC 在将来会持续优化冷启动各个环节提供极致弹性,承担更多用户责任,使开发者专一业务创新。

附录:实验场景数据

函数计算镜像加速:从分钟到秒的跨越

做者:Shuai Chang,阿里云云原生 Serverless 团队高级技术专家,主导了函数计算同容器技术生态融合以及 FaaS 云原生可观测。
原文连接本文为阿里云原创内容,未经容许不得转载

相关文章
相关标签/搜索