转载

基于GPN + Docker P2P 分发网络

一.背景

作为一个提供全球云计算业务的运营商来说,不管是本身海外节点业务的拓展、平台扩充还是客户定制模板业务的需求,都会涉及大文件的传输。一些普通的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 接口方式交流。网络拓扑如下:

基于GPN + Docker P2P 分发网络

四 实现功能

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 节点

基于GPN + Docker P2P 分发网络

基于GPN + Docker P2P 分发网络

填写相关参数,即可快速扩充p2p节点,也可以直接调用 api 快速扩充。

基于GPN + Docker P2P 分发网络

上传文件添加种子,指定节点即可分发,同样的也可以调用 api上传,生成种子

基于GPN + Docker P2P 分发网络

分发任务,传输速度的实时查看。

基于GPN + Docker P2P 分发网络

任务进度的概览,实时监控。

基于GPN + Docker P2P 分发网络

文件数据来源的动态展示

基于GPN + Docker P2P 分发网络

Peer节点的动态信息查看

基于GPN + Docker P2P 分发网络

Peer节点上传,下载速度的限制,界面可操作,支持 API 调用。

原文  http://dockone.io/article/1377
正文到此结束
Loading...