火山引擎基于 Dragonfly 加速实践

PART. 0

背景

火山引擎镜像库房 CR 运用 TOS 来存储容器镜像。现在在必定程度上能满足并发大规模的镜像拉取。然而终究拉取的并发量受限于 TOS 的带宽和 QPS。

这儿简略介绍一下现在针对于大规模拉镜像遇到的两个场景的问题:

**1、**客户端数量越来越多,镜像越来越大,TOS 带宽终究无法满足需求。 **2、**假如客户端运用了 Nydus 对镜像格局做转换之后,对 TOS 的恳求量会有数量级的添加,TOS API 的 QPS 约束导致无法满足需求。

不论是镜像库房服务自身还是背后的存储,终究肯定是有带宽和 QPS 约束的。假如单纯依靠服务端供给的带宽和 QPS,很容易就无法满足需求。因而需求引进 P2P ,减轻服务端压力,从而满足大规模并发拉取镜像的需求。

PART. 1

依据 P2P 技能镜像分发体系调研

现在开源社区有几个 P2P 项目,这儿对这些项目进行简略介绍。

Dragonfly

架构图

火山引擎基于 Dragonfly 加速实践

术语

Manager

**1、**存储动态配置供 Seed Peer 集群、Scheduler 集群以及 Dfdaemon 消费。

**2、**保护 Seed Peer 集群和 Scheduler 集群之间相关联系。

**3、**供给统一异步使命办理,用作预热等功用。

**4、**监听各模块是否健康运转。

**5、**为 Dfdaemon 选择最优 Scheduler 集群调度运用。

**6、**供给可视化操控台,方便用户操作办理 P2P 集群。

Scheduler

**1、**依据机器学习的多场景自适应智能 P2P 节点调度, 为当前下载节点选择最优父节点。

**2、**构建 P2P 下载网络的有向无环图。

**3、**依据不同特征值评估节点下载才能, 除掉反常节点。

**4、**当下载失利状况,主动告诉 Dfdaemon 进行回源下载。

Dfdaemon

**1、**依据 gRPC 供给下载功用, 并供给多源适配才能。

**2、**敞开 Seed Peer 形式能够作为 P2P 集群中回源下载节点, 也就是整个集群中下载的根节点。

**3、**为镜像库房或者其他 HTTP 下载使命供给代理服务。

**4、**下载使命依据 HTTP 或 HTTPS 或其他自定义协议。

Kraken

架构图

火山引擎基于 Dragonfly 加速实践

术语

Agent

**1、**是 P2P 网络中的对等节点,需求在每个节点上布置。

**2、**完成了 Docker Registry interface。

**3、**告诉 tracker 自己具有的数据。

**4、**下载其他 agent 的数据(tracker 会告诉该 agent 需求下载这块数据需求到哪个 agent 上下载)

Origin

**1、**担任从存储中读取数据做种。

**2、**支撑不同的存储。

**3、**经过 Hash 环的方法确保高可用。

Tracker

**1、**P2P 网络中的协调者,追寻谁是 Peer,谁是 Seeder。

**2、**追寻 Peer 具有的数据。

**3、**供给有序的 Peer 节点供 Peer 下载数据。

**4、**经过 Hash 环的方法确保高可用。

Proxy

**1、**完成了 Docker Registry Interface。

**2、**将镜像层传给 Origin 组件。

**3、**将 Tag 传给 BUILD INDEX 组件。

Build-Index

**1、**Tag 和 digest 映射,agent 下载对应 Tag 数据时向 Build-Index 获取对应的 Digest 值。

**2、**集群之间镜像复制。

**3、**保存 Tag 数据在存储中。

**4、**经过 Hash 环的方法确保高可用。

Dragonfly vs Kraken

火山引擎基于 Dragonfly 加速实践

PART. 2

方案

在火山引擎上,主要考虑 VKE 和 VCI 经过 CR 拉取镜像。

