Knoppix|镜像格式二十年:系统镜像的螺旋进化( 四 )


是的 , 蚂蚁的镜像加速实践里就采取了这样的架构 。 在过去 , 庞大的镜像不仅让拉取过程变慢 , 而且如果这一过程同样风险重重 , 贡献了大半的 Pod 启动失败率 , 而今天 , 当我们把延迟加载的 rootfs 引入进来的时候 , 这些失败几乎被完全消灭掉了 。 在去年年末的第10届中国开源黑客松里 , 我们也演示了通过 virtio-fs 把这套系统对接到 Kata Containers 安全容器里的实现 。
Knoppix|镜像格式二十年:系统镜像的螺旋进化
文章图片

如图 , 类似 Squashfs , 这种新的 Image 格式中 , 压缩数据块是基本单位 , 一个文件可以对应0到多个数据块 , 在数据块之外 , 引入了一些附加的元数据来做目录树到数据块的映射关系 , 从而可以在没有下载完整镜像数据的时候也给应用呈现完整的文件系统结构 , 并在发生具体读取的时候 , 根据索引 , 去获取相应的数据来提供给应用使用 。 这个镜像系统可以带来这些好处:

  • 按需加载 , 启动时无需完全下载镜像 , 同时对加载的不完全镜像内容可以进行完整性校验 , 作为全链路可信的一个部分;
  • 对于 runC 容器 , 通过 fuse 可以提供用户态解决方案 , 不依赖宿主机内核变动;
  • 对于 Kata 这样的虚拟化容器 , 镜像数据直接送给 Pod 沙箱内部使用 , 不加载在宿主机上;
  • 使用体验上和之前的 Docker Image 并没有显著不同 , 开发者体验不会变差;
而且 , 这套系统在设计之初 , 我们就发现 , 因为我们可以获取到应用文件数据访问模式的 , 而基于文件的一个好处是 , 即使镜像升级了 , 它的数据访问模式也是倾向于不太变化的 , 所以 , 我们可以利用应用文件数据的访问模式做一些文件预读之类的针对性操作 。
可以看到 , 系统存储这个领域二十年来发生了一个螺旋式的进化 , 发生在 Live CD 上的进化 , 在容器这里也又来了一次 , 恍如隔世 。 目前 , 我们正在积极地参与 OCI Image v2 的标准推动 , 也正在把我们的参考实现和 DragonFly P2P 分发结合在一起 , 并成为 CNCF 的开源项目 Dragonfly 的一部分 , 希望在未来可以和 OCI 社区进一步互动 , 让我们的需求和优势成为社区规范的一部分 , 也让我们可以和社区保持一致、可平滑过渡 , 未来可以统一在 OCI-Image-v2 镜像之下 。
作者介绍 王旭 , 蚂蚁集团资深技术专家 , 也是开源项目 Kata Containers 的架构委员会创始成员 , 在过去几年中活跃在国内的开源开发社区与标准化工作中 。 在加入蚂蚁集团之前 , 他是音速神童的联合创始人和 CTO , 他们在 2015 年开源了基于虚拟化技术的容器引擎 runV , 在 2017 年 12 月 , 他们和 Intel 一起宣布 runV 与 Clear Containers 项目合并 , 成为 Kata Containers 项目 , 该项目于 2019 年 4 月被董事会通过成为了 OpenStack 基金会 2012 年以来的首个新开放基础设施顶级项目 。 在创立音速神童之前 , 王旭曾工作于盛大云计算和中国移动研究院的云计算团队 。 2011 年王旭曾经主持过杭州 QCon 的云计算主题 , 同时 , 也曾经是一位活跃的技术作者、译者和老 blogger 。

本文归档在 sofastack.tech 。


推荐阅读