【喜大普奔】JFrog支持 P2P下载功能

1.  需求背景

在大规模Docker 容器运行时环境中,如果镜像实例数 较多,需要同时大规模,多地更新镜像,比如大型电商平台需要更新所有容器的镜像时,Docker镜像中心往往成为性能瓶颈,这个瓶颈往往来自于镜像中心的网络出口,比如镜像中心所在主机有万兆网卡,则网络流量会被限制在 1000MB(注意是大 Byte),通常这个网卡会被多个应用共享使用,所以流量有很多损耗,导致无法满足 Docker 镜像实时分发的需求。即使将 Docker 镜像中心进行异地分布式部署,也存在瞬时的并发拉取流量难以满足,从而导致 Docker 拉取镜像失败,Pod 无法启动。

2. 功能介绍

为了解决这个问题,JFrog Artifactory E+ 7.9 版本支持了 P2P 功能。之前的镜像拉取方式如下:

 

支持 P2P 之后,镜像的分发方式如下:

 

JFrog P2P 功能能够让用户从 Peer 网络中直接获取制品,Peer 节点存储了种子制品和缓存过的制品,从而大大的减少 Artifactory 的下载压力。

JFrog P2P 模块的架构:

  • Tracker: 是一个Artifactory 的服务,用来广播和追踪可用的种子制品在哪个 peers 和服务器。
  • Peer: 是一个独有的JFrog应用程序,部署在 peers 节点的主机上,和其他 peers 节点通信。Peer 节点连接 Tracker 去下载制品,并且声明种子的可用性给Tracker.
  • P2P Swarm: 是一个peers 节点的逻辑集合,它形成了分布式的网络,用于给集群内的 Docker 客户端共享制品。
  • Client: 客户端软件用户和 peer 交互,通常是 Docker 或者 HTTP client.

 

JFrog P2P 下载的工作流:

 

  1. Peer 安装在连接到 Artifactory 的主机上,例如 Kubernetes work node。
  2. Peer 节点连接到 Artifactory Edge ,然后注册在 Trakcer 上,作为种子服务器提供服务。所有的下载都通过SSL加密,使用Artifactory的链式认证进行统一鉴权.Peer 节点监听客户端或者其他 Peer 节点的下载请求。
  3. Peer 节点下载好种子文件后,会自动广播给各个 Tracker自己的内容,Tracker 会存储这些种子文件的信息。 
  4. Peer 节点监听到客户端请求时,会去 Tracker 查询哪些 Peer 节点已经缓存了该文件,Tracker 会回复 Peer 节点的请求,然后 Peer 节点开始从Peer swarm 里的这些节点去进行下载。
  5. 当文件被缓存在 Peer 节点上,这个信息会被 Tracker 发现并广播,能够别并发的被其他 peer 节点拉取。下载的过程是多线程并发的执行,因此能够打满 Peer 集群内部的网络带宽,使得下载速度比从 Artifactory 服务器下载更加快。

 

3. 收益

通过 P2P 功能,用户能够极快的拉取镜像,实现业务的连续性,目前 JFrog E+版本中支持了这个功能。欢迎大家免费下载试用。

posted @ 2020-11-05 17:29  杰蛙科技  阅读(125)  评论(0编辑  收藏  举报