清華教授徐葳:如何真實提升聯盟鏈的效能?
今日(11月28日),在由Odaily星球日報主辦的新區勢區塊鏈峰會上,徐葳教授帶來了以《區塊鏈與資料融合技術的一些探索》為主題的演講。徐葳教授畢業於賓夕法尼亞大學,後在加州伯克利攻讀碩博,現在清華大學交叉資訊研究院擔任博導,主要研究方向是大資料、人工智慧、金融科技。
以下為徐葳教授的演講內容精編,由巴位元整理。
我過去是做分散式系統的,特別早的時候做了P2P,然後我就對這個東西失望了,所以我是非常典型的反去中心化的思想,我們是一個學術單位,希望能在區塊鏈一些模組的核心技術方面尋找突破。
區塊鏈為什麼有趣?它確實是集電腦科學之大成。包括分散式系統的可靠性和一致性技術、密碼學理論、博弈論和機制設計、P2P網路、大資料等等。同樣因為它集成了這麼多技術,所以很難找到一個人,或者一個研究組把它們統統搞懂。好在區塊鏈大部分是開源的,我們就想大家可以單點突破,做一些科研嘗試,最後把這些東西集合起來。為此,我們主要專注於兩件事,一是提升區塊鏈(聯盟鏈)的效能,二是保護隱私的資料融合。
一、如何提升區塊鏈的效能?
我們要做的事情首先是提升區塊鏈的效能,我這裡指的是聯盟鏈,暫時不考慮公鏈那種比較複雜的情況。現在很多鏈說自己效能很高,但其實是因為它有多個分割槽,這是另一回事,我們重點做的事提升單個分割槽(partition)的效能。
Gosig的基本目標
我們做了一個系統,叫Gosig,這個系統是基於PBFT的,這是一個非常經典的共識協議,它的優點是在叢集裡即時產生共識,不想比特幣的POW機制需要幾個區塊後才能共識,因此PBFT的效能比較高。當然相對應的它的安全性不如POW,因為它只能防範小於1/3的節點作惡,壞人可以控制整個網路,任意造成網路分割,但是在聯盟鏈裡一般不會存在說我今天想攻擊誰就攻擊誰,而是說我來領導這一輪吧,要是不行這個塊就空了。
我們希望既能滿足PBFT的所有假設,但是把它的協議擴充套件到一個很大的範圍。壞人可以任意瞬時殺掉一些節點,只要仍滿足f<N/3。另外其他的聯盟鏈節點數量一多,效能就不行了,我們希望可以提升它的可擴充套件性,支援廣域網,這是我們設計時的一個基本目標。
Gosig的設計思路
我們基本沒有改動PBFT,只是簡化了正確性證明。因為分散式系統是個很複雜、很專業的領域,不是拍腦袋就能想出來的。那怎麼讓它的效率變高呢?原先是要進行多輪投票,而且每個人都要把訊息廣播給所有人,這種方式聽起來就很慢。我們是用Gossip協議邊傳輸資料邊投票,具體怎麼實施呢?就是我把訊息發出去,不會等別人回覆的,通過聚合簽名來避免投票中的雙向通訊,每一輪隨機的祕密選出leader,避免針對leader的攻擊,所以在生成新的leader之前,我不會知道它是誰。它是一個協議層和網路層的共同優化,我要把所有的操作全部流水線化,充分利用所有的計算和網路資源(PBFT+BitTorrent),任何人在任何時間都有事做,把網路填的滿滿的。
Gosig的效能實現
我們測試的效能,如果用280個節點,在14個不同的資料中心裡面,在廣域網環境中,就是它是跨全球的,資料中心的那個延遲性還是蠻高的。在這樣一個環境下,我可以實現60MB的block,可以承載單個分割槽每秒15000筆交易,確認一個塊的時間是16秒。
後來我們又找了1000個節點,模擬5000個節點,限制在20Mbps的頻寬下,在全網共識下,能達到每秒3000筆交易,確認出塊時間是24秒。然後你再觀察一下的話,會發現所有的網路頻寬全部用上了,平均頻寬使用達到16.8Mbps,也就是說物理網路頻寬說唯一的瓶頸了,它的物理極限就這麼多了。當然我還可以把頻寬再加一些,效能會更高。
這樣極致的效能有什麼好處?天下武功唯快不破,你只有把下層做得足夠快,上層應用才能做,這是我做系統設計的一個理念。
二、如何在保護隱私的前提下做資料融合?
上述是我們在底層做的一些探索,上面應用層呢,很多人說區塊鏈能促進資料融合,怎麼做得呢?就是讓每個人都copy了一份,這當然就資料融合了,但隱私問題怎麼考慮呢?
隱私問題不見得需要區塊鏈,但區塊鏈是一個去中心化的方案,可以作為資料交易的媒介。在資料交易中,買方只想買特定應用的使用權,他們只想用這個資料,而不需要把資料全都買過來,但是對於賣方而言,他把資料給了你,誰知道你會怎麼用呢?他們的感知是,交易的原始資料就是交易資料的所有權。
所以我們要做的是,通過加密演算法和系統限制資料的使用,就是說這個資料分享出來後只能這麼用,沒有其他的用途,本著這樣一個理念,就需要我們系統的任何部分均看不到原始資料,或者中間過程明文,而只能看到明文的結果。這是一個安全協議,是我們院長姚期智院士80年代提出來的,但是這些年一直沒有一個好的程式設計模型。你怎麼把它變成一個通用的,能夠搭載演算法的框架?
我們對此做了很多探索。另外這裡面有無數種加密方法,如何選擇效率更高的演算法呢?我們經過研究,可以做得非常快,也非常通用,可以直接用python寫,容易程式設計,就和平時寫程式差不多,最終可以在不看到處理過程的情況下算出最後那個結果來。我們可以優化到一個神經網路模型用毫秒就能識別出來,同時支援基於加密的資料隱私和基於統計的差分隱私。
我們現在做了幾個應用場景,第一個應用是個人信用歷史的查詢和整合。比如查“徐葳借了多少錢”,這裡面有兩點,一是不能讓別人知道你查的是“徐葳”,這樣的話別人就知道“徐葳可能在找你借錢”,客戶就有可能被別人搶了。二是不能讓你知道“徐葳在哪裡借錢”,只能得到他借了多少錢的結果。
第二個應用是一個數據融合建模平臺,這是一個醫藥的試用。就是一些藥廠在測試一些藥的作用,它不想告訴別人具體在測什麼,因為這是他的智慧財產權,但是我們又想得到一個模型預測哪些藥對哪些病有作用,所以我們就整合市場的資料,而沒有洩漏每一方資料的情況下,整合在一起做預測。那麼如果你整合的資料越多,預測演算法的準確度也越高。所以說資料是有意義的,如果保證了每個人的資料沒有洩漏,資料交易就不會發生,可以從密碼的方案來實現。
三、一點思考:公鏈為什麼這麼難?
世界上有很多人在研究不同的模組。他們共同幫助區塊鏈構成一個完整的體系。區塊鏈是一個技術集大成者。我這裡有一個思考,為什麼公鏈很難設計?
因為傳統系統設計理念是分模組的,機制(mechanism)和策略(policy)是分開的。我想寫一個檔案,怎麼把檔案寫進去?為什麼要寫這個檔案?這兩件事是分開的。policy更多的是根據特定應用優化效能,mechanism就是我要把它做得更快、更可靠、更安全。在傳統系統中這兩個架構是分開做的,但是在公鏈系統中,這兩部分是分不開的,因為你的效能、網路狀態、共識機制跟你的系統有多安全,能不能達成共識,跟你的策略,以及獎勵都是有關係的,所以它的policy和mechanism是混雜在一起的。
失去了傳統的設計和開發的方法論,如何開發?團隊如何設計?我們需要多少個天才程式設計師才能設計出一個完整的系統?把剛剛所說的這些結合在一起,反正我是想不明白。
最後,我想引用一段話:“有兩種方法來構建一個軟體,一種是設計的非常簡單,所以它明顯沒有缺陷;另一種是讓設計變得超級複雜,所以它沒有明顯的缺陷,前一種方案遠比第二種難。”我覺得對於大家想設計一個巨複雜的區塊鏈平臺來說,這句話值得大家回味。