- 需求背景 在大规模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 下载的工作流:
- Peer 安装在连接到 Artifactory 的主机上,例如 Kubernetes work node。
- Peer 节点连接到 Artifactory Edge ,然后注册在 Trakcer 上,作为种子服务器提供服务。所有的下载都通过SSL加密,使用Artifactory的链式认证进行统一鉴权.Peer 节点监听客户端或者其他 Peer 节点的下载请求。
- 当 Peer 节点下载好种子文件后,会自动广播给各个 Tracker自己的内容,Tracker 会存储这些种子文件的信息。
- 当 Peer 节点监听到客户端请求时,会去 Tracker 查询哪些 Peer 节点已经缓存了该文件,Tracker 会回复 Peer 节点的请求,然后 Peer 节点开始从Peer swarm 里的这些节点去进行下载。
- 当文件被缓存在 Peer 节点上,这个信息会被 Tracker 发现并广播,能够别并发的被其他 peer 节点拉取。下载的过程是多线程并发的执行,因此能够打满 Peer 集群内部的网络带宽,使得下载速度比从 Artifactory 服务器下载更加快。
3.收益 通过 P2P 功能,用户能够极快的拉取镜像,实现业务的连续性,目前 JFrog E+版本中支持了这个功能。欢迎大家免费下载试用。