PPIO 是爲開發者打造的去中心化存儲與分發平臺,讓數據存儲更便宜、更高速、更隱私。官方網站是 pp.io 。PPIO 不只僅是個存儲平臺,也是一個分發平臺。以前咱們寫了許多文章介紹 PPIO 的存儲技術,這篇文章將重點介紹 PPIO 的分發技術。算法
分發指的是在保證傳遞體驗的同時將同一份數據快速傳遞給不少人。這些人分佈在必定區域不少地方 (多是一個國家),並且要保證數據傳輸的體驗。經常使用的分發場景有:靜態網頁、大文件下載、大圖片查看、流媒體點播、流媒體直播等。還有一些商業場景,如多路視頻通話、視頻會議等,其本質也是一種雙向的分發。緩存
#1. CDN & P2P服務器
傳統意義上的分發叫作 CDN,Content Delivery Network (內容分發網絡),是一種構建在網絡之上的內容分發網絡,他的技術基本原理是把數據從源站推送到離用戶最近的服務器上,而後用戶直接從離本身最近的服務器獲取數據,從而得到最好的用戶體驗。依靠部署在各地的邊緣服務器,經過中心平臺的負載均衡、內容分發、調度等功能模塊,使用戶就近獲取所需內容,下降網絡擁塞,提升用戶訪問響應速度和命中率。CDN 的關鍵技術主要有內容存儲和分發技術。網絡
分發是 P2P 技術的最古老的應用。P2P 網絡從最先的的Napster 到後來的 Edonkey,Bittorrent 等,其應用場景自己都是把同一個內容,傳遞給更多的人,由於越多的人使用同一個內容,就意味着上傳的節點越多,速度也就能越快,這自己就是分發的場景。架構
雖然一樣是分發技術,P2P 和 CDN 的實現方式卻不一樣。CDN 中每一個分發的節點都是服務器,CDN 網絡最終造成的是樹狀結構,一級一級的分發數據。而 P2P 網絡則不一樣,P2P 中的每一個客戶端都具備上傳能力,當客戶端在下載數據的同時其實也上傳數據給別的客戶端。若是每一個客戶端都按照這個邏輯來,就造成了一我的人爲我,我爲人人的生態系統。負載均衡
P2P 對比 CDN 具備的優點有:ide
P2P 對比 CDN 的缺點有:性能
P2P 和 CDN 並不矛盾,P2SP 技術就是 P2P 和 CDN 技術的結合,也就是對客戶端來講,既能夠從 CDN 節點上下載,也能夠從 P2P 網絡中下載數據。使用 P2SP 構建的服務,也被稱爲 PCDN 服務。區塊鏈
#2. 視頻的應用在分發中很常見優化
分發應用是個重流媒體應用,視頻點播,如 Youtube, Netflix,還有視頻直播,如 Hulu 等,以及短視頻,如Tiktok 等,都是分發類的應用場景。據2018年10月的報告,視頻應用佔互聯網流量下載量的58%左右。因此,PPIO 在作分發技術時候,會花大量的精力把視頻類的服務質量 QoS 作好。
#3. 分發自己是和存儲密不可分的
存儲和分發的實質都是數據的讀取和使用,二者是不可能分割的。當一個數據存儲在 PPIO 網絡中,若是隻有一我的會讀取並使用,就是存儲;如何有不少人讀取或者使用,就是分發。只是存儲場景和分發場景,設計有些不一樣,服務質量的要求也不同。
PPIO 的核心團隊在作過 PPTV,這是曾經最大的 P2SP 華語視頻平臺,用戶數作到了4.5億的規模。近十年的 P2P 視頻產品經驗讓咱們團隊積累了豐富的 P2P 和分發類項目的技術、產品和運營實踐。咱們很是瞭解分發場景對技術的多樣化甚至刁鑽的需求。這些經驗讓咱們能夠爲分發類產品作出符合實際須要的技術架構。如下是 PPIO 爲分發場景所作的技術設計。
#1. 重疊網絡
PPIO 支持重疊網絡 (Overlay 網絡),每一個存儲節點 (Storage Node/Miner) 都會將與本身物理鏈接較快的存儲節點做爲本身的鄰居,在數據傳遞和信息交互過程,充分發揮臨近節點的優點,使得網絡效率大大提升。
#2. 流媒體傳輸的優化
前面提到,流媒體是分發場景的最主要應用,對流媒體的支持以及作到足夠好的服務質量 (QoS) 很是重要。PPIO 實現了針對流媒體的由數據來驅動的特別下載算法,從而保證明時流媒體的流暢播放。
#3. P4P 技術的支持
P2P 會產生大量的網絡間的跨 ISP 流量。通常來講,網絡運營商 ISP 的網絡內的流量是沒有額外費用的,可是,運營商之間傳輸所產生的通信會按照流量來計費。有沒有什麼辦法可以作到既保留 P2P 技術的優點,又能作到下降跨 ISP 流量呢?這就是 P4P 技術。
P4P 全稱 Proactive Network Provider Participation for P2P,在增強相同服務供應商 (ISP) 內網絡流量的同時,下降了骨幹網絡傳輸壓力和運營成本,從而也提升了 P2P 文件的傳輸性能。與 P2P 隨機挑選節點的方式不一樣,P4P 模式能夠協調網絡拓撲數據,有效選擇節點,從而提升網絡路由效率。
PPIO 團隊以前在作 PPTV 的時候有豐富地和運營商打交道的經歷,在下降運營商的跨 ISP 流量有獨特的方法。而在 P4P 技術出現以前,運營商都在想辦法限制使用 P2P 的技術。
#4. 熱門內容的自適應調度
PPIO 支持 P2P-CDN。在 P2P-CDN 裏面,熱門內容的自適應調度是很是重要的,也是提升服務質量 (QoS) 的重要手段。熱門內容的自適應調度就是當一個文件在網絡中變得受歡迎以後,系統會自動觸發調度機制,讓更多的存儲節點存儲這個文件。這樣的設計既能提升用戶體驗,也能提升更多存儲節點的收益。反之,當很受歡迎的文件失去熱度以後,系統則會自適應地減小存儲此文件的存儲節點的數量。這樣就造成一種動態的平衡。PPIO 在熱門內容調度算法上下了很大的功夫。
#5. 人爲預熱機制
除了熱門內容的自適應調度以外,PPIO 還提供了一套人爲預熱的機制,那麼人爲預熱機制適用於什麼場景呢?
好比說你們在看一部電視劇,前面一集看的人已經不少了,那麼大機率地預測,下一集看的人也會不少。因此發佈方在更新新的一集的時候,就能夠提早推送新的一集的資源到更多礦工那裏。這樣當你們觀看下一級電視劇的時候,已經有足夠多的存儲節點在作種了。這樣在內容發佈前就能充分利用 P2P 網絡的優點,大大提高觀看體驗。相似的場景還有不少,只要人爲可預知的熱門內容均可以預熱來提高冷啓動過程當中的體驗。
內容發佈者能夠支付費用來指定須要預熱的內容,而且能夠指定執行預熱的區域、ISP、時間段。根據區域、ISP 和時段的不一樣,存儲的價格也會有不一樣。PPIO 中預熱的實現是和去中心化存儲的原理基本一致的,由於礦工不知道這個內容是否是真的很熱,因此須要收取費用來對衝風險。可是預熱和存儲不一樣的是,預熱採用的是全副本,而存儲主要採用的糾刪碼,後面我會解釋爲何會有所不一樣。
#6. P2P 直播的考慮
PPIO 不只僅考慮了流媒體點播的下載,並且還考慮實時流媒體直播。直播在本質上就是一堆連續的小文件的分發,只是這些小文件他們的生命週期比較短,一段時間事後就沒有用了,但同時也要求這些小文件的分發效率要很是高,要很是快速地分發到儘量多的節點上。直播的總體架構和 PPIO 的流媒體體系是一致的,只是切分文件的方式,下載算法有所不一樣。
直播分爲兩類,一類是高延時直播,主要用於賽事,新聞等,這類直播的特色是一個直播頻道,可能觀看的用戶數不少不少,可是你們對節目的時延不是那麼敏感。還有一類是低延時直播,主要用於主播,秀場等模式,這種直播的特色是,因爲涉及到和主播之間的互動,這類對延時的要求很是低,通常在 5s 以內,也就是當動做發生到看到畫面最多隻有 5s 的時間,可是用戶規模通常不大。
PPIO 面對這兩種直播場景,使用一推二拉三補償的方案,作了一致性兼容,只是參數的不一樣,就能很好地支持兩種模式。PPIO 的創始團隊以前是作 P2P 直播起家的,作過全世界最大的 P2P 直播平臺,PPTV,在直播領域的積累也是很是豐富的。
#7. PPIO PCDN 的設計
PCDN 即 CDN acceleration with P2P,是利用 P2P 技術和大量租戶節點的帶寬和磁盤資源來作 CDN 分發加速。PPIO 的設計是支持 PCDN 的,而且提供了 DApp 開發接口,開發者將很容易使用 PCDN 接口爲本身的內容服務提供加速。
應用中的存儲內容會首先在發佈源節點進行發佈,在源節點不下線的前提下,可以持續提供下載服務。然而當從同一個源節點下載的用戶數增長後,該節點的帶寬將被消耗殆盡,而每一個用戶的下載速度也會下降。經過 PCDN,網絡中的大量租戶節點開始保存和提供一樣內容的下載。用戶所以能夠從多個節點下載內容,用戶體驗大幅提升。
PCDN 在 PPIO 網絡中有兩種實現方式:
PPIO 的定位是作存儲與分發,那麼存儲和作分發在技術上還有什麼不一樣呢?主要有如下幾點。
#1 全副本和糾刪碼
分發和存儲的最終目的是不一樣的。分發講究的是如何快地獲取內容。通常的分發場景中,源節點是在的,在因此不用擔憂數據會丟失,即便不當心被存儲節點搞丟了,也能從源節點找到。因此在分發場景中咱們選擇採用全副本的算法。
而存儲則不一樣,存儲首先要保證不能丟數據, 提升內容不丟失率。若是採用全副本算法的方式,不知道要存多少副本才能作到11個9的不丟失率。而在適用糾刪碼技術候,作到11個9的不丟失率,須要的冗餘空間將會少不少,這是提升內容不丟失率的最有用方案。
簡單地來講,分發追求高速,因此用全副本方案爲主;而存儲追求極高的內容不丟失率,因此適用糾刪碼技術爲主導。
#2 內存緩存
分發和存儲還有一個很大的區別。分發每每有很強的頭部效應而存儲沒有。
分發的頭部效應,也叫二八原則,就是20%的內容擁有80%的流量。而深刻研究可能會發現,頭部的20%的內容裏面,也適用二八原則。因此在分發中,咱們一般把內容分爲頭部內容,中部內容和尾部內容:頭部的流量很集中,中部的流量較少,尾部的流量很是零散。在分發的場景中,從成本的角度考慮。頭部和中頭部內容適合使用內存的緩存,中尾部內容適合使用 SSD 等高速存儲介質,而尾部內容處於成本角度考慮,則更適合機械硬盤。
存儲沒有頭部效應,都是尾部內容,由於不多有人擁有相同的內容。存儲也分爲熱存儲、溫存儲和冷存儲,熱存儲指的是數據在寫入以後,常常會被讀取;溫存儲指得是數據在寫入以後,不多被讀取,也可能永遠不被去讀,如私人網盤的老數據;冷存儲指的是寫入後,大機率是不會使用,即便使用也不會要求那麼及時,如監控數據。
在 PPIO 的網絡中,熱存儲主要使用全副本和糾刪碼並存方案,全副本保證適當地高速傳輸,糾刪碼能將數據的丟失率降到很低,同時推薦承載熱存儲的存儲節點使用 SSD 等高速硬盤。而溫存儲和冷存儲使用純糾刪碼方案,由於讀取的次數很少,推薦使用機械硬盤,這樣能將成本降到最低。
因此對於存儲節點來講,若是要得到最大的收益,其機器配置的參數也要與其提供的服務相搭配。
PPIO 項目至關於其餘去中心化存儲區塊鏈項目,如 Filecoin 和 Storj,是更重視分發場景的,其餘項目都把重心放在了存儲場景上。這裏有個簡易地對比表格分析三個存儲鏈,並給出對比信息。
綜上所訴,這些就是 PPIO 在數據分發領域的優點。若是你想了解更多,歡迎加入咱們的開發者社區共同討論!