爲什麼專一於流媒體領域?PPIO 技術揭祕續篇

在各類音視頻應用充斥着市場的時候,毫無疑問,流媒體領域將會很是適合區塊鏈技術進行場景落地。在上一篇文章中,咱們主要討論了 PPIO 的 PCDN 架構,接下來將介紹 PPIO 的中 P2SP 的下載邏輯和 IaaS 層的流量計數。算法

下載邏輯

上圖爲 PPIO 的 CDN 和 P2SP 的傳輸架構圖。這裏將會重點講解 PPIO 中 P2SP 的下載邏輯,它主要分三個部分,Buffer 管理,下載狀態機,和下載算法。接下來會對這三部分一一解釋。網絡

Buffer 管理架構

Buffer 管理,即理解爲本地設備管理着資源狀況,從而決定須要下載的 Piece 的優先級。Buffer 管理也是和實際應用場景是相關的,對於流媒體來講,存在一個視頻播放位置,播放位置附近的內容就是緊急內容,該內容則會被優先下載。併發

#1 普通文件下載的 Buffer 管理邏輯區塊鏈

文件下載的 Buffer 管理相對簡單,由於沒有具體的播放位置,即內容在緊急程度上沒有區別。下載算法將採用稀缺優先的邏輯,優先下載網絡中稀缺的 Piece。Piece 越稀缺,其下載的優先級也就越高。以下圖:優化

下載 Buffer 管理示意圖

在示意圖中,咱們假設全部 Peer 都是同樣的,而由於 CDN 節點的存在,實際狀況則會複雜得多。CDN 能夠被認爲比較優質的,可是它不適合請求分散的碎片數據,更適合下載一段連續的數據。之因此將稀缺性做爲普通文件的 Buffer 管理的指標,是爲了增長 P2P 網絡的資源健康度,而且讓數據儘快在 P2P 網絡中傳播。spa

#2 流媒體的 Buffer 管理邏輯設計

和普通文件下載不一樣的是,流媒體下載存在具體播放位置,爲了保證視頻的觀看體驗,越接近播放位置的數據將會優先進行下載。3d

流媒體的 Buffer 管理示意圖

設計 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 的調度算法大體以下:

  1. 爲了數據傳輸更加高效,下載節點與每一個擁有資源的 Peer 創建起多個鏈接。這裏的鏈接,不限於 TCP 協議,也有 UDP 協議實現的會話邏輯。PPIO 同時兼容多種協議,在不一樣的網絡環境下切換不一樣的協議,以應對網絡的異構性;
  2. 對於每一個 Peer,根據歷史的數據傳輸狀況,咱們都進行速度預測。若是沒有歷史記錄,則使用一個根據歷史經驗獲得的默認值,缺省經驗值;
  3. 根據 Buffer 管理的狀況,確認全部下載 Piece 的優先級,而後隨機經過鏈接向其餘 Peer 發起 Piece 數據請求,對方接受請求後,當即發送 Pieces 數據;
  4. 任何一個鏈接只要收到一個 Piece,當即更新該鏈接的速度預測,並根據 Buffer 管理的狀況請求下一個沒有被下載的 Piece,直到下載完成;
  5. 若是 Piece 數據請求長時間沒有獲得迴應,則會向其餘 Peer 請求數據。對該長時間沒有回覆的 Peer 作懲罰,這個懲罰可能會減小該 Peer 鏈接數,從而下降該 Peer 下載權重。

根據以往設計高速 P2P 網絡的經驗,PPIO 採用對每一個 Peer 進行多虛擬鏈接下載,這個虛擬鏈接是支持多種協議之間切換的,其底層協議,會先嚐試 UDP,若是 UDP 不通再嘗試 TCP,極大的提升了傳輸效率。爲何要這樣作呢?那是由於 TCP 協議是多年之前根據互聯網早期的狀態設計的,其自己有弱點,即擁塞控制算法上採用了主動退讓的邏輯,這會形成的傳輸的低效率,並不徹底適合今天實際網絡的傳輸。

#2 流媒體下載

