在各類音視頻應用充斥着市場的時候,毫無疑問,流媒體領域將會很是適合區塊鏈技術進行場景落地。在上一篇文章中,咱們主要討論了 PPIO 的 PCDN 架構,接下來將介紹 PPIO 的中 P2SP 的下載邏輯和 IaaS 層的流量計數。算法
上圖爲 PPIO 的 CDN 和 P2SP 的傳輸架構圖。這裏將會重點講解 PPIO 中 P2SP 的下載邏輯,它主要分三個部分,Buffer 管理,下載狀態機,和下載算法。接下來會對這三部分一一解釋。網絡
Buffer 管理架構
Buffer 管理,即理解爲本地設備管理着資源狀況,從而決定須要下載的 Piece 的優先級。Buffer 管理也是和實際應用場景是相關的,對於流媒體來講,存在一個視頻播放位置,播放位置附近的內容就是緊急內容,該內容則會被優先下載。併發
#1 普通文件下載的 Buffer 管理邏輯區塊鏈
文件下載的 Buffer 管理相對簡單,由於沒有具體的播放位置,即內容在緊急程度上沒有區別。下載算法將採用稀缺優先的邏輯,優先下載網絡中稀缺的 Piece。Piece 越稀缺,其下載的優先級也就越高。以下圖:優化
在示意圖中,咱們假設全部 Peer 都是同樣的,而由於 CDN 節點的存在,實際狀況則會複雜得多。CDN 能夠被認爲比較優質的,可是它不適合請求分散的碎片數據,更適合下載一段連續的數據。之因此將稀缺性做爲普通文件的 Buffer 管理的指標,是爲了增長 P2P 網絡的資源健康度,而且讓數據儘快在 P2P 網絡中傳播。spa
#2 流媒體的 Buffer 管理邏輯設計
和普通文件下載不一樣的是,流媒體下載存在具體播放位置,爲了保證視頻的觀看體驗,越接近播放位置的數據將會優先進行下載。3d
設計 PPIO 的時候,咱們根據視頻播放位置,在流媒體下載的過程當中,將其分爲多個區間,越靠近播放位置的區間,下載優先級越高。代理
已過區間:視頻播放位置以前的數據,無需進行下載。
緊急區間:須要當即播放的數據,在此區間的數據將採用極端下載策略,旨在以最快的速度獲取數據。Piece 越靠近播放位置,下載優先級越高。這種策略更加依賴於 CDN 和超級節點,儘管有重複下載的風險,該區間將同時進行 P2P 下載,即在第一時間從多個 Peer 下載數據。
正常下載區間:稍後進行播放的數據。雖然此區間的數據也會很快被使用到,可是緊急程度不如緊急區間,所以這部分數據,也是越靠近播放位置的 Piece,下載優先級越高。可是此區間的策略不要過多依賴於 CDN 節點,而且在 P2P 下載的時候,儘可能避免重複下載。
長遠區間:播放時間遲於正常下載區間的數據,這部分採用相似於普通文件下載的稀缺性優先下載的邏輯。此區間的數據下載儘可能不要依賴於 CDN 節點。
狀態機是什麼?它是一種根據 Buffer 狀態來進行下載數據的方式。下載數據的方式有2種: P2S,即從 CDN 中下載數據;P2P,即從其餘多個 Peer 中下載數據。那麼這兩種方式是如何切換的呢?這就是下載狀態機要解決的問題。
#1 普通文件下載的狀態機設計
普通文件下載的狀態機隨時評估 CDN 和 P2P 的下載質量和資源狀況,在三個下載狀態中相互切換,直到把文件完整地進行下載。
#2 流媒體點播的狀態機設計
流媒體狀態機和普通文件下載狀態機雖然相似,可是在其之上稍做改進,在斷定 P2P 資源不足以支撐流暢播放的時候,直接放棄 P2P 的下載方式,再也不嘗試幾種狀態的切換,避免形成沒必要要的開銷。
下載算法,就是將不一樣的待下載 Piece 分配到多個不一樣的 Peer 上的算法。這個算法在普通文件下載和流媒體下載的時候是不同的。
#1 普通文件下載
PPIO 的調度算法大體以下:
根據以往設計高速 P2P 網絡的經驗,PPIO 採用對每一個 Peer 進行多虛擬鏈接下載,這個虛擬鏈接是支持多種協議之間切換的,其底層協議,會先嚐試 UDP,若是 UDP 不通再嘗試 TCP,極大的提升了傳輸效率。爲何要這樣作呢?那是由於 TCP 協議是多年之前根據互聯網早期的狀態設計的,其自己有弱點,即擁塞控制算法上採用了主動退讓的邏輯,這會形成的傳輸的低效率,並不徹底適合今天實際網絡的傳輸。
#2 流媒體下載
PPIO 爲流媒體下載提供了一套優化的 P2P 傳輸系統。爲了保證觀看體驗,下載數據必須實時,而且可以應對 P2P 網絡的不穩定性。爲此,咱們採用了數據驅動的 P2P 下載技術,並基於這個理念後作了很大的改進和優化,設計了一套基於預分配方式的 P2P 多點調度系統。實現最大化的下載速率,並將因爲重複傳輸和請求所產生的開銷降至最低。PPIO 流媒體調度算法的設計以下:
PPIO 的 P2P 傳輸網絡是徹底動態的,能夠持續保持高效狀態。
你可能以爲目前爲止咱們所說起的都是傳統的 P2SP 的技術,這和 PPIO 的區塊鏈有關係嗎?別急,下面就來解釋一下,前面所介紹的內容,都是圍繞着 PPIO 的 PaaS 層和 AS 層(Application Services層)所展開的。PCDN 的整個 P2SP 下載引擎都在 PaaS 層,流媒體格式和協議的支持,以及數據拆分,數據拼裝都在 AS 層。而整個去中心化存儲和區塊鏈的基礎設施都在 IaaS 層。
流量計數和IaaS層
PPIO 的設計理念不一樣於傳統的 P2P 傳輸項目,傳統 P2P 項目倡導的是「人人爲我,我爲人人」的共享網絡,下載在傳輸上是「免費」的,上傳是無償的。而 PPIO 創建了激勵網絡機制,用戶下載資源須要付費的,資源上傳者進行必定的收費,即下載方要支付 Token 給上傳方。
在 PPIO 的 IaaS 層,爲了保證 P2P 網絡的效率,不須要每一個 Peer 都處理 Token 的支付和接收。所以 PPIO 設計了 Owner 機制。Owner 不是一個 P2P 傳輸角色,而是一個支付和結算角色。在 PCDN 架構中,每一個 Peer 都須要指定一個 Owner。這個 Peer 產生的花費由他的 Owner 來承擔,而一樣該 Peer 賺取的收入也有他的 Owner 來接收。
若是在需求端,能夠將其理解爲 CPool(代理支付網關,見文章《爲何 PPIO 要設計支付代理節點》),若是在供給端,也能夠簡單理解其爲「礦池」。對於 PCDN 業務來講,使用帶寬的花費通常是由內容發佈者來承擔。
做爲 User 的 Peer 要從一個做爲 Miner 的 Peer 中下載數據,如下就是最簡單的流程:
對 PCDN 業務的開發者來講,既可本身部署 CPool(即 Owner),也能夠接入其餘第三方 CPool(即 Owner)。另外,若是下載方和上傳方的 Owner 是同一個,那狀況就會變得更加簡單,交易不用上鍊,在 Owner 的內部進行即能解決,Owner 的金錢數量不會變更。就這樣,PPIO 將 P2P 傳輸和區塊鏈計費進行了有效的結合。
固然,這只是一個 PPIO 中 IaaS 層計費中的一個最簡單的流程,實際狀況會複雜得多。以後會有更多的文章來深度解析 PPIO 的 PCDN 相關的智能合約。
不能否認,流媒體領域在衆多區塊鏈技術應用場景中潛力巨大,PPIO 將結合自身豐富的 P2P 經驗和前沿的區塊鏈技術爲你們帶來更好的視頻觀看體驗。體量雖小,能量巨大,好戲正要上演,還不趕忙加入社羣一塊兒探討吧!