Dragonfly 简介

什么是 Dragonfly?

Dragonfly 是一个基于 P2P(点对点)技术的智能容器镜像和文件分发系统,由阿里云开源并捐赠给 CNCF(云原生计算基金会)。

核心价值

在我们的环境中,Dragonfly 解决以下痛点:

问题 传统方式 Dragonfly 方式
镜像拉取速度 每个节点独立从 Artifactory 下载 节点间 P2P 共享,首个节点下载后其他节点从集群内获取
带宽消耗 N 个节点 × 镜像大小 1 × 镜像大小 + P2P 内网传输
Registry 压力 高并发时压力大 只有首次下载访问 Registry
大规模部署 100 个 Pod 同时启动会导致超时 快速 P2P 分发,几乎无感知

典型场景

场景:在 100 个节点上部署一个 2GB 的容器镜像

传统方式:
├── Artifactory 带宽消耗: 100 × 2GB = 200GB
├── 平均下载时间: 5-10 分钟/节点
└── Registry 压力: 100 个并发连接

使用 Dragonfly:
├── Artifactory 带宽消耗: 1 × 2GB = 2GB
├── 平均下载时间: 30 秒/节点(P2P 内网传输)
├── Registry 压力: 1-3 个并发连接(Seed Client)
└── 节约带宽: 99% ✓

🔧 工作原理

P2P 分发模型

Dragonfly 采用 BitTorrent-like 的分块(Piece)分发机制:

┌─────────────────────────────────────────────────────────────────┐
│                    容器镜像下载过程                              │
└─────────────────────────────────────────────────────────────────┘

步骤 1: 节点 A 请求镜像
┌──────────┐
│  Node A  │ "我需要 nginx:1.21 镜像"
└────┬─────┘
     │
     ↓
┌────────────────┐
│   Scheduler    │ "让我查查谁有这个镜像..."
│  (调度器)       │ "发现 Seed Client 刚下载过"
└────┬───────────┘
     │
     ↓
┌────────────────┐
│  Seed Client   │ "我从 Artifactory 下载"
│  (种子节点)     │ "并切分成 100 个分片"
└────┬───────────┘
     │
     ↓ 下载 + 分片
┌────────────────┐
│  Artifactory   │
└────────────────┘

步骤 2: 节点 A 获取分片列表并下载
┌──────────┐
│  Node A  │ "从 Seed Client 下载分片 1-50"
└────┬─────┘
     │
     ↓ P2P 传输(内网)
┌────────────────┐
│  Seed Client   │ "传输中..."
└────────────────┘

步骤 3: 节点 B 请求相同镜像
┌──────────┐
│  Node B  │ "我也需要 nginx:1.21 镜像"
└────┬─────┘
     │
     ↓
┌────────────────┐
│   Scheduler    │ "太好了!Node A 和 Seed Client 都有"
│  (调度器)       │ "你可以从他们那里下载不同的分片"
└────┬───────────┘
     │
     ↓
┌──────────┐         ┌──────────┐         ┌────────────────┐
│  Node B  │ ←P2P→  │  Node A  │ + P2P → │  Seed Client   │
└──────────┘         └──────────┘         └────────────────┘
  分片 1-30            分片 31-60            分片 61-100

结果:Node B 同时从 2 个源下载,速度翻倍!

核心概念

1. 分片(Piece)

  • 镜像被切分成多个小块(默认 4MB)
  • 每个分片可以独立传输和校验
  • 类似于下载工具的多线程下载

2. 任务(Task)

  • 一个镜像 = 一个任务
  • 任务包含所有分片的元数据
  • 调度器负责任务的全局管理

3. 对等节点(Peer)

  • 集群中的每个节点都是一个 Peer
  • Peer 既是下载者,也是上传者
  • 形成 P2P 网络拓扑

🏗️ 架构设计

组件架构

┌───────────────────────────────────────────────────────────────────┐
│                        Dragonfly 集群架构                          │
└───────────────────────────────────────────────────────────────────┘

                    ┌─────────────────┐
                    │    Manager      │  ← 控制平面 (3 副本)
                    │   (管理控制台)   │
                    └────────┬────────┘
                             │
              ┌──────────────┼──────────────┐
              │              │              │
    ┌─────────▼────────┐ ┌──▼──────────┐ ┌─▼─────────────┐
    │   Scheduler 1    │ │ Scheduler 2 │ │ Scheduler 3   │
    │   (调度器)       │ │  (调度器)    │ │  (调度器)      │
    └─────────┬────────┘ └──┬──────────┘ └─┬─────────────┘
              │              │              │
              └──────────────┼──────────────┘
                             │
        ┌────────────────────┼────────────────────┐
        │                    │                    │
┌───────▼────────┐  ┌────────▼────────┐  ┌───────▼────────┐
│  Seed Client 1 │  │  Seed Client 2  │  │  Seed Client 3 │
│  (种子客户端)   │  │  (种子客户端)    │  │  (种子客户端)   │
│  - 主动拉取     │  │  - 高速缓存     │  │  - 50GB 存储   │
│  - 提供种子     │  │  - 长期保存     │  │                │
└───────┬────────┘  └────────┬────────┘  └───────┬────────┘
        │                    │                    │
        └────────────────────┼────────────────────┘
                             │
        ┌────────────────────┼────────────────────┐
        │                    │                    │
┌───────▼────────┐  ┌────────▼────────┐  ┌───────▼────────┐
│   Client (N1)  │  │   Client (N2)   │  │   Client (N3)  │
│  DaemonSet     │  │   DaemonSet     │  │   DaemonSet    │
│                │  │                 │  │                │
│  ┌──────────┐  │  │  ┌──────────┐   │  │  ┌──────────┐  │
│  │ dfdaemon │  │  │  │ dfdaemon │   │  │  │ dfdaemon │  │
│  └────┬─────┘  │  │  └────┬─────┘   │  │  └────┬─────┘  │
│       │        │  │       │         │  │       │        │
│  ┌────▼─────┐  │  │  ┌────▼─────┐   │  │  ┌────▼─────┐  │
│  │containerd│  │  │  │containerd│   │  │  │containerd│  │
│  └──────────┘  │  │  └──────────┘   │  │  └──────────┘  │
└────────────────┘  └─────────────────┘  └────────────────┘
  Worker Node 1       Worker Node 2        Worker Node 3

底层支撑服务:
┌─────────────────┐  ┌─────────────────┐
│  Redis Cluster  │  │  MySQL Cluster  │
│  (任务队列)      │  │  (元数据存储)    │
│  Master + 2副本  │  │  Primary + 副本 │
└─────────────────┘  └─────────────────┘

Helm Chart地址

Dragonfly Helm Charts Releases