P2P 镜像加速是容器服务提供的镜像分发能力,适用于大规模节点并发拉取镜像、频繁扩缩容以及大镜像启动等场景。本文介绍 P2P 镜像加速的基本概念、加速模式和对应的技术原理。
在容器业务中,当应用镜像达到数 GB,甚至数十 GB 时,节点下载完整镜像通常需要较长时间。同时,镜像仓库是集中式的,即集群中的所有节点都会从镜像仓库上拉取镜像。在大规模集群或弹性扩容期间,大量节点并发拉取镜像,镜像仓库及其网络链路的吞吐能力容易成为性能瓶颈。
P2P(Peer-to-Peer,点对点)镜像加速功能基于 Dragonfly 实现 P2P 分发,在用户集群内部署调度与缓存组件,并在集群内建立点对点分发网络,通过节点间的数据复用减少重复回源。P2P 镜像加速方案中主要涉及的资源介绍,如下表所示。
P2P 镜像加速将“所有节点分别回源下载”改为“少量回源、集群内复用”,其主要优势如下:
- 缩短大规模分发时间:多个节点可以从不同 Peer 并行获取镜像数据,适合批量扩容、发布和重建场景。
- 降低镜像仓库压力:相同数据优先在集群内复用,减少重复回源请求和峰值流量。
- 提升分发稳定性:Seed Peer 可提前缓存镜像数据,并为 Peer 提供稳定的数据来源。
P2P 镜像加速支持多种加速模式,可根据集群规模、资源隔离需求和启动时延要求灵活选择。
普通模式不创建 P2P 专用缓存节点池,部署方式较简单。由于 Scheduler、Seed Peer 与业务工作负载共享节点资源,适合希望快速启用 P2P 分发、暂时不需要资源隔离的集群。
在普通模式下,计算节点同时承担业务运行和 Peer 数据缓存、传输任务,容器启动前仍需完成所需镜像的常规拉取。用户集群内包含 Scheduler、Seed Peer 和多个计算节点,每个计算节点上运行 Peer。Scheduler 负责调度,Peer 与 Seed Peer 共同组成 P2P 分发网络。技术架构示意图,如下图所示。
在普通模式下,镜像拉取的流程如下:
- 节点上的容器运行时发起完整镜像拉取请求,本机 Peer 接管下载任务。
- Peer 向 Scheduler 上报任务和下载信息,请求可用的数据来源。
- Scheduler 优先从已持有目标数据的 Peer 或 Seed Peer 中选择下载来源。
- 当前节点通过 P2P 网络并行获取镜像数据;当集群内没有可用数据时,由 Peer 或 Seed Peer 从镜像仓库回源。
- 下载完成后,当前节点也可以向其他 Peer 提供已缓存的数据。
在集群中开启 P2P 镜像加速功能,并创建 P2P 专用缓存节点池后,Scheduler 和 Seed Peer 会通过节点亲和性、污点与容忍度调度到该专用节点池。普通计算节点继续运行 Peer 和业务工作负载,专用节点负责调度与集中缓存。该模式将调度和种子缓存能力与业务工作负载隔离,适合节点规模较大、镜像分发频繁或希望单独规划 P2P 缓存磁盘与计算资源的集群。
在专用节点池模式下,用户集群划分为专用缓存节点池和普通计算节点池。专用缓存节点池运行 Scheduler 与 Seed Peer;普通计算节点运行 Peer。两类节点通过集群内网络组成 P2P 分发链路,镜像仓库只在需要回源时提供数据。技术架构示意图,如下图所示。
在专用节点池模式下,镜像拉取流程如下:
- Scheduler 触发 Seed Peer 预热,将目标镜像数据提前缓存到专用节点。
- 普通计算节点拉取镜像时,本机 Peer 向 Scheduler 请求数据来源。
- Scheduler 根据各 Peer 的数据持有情况和下载状态分配来源。
- 计算节点优先从已缓存目标数据的 Seed Peer 或其他 Peer 下载;无可用缓存时再回源到镜像仓库。
- 新下载的数据继续保存在 Peer 缓存中,供后续节点复用。