容器技术由于其快速启动、较低资源开销和轻量级资源隔离的特性,已经成为云环境中应用部署的规范。同时,容器轻量化的特点也使其在边缘计算场景中得到了广泛应用。然而,由于边缘计算场景比云环境的可用网络带宽小,在边缘计算场景使用传统方式部署容器会因需要提前下载大量容器镜像数据而造成带宽占用过多和应用响应延迟低的问题。这是因为在生成标准容器镜像时,用户往往会引入许多不必要的数据,使镜像体积远大于实际需要。此外,镜像使用层级结构以方便管理。这种分层结构的共享粒度较大、共享效果差,导致镜像间存在大量冗余数据。为此,我们以减少容器部署过程中网络资源的使用,并加速容器部署为目标,提出了一种面向边缘计算的容器镜像构建方法。该方法不再一次性下载完整镜像,而是以文件为粒度根据容器运行情况实时地下载所需文件。此外,通过该方法构建出的新型镜像对用户透明,并且与现有框架的命令进行完全兼容。为实现上述特征,我们将传统容器镜像解耦为镜像索引和镜像文件两部分。镜像索引包含在一个单层标准镜像中以方便其在现有架构下的传输。容器对镜像的访问被镜像索引接收,并重定位到对应的镜像文件。若请求的镜像文件不在本地,新型镜像能够基于镜像索引从远程下载对应文件,从而避免在启动前必须下载完整标注容器,减少了对网络资源和存储资源的消耗。此外,新型镜像的共享粒度从原来的层级细化为文件级,使镜像数据共享效果得到提升,从而去除了大量冗余数据。基于新型镜像我们设计了面向边缘计算的容器镜像构建方法,使边缘节点可以按需获得容器运行所需数据,并通过节点上的数据缓存,进一步降低数据下载量。

该成果“Edge Computing-oriented Construction Method for Container Mirror Image”已获得美国专利授权,授权号US 11,341,181 B2, 授权时间2022年5月22日。

背景和动机

容器因其部署便捷、启动迅速、响应快速等特点已经成为云环境中应用开发、运行以及维护的事实标准。在容器实例启动前,需要将其对应的镜像下载至本地。下载容器镜像的时间平均占据76%的容器部署时间。一个标准容器镜像包含了应用代码、依赖项打包以及环境变量,从而可以使用户无视系统和平台的差异无缝地部署容器实例。容器镜像采用了分层结构对镜像文件进行组织管理。容器启动时,节点使用联合挂载技术将多个镜像层合并挂载到一个目录下,从而为容器实例提供完整统一的文件系统视图,实现对镜像内文件的访问。容器镜像的分层设计,使得镜像层可以在不同镜像之间共享,即多镜像之间若存在相同的镜像层依赖,则该镜像层仅会被下载一次,从而避免重复下载、冗余存储引入的不必要开销。常用的容器系统框架为客户端-仓库模型,仓库集中对容器镜像进行管理,本地节点部署容器时,通过网络从仓库下载对应镜像。

容器轻量化的优点也使其被广泛应用于边缘场景。对比中心化的云计算,边缘计算场景是指在靠近数据源的一侧搭建集网络、计算、存储、应用能力为一体的计算节点,以就近提供处理少量数据的能力。然而,由于边缘计算场景的资源往往是受限的,基于现有的标准容器镜像部署容器实例会消耗大量网络资源,并产生极高的应用服务时延。原因有以下三点:第一,镜像以层为粒度进行构建,写时复制,依赖升级等镜像层数据部分更新操作会导致同一个镜像内的镜像层间存在大量的文件冗余。第二,镜像分层结构数据共享粒度过粗,不同镜像间的镜像层往往因极小的差异而无法共享。第三,在容器运行过程中,大部分的容器镜像数据不会被容器使用。当使用标准镜像部署容器时,这些冗余数据和无用数据会大量下载。我们对业界流行的镜像仓库Docker Hub中的镜像进行了观察。我们发现Docker Hub中下载量前50的镜像间文件冗余可达87%,且容器部署过程中仅有7%~33%的文件被访问到。标准容器镜像的上述不足会严重影响容器部署效率,并在一定程度阻碍容器技术在边缘计算场景中的应用。因此,需要设计一种面向边缘计算的容器镜像构建方法。

