溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

P2P--大文件分發(fā)網(wǎng)絡(luò)的搭建

發(fā)布時(shí)間:2020-07-21 04:17:05 來源:網(wǎng)絡(luò) 閱讀:19939 作者:Jx戰(zhàn)壕 欄目:數(shù)據(jù)庫

  六月份去上海參加了DockOne組織的容器大會,報(bào)了一個(gè)小項(xiàng)目,不小心得了一等獎,這里拿出來跟大家共享一下其中核心的P2P傳輸網(wǎng)絡(luò)的搭建,也是公司已經(jīng)投入使用的大文件傳輸方式。

項(xiàng)目設(shè)計(jì)

初衷:

1、作為一個(gè)提供全球云計(jì)算業(yè)務(wù)的運(yùn)營商來說,不管是本身海外節(jié)點(diǎn)業(yè)務(wù)的拓展、平臺擴(kuò)充還是客戶定制模板業(yè)務(wù)的需求,都會涉及大文件的傳輸。一些普通的ISO系統(tǒng)鏡像文件,一些客戶定制的系統(tǒng)模板,少則十幾G,多則幾十G。如此龐大的文件在全球多個(gè)節(jié)點(diǎn)之間傳輸,如何保證其穩(wěn)定、快速的實(shí)現(xiàn),最重要的是文件的完整性的要求,是我們客觀面對的問題。

2、傳統(tǒng)的 FTP, rsync之類的文件傳輸無法滿足大文件的傳輸要求。我們經(jīng)常遇到,辛苦一天傳輸?shù)哪0宓揭粋€(gè)數(shù)據(jù)中心節(jié)點(diǎn),結(jié)果告知文件已經(jīng)損壞,無法部署??煽啃詿o法保證。

3、客戶迫切需要實(shí)現(xiàn)全球各個(gè)節(jié)點(diǎn)之間的大文件快速,可靠的分發(fā),同步

實(shí)現(xiàn)思路:

1、穩(wěn)定快速:大文件的分發(fā)的穩(wěn)定性受限于傳輸網(wǎng)絡(luò),受限于傳輸協(xié)議。我們的分發(fā)網(wǎng)絡(luò)建立在公司專用GPN之上,傳輸網(wǎng)絡(luò)的穩(wěn)定性得到保證,傳輸協(xié)議采用的 P2P傳輸,很明顯優(yōu)于 FTP等相關(guān)協(xié)議。

這里其實(shí)大家通過公網(wǎng)和私有網(wǎng)絡(luò)也可以實(shí)現(xiàn)。

2、開發(fā): P2P(BT)相關(guān)的的軟件,工具社區(qū)已經(jīng)有很多成型的產(chǎn)品,因此我們沒有必要自己研發(fā)。只需要選擇適合的開源工具,進(jìn)行二次開發(fā)即可。云計(jì)算時(shí)代,開發(fā)效率是最關(guān)鍵的。

3、部署交付:分發(fā)網(wǎng)絡(luò)Docker容器化部署,鏡像交付?;贒ocker的輕量,跨平臺特性,標(biāo)準(zhǔn)統(tǒng)一的打包方案,生成可交付的鏡像產(chǎn)品。具有良好的 REST API,很適合自動化測試和繼續(xù)集成,分發(fā)網(wǎng)絡(luò)的動態(tài)擴(kuò)展。

項(xiàng)目實(shí)現(xiàn):

1、網(wǎng)絡(luò):文件分發(fā)網(wǎng)絡(luò)構(gòu)建在我們公司專有GPN 全球互聯(lián)網(wǎng)絡(luò)之上(博客里不打廣告,實(shí)際在公網(wǎng)和自有內(nèi)網(wǎng)里也可以實(shí)現(xiàn),但注意限速!)。

2、tracker: 采用集中式的 P2P 傳輸模式,tracker使用peertracker。peertracker是一個(gè)簡單,高效,快速的 BT Tracker。負(fù)責(zé)記錄每個(gè)peer的信息;可以搭建多個(gè)tracker做冗余,防止一個(gè)tracker宕機(jī)導(dǎo)致集群不可用。

3、peer: 使用的是 transmission,  是一個(gè)跨平臺的自由軟件,自帶 web 界面,支持 API 調(diào)用,可編程性好。

4、agent: 基于flask + dockerapi開發(fā),封裝了一整套dockerapi相關(guān)操作,提供認(rèn)證機(jī)制, 接收中心控制節(jié)點(diǎn)的調(diào)度,創(chuàng)建 peer docker容器,執(zhí)行相關(guān)任務(wù)。部署層級與transmission peer端一致。

5、控制節(jié)點(diǎn):基于django + celery開發(fā)。可實(shí)現(xiàn)監(jiān)控整個(gè)分發(fā)網(wǎng)絡(luò)運(yùn)行情況,分發(fā)任務(wù)執(zhí)行情況,動態(tài)擴(kuò)展分發(fā)節(jié)點(diǎn),下發(fā)任務(wù)等操作。

整個(gè)原理圖和流程圖如下:

P2P--大文件分發(fā)網(wǎng)絡(luò)的搭建

P2P--大文件分發(fā)網(wǎng)絡(luò)的搭建

這里主要分享一個(gè)playbook,用于P2P網(wǎng)絡(luò)的搭建,docker和實(shí)現(xiàn)代碼部分等整理之后在共享出去。

github的地址:

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

