作者 | 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.1AccelerationType: 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 云原生可观测。

启动延时缩短 50%-80%,函数计算发布镜像加速功能相关推荐

  1. 函数计算 GB 镜像秒级启动:下一代软硬件架构协同优化

    作者:修踪 审核&校对:Chang Shuai.望宸 编辑&排版:雯燕 背景 函数计算在 2020 年 8 月创新地提供了容器镜像的函数部署方式.AWS Lambda 在 2020 年 ...

  2. 函数计算GB镜像秒级启动:下一代软硬件架构协同优化

    简介: 优化镜像加速冷启动大致分为两种做法:降低绝对延迟和降低冷启动概率.自容器镜像上线以来我们已经通过镜像加速技术,分阶段降低了绝对延迟.本文在此基础上,介绍借助函数计算下一代IaaS底座神龙裸金属 ...

  3. 函数计算 GB 镜像秒级启动

    一 背景 ​ 函数计算在2020年8月创新地提供了容器镜像的函数部署方式.AWS Lambda在2020年12月Re-Invent,国内其他FaaS提供商在2021年6月也相继宣布了FaaS支持容器的 ...

  4. 费用节省 50%,函数计算 FC 助力分众传媒降本增效

    作者:洛浩 分众传媒诞生于 2003 年,创建了电梯媒体广告模式,2005 年成为首家在美国纳斯达克上市的中国广告传媒股,2015 年分众传媒回归 A 股,市值破千亿.分众传媒营收超百亿关键在于,抓住 ...

  5. 跨越行业绊脚石,阿里云函数计算发布 7 大技术突破

    作者|望宸 等 Serverless 的本质是通过屏蔽底层的计算资源,来实现业务层开发的专注度和自由度.但越是往上抽象,云厂商在底层的实现就越是复杂.函数计算将服务进一步拆分到函数的颗粒度,这势必会给 ...

  6. 一眼定位问题,函数计算发布日志关键词秒检索功能

    听说这个问题你也遇到了? 小王是一名程序员,最近在使用 FaaS(Function as a Service) 服务时遇到了一个头疼的问题:他的 FaaS 应用出现很多报错,但是调用日志页面的请求太多 ...

  7. 函数计算支持应用中心功能

    前言 函数计算是事件驱动的全托管计算服务.使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码.函数计算为您准备好计算资源,弹性地可靠地运行任务,并提供日志查询.性能监控和报警等功能.借 ...

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

    简介:函数计算 FC 正式发布容器镜像加速,通过按需读取和更高效的解压技术在不同场景下加速 50%-80%,即使 GB 级别的镜像也可以在几秒内完成端到端启动. 作者信息: Shuai Chang,阿 ...

  9. 独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless

    作者 | 杨丽 来源 | 雷锋网(ID:leiphone-sz) Serverless 其实离我们并没有那么遥远. 如果你是一名互联网研发人员,那么极有可能了解并应用过 Serverless 这套技术 ...

最新文章

  1. python转csv_python脚本如何将Excel文件转为csv文件(代码)
  2. mysql服务怎么改名字_MySQL数据库改名字
  3. oracle的簇与簇表
  4. 13-Qt6 QMap
  5. mysql 非空语法_mysql从入门到优化(1)基本操作上
  6. window xp系统安装php环境_Windows Server 2003及XP系统如何安装SQL Server 2000数据库?
  7. Flink入门训练--以New York City Taxi为例
  8. 非递归求解N皇后问题(回溯法)
  9. 挑战程序设计竞赛学习笔记2
  10. 泛微e9隐藏明细表_泛微协同 泛微OA e-cology产品功能清单 模块列表
  11. 2021年进销存管理软件商户门店使用热度前十名排行榜
  12. Unity代码编写自定义模型 修改器(可扩展)
  13. phpstudy安装部署DVWA
  14. Mandriva linux 资源列表
  15. 在VMware虚拟机上安装 Win7 操作系统
  16. 监控系统网络未找到dhcp服务器,监控显示未找到dhcp服务器
  17. vue3项目简化Compositions API使用-省去频繁的import和各use函数调用
  18. 日紫白飞星算法_九宫紫白飞星计算法
  19. Kaggle 入门 Crime
  20. 台式机局域网电脑通过笔记本的无线网络上网

热门文章

  1. ctf之py反编译求p*q%n==1
  2. Codeforces Round #498 (Div. 3)【完结】
  3. 【PAT乙级】1085 PAT单位排行 (25 分)
  4. MySQL查询的进阶操作--联合查询
  5. C++之抽象基类与纯虚函数
  6. Spring boot的Thymeleaf默认规则
  7. Spring boot统一日志记录
  8. jQuery操作元素属性
  9. vc++64位系统下long的长度为4个字节_新来的妹子把几百万数据放入了内存,系统立马爆了...
  10. SpringBoot项目优化和Jvm调优(楼主亲测,真实有效)