第二章第六節 P2P應用
在本節內容開始前,咱們要先來對P2P架構有一個宏觀的認知:算法
P2P:(Peer to Peer 對等結構) 以對等方式進行通訊,並不區分客戶端和服務端,而是平等關係進行通訊。在對等方式下,能夠把每一個相連的主機當成既是主機又是客戶,能夠互相下載對方的共享文件。好比迅雷下載就是典型的P2P通訊方式。 數據庫
本章描繪的前三個應用都採用了CS(客戶-服務器)體系結構,極大的依賴於老是打開的基礎設施服務器。而在本節中,咱們將介紹兩種適用於P2P的應用:一個是文件分發,在其中咱們將介紹流行的BitTorrent協議;另外一個是分佈在大型對等方社區中的數據庫,在其中咱們將探討分佈式散列表(Distrubuted Hash Table,DHT)的概念。服務器
Outline
Note
- 純P2P架構具備以下特色:
- 沒有服務器,任意端系統之間直接通訊
- 節點階段性接入Internet
- 節點可能更換IP地址
- 資源共享
- 資源分佈
## 文件分發
【P2P體系結構的擴展性】網絡
- 爲了方便討論,咱們假設如上圖的簡單定量模型,其中us爲服務器上傳帶寬;ui爲節點i上傳帶寬,di爲節點i下載帶寬。
- 對於客戶機/服務器架構:
- 服務器串行地發送 N 個副本,時間爲: NF/us
- 客戶機i 須要 F/di 的時間下載
- 咱們所須要的最短期爲:
- 對於P2P架構:
- 服務器必須發送一個副本,時間: F/us
- 客戶機i 須要 F/di 的時間下載
- 總共須要下載NF比特
- 最快的可能上傳速率: us + ∑ui
- 所須要的最短期爲:
- 結論:對足夠大的N(對等方的數量):
- 客戶機/服務器體系結構的分發時間隨着對等方的數量N線性增長而且沒有界。
- P2P體系結構,其最小分發時間曲線與log2N曲線相似,所以最小分發時間遠小於客戶機/服務器體系結構的分發時間。其自擴展性很強。
【BitTorrent】架構
- BitTorrent是一種用於文件分發的流行P2P協議,每一個下載者在下載的同時不斷向其餘下載者上傳已下載的數據。
- BT協議與FTP協議不一樣,特色是下載的人越多,下載速度越快,緣由在於每一個下載者將已下載的數據提供給其餘下載者下載,充分利用了用戶的上載帶寬。經過必定的策略保證上傳速度越快,下載速度也越快。
- 基本概念:
- Torrent:參與一個特定文件分發的全部對等方的集合被稱爲一個洪流。
- chunk:在一個洪流中的對等方彼此下載等長度的文件塊(一個文件被分紅若干個塊),典型的塊長度爲256KB。
- Tracker:每一個洪流都有一個基礎設施結點,成爲追蹤器
- 當一個新節點(Alice)加入torrent:
- 沒有chunk,但會隨着時間不斷積累
- 結點向tracker註冊得到節點信息表,並與某些結點創建聯繫(成爲「鄰居」),一個結點的臨近對等點會隨着時間而波動。
- 結點下載的同時,也爲其餘對等方上傳了多個塊。結點可能隨時加入或離開。
- chunk的獲取
- 給定任一時刻,不一樣的節點持有文件的不一樣chunk集合
- 節點(Alice)按期查詢每一個鄰居所持有的chunk列表
- 節點發送請求,請求獲取缺失的chunk
- 稀缺優先:針對她沒有的塊在他的鄰居中決定最稀缺(副本數量最少)的塊,並優先請求稀缺塊
- 稀缺優先的目的:大體的均衡每一個塊在洪流中的副本數量
- chunk的發送:決定Alice響應哪一個請求(對換算法)
- Alice根據當前可以以最高速率向他提供數據的鄰居,給出其優先權
- 每10秒,從新評定一下Top4,這四個對等方被稱爲疏通(unchocked)
- 每30秒,Alice隨機選擇一個其餘結點,向其發送chunk。
- 除了隨機選擇的伴侶做爲試探對等方和以前的Top4,其餘的對等方都稱爲阻塞()
## P2P應用:索引技術
【P2P中搜索信息】分佈式
- P2P系統的索引:信息到節點位置(IP地址+端口號)的映射。
- 文件共享(電驢)
- 利用索引動態跟蹤節點所共享的文件的位置
- 節點須要告訴索引它擁有哪些文件
- 節點搜索索引,從而獲知可以獲得哪些文件
- 即時消息(QQ)
- 索引負責將用戶名映射到位置
- 當用戶開啓IM應用時,須要通知索引它的位置
- 節點檢索索引,肯定用戶的IP地址
【集中式索引】性能
- 如上圖所示,集中式索引更像是P2P和CS的混合體
- 當Alice須要下載信息時,通過如下步驟:
-
- 初始時,全部的對等方要將自身的IP和可共享的文件名稱通知集中式索引服務器,該索引服務器從每一個活動的對等方那裏收集這些信息,從而創建起一個動態索引,將每一個文件拷貝映射到一個IP地址集合。
- 當Alice須要下載一些文件時會將查詢內容發送給索引服務器,服務器將查詢結果返回給Alice(Bob的IP地址)。
- Alice根據收到的信息,從Bob處下載資源。
- 集中式索引的問題:內容和文件傳輸是分佈式的,可是內容定位是高度集中式的。會出現以下問題:單點失效問題、性能瓶頸、版權問題。
【查詢洪泛】(創建在「Gnutella」協議基礎上)ui
- 查詢洪泛採用徹底分佈式方法。在查詢洪泛中,索引全面地分佈在對等方的區域中。每一個對等方索引可供共享的文件而不索引其餘文件。
- 其擴展性差,尤爲是爲了防止某個對等方發起查詢,該查詢就會傳播到整個覆蓋網絡的每一個其餘對等方,從而產生大量流量。爲解決這個問題,設計者使用了受限查詢洪泛,即限制其傳播的最大跳數。
【層次覆蓋】(由FastTrack獨創,Kazza和Morpheus也實現了這種文件共享協議)spa
該方法結合了上述兩種方法的優秀特徵,與洪泛查詢相似,層次覆蓋設計不使用專用的服務器(或服務器場)來跟蹤和索引文件。然而,與洪泛查詢不一樣的是,在層次覆蓋的設計中並不是全部對等方都是平等的。.net
以下圖所示,若是某對等方不是超級對等方,則它就是一個普通對等方,並被指派爲一個超級對等方的子對等方。
超級對等方維持着一個索引,該索引包括子對等方正在共享的全部文件的標識符、有關文件的元數據和相應子對等方的IP地址,但與前面的集中式索引不一樣,這裏的超級對等方並非一臺專用服務器,而是普通對等方。超級對等方之間能夠相互創建TCP鏈接,從而造成一個覆蓋網絡。
## 分佈式散列表
在課程中未涉獵,具體請移步https://blog.csdn.net/zy_zhengyang/article/details/76838523