由于寫的比較倉促,有帶后期改善,經(jīng)測試此腳本在ubuntu14上能夠正常運(yùn)行。

README:

這是一個(gè)用ansible寫的自動化搭建P2P傳輸網(wǎng)絡(luò)的腳本。Tracker采用谷歌2010年開源出來的peertracker,p2p種子的生成和傳輸采用transmission。

安裝

安裝peertracker:

ansible-playbook install_peertracker.yml

默認(rèn)創(chuàng)建的數(shù)據(jù)庫:peertracker,用戶名:peertracker,密碼:yais6Yab

腳本執(zhí)行完成后,通過網(wǎng)頁創(chuàng)建數(shù)據(jù)庫,詳見下面peertracker的安裝.

安裝transmission:

ansible-playbook install_transmission.yml

默認(rèn)rpc_username和password: transmission/transmission

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

創(chuàng)建下載目錄

ansible-playbook mk_download_dir.yml

默認(rèn)下載路徑是:/data/transmission-daemon/downloads可自行更改

Peertracker

P eerTracker是一個(gè)簡單、高效、迅速的BitTorent Tracker。
安裝要求:
1. HTTP Web Server.Apache,nginx,lighttpd等只要支持php均可。
2. PHP5+ 推薦php5.3以上版本
3. Database.支持MySQL、SQLite3、PostgreSQL8.0和txtSQL 腳本里采用的web server是apache2,數(shù)據(jù)庫使用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安裝環(huán)境:ubuntu
1. 確認(rèn)代碼拷貝到網(wǎng)站根目錄之后,瀏覽器訪問: <http://serverip/peertracker/help.php
2. 編輯配置文件tracker.mysql.php,這里已提前編輯好,主要更改了數(shù)據(jù)庫的db_user、db_pass和db_name,默認(rèn)數(shù)據(jù)庫明和user是peertracker,密碼:yais6Yab,也可自行修改templates里的文件。

  1. 通過help頁面提供的Utilities,安裝Tracker Database。安裝成功后可看到,數(shù)據(jù)庫結(jié)構(gòu)很簡單,只有兩個(gè)表:pt_peers和pt_tasks,分別記錄peer和任務(wù)的信息。

  2. 數(shù)據(jù)庫創(chuàng)建成功之后實(shí)際已可以使用,tracker的url即為:http://serverip/peertracker/mysql/announce.php 如果是外網(wǎng)使用,可以把對應(yīng)的announce和scrape.php文件移置網(wǎng)站的頂級目錄,那么生成的tracker url即為:http://serverip/announce.php

  3. help.php的頁面示例:

也可以查看peer的狀態(tài):

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

Transmission

Transmission是一個(gè)強(qiáng)大的BitTorrent開源客戶端,實(shí)現(xiàn)了BT協(xié)議中描述的大多數(shù)功能。目前,在它的官方網(wǎng)站上提供了多個(gè)版本可以下載,包括:Mac、GTK+、QT版本,還有Daemon版本。
Transmission支持DHT、Magnet Link、uTP以及PEX等特性。尤其是支持Magnet Link磁力鏈接下載十分重要,因?yàn)槟壳熬W(wǎng)上很多資源都是采用這種方式來分享的,而不是傳統(tǒng)的.torrent文件,例如TPB、BTDigg。

transmission的安裝/配置

安裝
安裝很簡單,直接apt-get安裝即可,運(yùn)行transmission的role,腳本會自動安裝。
安裝過程中會順帶把transmission-cli也安裝上,安裝完畢后系統(tǒng)會多出如下一些命令行工具。

  • transmission-cli: 獨(dú)立的命令行客戶端。

  • transmission-create: 用來建立.torrent種子文件的命令行工具。

  • transmission-daemon: 后臺守護(hù)程序。

  • transmission-edit: 用來修改.torrent種子文件的announce URL。

  • transmission-remote: 控制daemon的程序。

  • transmission-show:查看.torrent文件的信息。
    配置
    settings.json是主要的配置文件,設(shè)置daemon的各項(xiàng)參數(shù),包括RPC的用戶名密碼配置。它實(shí)際上是一個(gè)符號鏈接,指向的原始文件是/etc/transmission-daemon/settings.json。
    腳本里提供了一個(gè)模板文件,主要修改了下載路徑、rpc認(rèn)證和白名單、默認(rèn)的rpc認(rèn)證用戶名/密碼為:transmission/transmission
    RPC的幾個(gè)配置參數(shù):

  • rpc-authentication-required: rpc認(rèn)證,建議開啟

  • 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: 默認(rèn)端口9091Number (default = 9091)

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

  • rpc-username: String

  • rpc-whitelist: 設(shè)置白名單 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/
即可在瀏覽器中添加種子文件,進(jìn)行p2p網(wǎng)絡(luò)傳輸。
種子文件的生成可以使用transmission自帶的transmission-remote命令,例如:
transmission-create -c "Standard Template " -t http://192.168.1.1/announce.php -o Template.torrent StandardTemplate

下圖是我自己測試的transmission實(shí)時(shí)速度,限速100M,起了五個(gè)peer基本打滿帶寬:

需要注意的是transmission的下載路徑是/data/transmission-daemon/downloads,注意文件目錄是否存在和權(quán)限,可以用mk_download_dir.yml腳本創(chuàng)建

transmission-create 創(chuàng)建的種子文件的權(quán)限是600,需要更改為644,使other可讀


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI