InfoQ 编辑部出品——2021年度技术盘点与展望 了解详情
写点什么

秒级启动万个容器,如何实现容器镜像的“加速冲刺”?

  • 2020 年 1 月 15 日
  • 本文字数:1925 字

    阅读完需:约 6 分钟

秒级启动万个容器,如何实现容器镜像的“加速冲刺”?

作者:袁逸凡、木环、陈显鹭


年关将至,各种年货节、秒杀商品、倒计时直播也会纷至沓来。这些业务的共同点都是流量瞬间暴增,运维部必须快速筹备大量的服务器,并在极短时间内扩容容器承接线上流量,避免系统崩溃。除了需要集群节点的快速扩容,也对应用部署速度提出更高要求。


部署启动快,常被认为是容器的核心优势之一。但是果真如此吗?本地镜像实例化成容器的时间很短,即“热启动”;而在本地无镜像情况下的“冷启动”,需要先从镜像仓库下载镜像并解压缩后才能拉起容器,受网络和磁盘性能影响较大,耗时数分钟;大规模批量冷启动甚至可能导致 Registry 因网络拥堵而无法响应。


针对冷启动的痛点,阿里云容器与存储两个团队展开合作,研发出一个全新存储引擎 DADI 加速器,将容器冷启动耗时缩短至数秒。方案沉淀自阿里集团内部大规模应用的数据访问加速经验,曾在双十一大促中为大规模容器集群扩容提供了秒级拉起能力。最终利用 DADI 加速器支持镜像按需读取和 P2P 分发,实现 3.01 秒启动 10000 个容器,完美杜绝容器冷启动的数分钟漫长等待,以及镜像仓库大规模并行分发场景下的网络拥堵。


本文将重现加速测试场景以及镜像加速的几个关键点。测试是在 1000 台 4 核 8G 的节点组成的 Kubernetes 集群中进行,阿里云容器服务 Kubernetes (ACK) 能在极短时间内扩容出 1000 台节点 worker 并加入到 Kubernetes 集群中。ACK 的此能力在应对大促,秒杀,短时流量洪峰时具有亮眼的表现。


同时针对本次测试场景,利用 Kubernetes 强大的扩展性和自定义控制器,加快在大规模集群中创建应用和删除应用的速度,保障了测试在极短时间内方便快捷的进行。


阿里云容器团队联合存储团队研发的 DADI 加速器在本次测试中启动 10000 个容器仅需 3.01 秒,10 秒内启动了近 60000 个容器。



Figure 1 - 1 万个容器的启动耗时为 3.01 秒,其中 p999 分位耗时 2.97 秒。


同时针对 1 万个容器的冷热启动进行对比,即在本地有无镜像缓存对启动时间的影响,热启动耗时 2.91 秒,其中 p999 耗时 2.56 秒



Figure 2 - 1 万个容器的冷热启动耗时对比


DADI 冷启动由于数据按需从 P2P 网络中获取,减轻了磁盘压力避免发生 IO 拥堵,因此长尾容器较少。


此外,还进行了限时摸高测试。在 10 秒的限制时间内利用 1000 台宿主机启动了 59997 个容器,在 10.06 秒时第 6 万容器启动完毕:



Figure 3 - 限时 10 秒摸高测试


冷启动的关键优化,DADI 大地加速器


注:上述图示数据,均在阿里云容器团队的容器服务 ACK 中进行。为方便获得每个容器的启动时间,采用 C/S 模式:worker 中每个容器拉起后向测试的 httpServer 上报自己状态,以 httpServer 记录的请求时间作为容器启动耗时。


一般而言,完整的容器应用镜像往往有数百 M 甚至上 G 的大小。在社区的容器 Registry 的实现中,镜像会以分层方式存储,每一层都是一个 tgz 包。当容器启动时, 容器引擎会从容器 Registry 拉取所有的层,在本地实现解压后,通过层次化文件系统构建完整的容器 rootfs。而容器启动过程中所需要的数据可能只占镜像文件中极小一部分比例。本次测试所用镜像完整大小为 894M,容器启动所需数据仅 15M,占比约 1.6%。如何能避免下载完整镜像到本地而直接获取到这 1.6%启动数据是加速容器启动的关键。


为何 DADI 加速器能为大规模容器集群扩容提供秒级拉起的能力?其核心在于“按需读取”容器运行时所需数据,避免传统容器 “下载镜像–>解压镜像–>启动容器”的启动步骤,容器启动耗时从分钟缩短至数秒。这其中包括以下三点优化工作:


  • 镜像格式优化:为了避免下载+解压造成的高时延,DADI 团队设计了一种新的镜像格式,内含索引,无需下载和解压完整镜像即可直接访问;

  • 按需 P2P 数据读取:为减轻批量扩容时对单点 Registry 带来的总体负载,DADI 利用树形 P2P 网络对进行数据分发。即少数 P2P 根节点从 Registry 获取,其他节点(宿主机)之间可相互传输数据,批量扩容时可快速分发数据到所有节点;

  • 高效的解压缩算法:DADI 提供了一种新型的压缩文件格式,可按需单独解压用户访实际问的数据,且解压时间开销可忽略不计。



