一.背景
作为一个提供全球云计算业务的运营商来说,不管是本身海外节点业务的拓展、平台扩充还是客户定制模板业务的需求,都会涉及大文件的传输。一些普通的ISO系统镜像文件,一些客户定制的系统模板,少则十几G,多则几十G。如此庞大的文件在全球多个节点之间传输,如何保证其稳定、快速的实现,最重要的是文件的完整性的要求,是我们客观面对的问题。而传统的FTP、rsync之类的文件传输已经无法满足我们快速增长的业务需求,所以我们考虑采用目前最快速的P2P文件传输协议。利用我们独有的安全、稳定、可靠的GPN链路,外加基于Docker的轻量、便捷性,三者结合在一起,实现快速分发和部署,特开发了此系统。
二 项目介绍
为P2P文件的分发和部署提供基于WEB的GUI操作界面,restful api 接口俩种方式实现,控制种子的生成和分发;实时监控整个传输网络中上传、下载速度的变化,传输过程中每个peer的情况;并实现动态的扩展,通过控制peer的数量随心所欲的控制文件传输的效率。
三 实现方式
1. 采用集中式P2P传输模式,tracker server使用谷歌代码库开源的peertracker。Peertracker是一个简单、高效、快速的BT Tracker。
2. BT客户端软件使用transmission,是一个跨平台的自有软件,由C开发而成,硬件资源消耗极少,界面极度精简,支持GTK 、命令行、Web等多种界面。
3. 中心控制节点使用django框架, 提供 web UI界面访问,API 调用控制整个P2P集群的快速扩展,向集群下发分发任务,任务调度框架使用可配置的 celery 框架。
4. Tracker和transmission均采用docker封装,Peer的横向扩展采用分发、运行docker容器的方式,方便、便捷。
5. 可以对外开放api,用户调用api可以利用CDS的独有的GPN网络实现大文件的快速传输分发。
6. Agent架构:flask docker-py transmission接受中心节点的调度,API 接口方式交流。网络拓扑如下:
四 实现功能
1、 源文件的上传;
2、 WEB界面, restful api生成种子文件;
3、 种子的分发、下载;
4、 实时文件传输情况展示;
5、 任务的控制(上传下载速度,peer的数量和任务的暂停等)
五 安装使用
1、 docker 封装 peertracker,用给出的 image 构建tracker,运行即可。启动容器之后自动生成的 url为: http://xx.xx.xx.xx/peertracker/mysql/annnounce.php
xx.xx.xx.xx 为server 的 ip 地址。
2、 下载transmission的image,并运行,镜像中默认下载的 transmission目录为:/data/transmisson-daemon/download
3、 安装过程脏中可以使用 ansible进行 transmisson peer的分发。
4、 启动中心节点,指定访问端口:gunicorn -b 0.0.0.0:8000 --workers=2 --log-file error.log wsgi:application
六 项目截图
a) 查看,添加,删除p2p 节点
填写相关参数,即可快速扩充p2p节点,也可以直接调用 api 快速扩充。
上传文件添加种子,指定节点即可分发,同样的也可以调用 api上传,生成种子
分发任务,传输速度的实时查看。
任务进度的概览,实时监控。
文件数据来源的动态展示
Peer节点的动态信息查看
Peer节点上传,下载速度的限制,界面可操作,支持 API 调用。