1. 程式人生 > >從架構角度來談區塊鏈的十年發展歷程

從架構角度來談區塊鏈的十年發展歷程

以比特幣為旗幟的區塊鏈技術轉眼間已經走過十年了,人們常感慨“十年一代人”,對於現在這個三年就會有代溝的快速發展時代,十年似乎已經很久了。我接觸區塊鏈大概一年時間,據說在這個領域三年就是資深或者專家了,可見,這個領域儘管有十年曆史,卻還差些積累,同樣十年左右歷程的雲端計算,目前已經是“鋪天蓋地”了。雖然有諸多不盡人意,但我依然覺得這是個有趣、有想象力的領域,所以,我把自己通過這一年學習得來的對區塊鏈的粗淺認識整理出來與大家一起討論討論。我是個業務架構設計人員,所以,我對區塊鏈的理解比較偏重“業務”和“架構”。

一、我所認識的比特幣

作為開山鼻祖,比特幣是所有接觸區塊鏈的人一定要了解的,尤其是技術人員。不去了解比特幣、以太坊,也就不會給技術插上想象力的翅膀,那樣還不如直接研究分散式系統更實際。我個人對比特幣的設計思路總結如下:

按照中本聰自己在白皮書中的說法,他單純是在設計一個點對點的電子現金交易系統,為此需要確保交易安全和資金安全,要確保不能“雙花”、不能“亂花”。通過 UTXO 模型和區塊鏈的技術保證不會出現“雙花”,也使歷史記錄的可信性獲得提高;通過非對稱加密確保你的“錢”只能自己花,不會被別人花掉。通過工作量證明保證賬本唯一性,再通過經濟手段“制約”算力強人不去作惡。這方面的討論很多了,本文也不贅述。反覆讀白皮書,感受最深的其實是對專一目標的極客追求和架構設計上的平衡,中本聰只想實現一個點對點的電子現金交易系統,為了安全,他選擇做出效率的犧牲,所以,據說 BM 要提高交易效率時,他批評 BM 不懂比特幣。

設計上,中本聰沒打算支援他這個系統目標以外的任何應用,也即,不提供更多的可擴充套件餘地,因為這一方面會引入對電子現金系統而言既不必要又可能致命的各種“缺陷”,又會破壞比特幣高度精簡的資料結構,比特幣為了應對其對儲存的壓力,幾乎把資料需求壓縮到最低。越簡單越安全,而這個對電子現金系統,特別是一個期望無人維護、自動執行的電子現金系統來講,恰恰是可靠性、安全性和公信力的基礎。後邊有不少嘗試對比特幣進行的改造、擴充套件都以失敗告終,其實也說明了設計上的剛性。如果不能很好理解比特幣設計的初衷和它加給自己的侷限,去任意拓展想象力,結果恐怕不會太好。設計目標和約束會決定系統的特點與適用範圍,如果擴大適用範圍,也必須對目標和約束進行修改。以太坊就是這麼幹的。

二、我所認識的以太坊

以太坊是 V 神 2013 年推出的,與中本聰不同的是,他是這個領域可以見到真身的“大神”。以太坊其實也挺複雜的,不過從我這個業務架構人員的視角來看,我覺得以太坊的整體邏輯如下:

過於簡單了?也許吧。V 神在以太坊白皮書中詳細剖析了比特幣設計,提出了四個主要不足:不支援圖靈完備、狀態少、區塊盲、價值盲。我技術道行不深,所以,覺得後兩個不是什麼大問題。前兩個則與設計目標和約束有關,中本聰只想做一個點對點的電子現金系統,沒想支援其他應用,那麼圖靈完備、更多的狀態對他而言就沒什麼意義,“現金”不是在你兜裡就是在我兜裡,本來也不需要那麼多狀態。V 神想做的就沒這麼簡單了,據說他跟初始團隊共同想出了“世界計算機”這個概念,圖靈完備和狀態擴充套件對於他而言就是必備的。他希望以太坊能在比特幣這種“去信任”機制上發展出更多的應用,包括分散式自治組織(DAO)。

所以,比特幣白皮書沒怎麼談應用,因為它的系統目標很單一,甚至明確說有些東西就該依靠鏈下處理;以太坊的白皮書上就講了很多應用,因為它希望構造一個“新世界”,這個想法 V 神在接受過採訪中也多次表達過。就共識邏輯而言,比特幣只是確認簽名和一筆交易在歷史上存在且沒有被其用於其他交易;以太坊就複雜了,它要確認一段程式碼邏輯的執行結果,也繼承了比特幣的共識思路,就是人手一本賬、人人都驗證,這就使程式碼邏輯不能太過複雜,否則會有節點執行不了,效率太低也會影響共識的達成。比特幣雖然效率低,但是系統用途單一,習慣了也就忍了;以太坊給大家插上了翅膀,但是卻實實在在地感覺到“地心引力”太大,開玩笑地講,以太坊其實比比特幣“折磨”人。V 神的設計依然是劃時代的,很有突破性,對比特幣設計目標的修改也很明確,這是做區塊鏈技術研究和設計的人必須認真學習的。

