p2p传输

实现思路:

1、稳定快速:大文件的分发的稳定性受限于传输网络,受限于传输协议。我们的分发网络建立在公司专用GPN之上,传输网络的稳定性得到保证,传输协议采用的 P2P传输,很明显优于 FTP等相关协议。

这里其实大家通过公网和私有网络也可以实现。

2、开发: P2P(BT)相关的的软件,工具社区已经有很多成型的产品,因此我们没有必要自己研发。只需要选择适合的开源工具,进行二次开发即可。云计算时代,开发效率是最关键的。

3、部署交付:分发网络Docker容器化部署,镜像交付。基于Docker的轻量,跨平台特性,标准统一的打包方案,生成可交付的镜像产品。具有良好的 REST API,很适合自动化测试和继续集成,分发网络的动态扩展。

项目实现:

1、网络:文件分发网络构建在我们公司专有GPN 全球互联网络之上(博客里不打广告,实际在公网和自有内网里也可以实现,但注意限速!)。

2、tracker: 采用集中式的 P2P 传输模式,tracker使用peertracker。peertracker是一个简单,高效,快速的 BT Tracker。负责记录每个peer的信息;可以搭建多个tracker做冗余,防止一个tracker宕机导致集群不可用。

3、peer: 使用的是 transmission,  是一个跨平台的自由软件,自带 web 界面,支持 API 调用,可编程性好。

4、agent: 基于flask + dockerapi开发,封装了一整套dockerapi相关操作,提供认证机制, 接收中心控制节点的调度,创建 peer docker容器,执行相关任务。部署层级与transmission peer端一致。

5、控制节点:基于django + celery开发。可实现监控整个分发网络运行情况,分发任务执行情况,动态扩展分发节点,下发任务等操作。

整个原理图和流程图如下:

wKiom1dihabg1VTZAAG18Dl1t7c702.jpg-wh_50

wKioL1dihuGAPjDkAAEhhRMUucY630.png-wh_50

这里主要分享一个playbook,用于P2P网络的搭建,docker和实现代码部分等整理之后在共享出去。

github的地址:

https://github.com/xujpxm/ansible-peertracker

由于写的比较仓促,有带后期改善,经测试此脚本在ubuntu14上能够正常运行。

README:

这是一个用ansible写的自动化搭建P2P传输网络的脚本。Tracker采用谷歌2010年开源出来的peertracker,p2p种子的生成和传输采用transmission。

安装

安装peertracker:

ansible-playbook install_peertracker.yml

默认创建的数据库:peertracker,用户名:peertracker,密码:yais6Yab

脚本执行完成后,通过网页创建数据库,详见下面peertracker的安装.

安装transmission:

1

ansible-playbook install_transmission.yml

默认rpc_username和password: transmission/transmission

可自行修改/etc/transmission-daemon/settings.json文件自定义.

创建下载目录

1

ansible-playbook mk_download_dir.yml

默认下载路径是:/data/transmission-daemon/downloads可自行更改

Peertracker

P eerTracker是一个简单、高效、迅速的BitTorent Tracker。

安装要求:

1. HTTP Web Server.Apache,nginx,lighttpd等只要支持php均可。

2. PHP5+ 推荐php5.3以上版本

3. Database.支持MySQL、SQLite3、PostgreSQL8.0和txtSQL 脚本里采用的web server是apache2,数据库使用mysql。

Important Links:

Development Website: http://code.google.com/p/peertracker/

Issue Tracker: http://code.google.com/p/peertracker/issues/list

Source Code Repository: http://peertracker.googlecode.com/svn/trunk/

github respository:https://github.com/JonnyJD/peertracker

peertracker的安装

脚本a安装环境:ubuntu

1. 确认代码拷贝到网站根目录之后,浏览器访问: <http://serverip/peertracker/help.php

2. 编辑配置文件tracker.mysql.php,这里已提前编辑好,主要更改了数据库的db_user、db_pass和db_name,默认数据库明和user是peertracker,密码:yais6Yab,也可自行修改templates里的文件。

通过help页面提供的Utilities,安装Tracker Database。安装成功后可看到,数据库结构很简单,只有两个表:pt_peers和pt_tasks,分别记录peer和任务的信息。

数据库创建成功之后实际已可以使用,tracker的url即为:http://serverip/peertracker/mysql/announce.php 如果是外网使用,可以把对应的announce和scrape.php文件移置网站的顶级目录,那么生成的tracker url即为:http://serverip/announce.php

