作者 | Shuai Chang 阿里云云原生 Serverless 团队高级技术专家
起源 | 阿里巴巴云原生公众号
体验文档:镜像拉取减速文档
FaaS 和容器
容器镜像因其颠覆式翻新成为云原生时代利用部署格局的事实标准。头部云厂商 FaaS (Function-as-a-Service) 服务如阿里云函数计算、AWS Lambda 也相继在 2020 年反对应用容器镜像部署函数,全面拥抱容器生态。自公布以来,开发者陆续将机器学习、音视频解决、事件驱动离线数据处理、前端自动化等多个场景应用镜像疾速无服务器化,提高效率、降低成本。然而,冷启动始终是 Serverless 无奈绕开的问题。容器镜像须要将数据通过网络近程下载并解压,对于 GB 级别的镜像,拉取工夫可能高达分钟级别,主观上放大了冷启动副作用,妨碍实时利用的 Serverless 演进。
函数计算镜像减速性能
传统的镜像拉取减速强调 ” 开发者负责 ”,如精简镜像,正当调配镜像层,multi-stage 构建,应用工具(如 docker-slim)去除不须要的数据,遵循构建最佳实际等。这些工作不仅减轻了用户累赘,减速成果无限,且有运行时稳定性危险。阿里团体超大规模和场景高度简单的容器环境,对镜像存储、减速技术有深厚的积攒,杰出地承当了 3 年双十一、双十二、春节等大促秒杀场景的严苛的挑战。阿里云 Serverless 同容器镜像、存储等服务深度单干,将外部翻新在函数计算输入:杭州、北京、上海、美东、美西正式公布了镜像减速性能。该性能将本来属于开发者的镜像优化累赘转由函数计算承当,进一步帮忙开发者进步生产效率,专一业务翻新。
1. 减速成果
咱们在抉择了外部生产环境和开源社区的工作负载,笼罩机器学习、人工智能、前端自动化、Web 利用等 7 种镜像大小、IO 拜访模式、启动命令的不同组合作为 benchmark,部署在 FC 北京区域。如下图所示,函数计算开启镜像减速性能后减速广泛超过 50%,对于机器学习场景中常见的臃肿镜像(如多个团队共享根底镜像, ml-small-import, ml-large-import, ai-cat-or-dog)减速成果更为显著(约 70%-86%),镜像越大优化空间往往越高。
2. 应用形式
镜像减速能够通过控制台、CLI 工具或是 FC SDK 开启,具体步骤参考镜像拉取减速文档。
- 形式一:在函数计算控制台函数配置下抉择“开启镜像减速”。
- 形式二:应用 Funcraft 工具部署。
在已有的 CustomContainerConfig 配置下增加 AccelerationType: Default 如需敞开则配置 AccelerationType:
CustomContainerConfig:
Image: registry-vpc.cn-beijing.aliyuncs.com/fc-demo/python-flask:v0.1
AccelerationType: Default
3. 性能特点
FC 镜像减速具备以下特点:
- 应用简略:只需在函数上开启镜像减速,函数计算会主动制作减速镜像和缓存,转换实现后(5 分钟以内),函数主动采纳减速镜像缓存。
- 专一业务翻新:开发者无需破费工夫刻意精简优化镜像大小或严格辨别 Serverless 和 Serverfull 利用镜像的构建形式,FC 负责依照利用理论应用数据拉取和解压。
- 减速收费,应用门槛低:镜像减速开启不产生额定费用,也不须要开发者额定购买或降级任何其余服务。事实上因为镜像拉取工夫变短,相应的申请费用也随之升高。
- 极速弹性、缩容到 0、事件触发:FaaS 联合容器镜像曾经极大简化了利用迁徙至 Serverless,减速性能进一步解锁了实时、准实时工作负载,已经须要分钟级别的容器启动当初能够几秒内疾速启动,真正实现缩容到 0。
镜像拉取为什么慢?
一个 OCI V1 容器镜像蕴含多个层(layer),每层都是一个压缩打包的文件系统(文件夹),通常以 tar.gz 格局存储在远端服务(如对象、文件存储)。拉取镜像时步骤如下:
- 将各个 layer 对应的 tar.gz 文件残缺下载至本地。
- 每层程序解压。
- 将各个层合并(如 Overlay)作为 rootfs 启动容器。
上述步骤尽管简略,却是镜像拉取慢的次要起因:
- 文件格式缺点、粗粒度数据分层、程序解压:gzip 层导致无奈细粒度随机读取利用理论须要的数据,且要求所有层单线程程序解压。理论察看发现镜像层能够通过并发下载进步速度,然而解压环节在 gzip 格局下却很难优化。
- 低效的压缩 / 解压缩算法:镜像层采纳的 gzip,benchmark gzip 解压速度比照 lz4 均匀慢靠近 9 倍。
- 全量数据下载:同样因为粗粒度的分层和 gzip 格局(不反对 seek),镜像数据不管是否理论有用,都要被残缺下载至本地。
综上原理,镜像拉取工夫和镜像大小成正比,而容器镜像构建过程中运行 apt/yum install, 无用的测试、数据文件,构建过程中执行 chmod/chown 等命令造成同一数据复制多份,极易引入大量利用不须要的数据。
减速原理
函数计算将阿里团体成熟的镜像减速技术利用在公共云服务中,减速技术围绕两个外围思路:
- 按需加载:仅读取利用实在须要的数据,极大缩小数据传输量。
- 更高效的存储和算法:雷同大小的数据,更快地解压。
1. 按需加载
Benchmark 中蕴含镜像数据加载率在 12% – 84% 之间,除了镜像较小的 web 利用,大部分场景数据利用率低于 50%。以层(layer)作为数据散发单位的原始镜像被转换成反对细粒度按需读取的数据格式,并存放在提早和吞吐都更优的存储中。
2. 高效解压
除了按需加载带来的下载步骤延时节俭,镜像减速技术在数据解压步骤也同样做了大量优化。下图能够看出即便在加载 70% 以上全量数据的状况下,优化成果依然超过 60%。
将来布局
函数计算正式公布了容器镜像减速,通过按需读取和更高效的解压技术在不同场景下减速 50%-80%,即便 GB 级别的镜像也能够在几秒内实现端到端启动。减速性能联合函数计算极致弹性和事件触发的特点,解锁了更多对实时要求高的工作负载。容器利用能够更容易地享受 Serverless 个性,真正做到缩容到 0 以及疾速大规模扩容。FC 在将来会继续优化冷启动各个环节提供极致弹性,承当更多用户责任,使开发者专一业务翻新。
附录:试验场景数据
参考
- 函数计算反对容器镜像 - 减速利用 Serverless 过程
- New for AWS Lambda – Container Image Support
- 函数计算镜像拉取减速文档
- Docker Slim: Minify and Secure Docker containers (free and open source!)
- christopher-talke/node-express-puppeteer-pdf-example
- awesome-fc/custom-container-docs
作者简介
Shuai Chang,阿里云云原生 Serverless 团队高级技术专家,主导了函数计算同容器技术生态交融以及 FaaS 云原生可观测。