三、我所認識的聯盟鏈

我覺得聯盟鏈是對公鏈的“反思”,所以搞了很多約束上的調整,而且五花八門,怎麼想的都有。從高階理念的角度,聯盟鏈的誕生實際上也是對社會現實的反映,對此,我總結了一張圖:

社會環境已經從具有較強依附關係的中心化輻射狀生態結構逐漸演進至平臺化、多中心、自由協作的網狀體系,尤其是在企業端,根據康威定律,設計物件的組織結構會對映到其系統結構,所以,符合多中心網狀生態特點的系統架構必然會應運而生。傳統的分散式系統其誕生目的主要是為了提升系統性能,而區塊鏈系統則更多考慮瞭如何幫助使用者平等參與網路,這應該是二者在設計理念上的核心差別,因此,區塊鏈系統比傳統的分散式系統更適於多方共贏生態環境的構建。這個是看起來有點兒“務虛”,但是也有其道理的聯盟鏈的價值。公鏈的問題在於,如果現階段應用,顯然不符合企業端生態的實際情況,企業端的生態環境即便你一開始沒設計中心也會自然產生中心,這是人的社會性決定的,所以也不要那麼排斥所謂的“中心化”,鏡子中照出來的無論好不好看都是你自己,化妝不解決本質問題。

聯盟鏈既然面向企業,自然會把提升效率放到一個很高的優先順序上,於是有了一些假定上的放鬆,比如,節點都是授權加入,實際上注入了信任;有了信任,共識方面可以放鬆,都回到了傳統分散式系統的路線上;再基於信任,出塊速度可達到秒級、毫秒級,不擔心中本聰考慮的傳播過快存在的安全問題。放鬆假定上最徹底的是微軟的 Coco,將節點放在基於硬體的可信執行環境中,所以,智慧合約不用每個節點都執行,只執行一次,結果大家信任,共識也採取簡單的跟隨機制,所以它還能處理別的聯盟鏈搞不定的“不確定性計算”。聯盟鏈對公鏈做了很多調整,有的徹底有的不徹底,由於多數聯盟鏈存在節點數量上限,所以,節點在聯盟鏈中通常代表節點自己而非網路參與者,有點“代理”的意思,也算是讓對人的信任轉移到了對機器的信任,但是不同於公鏈這種節點無上限、節點直接代表參與者的結構,這種差別使聯盟鏈在放鬆假定之後反而比公鏈設計、部署更復雜了,有點兒小“尷尬”。

四、我所認識的共識

共識是區塊鏈中炒的很熱的概念,甚至會讓非技術出身的同學覺得“共識”是區塊鏈發明的。我對共識瞭解不多,只是根據資料總結了一個共識的發展路徑或者說學習路徑供大家參考:

共識是高深的數學問題,上圖中除了 POS、DPOS 之外,其他定理、共識都由獲得過圖靈獎或者相當於這個級別的專業數學論文做支撐,所以共識不是靈光乍現的好用就行,沒有數學基礎作支援很難保證其可靠性。嚴格來說 POS、DPOS 才是專門為區塊鏈設計的共識,但是,缺點是沒有縝密的數學論證,儘管以太坊的大神中有很多數學方面的高手。

此外,共識這個詞對業務人員和技術人員來講是有很大區別的,業務上的共識通常指共同遵守的業務規則和一致的結果,而對技術人員來講卻是個與可以與業務幾乎沒有關係的話題。

五、我所認識的區塊鏈架構

回顧了比特幣、以太坊和聯盟鏈之後,我總結了一個我個人視角的區塊鏈一般架構:

我認為廣義區塊鏈的設計主要包括資料層、網路層、共識層、激勵層、智慧合約層,但是實際上,共識層、激勵層、智慧合約層都是可以選的,不是必須要有,每一層中具體機制也可以靈活變化。網路層雖然必選,但是其機制卻是可選的。最不能動的是資料層,這一層的塊鏈式資料結構是鐵打的,但有人會說 Codar 呢?Codar 自己只說是受區塊鏈啟發,從來沒說自己是區塊鏈。

如果用我們常用的軟體架構視角來看,也可以這麼轉換下:

共識其實可以分成業務和資料庫兩部分,前者是業務邏輯的共識也就是智慧合約,後者是記賬權共識也就是資料寫入權。可以比較出區塊鏈系統與一般軟體系統其實主要差別就在於底層資料庫的實現和業務邏輯層關於代幣的設計上。這也是為什麼目前就設計來講,除了涉及虛擬數字貨幣的應用難以用傳統分散式系統替代,而其他型別的區塊鏈設計尤其是聯盟鏈環境下的設計幾乎都可以被替代的原因,替代主要也就是對資料層的替代。

六、我所認識的區塊鏈未來

未來總有些幻影,不是那麼容易去辨別的,技術發展太快,我這種“三腳貓”的功夫也不敢輕易給個時限、下個結論,只能說說方向性的認識。