help.php的页面示例:

也可以查看peer的状态:

http://serverip/peertracker/mysql/scrape.php?stats

Transmission

Transmission是一个强大的BitTorrent开源客户端,实现了BT协议中描述的大多数功能。目前,在它的官方网站上提供了多个版本可以下载,包括:Mac、GTK+、QT版本,还有Daemon版本。

Transmission支持DHT、Magnet Link、uTP以及PEX等特性。尤其是支持Magnet Link磁力链接下载十分重要,因为目前网上很多资源都是采用这种方式来分享的,而不是传统的.torrent文件,例如TPB、BTDigg。

transmission的安装/配置

安装

安装很简单,直接apt-get安装即可,运行transmission的role,脚本会自动安装。

安装过程中会顺带把transmission-cli也安装上,安装完毕后系统会多出如下一些命令行工具。

transmission-cli: 独立的命令行客户端。

transmission-create: 用来建立.torrent种子文件的命令行工具。

transmission-daemon: 后台守护程序。

transmission-edit: 用来修改.torrent种子文件的announce URL。

transmission-remote: 控制daemon的程序。

transmission-show:查看.torrent文件的信息。

配置

settings.json是主要的配置文件,设置daemon的各项参数,包括RPC的用户名密码配置。它实际上是一个符号链接,指向的原始文件是/etc/transmission-daemon/settings.json。

脚本里提供了一个模板文件,主要修改了下载路径、rpc认证和白名单、默认的rpc认证用户名/密码为:transmission/transmission

RPC的几个配置参数:

rpc-authentication-required: rpc认证,建议开启

rpc-bind-address: String (default = “0.0.0.0”) Where to listen for RPC connections

rpc-enabled: Boolean (default = true)

rpc-password: String

rpc-port: 默认端口9091Number (default = 9091)

rpc-url: String (default = /transmission/. Added in v2.2)

rpc-username: String

rpc-whitelist: 设置白名单 String (Comma-delimited list of IP addresses. Wildcards allowed using ‘‘. Example: “127.0.0.,192.168..“, Default: “127.0.0.1” )

rpc-whitelist-enabled: Boolean (default = true)

transmission使用web界面控制

浏览器中访问:http://serverip:9091/transmission/web/

即可在浏览器中添加种子文件,进行p2p网络传输。

种子文件的生成可以使用transmission自带的transmission-remote命令,例如:

transmission-create -c "Standard Template " -t http://192.168.1.1/announce.php -o Template.torrent StandardTemplate

下图是我自己测试的transmission实时速度,限速100M,起了五个peer基本打满带宽:

需要注意的是transmission的下载路径是/data/transmission-daemon/downloads,注意文件目录是否存在和权限,可以用mk_download_dir.yml脚本创建

transmission-create 创建的种子文件的权限是600,需要更改为644,使other可读

时间: 2024-11-05 22:37:02

p2p传输的相关文章

搭建私有P2P传输网络

六月份去上海参加了DockOne组织的容器大会,报了一个小项目,不小心得了一等奖,这里拿出来跟大家共享一下其中核心的P2P传输网络的搭建,也是公司已经投入使用的大文件传输方式. 项目设计: 初衷: 1.作为一个提供全球云计算业务的运营商来说,不管是本身海外节点业务的拓展.平台扩充还是客户定制模板业务的需求,都会涉及大文件的传输.一些普通的ISO系统镜像文件,一些客户定制的系统模板,少则十几G,多则几十G.如此庞大的文件在全球多个节点之间传输,如何保证其稳定.快速的实现,最重要的是文件的完整性的要

端游下载的时候现在很多都是采用HTTP传输,为什么不是P2P传输?

和一个特别喜欢玩端游的朋友聊天说到P2P的强大功能,他说玩过很多大型的游戏,从几G到几十G都有,在下载的时候有官网标准下载,还有推荐下载,也有一些是写着HTTP高速下载这些有什么区别?既然P2P传输的功能像你说到俺么强大,为什么他们不使用P2P技术,而是HTTP传输呢? 对于这个问题,首先它并不是正确的 ,并不是所有的端游都用http传输,p2p传输的也不少,比如征途的仙侠世界2.搜狐畅游的仙剑奇侠传6等游戏.剑网3等,就都是用的p2p传输,而且都是用的同一家的p2p内核产品:点量BT的传输引擎

