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

作者信息:
Shuai Chang,阿里云云原生 Serverless 团队高级技术专家,主导了函数计算同容器技术生态融合以及 FaaS 云原生可观测。

体验文档:
镜像拉取加速文档:https://help.aliyun.com/document_detail/193075.html

FaaS 和容器

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

函数计算镜像加速功能

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

加速效果

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


使用方式

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

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

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

        CustomContainerConfig:Image: registry-vpc.cn-beijing.aliyuncs.com/fc-demo/python-flask:v0.1AccelerationType: 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 在未来会持续优化冷启动各个环节提供极致弹性,承担更多用户责任,使开发者专注业务创新。

附录:实验场景数据

Benchmark 场景 镜像压缩大小 解压后大小
python-flask Web 应用 46MB 118MB
ecommerce-nodejs 电商, nodejs express 130MB 371MB
ml-small-import/;ml-large-import 机器学习,使用 numpy, pandas, pystan 等库 728MB 2.392GB
ai-cat-or-dog 机器学习,人工智能,推理预测 tensorflow, keras 等库 790MB 1.824GB
puppeteer-pdf Headless chrome,网页转 PDF, 使用 puppeteer, nodejs express 332MB 894MB
cypress-chrome 前端 UI 自动化,cypress, headless chrome 980MB 2.608GB

参考

• 函数计算支持容器镜像-加速应用 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

原文链接:https://developer.aliyun.com/article/781992?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

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

  1. php计算多少小时多少分钟多少秒

    //计算小时数$timediff =1563928200 - 1563925800;$remain = $timediff%86400;$hours = intval($remain/3600);// ...

  2. 启动延时缩短 50%-80%,函数计算发布镜像加速功能

    作者 | Shuai Chang  阿里云云原生 Serverless 团队高级技术专家 来源 | 阿里巴巴云原生公众号 体验文档:镜像拉取加速文档 FaaS 和容器 容器镜像因其颠覆式创新成为云原生 ...

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

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

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

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

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

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

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

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

  7. Python日期时间差的计算(天/小时/分钟)及timedelta函数的使用(附python代码)

    背景描述 数据分析中会遇到日期.时间的计算,主要包括以下几种情况: 对2个日期进行时间差值的计算或与目标时长进行比较,如:计算天数(days).小时数(hours).分钟数(minutes),秒数(s ...

  8. python的datetime举例_Python datetime库计算两个时间点之间的分钟(秒、天)数

    计算两个时间点之间的分钟数 import datetime def minNums(startTime, endTime): '''计算两个时间点之间的分钟数''' # 处理格式,加上秒位 start ...

  9. 使用joda-time工具类 计算时间相差多少 天,小时,分钟,秒

    下面程序使用了两种方法计算两个时间相差 天,小时,分钟,秒 package jodotest; import java.text.ParseException; import java.text.Si ...

最新文章

  1. mysql if语句 oracle,Oracleifelse语句的写法实例
  2. PhpMyAdmin导入数据库大小限制?
  3. c++矩阵类_Python线性代数学习笔记——矩阵的基本运算和基本性质,实现矩阵的基本运算...
  4. WCF系列之.net(3.0/3.5)Rest使用示例
  5. java苹果沙盒验证参数问题_php – iOS7 – 收据未在沙盒验证 – 错误21002(java.lang.IllegalArgumentException)...
  6. activiti7关联mysql_学习笔记:一个MySQL实例有多个Activiti数据库问题
  7. gbk utf-8 asccl url
  8. 电商卖家如何有效提升转化率?
  9. 算法导论——钢条切割问题(C语言)
  10. labview虚拟心电监测系统_基于LabVIEW的虚拟心电记录系统研制
  11. csgo原始输入开不开_CSGO职业哥参数配置:帅气猪猪JW
  12. Dubbo NoSuchMethodException: Not found method “xxx“ in class xxx问题解决
  13. Python中单元测试和类的测试
  14. bvh动作 舞蹈_kinect动作捕捉初探(下)——bvh文件的处理和应用
  15. aws eks_在带aws eks的kubernetes上部署带舵的破折号
  16. 软件项目管理附加实验一(项目调研)
  17. 论文阅读-A cooperated shuffled frog-leaping algorithm for distributedenergy-efficient hybrid flow ...
  18. 骂人的c语言,法语中骂人你就只会Merde?
  19. 【C语言入门基础】第一章第一话 初识C语言(自学c)
  20. 这是唯一的、最后的抒情——读海子《日记》

热门文章

  1. 解决ubuntu中vi不能正常使用方向键与退格键的问题
  2. broker可以禁用吗 time_很多人会问Win8.1系统Runtime Broker是什么进程?可以禁用吗?带着这两个问题...
  3. web前端html图片轮播,如何使用LayUI实现网页轮播图_WEB前端开发,layui,轮播图
  4. php网页论坛制作教程,PHP开发 小型论坛教程之登录HTML页面
  5. mysql与dns_借助mysql和DNS view实现智能DNS(centos6.3 x64环境)
  6. 将一个简单远程调用的方式例子改为异步调用
  7. 线性插值法的原理和python代码实现
  8. Action Service Dao三层的功能划分
  9. Android 怎样查看系统的memory swap 资讯/信息
  10. salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)...