最近看了很多區塊鏈上的去中心化存儲方案,各種方法不一而足,但是仔細看了各種方法,實話說我的個人結論是“基于區塊鏈的去中心化存儲終將失敗”。
存儲的第一要素是可靠性而不是價格
在存儲市場,可靠性有時候也稱之為持久性,主要是指在文件存儲以后,有多大可能性文件被無損地獲取回來。
這個道理是不辯自明的,沒有人存儲數據是可以不考慮可靠性的,但是在大多數去中心化存儲方案的白皮書中卻是沒有可靠性指標的,大多數都是通過含糊其辭的我們在全網備份來保證文件不被丟失。這夠了么?請移步 https://aws.amazon.com/cn/s3/ 看看商業的存儲服務是怎么定義文件持久性的。
從系統設計角度來說,可靠性設計是設計里面難度最大的工作。在一年 365 天的每一天都能夠正確地讀取數據,但是再最后一分鐘數據沒有讀取到數據,那么可靠性僅是 99.98%,這個數字看起來很高,但是從可靠性角度來說是不夠的。原因很簡單,從最終用戶角度來說,最后一分鐘獲取數據的失敗,實際上意味著整年工作的失敗,我存一年這個數據,也許僅是為了讀這么一次,你這次給不了我數據,那你這一年的存儲是第一天就丟掉數據了,還是在我獲取的那一分鐘前一秒丟掉數據,對我來說沒有任何區別。
我們自己電腦里面使用的硬盤提供的存儲,某種意義上也是一個相對低可靠性的存儲服務,大多數人都能相信把數據、文件存到硬盤上,在大多數情況下數據并不會丟失,稍微懂點技術的明白建一個 Raid0,這個文件丟失的可能性已經是微乎其微了;比較去中心的存儲服務,也許價格上是比傳統云服務公司提供的存儲服務便宜很多,但是如果和個人購買一個硬盤甚至構建一個 Raid0 對比,這個價格優勢就不存在了。
去中心化存儲的可靠性問題比想象的大
如前文所說,去中心化存儲方案的白皮書中是沒有提供可靠性指標數據的,在我看來,很悲哀的現實是所有的去中心化存儲方案因為他的分布式是無法給出一個可靠性指標數據,這個在傳統企業存儲市場業務上已經是個很大的劣勢,但是也許有人會認為雖然他們給不出具體的可靠性數據,實際上可靠性還是很高的,因為去中心化存儲會通過全網的備份,將同一個文件放到不同的節點上來提高數據的可靠性。
這個聽起來沒錯,但是如果我們深究去中心化存儲的實現方式,我們會發現其實不然,這主要在于去中心化存儲在進行文件存儲時的切塊存儲模式,為了保證文件的安全性,也就是文件不能被礦工訪問,主流的去中心化存儲方案都會對文件進行切塊,然后將不同的塊存儲到不同的節點上去,這樣所有的存儲節點都不擁有這個文件的全部塊,文件屬主就不用擔心文件本身被非法獲取。
這樣的存儲模型確實能夠解決文件安全性的問題,但是反過來卻造成了文件存儲可靠性的進一步下降,原因很簡單,如果一個文件被拆分成了 100 個塊,這 100 個塊會被分散存儲,那么只要有任何一個塊失效,這個文件本身也就失效了,分塊操作大大降低了整體文件的可靠性,在 100 個塊的情況下,失效率實際上是提高了100倍。
礦工或者說節點的行為并不能改變什么
實際上大多數去中心化存儲方案也都關注了可靠性的問題,提出了一些方法來約束礦工的行為,比如 FileCoin 提出了 Proof-Of-Spacetime , Proof-Of-Replciation 一堆復雜地概念,寄希望于用這些指標來經濟驅動礦工可靠地保存文件,但是在我看來這些方法某種意義上是所謂地緣木求魚。
首先我認為,在大多數情況下,只要存在一定地經濟激勵,節點管理人的行為并不會是造成文件丟失地主要因素,某種意義上他們事實上不會有興趣去管理這些存儲地碎塊文件。對于去中心化存儲的節點來說,所有的儲存在他電腦上的文件都是毫無意義的二進制字節,而維持這些字節的存在是會給他們帶來一定的收入,正常情況下他們不會有什么欲望去刪掉這些東西。因此通過進一步強化經濟激勵,來保證他們不去刪除這些對他們無意義的字節流,意義并不大。
真正影響文件存儲可靠性的,主要來自于兩個因素:
- 硬盤的可靠性。按照我在網上搜到的硬盤可靠性分析文章,一般性機械硬盤的年失效性中位數大致是 3%,那么換言之每 30 塊硬盤在運行一年以后會壞 1 塊,不精確的概率計算,如果有 200 塊硬盤,一年運行下來有 6-7 塊損壞,那么假設一個 200 個節點的網絡,每個文件被拆分成 100 塊,每個塊在全網分別形成2個復制,那么 1 年以后正??梢云谕?3-4 個塊的損壞,能夠拿回完整文件的可能性微乎其微。
- 節點管理人對于節點的管理水平:傳統的 IT 技術上,針對這種硬盤可靠性實際上是有整套的解決方案,RAID 系列就是專門定義了解決這種問題的,比如簡單搭個 Raid0,就可以將出錯可能性降低到 3% 的平方,也就是說 0.09%,但是作為去中心化存儲節點的提供者,他們架設節點的目的是本來就是用簡單的閑置硬盤空間來換取一定的經濟激勵,提供的容量空間直接影響他們的收益。所以如果有構建 Raid0 的兩塊硬盤,肯定是將兩塊硬盤分別使用,而不會是構建 低容量的Raid0 陣列,而且如果希望擁有大量的去中心化存儲的節點,那么客觀上能夠組建 Raid 陣列的節點管理人只是少數。
復雜的計費模型是去中心化存儲的最后挽歌
計費模型的復雜性也是去中心化存儲方案的一個重大問題,這實際上是來源于存儲需求人和存儲提供者對于存儲需求理解的不一致,而作為去中心化存儲方案必須通過技術來彌合這個不一致。讓我們看下雙方是怎么看待這個存儲需求:
存儲需求人的需求:我今天把這個文件存到你這,也許明年才要用一次,我明年用的時候你將這個文件完整地提供給我,我就付整年的錢,否則,我希望你交罰款。
存儲提供者的需求:我同意你將這個文件存在我的本地硬盤上,每存一段時間,你就給我錢,如果你不付錢,我就希望把這個文件刪了把空間騰出來給其它愿意付費的文件。
這樣的計費模型實際上是很復雜的,如果再加上文件本身的分塊操作,情況會變成存儲需求人愿意付款的前提是所有的存儲提供者都正確地返回了所要求存儲的文件塊,想象一下 100 個塊只返回了 99 個塊的情況,因為這 100 個塊的存儲服務來源于完全不同的經濟實體,達成這個共識的復雜度真不是程序能夠輕易完成的,一個簡單的規則是能完成分配,但勢必傷害到其中某一方,然后造成這一方的離開。當雙方需求都是合理的情況下,傷害任一方都不合理。
用戶畫像的缺失也是去中心化存儲的問題之一
這個就不展開講了,簡單說個結論,是這些去中心化存儲方案根本沒說清楚或者說沒去想誰會用他的去中心化存儲。
隨便拋轉,還是希望拋磚引玉,大家給點指正,幫我理解清楚一下這繁雜的方案背后的東西。
來自:
https://ethfans.org/posts/decentralized-storage-will-fail