**1、**VKE 的产品特点是依据 ECS 布置的 K8S,因而非常适合每个节点布置 Dfdaemon,充分利用每个节点的带宽,从而充分利用 P2P 的才能。

**2、**VCI 的产品特点是底层有一些资源很足够虚拟节点。上层的服务是以 POD 为载体,因而无法像 VKE 那样每个节点布置 Dfdaemon,所以布置的方法布置几个 Dfdaemon 作为缓存,利用缓存的才能。

**3、**VKE 或 VCI 客户端拉取经过 Nydus 格局转化过的镜像。在该场景下,需求运用 Dfdaemon 作为缓存,不宜运用过多的节点,防止对 Scheduler 形成过大的调度压力。

依据火山引擎对于以上产品的需求,以及结合 Dragonfly 的特点,需求规划一套兼容诸多要素的布置方案。布置 Dagonfly 的方案规划如下。

PART. 3

整体架构图

火山引擎基于 Dragonfly 加速实践

**1、**火山引擎上的资源都是归属于主账号下。P2P 操控组件以主账号等级阻隔,每个主账号下一套 P2P 操控组件。服务端完成 P2P Manager Controller,经过该 Controller 来管控操控面一切 P2P 操控组件。

**2、**P2P 操控组件布置在镜像库房数据面 VPC,经过 LB 与用户集群打通。

**3、**在 VKE 集群上,Dfdaemon 以 DaemonSet 方法布置,每个节点上布置一个 Dfdaemon。

**4、**在 VCI 上,Dfdaemon 以 Deployment 方法布置。

**5、**ECS 上 Containerd 经过 127.0.0.1:65001 拜访本节点上的 Dfdaemon。

**6、*经过在用户集群布置一个 controller 组件,依据 PrivateZone 功用,在用户集群生成.p2p.volces.com 域名, controller 会依据必定的规矩选择特定节点(包括 VKE、VCI)*的 Dfdaemon pod,以 A 记录的方法解析到上述域名。

  • ECS 上 Nydusd 经过.p2p.volces.com 域名拜访 Dfdaemon。
  • VCI 上镜像服务客户端和 Nydusd 经过.p2p.volces.com 域名拜访 Dfdaemon。

PART. 4

压测数据

环境

镜像库房:带宽 10Gbit/s。

ECS: 4C8G,挂载本地盘,带宽 6Gbit/s。

镜像

Nginx (500M)

TensorFlow (3G)

组件版本

Dragonfly v2.0.8。

Quota

Dfdaemon: Limit 2C6G。

Scheduler: 2 Replicas,Request 1C2G,Limit 4C8G。

Manager: 2 Replicas,Request 1C2G,Limit 4C8G。

POD 发动时刻比照

Nginx Pod 别离并发 50、100、200、500 的一切 Pod 从创立到发动耗费时刻。

火山引擎基于 Dragonfly 加速实践

TensorFlow Pod 别离并发 50、100、200、500 的一切 Pod 从创立到发动耗费时刻。

火山引擎基于 Dragonfly 加速实践

在大规模拉镜像的场景下,在运用 Dragonfly 和 Dragonfly & Nydus 场景比照 OCIv1 场景能够节省 90% 以上的容器发动时刻。运用 Nydus 之后发动时刻更短是因为镜像 lazyload 的特性,只需求拉取很小的一部分元数据 Pod 就能发动。

存储源端带宽峰值比照

Nginx Pod 别离并发 50、100、200、500 的存储端峰值流量。

火山引擎基于 Dragonfly 加速实践

TensorFlow Pod 别离并发 50、100、200、500 的存储端峰值流量。

火山引擎基于 Dragonfly 加速实践

回源流量比照

Nginx Pod 别离并发 50、100、200、500 的回源流量。

火山引擎基于 Dragonfly 加速实践

TensorFlow Pod 别离并发 50、100、200、500 的回源流量。

火山引擎基于 Dragonfly 加速实践

