一种大规模容器镜像分发加速模型及其实现方法

发布日期:2020年12月23日
一种大规模容器镜像分发加速模型及其实现方法 一种大规模容器镜像分发加速模型及其实现方法

本内容试读结束

下载后可阅读完整内容,立即下载

云计算逐渐成为一种主流的基础服务,容器由于其轻便型是目前云计算之中最常使用的一种虚拟化抽象。基于镜像这样的模板容器可以迅速部署应用在云服务器上。然而现有的容器引擎在大规模镜像分发时容器会产生冷启动时间过长的问题。本文分析并验证了影响Docker容器冷启动的关键因素,提出了一种大规模容器镜像分发加速模型。通过以文件为粒度的延迟加载,以及按使用顺序的文件分层,加快了镜像的传输速度,进而加速容器启动。基于该模型,实现了镜像分发系统D4C (Doing Deft Distribution of Docker Container)。并从容器冷启动时间、启动镜像大小、网络传输量三个方面进行测试,验证了D4C在这几个方面的优势。

容器(container)是虚拟化技术的一种。由于其轻便性是目前云计算之中最常使用的一种虚拟化抽象。

容器与虚拟机不同的地方在于,容器与宿主机共享内核。因此通常比传统虚拟机占用内存小[1]。容器有三个关键组件:1) 强制执行进程级隔离的OS 机制(例如Linux cgroups 和命名空间机制),2) 应用程序打包系统和运行时(例如Docker, Rkt)和3) 跨机器部署, 分发和管理容器的编排管理器(例如Docker Swarm, Kubernetes)。

目前最流行的容器是dotCloud 公司的Docker [2]。Docker 运行时环境被打包在一组文件中,这些文件称为Docker 镜像(image)。Docker 镜像由一系列层(layer)组成。每层都是一个只读文件系统包含一组文件或目录。Docker 仓库中存储有关于Docker 镜像的两种文件:Manifest 和Blob。Manifest 描述了有关Docker 镜像的元信息。它指示镜像所具有的层以及每个层所引用的Blob。Blob 是图层的压缩文件。每一层都有一个对应的Blob。

Docker 容器的新部署包括两个步骤:1) 从Docker 仓库中拉取(pull)已发布(push)的镜像,以及2) 基于该镜像启动一个容器。然而,新部署容器所花费的时间中有76%将花费在拉取镜像上[3]。为了加快速度,通常会在本地集群中部署私有Docker 仓库。但是Docker 仓库所在主机的带宽无疑将成为大规模容器部署的瓶颈。部署两个或多个Docker 仓库实例可以在某种程度上缓解此问题,但会引发新问题,例如镜像同步和负载平衡。因此,需要一种快速、优雅的方法来分发Docker 镜像以进行大规模容器部署。

本文立足于解决集群内部容器镜像大规模传输部署的加速问题,探究多种容器镜像分发加速方法, 构建一个新型的镜像分发加速模型。最终实现一套容器镜像分发加速系统。

本文的主要贡献有3 个方面: 1) 通过分析和实验证明了在容器启动过程中,只有少量文件会被使用。并且通过分析典型容器的镜像,给出了镜像大小与启动时文件使用率的关系。

2) 提出了一种针对大规模容器镜像分发的加速模型,通过镜像启动时文件被加载的先后时间来优先传输必须的文件,减少了启动必须的文件传输的时间。

3) 基于以上思路实现了一种大规模容器镜像分发加速模型D4C (Doing Deft Distribution of Docker Container)。在顺序启动和并发启动速度、网络传输数据量等方面进行对比实验,验证了所实现模型的有效性。



相关标签