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

文|孙景文、吴迪(Dragonfly Contributor

本文 4138 字 阅览10 分钟

背 景

网络下载

提起网络下载范畴,你应该首要会想到依据 TCP/IP 协议簇的 C/S 形式。这种形式期望每一个客户机都与服务器树立 TCP 衔接,服务器轮询监听 TCP 衔接并顺次呼应,如下图:

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

上世纪末期,依据 C/S 形式的思想,人们发展了 HTTP, FTP 等应用层协议。然而 C/S 形式的坏处很明显:服务器的负载过大,下载速率过慢。随着互联网规模的增大以及客户关于下载数据大小,下载速率等需求的上升,这些坏处被不断放大。

P2P 下载原理

依据上述布景,有人结合 P2P 网络与负载均衡的思想,提出 P2P 下载形式。这种形式不再把一切的下载压力丢给服务器,服务器只担任传递文件元数据,真正的文件下载衔接树立在客户机与客户机之间。同时一个文件能够被分片为多个块,同一个文件中不同的块能够在不同的客户机之上下载,使得下载文件在 P2P 网络中动态流转,大幅提高了下载功率,如下图:

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

去中心化的 P2P 下载依据 DHT 技能,它选用分布式全网方法来进行信息的存储和检索。一切信息均以哈希表条目形式加以存储,这些条目被分散地存储在各个节点上,然后以全网方法构成一张巨大的分布式哈希表。在此基础上做到对单服务器的去中心化,哈希表担任对负载的分摊,将全网负载均摊到多个机器之上。

项目简介及架构概述

Dragonfly 是一款依据 P2P 的智能镜像和文件分发东西。它旨在进步大规模文件传输的功率和速率,最大极限地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等范畴被大规模运用。

原理

Dragonfly 结合 C/S 架构与 P2P 架构的长处。它供给面向客户的 C/S 架构下载形式。同时它也供给面向服务器集群的 P2P 回源形式,与传统 P2P 不同的是,对等网络树立在 Scheduler 内部,方针是最大化 P2P 内部下载功率,如下图:

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

架构简介

Dragonfly 面向镜像分发和文件分发,结合 P2P 网络和服务器集群的思想,向用户供给安稳的,高效的下载服务。Dragonfly 期望在服务器内部构建 P2P 网络,将服务器的不同主机节点分为 Manager、Scheduler、Seed Peer 以及 Peer 四个角色,别离供给不同的功用。

其间 Manager 供给整体装备功用,拉取其他角色的装备并彼此通讯。Scheduler 供给下载调度功用,其调度结果直接影响下载速率。Seed Peer 担任回源下载,从外部网络中拉取所需的镜像或文件。Peer 作为 C/S 架构中的服务器,经过多种协议向客户供给下载功用。架构图如下:

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

其间,Seed Peer 支撑运用多种协议从外部网络中回源下载,同时也支撑当作集群傍边一个 Peer 运用。Peer 供给依据多种协议的下载服务,也供给为镜像库房或其他下载使命的代理服务。

组件详解

Manager

Manager 在多 P2P 集群布置的时分扮演管理者的角色,供给前端操控台便利用户进行可视化操作 P2P 集群。其主要供给动态装备管理、保护集群安稳性以及保护多套 P2P 集群的相关联系等功用。关于保护集群整体安稳性 Manager 和各个服务坚持 Keepalive 保证能够在实例反常情况下将反常实例进行除掉。动态装备管理能够在 Manager 上面操作各个组件的操控单元,比如操控 Peer 和 Seed Peer 的负载数,Scheduler 调度 Parent 的个数等。

Manager 也能够保护多套 P2P 集群相关联系,一个 Scheduler Cluster、一个 Seed Peer Cluster 和若干个 Peer 组成一个完好的 P2P 集群,当然不同 P2P 集群能够是网络阻隔的。正常情况下选用一个机房一套 P2P 集群,一致由一个 Manager 管理多个 P2P 集群。

Scheduler

Scheduler 主要作业便是为当时下载节点寻觅最优父节点并触发 Seed Peer 进行回源下载。在适当时分让 Peer 进行回源下载。Scheduler 在发动时,先向 Manager 注册,注册成功后初始化动态装备客户端,并从 Manager 拉取动态装备,接下来发动 Scheduler 自身所需的服务。

Scheduler 的中心便是选取一组最优 Parent 节点供当时下载 Peer 进行下载。Scheduler 面向 Task,一次 Task 便是一次完好的下载使命,在 Scheduler 中存储 Task 信息和相应 P2P 下载网络的 DAG。调度进程是首要过滤反常 Parent 节点,依据多维度进行过滤,比如判别该 Peer 是否是 BadNode,判别逻辑为假设每个节点的呼应时长都遵循正态分布,若一个节点现在的呼应时长处于 6 规模之外,那么认为该节点是 BadNode,除掉该节点。再依据前史下载特征值对剩余待定 Parent 节点进行打分,回来一组分数最高的 Parent 供给给当时 Peer 进行下载。

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

Seed Peer 和 Peer

Seed Peer 和 Peer 有很多相似之处。他们都是依据 Dfdaemon,不同的是 Seed Peer 选用 Seed Peer 形式,支撑主动触发回源下载。Peer 选用 Peer 形式,作为 C/S 架构中的服务器向用户供给下载功用,支撑被 Scheduler 被迫触发回源下载。

这表明 Peer 和 Seed Peer 的联系不是固定的,一个 Peer 能够经过回源使自己成为 Seed Peer,Seed Peer 也能够改动运行状态变为 Peer,Scheduler 会动态地对相应 DAG 进行改动。别的 Seed Peer 和 Peer 都需求参加调度下载进程傍边,Scheduler 可能会选取 Seed Peer 或者 Peer 作为父节点向其他 Peer 供给下载功用。

Dfstore 和 Dfcache

Dfcache 是 Dragonfly 的缓存客户端,它与 dfdaemon 通讯并对 P2P 网络中的文件进行操作,其间 P2P 网络充当缓存体系。能够在 Scheduler 中存储相应 Task 和 DAG。

Dfstore 是 Dragonfly 存储客户端. 其能够依靠不同类型的目标存储服务作为 Backend,供给安稳的存储方案,现在支撑 S3 和 OSS 。Dfstore 依靠 Backend 目标存储服务结合 P2P 自身的加快特色。可做到快写快读,而且能够节约回源以及跨机房流量,削减源站压力。

优势

安稳性

Dragonfly 会主动阻隔反常节点来进步下载安稳性,Dragonfly 中各个组件经过 Keepalive 与 Manager 进行联系,Manager 能够保证回来给 Peer 的 Scheduler 地址和回来给 Scheduler 的 Seed Peer 地址都是可用的。不可用的 Scheduler 和 Seed Peer 不会被 Manager 推给需求进行下载使命的 Peer 或 Scheduler,然后到达阻隔反常节点的目的,这也是实例维度的反常阻隔,如下图:

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

别的 Dragonfly 在调度时以 Task 为单位,也保证了整个调度进程的安稳性。在收到一个新的 Task 调度恳求之后,Scheduler 触发 Seed Peer 进行回源下载;在收到一个已有 Task 的调度恳求之后,Scheduler 调度最优 Parent Peer 调集回来给 Peer。这个逻辑保证了不管 Task 是否下载过,Dragonfly 都能够对其进行处理。此外在 Scheduler 调度进程中,对呼应时长过慢的 Peer ,认为现在是反常节点,将不会作为 Parent Peer 被返还。这也是 Task 维度的反常阻隔。

高效性

Dragonfly 选用 P2P 进行服务端内部的回源,P2P 下载自身即分摊负载,将每个服务端节点的负载降到最低,有以下几个细节保证了 Dragonfly 下载的高效性:

Scheduler 经过为每个可能的 Parent 打分,回来给 Peer 现在局部最优的 Parent 调集,Peer 依据此调集做下载。

下载进程依据 Task,每个 Task 将待下载文件分为多个 Piece,Peer 拿到了最优的 Parent 之后,向此调集播送每个 Piece 的下载恳求,调集中的 Parent 收到该恳求后回来给 Peer 对应 Piece 的元信息,Peer 将第一个收到的 Piece 元信息所对应的 Parent Peer 作为该 Piece 的实践下载源。该做法考虑到 Scheduler 回来可用 Parent 到触发下载这段时间内可能的改变,同时对不同的 Piece,允许 Peer 向不同的下载源获取数据。

Dfdaemon 分为 Seed Peer 形式和 Peer 形式,允许 Seed Peer 和 Peer 进行切换,能够依据实践需求改变作为 Seed Peer 和 Peer 的机器数目,动态调整更适应实践情况。

简略易用

Dragonfly 供给 Helm Charts、Docker Compose、Docker Image 以及二进制的多种布置方法。用户能够快速一键布置进行一次简略 POC,而且也能够依据 Helm Charts 进行大规模出产布置。当然 Dragonfly 各个服务都有完善的 Metrics 也供给现成的 Granafa 模版,便利用户观察 P2P 的流量走势。

展望

Dragonfly 作为 CNCF 在镜像加快范畴标准解决方案,结合 Dragonfly 子项目 Nydus 进行按需加载能够最大极限提高镜像下载速度,未来咱们也会继续尽力建造镜像加快范畴的生态链。感谢一切参加到社区建造的同学,期望有更多对镜像加快范畴或 P2P 感兴趣的同学加入到咱们的社区傍边。

欢迎查找群号:23304666入群哦

【参阅文档】

  1. 项目地址:github.com/dragonflyos…

  2. 官网:d7y.io/

  3. Slack:cloud-native.slack.com/messages/dr…

  4. Twitter:twitter.com/dragonfly_o…

  5. Developer Group Email:dragonfly-developers@googlegroups.com

本周引荐阅览

Nydus——下一代容器镜像的探索实践

深入 HTTP/3(2)|不那么 Boring 的 SSL

Go 代码城市上云——KusionStack 实践

MOSN 反向通道详解