论文笔记《FID_A_Faster Image_Distribution_System_for_Docker_Platform》

2023-10-11 23:50

本文主要是介绍论文笔记《FID_A_Faster Image_Distribution_System_for_Docker_Platform》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文笔记:《FID:_A_Faster Image_Distribution_System_for_Docker_Platform》

会议:FASW@SASO/ICCAC 2017
时间:2017
参考文献:Kangjin W, Yong Y, Ying L, et al. Fid: A faster image distribution system for docker platform[C]//2017 IEEE 2nd International Workshops on Foundations and Applications of Self
Systems (FAS* W). IEEE, 2017: 191-198.

该博客中文字部分为个人总结,图片和代码等有部分出自文献,如有侵权,请指出

梗概

大规模容器平台进行镜像拉取时容易使得流量泛滥,给 docker 仓库导致负担或失败;继而推出 P2P 大规模镜像分布式系统。通过充分利用Docker Registry以及群集中其他节点的带宽,能够加快Docker映像分发的速度。

实验表明,FID 能有效减少网络流量和减少镜像分配时间

笔记思维导图:

FID:P2P镜像分发

1. 介绍

腾讯容器管理平台:Gaia

P2P镜像分发系统:FID

参考 Docker Distribution

2. 动机与目标

大型容器部署作业的特点

  1. 高并发:相同的镜像拉取请求同时发送
  2. 简单的网络结构:内部互联
  3. 稳固的P2P网络:节点不会频繁加入或删除

部署更多的Dokcer Reigstry 可以一定程度上解决问题,但是不能完美解决,而且会影响共享的存储

Docker 镜像分发目标:

  1. 减少大规模容器分发的时间

    分发时间定义:所有目标节点提取图像的平均时间。

    区别分发时间和拉动时间:拉动时间指单个实例拉取镜像的耗时,而分发时间指一组拉动实例

  2. 减少docker 仓库的网络阻塞

    在集群中执行大规模部署任务时,会增加Docker仓库负担,也会导致其他请求延迟加大

    为日后集群扩展方便

  3. 避免入侵现有的docker 源代码

    这里不是指 网络安全 方面的侵入,是指源代码的修改,运行和维护

    即对于源码的修改侵入

3. 相关工作

BitTorrent(比特流)协议

BitTorrent(简称BT)是一个文件分发协议,每个下载者在下载的同时不断向其他下载者上传已下载的数据。而在FTP,HTTP协议中,每个下载者在下载自己所需文件的同时,各个下载者之间没有交互。当非常多的用户同时访问和下载服务器上的文件时,由于FTP服务器处理能力和带宽的限制,下载速度会急剧下降,有的用户可能访问不了服务器。BT协议与FTP协议不同,特点是下载的人越多,下载速度越快,原因在于每个下载者将已下载的数据提供给其他下载者下载,充分利用了用户的上载带宽。通过一定的策略保证上传速度越快,下载速度也越快。在很短时间内,BitTorrent协议成为一种新的变革技术。

DID by VMWare Harbor

DID(Harbor P2P 版本): P2P 镜像分发,通过使用 Bit Torrent 协议达成

使用 P2P 分发还是 Docker 原生拉取,这里有一个平衡点,取决于镜像大小和集群规模

在 DID 中,控制器必须先下载整个镜像,这会增加镜像分发的时间,P2P 分发只能在控制器拉取整个镜像后并成为seeder后才能开始

Quay

商业项目

支持基于 rkt 的镜像格式(注重安全,基于标准的容器引擎)

和 DID 类似,不支持 P2P,流程如下:

一个节点必须先下载整个映像,而其他节点正在等待或从Docker Registry中拉取映像,一旦完成第一个下载过程,并且该节点成为第一个种子,那么P2P网络中的所有其他节点都可以通过BitTorrent将Docker映像下载到本地磁盘。

Docket

Dokcet 为整个Docker 镜像生成 torrent 文件,然后客户端使用文件下载镜像的原始码文件

下载整个镜像文件是的 Dokcet 无法复用已存在于本地磁盘的 layer 文件,这将导致网络资源的浪费

三者的通病

都需要为整个 Docker 镜像下载文件,尽管一些 layers 文件已经存在了

类似的解决办法

VDN方法:将虚拟镜像切割成块,但考虑到 Docker 镜像是由许多层级组成的,分发Docker 镜像在块级别可能会破坏Docker 的层级结构

4. 解决办法

Docker 镜像组成

一个 Docker 镜像由一组 layers 层组成。每层是一个只读的文件系统,一层包括一些文件或文件夹。

一个 Docker 镜像在 Docker 注册表中是以两种主要类型的静态文件存储的:Manifest(清单)和 Blobs(块)

Manifest 描述镜像的元信息,指出镜像的层信息以及每层的 Blob。

Blob 是一个层的压缩文件,每层对应一个 Blob

在Docker 引擎 和 在 Docker 注册表中,镜像的表示和存储方式是不同的,但是都能对应上

image-20201107201855106

Docker 镜像拉取过程

  1. 获取镜像的 Manifest 信息文件
  2. 找出不在本地的 layers
  3. 下载 Blobs 如果对应层找不到
  4. 解压 Blobs 并导入到 Docker 引擎

Manifest 文件很小,所以该优化的点应该是 Blob 文件下载

若打算使用 P2P 镜像拉取优化,可以在第三步中找到突破口

内部网络拓扑结构比因特网更稳固,在英特网中节点可以任意加入和退出

故我们可以使用 BT协议进行 P2P 镜像分发。

每个 blob 都需要一个 torrent 文件, docker 仓库应该是 torrent 文件的生产者和初始的seeder;生成 torrent 文件的时机是 blob 上传成功的时候,所以 Docker 注册表需要提供 torrent 文件拉取接口

注册中心提供了通过HTTP获取清单和Blob的接口。

另一种方法是通过 Docker load 方式获得 blobs 和层配置的 tar 压缩包文件

5. 实现

FID 架构图如下:

这篇关于论文笔记《FID_A_Faster Image_Distribution_System_for_Docker_Platform》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/191726

相关文章

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