公鏈技術在效率方面有些很複雜的東西,我說不清楚,分片、L2 層、狀態通道這些會給公鏈進一步賦能的技術或者設計方式,也許可以解決一部分效率問題,但是總體上來講,還不能帶來決定性改變。公鏈解決“信任”問題的方法,多少有些極端,所以“犧牲”了效率的大幅度提升。在這個“瓶頸”改變之前,公鏈的效率可能難有實質性突破。

聯盟鏈方面,前邊提到了小“尷尬”,假定放鬆反倒設計麻煩了,是不是該回頭看看公鏈,找點兒啟示?目前,IBM 最初帶起來的框架之風已經刮成了平臺之風,平臺功能越來越多、越來越重,造成了學習、設計、部署、運維方面的困難,為什麼聯盟鏈不能在注入信任之後,還能兼顧公鏈的易部署性呢?我近期在《新“匯通天下”:用穩定幣實現跨境支付方案》一文中,曾對 Ripple 模式嘗試進行一些改變,Ripple 設計中的簡化部署很值得大家認真思考,如果要做平臺,那就應該把面向業務的功能和麵向賬本的儲存分開考慮,從這個角度講,聯盟鏈中的“鏈”最重要的應該是可信連線,而不是所謂的系統底層;如果想要易於推廣,那就得易於部署;而易於部署的前提就是功能上有所捨棄,畢竟有太多的事兒並不需要區塊鏈去承擔,比如,智慧合約。

最近 V 神發推特表示了對“智慧合約”這一叫法的“遺憾”,很多人也吐槽過智慧合約,那究竟聯盟鏈是否真的需要一個強大的智慧合約?我們玩區塊鏈真的是為了智慧合約?如果說我在區塊鏈上認識不到位、“開倒車”,那就“開倒車”吧,也許下一代技術真的能解決這些問題,但革命勝利前,大家是真的想用區塊鏈做些能夠有較大範圍、有價值影響的設計,去證明區塊鏈的價值,還是繼續這麼彆彆扭扭呢?如果是前者,是不是可以重新理解下公鏈,理解下 Ripple,再看看平臺設計,也許區塊鏈不是用來做平臺的,而是用來讓使用者資訊、核心資訊與平臺分離的,比如,有可能是下邊這樣麼?


使用者之間通過區塊鏈協議共享必要的賬本資訊,基於區塊鏈機制進行身份驗證,解決可信連線,而複雜業務功能都是由平臺功能層負責的,包括連線海量儲存必須的 IDC。這種方式便於在各使用者的本地系統之間形成可信連線,並呼叫強大的平臺功能,但是分離開區塊鏈層和功能層。平臺功能是可信的,對於聯盟鏈而言,既然注入了信任,又不去信任不是浪費嗎?

聯盟鏈的很多設計本就可以被分散式系統替代的,如果談價值的話,我覺得還是從公鏈機制中儲存點對點的連線和互動最重要,這個不是傳統分散式系統的設計方向,讓每個機構真的是自己參與而非“代理”參與,讓區塊鏈真的成為協議而非平臺,也許這個才是聯盟鏈的設計方向。

說到未來,還剩下虛擬數字貨幣這部分,我不是個數字貨幣的投資者,從我這個無“幣”者的角度看,虛擬數字貨幣即便要在西方廣泛流行,也必須依靠與法幣的合法兌換以及價值相對穩定的兌換,這也就真的具備了將資產數字化的能力,絕大多數人都是投資者而非投機者。數字貨幣方面最重要的其實還是法定數字貨幣,只有法定數字貨幣實現了,區塊鏈的全球價值網路之夢才會成真,而上圖的聯盟鍊形態也將獲得更大的價值,所以我才認為,聯盟鏈最重要的是能保持公鏈中的“真”點對點機制和易部署性。

區塊鏈走過了激盪的十年,雖然瞭解其技術的人還不多,在開發者群體中,區塊鏈依然是少數,它的名氣更多還是被比特幣帶起來的,畢竟比特幣創造了人類歷史上資產價格上升速度之最,但是,所有研究區塊鏈、熱衷區塊鏈的人,特別是技術人員,都不希望它停留在這個層面,大家都在技術的現實主義中欣賞著一朵浪漫之花,期待望著它的盛開。

我本人邀約各大BATJ架構大牛共創Java架構師社群群,(群號:673043639)致力於免費提供Java架構行業交流平臺,通過這個平臺讓大家相互學習成長,提高技術,讓自己的水平進階一個檔次,成功通往Java架構技術大牛或架構師發展。

為什麼某些人會一直比你優秀,是因為他本身就很優秀還一直在持續努力變得更優秀,而你是不是還在滿足於現狀內心在竊喜!

合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

希望此文能幫到大家的同時,也聽聽大家的觀點。歡迎留言討論,加關注,分享你的高見!持續更新

  • To-陌霖Java架構

分享網際網路最新文章 關注網際網路最新發展