Figure 4 - 容器启动流程对比


利用 DADI 方案启动容器时,仅从镜像 Registry 下载几 KB 的镜像元数据,并创建虚拟设备 Overlay Block Device 挂载到容器工作目录上, Docker 引擎会认为镜像已经加载完毕。在容器启动时所需的镜像数据则从本地缓存或者 P2P 网络的上游节点按需下载。P2P 网络可以充分缓解对 Registry 的访问压力。



Figure 5 – DADI P2P 数据分发


随着 Kubernetes 被越来越广泛地接受,阿里云容器服务 ACK 有幸支撑了很多企业级客户,此次 ACK 和 DADI 的深度整合,实现秒级启动万个容器,从容应对大规模应用扩容和发布,相关技术在未来也将成为 Serverless 容器的启动加速利器。


2020 年 1 月 15 日 15:033497

评论

发布
暂无评论
发现更多内容

正式发布!中国信通院联合腾讯安全等起草单位,共同发布研发运营安全工具系列标准

腾讯安全云鼎实验室

云计算 中国信通院 安全工具系列标准

ONES 当选深圳信创联盟副理事长单位,助力国产软件工业发展

万事ONES

信创 ONES

8月日更挑战正式开启,新人大奖等你来领!

InfoQ写作平台官方

活动专区 8月日更

解读区块链技术对量子攻击的脆弱性以及量子安全区块链的解决方案

CECBC

【得物技术】服务发布时网络“抖动”

得物技术

网络 服务 响应时间 部署 发布

企业管云就用行云管家!省时省力省心!

行云管家

云计算 企业上云 行云管家 企业管云

爱奇艺搜索排序算法实践(内附福利)

爱奇艺技术产品团队

排序算法 nlp 搜索

第九周作业-朴朴超市用户路径&转化漏斗

小夏

产品经理训练营 邱岳

行云管家荣获CFS第十届财经峰会2021科技创新引领奖!

行云管家

行云管家 财经峰会

新思科技解读金融服务业的应用安全误区与现实

InfoQ_434670063458

新思科技 金融服务安全

新工具上线!sdkmgr命令行助力流水线构建

科技汇

手撕环形队列系列二:无锁实现高并发

实力程序员

程序员 数据结构 并发 无锁 环形队列

阿里巴巴Java岗面试题库更新(第8版)

Java架构师迁哥

ISC网络安全大会关于“新型网络犯罪打击与治理”的分析

郑州埃文科技

网络安全 isc

两年经验双非,5轮面试拿下阿里Java岗Offer(4月面经原题复盘)

Crud的程序员

Java spring 编程 程序员 架构

打造“云边一体化”,时序时空数据库TSDB技术原理深度揭秘

数据库 大数据 时序数据库 tsdb 数据智能

品牌轮:用MOT引导的品牌体验模型

石云升

用户体验 关键时刻 7月日更 体验设计

Apache ShardingSphere:由开源驱动的分布式数据库中间件生态

亚马逊云科技 (Amazon Web Services)

人工智能 开源数据库

HarmonyOS开发者创新大赛获奖作品分享——《分镜头App》

科技汇

Fil收益怎么看?Fil一天收益如何?

区块链 IPFS fil收益 filecoin生态

阿里内部最新、最全Java面试手册,Github上获赞70K

Crud的程序员

Java spring 程序员 架构 编程语言

微服务架构设计模式-进程间通信

以吻封笺

微服务 设计模式

下一个颠覆的领域:区块链如何影响审计行业?(中)

CECBC

这次不编故事了,阿里Spring Cloud Alibabab笔记,自己领吧

Java架构师迁哥

智慧农业陷转型困局,区块链如何“对症下药”?

CECBC

你以为你懂redis?等看完某宝付费的资源你就知道了

Java架构师迁哥

完备的娱乐行业知识图谱库如何建成?爱奇艺知识图谱落地实践

爱奇艺技术产品团队

nlp 搜索 知识图谱

主流分布式文件系统选型,写得太好了!

编程菌

Java 编程 程序员 计算机 技术宅

希望体验更好的开发流程

escray

学习 极客时间 朱赟的技术管理课 7月日更

如何识别并解决复杂的dcache问题

OPPO数智技术

后端

2021可信云大会顺利召开,北鲲云践行云计算六大发展趋势

北鲲云

秒级启动万个容器,如何实现容器镜像的“加速冲刺”?-InfoQ