DupHunter——第一个自带重删功能的registry
(摘要):容器的增多导致容器镜像大量增加,存储性能和容量的要求给服务中心带来了巨大的压力,容器服务中心在存储和网络的基础设施上的开销越来越大。
而在实际存储中镜像之间存在大量冗余(因为很多不同的层中包含相同的文件),可以利用重复数据删除技术减少这些冗余以减轻存储容量的压力。但是存在一个问题就是现有的重复数据删除技术的恢复开销较高,会导致性能显著降低。
1.减少容量要求:原生的文件级重复数据删除以及多种重删模式提供了不同级别的存储效率、持久性和性能。减少了高达6.9×的存储空间
2.提高性能:双层存储结构(P-server集群和D-server集群),基于用户访问模式的预取/预构造缓存。与最新技术相比DupHunter可以将GET层延迟减少到2.8×
1 Introduction
在docker registry中使用重复数据删除技术的挑战:
1.层在registr中以压缩tar包形式存储,不能很好地进行重复数据删除
2.先解压层再存储unique文件会导致很高的恢复开销,降低镜像的pull性能
DupHunter贡献:
1.保留指定数量的层副本直接存储(P-server cluster),不进行解压和重删,访问这些不会产生恢复开销。其他的层副本进行解压缩和重删(D-server cluster)以减少存储开销
2.热层更多存储完整副本,更少进行重删以提高访问性能。冷层更多进行重删,更少存储完整副本以减少存储开销
3.根据用户访问模式(常pull once或者常repull)在下载层的请求到来之前先主动预构造层以减少恢复延迟
4.重删后把一个层内的文件分组为切片并均匀存储在集群中,以实现在恢复层是能够并行化重构加快恢复速度
5.对不同的重删级别(文件级和块级)、不同的冗余策略(复制和纠删码)对registry的存储开销和性能的影响进行了全面分析
2 Background and Related Work
docker registry 背景知识:
1.镜像(image):包括应用程序的可执行文件以及其完整的依赖关系集合——应用程序所需的其他可执行程序、库、配置和数据文件。镜像是分层结构的。构建Docker镜像时每个执行的命令都会在前面的层的基础上创建一个新的层,该层包含该命令修改或添加的文件。
2.容器(container):Docker利用联合文件系统在启动容器时有效地将层合并到单个文件系统树中。容器可以跨不同的图像共享相同的层。
3.层(layer):在服务中心(registry)中,每个层都以一个压缩的tar包形式存储,并由基于内容的地址(SHA-256计算未压缩的内容)唯一标识
4.后端存储(backend):层的后端存储系统,一般会完整复制一份备份来提高容错,但也更加剧了存储容量开销。当前的registry都是单节点应用,但是后端存储可以为本地或者分布式的
5.注册表/服务中心(registry):负责存储和分发容器镜像。提供了REST API给客户端实现pull和push镜像功能。对于仓库中的每个镜像,注册表都会为其存储一个manifest。注册表通过相应的存储驱动程序将存储委托给后端存储系统。
6.镜像仓库(repository):每个镜像仓库存储相同镜像的不同版本,每个镜像在仓库中以<仓库名:版本>为名称存储。