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可讀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章