系统设计

基于上述问题,本文提出了一种面向边缘计算的容器镜像构建方法。该方法将标准容器镜像重构成支持文件级共享和加载的新型镜像,并基于现有容器系统架构对新型容器镜像进行存储和传输。如图1所示,面向边缘计算的容器镜像构建方法主要包含以下四个步骤:(1)标准容器镜像的细粒度解耦;(2)基于索引的新型按需加载容器镜像的生成;(3)本地容器的快速部署;(4)本地镜像数据的文件级共享。

图1 面向边缘计算的容器镜像构建方法

标准容器镜像的细粒度解耦

为了打破层级限制,实现细粒度的数据共享,我们将标准容器镜像解耦为镜像文件结构关系信息和镜像文件两部分。如图2所示,镜像文件结构关系信息被放置于一个单层的标准容器镜像中,使其能够在镜像仓库中存放,并能够通过现有的传统架构中的命令进行拉取和上传。由于镜像文件结构关系信息只包含元数据而不包含具体文件,该单层标准镜像具有极小的体积。容器镜像各层中的文件被取出并置于文件存储系统中。在文件存储系统中,这些文件以该文件的数据指纹命名,并通过删除具有相同文件名的文件即可达到去重的目的。

图2 标准容器镜像解耦与新型容器镜像生成

基于索引的新型按需加载容器镜像的生成

打破部署容器必须提前下载完整容器镜像的限制,使容器能够在运行过程中实时下载所需文件,我们设计了基于索引的新型按需加载容器镜像。如图2所示,我们利用文件结构关系信息实现了镜像索引。索引功能通过在文件结构关系信息中添加文件的数据指纹实现,即将文件系统中的文件替换为文件的数据指纹。数据指纹的生成需要读取完整文件并基于文件内容计算SHA256,对I/O资源和计算资源需求量高,因此对标准容器镜像的解耦在仓库端进行。

本地容器的快速部署

当本地节点需要部署一个容器,不再请求完整的标准容器镜像,而是下载其对应的镜像索引至本地节点。一方面,镜像索引置于单层的标准镜像中,镜像索引可以存放于传统的镜像仓库,并且节点可以使用通用的镜像操作命令对其进行管理。另一方面,由于镜像索引只包含元数据,其下载时间和所需带宽都很小。包含镜像索引的单层镜像下载完成后,容器在运行过程中基于镜像索引记录的文件结构关系信息生成容器的文件系统视图。当容器需要访问一个镜像文件,节点先基于文件结构关系信息找到对应文件的数据指纹,再通过数据指纹找到对应镜像文件。在容器部署过程中,只有需要被访问的镜像文件才会被下载到本地,因此容器部署速度极快。

本地镜像数据的文件级共享

不同容器部署过程中会涉及大量相同文件的访问,特别是对于相同种类容器的不同镜像版本,这些容器部署过程中的重复访问数据超过70%。为此,我们在本地节点设计了文件共享池以进一步减少数据的下载量。由于在本地节点相同文件是共享的,需要避免对共享文件进行修改。为此,我们为每个容器创建一个独立的文件域用于存放新文件和修改后的文件。本地为文件生成数据指纹作为该文件的文件名,并将文件的路径和指纹合并入容器对应的镜像索引。

图3 实验结果

系统评估

我们从镜像数据规模、镜像数据传输量和容器部署时间三个方面对我们的构建方法进行了测评。如图3所示,相比于标准容器镜像,存放新型按需加载容器镜像的仓库数据量减少了54%。相比于标准容器镜像的层级共享,新型容器镜像的文件级共享和按需加载减少了84%的数据传输量。另外,我们提出的镜像构建方法在带宽受限的场景下(5Mbps)对容器部署过程的加速可达5倍。

专利信息:

Edge Computing-oriented Construction Method for Container Mirror Image, 美国专利授权号US 11,341,181 B2, 授权时间2022年5月22日, Song Wu, Shengwei Bian, Hai Jin, Hao Fan.

吴松、樊浩

声明:本文来自穿过丛林,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。