PPIO 爲流媒體下載提供了一套優化的 P2P 傳輸系統。爲了保證觀看體驗,下載數據必須實時,而且可以應對 P2P 網絡的不穩定性。爲此,咱們採用了數據驅動的 P2P 下載技術,並基於這個理念後作了很大的改進和優化,設計了一套基於預分配方式的 P2P 多點調度系統。實現最大化的下載速率,並將因爲重複傳輸和請求所產生的開銷降至最低。PPIO 流媒體調度算法的設計以下:

  1. 和文件下載器同樣,給每一個 Peer 創建多個鏈接,同時記錄每一個虛擬鏈接的歷史下載速度;
  2. 對將要下載的 Piece,根據 Piece 的緊急程度(細節見前面的 Buffer 管理)排序作預分配至每一個鏈接上,並預測每一個 Piece 的到達時間,從總體來看,以越緊急越優先爲原則。
  3. 針對未完成下載的 Piece,定時重作預分配,以適應每一個鏈接傳輸速度的變化;
  4. 當每一個鏈接每收到一個 Piece,則更新該通道的速度, 而後從該通道的預分配隊列中找到下一個 Piece,併發起請求;
  5. 對於很是緊急的 Piece(須要當即播放),容許同時向多個 Peer 請求數據;

數據驅動的預分配下載算法示意圖

PPIO 的 P2P 傳輸網絡是徹底動態的,能夠持續保持高效狀態。

你可能以爲目前爲止咱們所說起的都是傳統的 P2SP 的技術,這和 PPIO 的區塊鏈有關係嗎?別急,下面就來解釋一下,前面所介紹的內容,都是圍繞着 PPIO 的 PaaS 層和 AS 層(Application Services層)所展開的。PCDN 的整個 P2SP 下載引擎都在 PaaS 層,流媒體格式和協議的支持,以及數據拆分,數據拼裝都在 AS 層。而整個去中心化存儲和區塊鏈的基礎設施都在 IaaS 層。

PPIO 總體商業化架構模塊結構圖

流量計數和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 中下載數據,如下就是最簡單的流程:

  1. Owner 先將足夠的預支付款打到智能合約。
  2. User 從 Owner1 處申請一個 Check(相似於支票),Check 中含有這個智能合約的地址。以及最大消費額度,CheckID,過時時間等。
  3. Owner 審閱這個 Check 請求是否符合要求,若符合則將 Check 返還給 User;若不符合,好比申請的 Token 過多,則能夠拒絕。
  4. User 向 Miner 請求數據(經過 P2P 數據傳輸協議)且順利收到數據。
  5. User 會將 Check 擴展成 Voucher(相似於憑據),併發給 Miner,這個過程(步驟4和5)是屢次的,Voucher 涉及的金額會愈來愈大。
  6. 當下載完成或異常終止時,就會提交該 Voucher 到 Miner 的 Owner,即 Owner2。
  7. Owner2 收到該 Voucher,會向該區塊鏈智能合約發起提款。
  8. 若是 Voucher 正確且未超時,那麼就能提款成功。

PPIO 最簡單的下載流程圖

對 PCDN 業務的開發者來講,既可本身部署 CPool(即 Owner),也能夠接入其餘第三方 CPool(即 Owner)。另外,若是下載方和上傳方的 Owner 是同一個,那狀況就會變得更加簡單,交易不用上鍊,在 Owner 的內部進行即能解決,Owner 的金錢數量不會變更。就這樣,PPIO 將 P2P 傳輸和區塊鏈計費進行了有效的結合。

固然,這只是一個 PPIO 中 IaaS 層計費中的一個最簡單的流程,實際狀況會複雜得多。以後會有更多的文章來深度解析 PPIO 的 PCDN 相關的智能合約。

不能否認,流媒體領域在衆多區塊鏈技術應用場景中潛力巨大,PPIO 將結合自身豐富的 P2P 經驗和前沿的區塊鏈技術爲你們帶來更好的視頻觀看體驗。體量雖小,能量巨大,好戲正要上演,還不趕忙加入社羣一塊兒探討吧!

相關文章
相關標籤/搜索