為了研究其中一些說法,我們必須定義什麼是區塊鏈,而這正是其中許多困惑的來源。許多公司使用“區塊鏈”一詞來描述某種神奇的裝置,透過這些裝置,他們的所有資料都不會出錯。當然,至少在現實中,這種傳說中的裝置是不存在的。
那麼什麼是區塊鏈?從技術上講,區塊鏈是區塊的鏈條,而區塊是一組有序交易。如果你不瞭解最後一句話,可以將區塊鏈視為資料庫裡的子集,並具有一些其他屬性。
區分割槽塊鏈和普通資料庫的主要關鍵點是,關於如何將資料放入資料庫有特定的規則。也就是說,它不能與資料庫中已有的其他資料衝突(一致性),只能追加(不可變性),資料本身被鎖定為所有者(可擁有),可複製且可用。最後,每個人都同意在沒有中央參與者(去中心化)的情況下處理資料庫中事物的狀態(規則)。
最後一點確實是區塊鏈的聖盃。去中心化非常具有吸引力,因為它意味著沒有單點故障。也就是說,沒有任何一個權威機構能夠拿走您的資產或更改“歷史記錄”以滿足他們的需求。您無需信任任何人,這條不變的審計線索就是所有使用該技術的人都在尋找的好處。然而,這種好處需要付出巨大的代價。
區塊鏈的成本代價
不受任何一方控制的不可變的審計跟蹤無疑是有用的,但是建立這樣一個系統要付出很多成本。讓我們研究一些問題。
建立一個更嚴謹,不可篡改的,可證明一致性的系統並非易事。一個小錯誤可能會破壞整個資料庫或導致某些資料庫與其他資料庫不同。當然,已損壞或拆分的資料庫不再具有任何一致性保證。此外,所有此類系統必須從一開始就進行設計以保持一致。區塊鏈無法做到“快速確認並解決問題”。如果你破壞事物,則會失去一致性,並且區塊鏈將變得毫無價值。
您可能在想,為什麼不能只修復資料庫或重新開始並繼續前進?在中心化的系統中這樣做很容易,但是在去中心化的系統中則很難。你需要達成共識或系統中所有參與者的同意才能更改資料庫。區塊鏈必須是不受單個實體(去中心化,還記得嗎?)控制的公共資源,否則整個工作是建立緩慢的集中式資料庫的一種非常昂貴的方法。
激勵結構難以設計
新增正確的激勵結構並確保系統中的所有參與者都不能濫用或破壞資料庫也是一個重要的考慮因素。區塊鏈可能是一致的,但是如果其中有很多瑣碎無用的資料,那麼區塊鏈就不會很有用,因為將資料放入其中的成本非常低。如果幾乎沒有資料,那麼一致的區塊鏈也沒有用,因為將資料放入其中的成本非常高。
是什麼賦予資料確定性?您如何確保獎勵與網路目標保持一致?為什麼節點在發生衝突時會保留或更新資料,又為何使它們選擇一個資料而不是另一個呢?這些都是激勵性問題,需要良好的答案,並且不僅需要在開始時而且在未來隨著技術和公司的變化而協調一致,否則區塊鏈將無用。
再次,您可能想知道為什麼您不能“解決”一些壞的動機。再一次,在中心化的系統中這很容易,但是在分散式系統中,您根本無法在沒有共識的情況下進行任何更改。除非所有人都同意,否則任何事情都無法“修復”。
維護區塊鏈系統非常昂貴
傳統的集中式資料庫只需寫入一次。區塊鏈需要被寫入數千次。傳統的集中式資料庫只需要檢查一次資料。區塊鏈需要檢查資料數千次。傳統的集中式資料庫只需傳輸一次資料即可儲存。區塊鏈需要傳輸資料數千次。
維護區塊鏈的成本要高出幾個數量級,而且成本需要透過效用來證明。大多數應用程式在尋找前面提到的某些屬性(如一致性和可靠性)時,可以透過完整性檢查,收據和備份來以更低的價格獲得這些東西。
使用者是主權控制者
由於公司不希望將使用者資料放在首位,因此這確實非常好。但是,如果使用者“行為不當”,這可能很糟糕。沒有辦法用瑣碎的資料來阻止使用者向你的區塊鏈傳送垃圾郵件,或者想辦法以某種方式獲利,從而給其他使用者帶來很多不便。這與上述觀點有關,即激勵結構必須設計得非常好,特別是如果發現漏洞的使用者不太可能放棄,尤其是在為使用者帶來利益的情況下。
你可能會認為可以拒絕對惡意使用者的服務,這在集中式服務中非常容易做到。但是,與集中式服務不同,拒絕服務很困難,因為沒有一個實體有權將任何人趕出去。區塊鏈必須公正並執行軟體定義的規則。如果規則不足以阻止不良行為,那麼您就不走運了。這裡沒有法律的“精神”。你只需要與惡意或行為不端的行為者打交道,可能就需要很長時間。
所有版本升級均為自願
強制升級不是區塊鏈系統的選擇。網路上的其他廣播者沒有義務更改你的軟體。如果他們這樣做的話,將這樣的系統構建為中心化系統將更加容易,快捷和便宜。區塊鏈的要點是,它不受單個實體的控制,並且強制升級違反了這一規則。
相反,所有升級都必須向後相容。這顯然是相當困難的,特別是如果您想新增新功能,並且從測試角度考慮時甚至更加困難。該軟體的每個版本都在測試矩陣中增加了很多內容,並延長了釋出時間。
同樣,如果這是一箇中心化系統,則不再維修舊系統將很容易糾正它。但是在分散式系統中,你無法執行此操作,因為你不能強迫任何人執行任何操作。
擴容真的很難
最後,擴容區塊鏈系統比傳統中心化式系統難至少大幾個數量級。原因很明顯。相同的資料必須存在於數百或數千個位置中,而不是單個位置。傳輸,驗證和儲存的開銷是巨大的,因為資料庫的每個副本都必須支付這些費用,而不是在傳統的集中式資料庫中一次支付這些費用。
當然,您可以透過減少節點數來減輕負擔。但是到那時,為什麼您根本需要一個去中心化的系統?如果擴充套件成本是主要問題,為什麼不僅僅建立一箇中心化的資料庫呢?中心化化要容易得多。
如果您注意到一個主題,那就是分散式系統很難使用,維護成本高,難以升級且難以擴充套件。集中式資料庫比區塊鏈更快,更便宜,更易於維護和升級。那麼,為什麼人們繼續使用“區塊鏈”一詞來解決所有問題呢?
大多數行業都不是這樣。大多數行業需要新功能或升級,並且需要根據需要自由更改和擴充套件。鑑於區塊鏈難以升級,難以更改且難以擴充套件,大多數行業對區塊鏈的使用並不多。
但我們發現的只有一個東西例外——金錢。
與大多數工業用例不同,如果不進行改變,錢會變得更好。不可變性和更改規則的困難對金錢是有利的,而不是不利的。這就是為什麼就比特幣而言,區塊鏈是完成這項工作的正確工具的原因。
顯而易見的是,許多希望使用區塊鏈的公司實際上根本就不需要區塊鏈,而是將IT升級到其特定行業。一切都很好,但是使用“區塊鏈”一詞到那裡是不誠實的,並且超出他們能力。
結論
如今,區塊鏈是一個流行的名詞,不幸的是,這種“想要區塊鏈而非比特幣”的思維模式並不會消失。如果您是中心化的服務,則區塊鏈無法為您提供任何您無法使用集中式資料庫便宜一千倍的東西。如果您是去中心化服務,那麼你可能會自欺欺人,而不考慮系統中存在的單點故障。真正的去中心化服務根本不會有“你”。
早在2000年代初期,技術行業的許多高管就開始推動使用Java和XML。儘管這兩種語言是工具,而不是實際產品,但無論他們的工程師想要達到的目標多麼糟糕,許多高管仍堅持使用它們。區塊鏈非常像當時的那種情況。專注於你要解決的問題,這些工具將使自己變得顯而易見。專注於您要使用的工具,最終您將製造出效能不佳的Rube Goldberg機器。
從某種意義上說,當前的區塊鏈概念正在試圖做不可能的事情。他們希望在中心化系統的控制下實現分散式系統的安全性。慾望是兩全其美的,但他們最終得到的卻是兩敗俱傷的。透過集中式系統的模式,你會得到分散式系統的成本和困難。
大量使用區塊鏈作為流行語來出售大量無用的毒藥。我們擺脫炒作的速度越快,長期的發展就越好。
作者 jimmy song 比特幣核心開發者 編譯cybtc