浅谈HTTP FTP和P2P网络大文件传输的优劣势

随着各种行业和硬件设备的发展,大文件越来越多,比如在媒体行业为了保证图片和视频的清晰,和以前的相比,都比较大,尤其是出版社等行业.确保大文件能快速的传输,现在很多企业还是使用的硬盘邮寄的方式.如果使用网上传输的方式,可以实现吗? 想弄清楚这个问题,我们首先用知道现在网上信息传输常用的方式HTTP FTP和P2P优劣势.我们一起来看下吧: 1. Http传输:比较传统的文件分发方式,优点是部署方便,一般会采用IIS.Apache.Nginx.Tomcat等web服务器,基本上能运行网站的web服务

为什么P2P模式下载的人越多速度越快,为什么P2P伤害机械硬盘

台风来临前的夜晚,有点激动不想睡觉,看了几个电影,日本恐怖片,台风雨夜,非常不错,P2P很流畅,观察IP地址大量也是附近的,江浙沪,难道也都在迎台风看电影? 大家都知道使用P2P模式下载速度会非常快,原理其实也并不难,毕竟P2P没有中心瓶颈,每个节点既是下载方又是上传方,一起接力努力的模型总比C/S模 式对中心带宽的争抢要好吧,但是这背后有没有什么理论根据呢?本文就是描述这个理论根据的,我不会大段的贴数学公式,但是会贴一些,不算难,都懂的.在理 解了这个基本原理之后,你也就可以回答第二个问题了,

P2P通信原理与实现(C++)

1.简介 当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信.这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还有其他中间件如防火墙阻挡了链接的建立. 当今部署的中间件大多都是在C/S架构上设计的,其中相对隐匿的客户机主动向周知的服务端(拥有静态IP地址和DNS名称)发起链接请求.大多数中间件实现了一种非对称的通讯模型,即内网中的主机可以初始化对外的链接,而外网的主机却不能初始化对内网的链接,除非经过中间件管

P2P下载工作原理简要解释

朋友给了一个BT的种子,查后得知就是视频的下载链接,于是质问朋友:“为什么不给我视频,而给种子.”朋友无语,仿佛对待外星生物一样看待我,于是心有不甘,赶忙查清为什?摘录如下,与大家分享: 大家,都用过bt吧.现在bt可以说是继局域网.ftp.http之后最广泛使用的文件分享和传播途径,可以说已经融入了广大网民的生活中.bt,全称BitTorrent,是一种P2P下载方式.常见的P2P除了bt就是emule(俗称电骡,当然也有人叫电驴的--,区别见:http://www.quanyo.com/zt

UDP可靠传输那些事

有空来论坛走走,发现讨论udp可靠传输又热了起来,有人认为udp高效率,有人认为udp丢包重传机制容易控制,还有朋友搞极限测试,当然也有人推销自己的东西,这里写一点我个人的看法. udp可靠传输其实非常非常的简单,我最开始接触udp可靠传输大约是在2005年,因为那时候开发FtpAnywhere,由于路由的映射和网关nat处理方面,认为udp具有天生优势,因此开始编写自己的udp可靠传输协议,好象那个时候已经有了udt,我也下了源代码看了下,不过很快就看不下去了,因为它用了定时器,加上跨平台处理

P2P通讯

转载: http://www.cnblogs.com/pannengzhi/p/4800526.html http://blog.csdn.net/lee353086/article/details/50971400 1.简介 当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信.这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还有其他中间件如防火墙阻挡了链接的建立. 当今部署的中间件大多都是在C/S架构上设计

企业网盘居然支持高速局域网文件传输工具(速度可达20M)

高速局域网文件传输工具Mobox,局域网内文件共享是公司内非常必须的功能,原本文件共享可以通过:1)windows目录共享目录来实现文件交互:2)通过U盘拷贝给对方:3)通过QQ发送给对方:4)通过邮件发送给对方: 高速局域网文件传输工具Mobox工作方式介绍: 1.局域网文件传输的实现 1)局域网文件传输工具启动的方式 l 通过资源管理器右键l 通过Mobox网盘 l? 通过AM8 即时通 2)局域网文件传输工具人员选择l? 通过组织机构获取接受人员l? 通过历史记录获取接收人员l? 通过手工