火山引擎基于 Dragonfly 加速实践

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 火山引擎镜像仓库 CR 使用 TOS 来存储容器镜像。目前在一定程度上能满足并发大规模的镜像拉取。然而最终拉取的并发量受限于 TOS 的带宽和 QPS。

图片

PART. 0

背景

火山引擎镜像仓库 CR 使用 TOS 来存储容器镜像。目前在一定程度上能满足并发大规模的镜像拉取。然而最终拉取的并发量受限于 TOS 的带宽和 QPS。

这里简单介绍一下目前针对于大规模拉镜像遇到的两个场景的问题:

1、客户端数量越来越多,镜像越来越大,TOS 带宽最终无法满足需求。
2、如果客户端使用了 Nydus 对镜像格式做转换之后,对 TOS 的请求量会有数量级的增加,TOS API 的 QPS 限制导致无法满足需求。

不论是镜像仓库服务本身还是背后的存储,最终肯定是有带宽和 QPS 限制的。如果单纯依赖服务端提供的带宽和 QPS,很容易就无法满足需求。因此需要引入 P2P ,减轻服务端压力,进而满足大规模并发拉取镜像的需求。

PART. 1

基于 P2P 技术镜像分发系统调研

目前开源社区有几个 P2P 项目,这里对这些项目进行简单介绍。

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

架构图

图片

术语

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

图片

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

整体架构图

图片

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 从创建到启动消耗时间。

图片

TensorFlow Pod 分别并发 50、100、200、500 的所有 Pod 从创建到启动消耗时间。

图片

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

存储源端带宽峰值对比

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

图片

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

图片

回源流量对比

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

图片

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

图片

在大规模场景下,使用 Dragonfly 回源拉取镜像的数量很少。OCIv1 的场景所有的镜像拉取都要回源,因此使用 Dragonfly 回源峰值和回源流量相比 OCIv1 的场景少很多。并且使用 Dragonfly 后随着并发数提高,回源峰值和流量不会显著提高。

PART. 5

总结

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

PART. 6

术语及定义

OCI
Open Container Initiative,开放容器计划是一个 Linux 基金会项目,由Docker在2015年6月启动,旨在为操作系统级虚拟化(最重要的是 Linux 容器)设计开放标准。

OCI Artifact
遵循 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: https://www.volcengine.com/

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

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

Dragonfly 官网: https://d7y.io/

Dragonfly Github Repo: https://github.com/dragonflyoss/Dragonfly2

Nydus 官网: https://nydus.dev/

Nydus Gihtub Repo: https://github.com/dragonflyoss/image-service

Dragonfly Star 一下✨:
https://github.com/dragonflyoss/Dragonfly2

图片

火山引擎基于 Dragonfly 加速实践

图片

Dragonfly 基于 P2P 的文件和镜像分发系统

图片

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

图片

Dragonfly 和 Nydus Mirror 模式集成实践

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
AI加速引擎PAI-TorchAcc:OLMo训练加速最佳实践
阿里云机器学习平台PAI开发的Pytorch训练加速框架PAI-TorchAcc已接入最新开源的大语言模型 OLMo。在保证模型效果和易用性的前提下,PAI-TorchAcc相对 PyTorch 性能在 OLMo 1B 上加速比达到 1.64X,在 OLMo 7B 上加速比达到 1.52X。本文分析了 PAI-TorchAcc 的性能收益来源。
|
2月前
|
Linux API 开发者
元象大模型开源30款量化版本 加速低成本部署丨附教程
元象大模型一次性发布30款量化版本,全开源,无条件免费商用。
|
2月前
|
人工智能 前端开发 PyTorch
AI加速引擎PAI-TorchAcc:整体介绍与性能概述
PAI-TorchAcc(Torch Accelerator)是阿里云人工智能平台PAI开发的Pytorch上的大模型训练加速框架。PAI-TorchAcc提供了一套基于Pytorch的简洁、易用的接口,无需进行模型转换就可以无缝地接入HuggingFace上的模型,并用多种分布式策略进行训练加速。本文详细介绍PAI-TorchAcc的产品能力与性能。
|
12月前
|
存储 Dragonfly 人工智能
带你读《2022龙蜥社区全景白皮书》——6.1.4 云原生应用场景下的镜像分发加速方案
带你读《2022龙蜥社区全景白皮书》——6.1.4 云原生应用场景下的镜像分发加速方案
212 1
|
人工智能 网络协议 算法
基于阿里云弹性GPU服务的神龙AI加速引擎无缝提升AI训练性能
2023年3月23日14:00(中国时间),NVIDIA GTC开发者大会阿里云开发者社区观看入口正式开放,阿里云高级技术专家林立翔带来了题为《基于阿里云弹性GPU服务的神龙AI加速引擎无缝提升AI训练性能》的分享。
基于阿里云弹性GPU服务的神龙AI加速引擎无缝提升AI训练性能
|
Dragonfly Cloud Native 算法
10 亿月活用户下,快手基于 Dragonfly 的超大规模镜像分发实践
Dragonfly 和 Nydus 都是来自 CNCF 的优秀开源项目,更进一步说,快手也将继续对该项目进行更多投入,并与社区展开深入合作,使它变得更加强大和可持续。云原生技术是基础设施领域的一场革命,尤其是在弹性和无服务器方面,我们相信 Dragonfly 一定会在云原生生态中扮演重要角色。
10 亿月活用户下,快手基于 Dragonfly 的超大规模镜像分发实践
|
Dragonfly Cloud Native 算法
镜像拉取节省 90% 以上,快手基于 Dragonfly 的超大规模分发实践
快手容器云技术团队携手阿里云、蚂蚁集团在龙蜥社区适配,优化落地解决方案。
镜像拉取节省 90% 以上,快手基于 Dragonfly 的超大规模分发实践
|
人工智能 弹性计算 负载均衡
升级2:飞天AI训练加速引擎|学习笔记
快速学习升级2:飞天AI训练加速引擎
181 0
升级2:飞天AI训练加速引擎|学习笔记
|
人工智能 缓存 自然语言处理
升级3:飞天AI推理加速引擎|学习笔记
快速学习升级3:飞天AI推理加速引擎
191 0
升级3:飞天AI推理加速引擎|学习笔记
|
边缘计算 缓存 安全