在大规模场景下,运用 Dragonfly 回源拉取镜像的数量很少。OCIv1 的场景一切的镜像拉取都要回源,因而运用 Dragonfly 回源峰值和回源流量比较 OCIv1 的场景少很多。并且运用 Dragonfly 后随着并发数进步,回源峰值和流量不会显著进步。

PART. 5

总结

依据项目整体成熟度,社区活跃度、用户数量、架构复杂度,是否针对 Nydus 优化。未来发展趋势等要素归纳考虑,Dragonfly 是 P2P 项目中最优的选型。

PART. 6

术语及定义

OCI Open Container Initiative,敞开容器方案是一个 Linux 基金会项目,由Docker在2015年6月发动,旨在为操作体系级虚拟化(*最重要的是 Linux 容器)*规划敞开规范。

OCI Artifac****t 遵从 OCI image spec 的制品。

镜像 本文中的镜像指 OCI Artifact,因而也包括 Helm Chart 等其他 OCI Artifact。

镜像库房 遵从 OCI distribution spec 完成的制品库房。

ECS 是一种由CPU、内存、云盘组成的资源调集,每一种资源都会逻辑对应到数据中心的计算硬件实体。

CR 火山引擎镜像库房服务。

VKE 火山引擎经过深度融合新一代云原生技能,供给以容器为核心的高功能 Kubernetes 容器集群办理服务,助力用户快速构建容器化使用。

VCI 火山一种 Serverless 和容器化的计算服务。当前 VCI 可无缝集成容器服务 VKE,供给 Kubernetes 编排才能。

运用 VCI,能够专注于构建使用自身,而无需购买和办理底层云服务器等基础设施,并仅为容器实践运转耗费的资源付费。VCI 还支撑秒级发动、高并发创立、沙箱容器安全阻隔等才能。

TOS 火山引擎供给的海量、安全、低成本、易用、高牢靠、高可用的分布式云存储服务。

Private Zone 依据专有网络VPC*(Virtual Private Cloud)*环境的私有DNS服务。该服务允许在自定义的一个或多个VPC中将私有域名映射到IP地址。

P2P

点对点技能,当 P2P 网络中某一个 peer 从 server 下载数据的时分,下载完数据后也能当作服务端供其他 peer 下载。当很多节点一起下载的时分,能确保后续下载的数据,能够不用从 server 端下载。从而减轻 server 端的压力。

Dragonfly Dragonfly 是⼀款依据 P2P 技能的文件分发和镜像加快体系,并且是云原生架构中镜像加快范畴的规范解决方案以及最佳实践。现在为云原生计算机基金会*(CNCF)*保管作为孵化级项目。

Nydus Nydus 简介: Nydus 镜像加快框架是 Dragonfly 的子项目,它供给了容器镜像按需加载的才能,在出产环境支撑了每日百万等级的加快镜像容器创立,在发动功能,镜像空间优化,端到端数据一致性,内核态支撑等方面比较 OCIv1 有巨大优势。

*|社区相关网址|*

Dragonfly 社区官网网站:

Volcano Engine: www.volcengine.com/

Volcano Engine VKE: www.volcengine.com/product/vke

Volcano Engine CR: www.volcengine.com/product/cr

Dragonfly 官网: d7y.io/

Dragonfly Github Repo: github.com/dragonflyos…

Nydus 官网: nydus.dev/

Nydus Gihtub Repo: github.com/dragonflyos…

Dragonfly Star 一下✨: github.com/dragonflyos…

火山引擎基于 Dragonfly 加速实践

火山引擎依据 Dragonfly 加快实践

火山引擎基于 Dragonfly 加速实践

Dragonfly 依据 P2P 的文件和镜像分发体系

火山引擎基于 Dragonfly 加速实践

展台招募|“SOFA 五周年”开源集市等你来!

火山引擎基于 Dragonfly 加速实践

Dragonfly 和 Nydus Mirror 形式集成实践