Blockchain DB,區塊鏈資料庫
作者 | 譚磊
責編 | 仲培藝
區塊鏈是互聯網未來十年中舉足輕重的技術
區塊鏈(Blockchain),或者說分布式賬本(DLT, Distributed Ledger Technology)最早是起源於比特幣的一個重要概念,其本質上是一個去中心化的資料庫。區塊鏈系統能夠大幅度降低成本,減少風險和管理成本,提升流動性,增加創新產品和服務的機會。可以說,和大數據、雲計算、人工智慧一樣,區塊鏈是未來十年中舉足輕重的技術。
從筆者的角度來看,區塊鏈在未來最大的價值並不是在虛擬貨幣這個領域,而是用以取代原先需要中間人和第三方驗證的系統中,以對於數字系統的信任來取代對於人的信任的領域。
《程序員》已經多次講述過區塊鏈領域的概念,在此不復贅言。
區塊鏈系統和CAP、ACID和BASE
為什麼我們說區塊鏈系統其實是一個分布式資料庫系統?
ACID
傳統的資料庫都滿足ACID原則。我們首先來看一個「事務」(transaction)的概念。事務是一個操作序列,是一個不可分割的基本工作單位。在一個傳統的資料庫管理系統(DBMS)中,事務應該具有四個特性:
原子性(Atomicity)
一致性(Consistency)
隔離性(Isolation)
持久性(Durability)
取這四個英文單詞的首字母縮寫,我們得到的是ACID。
原子性指事務是一個不可分割的最基本工作單位,事務中的操作要麼都執行,要麼都不執行;一致性是指資料庫的完整性約束不會被任何事務的發生破壞,也就是說資料庫的事務不能破壞數據的完整性;隔離性是說多個事務並發訪問時,事務之間是被隔離開的,一個事務不應該影響其他事務的運行效果;持久性則意味著在事務完成以後,該事務所對資料庫做的更改便被永久保存在資料庫之中,即使系統本身發生了事故也不會更改。
從ACID的四個特性來看,我們發現其實比特幣區塊鏈系統幾乎具有這些特點:
一個區塊要麼被全部記錄進入區塊鏈,要麼不被認可,不可能有中間狀態;
一個區塊在加入區塊鏈之後,原本區塊鏈的系統依然保持完整性;
每次只有一個區塊可以被加入到區塊鏈中,所以隔離性是當然的;
而在區塊被寫入鏈條之後,新的區塊鏈會被複制到所有的區塊鏈節點上,被永久保存。
在區塊鏈系統上有一個特殊情況,如果兩個不同的節點差不多同時申請挖幣的獎勵,那麼它們中會有一個節點計算出的區塊在最終會被拋棄,因而ACID特性中的D(持久性)其實是不滿足的。
BASE
因為區塊鏈節點處於地球各處,而這些節點又是由不同用戶維護的,所以其實我們並不能保證每次訪問區塊鏈的系統時都能獲取到數據,而這恰恰又對應了互聯網時代分布式數據系統的一個特性,可以稱之為為BASE。BASE是一個很怪異的詞語的縮寫:Basically Available,Soft-state,Eventual Consistency(基本上是可訪問的、軟狀態、最終一致性)。
在BASE理念中,基本可用是指系統在出現不可預知的故障時,允許損失部分可用性;軟狀態是指允許系統中的數據存在中間狀態,不過該中間狀態的存在並不會影響系統的整體可用性;最終一致性指的是所有的數據副本,在經過一段時間的同步之後,最終都能夠達到一致。
和ACID概念的強一致性相比,BASE理念面向的是可擴展的分布式系統,BASE通過犧牲強一致性來獲得可用性,並允許數據在一段時間內是不一致的。不過兩者的共同點是最終會達到一致狀態。我們可以認為區塊鏈系統符合分布式數據系統的BASE理念。
CAP
我們再來看區塊鏈系統和分布式數據系統上的CAP理論之間的關係。在分布式數據系統中,有三種重要的屬性,分別是:
一致性(Consistency):數據一致性,任何一個讀操作總是能讀取到之前完成的寫操作結果,也就是在分布式環境中,多點的數據是一致的。
可用性(Availability):好的響應性能,每一個操作總是能夠在確定的時間內返回,也就是系統隨時都是可用的。
分區容忍性(Tolerance of network Partition):可靠性,在出現網路分區(比如斷網)的情況下,分離的系統也能正常運行。
CAP原理解釋了關於這三種屬性的關係。CAP原理的意思是:一個分布式系統不能同時滿足一致性、可用性和分區容錯性這三個需求,最多只能同時滿足兩個。CAP原理是由美Berkerly的Brewer教授提出。
圖1 CAP原理的示意圖
如圖1所示,CAP原理指出一致性、可用性、分區容忍性不可三者兼顧。因此在進行分布式架構設計時,必須做出取捨。而對於分布式數據系統,分區容忍性是基本要求,否則就失去了價值。因此設計分布式數據系統,就是在一致性和可用性之間取一個平衡。
犧牲一致性而換取高可用性,也是大多數分布式資料庫產品的方向。
筆者在比特幣區塊鏈系統中看到了「一致性」被犧牲的情況。當一個新的區塊被部分節點接受時,如果用戶訪問的是還沒有更新的節點,那麼用戶獲取的數據是不一致的,所以從分布式數據系統的角度來看,比特幣區塊鏈系統其實是一個AP系統,也就是說,它保持了可用性和分區容忍性,不過放棄了一致性。
區塊鏈有哪些特性
在區塊鏈進入大家的視野之前,分布式數據系統也一直是學術界關注的一個方向。不過在區塊鏈概念出現之後,大家發現原來分布式系統還可以有新的處理方式。
基於區塊鏈的數據系統特徵
去中心化或者多中心化(Distributed or Decentralized)
區塊鏈最大的特性就是使用分布式計算和存儲,從而減少甚至消除中心化的硬體或管理機構。在區塊鏈上,任意節點的權利和義務都是均等的,系統中的數據塊由整個系統中具有維護功能的節點來共同維護。
開放性(Open)
系統是開放的,除了交易各方的私有信息被加密外,區塊鏈的數據對所有人公開,任何(有許可權的)人都可以通過公開的介面查詢區塊鏈數據和開發相關應用,因此整個系統信息高度透明。
自治性(Autonomous)
區塊鏈採用基於協商一致的規範和協議(比如一套公開透明的演算法)使得整個系統中的所有節點能夠在去信任的環境自由安全地交換數據,使得對「人」的信任改成了對機器的信任,任何人為的干預都不起作用。
信息不可篡改(Untemperable)
一旦信息經過驗證並添加至區塊鏈,就會永久存儲起來,單個節點上對資料庫的修改是無效的,因此區塊鏈的數據穩定性和可靠性極高。
匿名性(Anonymous)
由於節點之間的交換遵循固定的演算法,其數據交互是無需信任的(區塊鏈中的程序規則會自行判斷活動是否有效),因此交易對手無須通過公開身份的方式讓對方對自己產生信任。
區塊鏈的核心在於數據
區塊鏈和大數據是兩個在過去幾年中都得到飛速發展的技術。2016年第46屆世界經濟論壇達沃斯年會論壇的主題為「掌控第四次工業革命」,包括人工智慧、無人駕駛、區塊鏈、量子計算等在內的科技前沿領域在會議中被反覆提及。
目前區塊鏈能夠承載的信息數量是有限的,離我們要用「大數據」的標準來衡量的地步還差得很遠,不過千里之行始於足下,要一步一步地來。
如果要讓區塊鏈承載大數據,那麼目前筆者所看到的這些區塊鏈系統都還不具備這個能力。
我們來看區塊鏈系統三個和大數據有矛盾、需要改進的特點:
分布式的
有隱私的
安全的
區塊鏈系統是分布式的,而大數據講究的是可規模化的、可量化的數據;區塊鏈系統是匿名的、有隱私的,而大數據在意的是個性化;區塊鏈系統是安全的,信息是相對獨立的,而大數據在意的是信息的整合分析。
區塊鏈系統本身就是一個資料庫,而我們所說的大數據指的是對數據的深度分析和挖掘,也就是說,數據分析和數據挖掘需要構建在區塊鏈系統之上,把數據的價值發揮出來。
如果要做到以數據為基礎來做決策,那麼區塊鏈的大數據化是區塊鏈系統必須要完成的一個步驟。
區塊鏈系統的局限性和門檻
微軟亞洲研究院系統演算法組首席研究員Thomas Moscibroda在2017首屆科技金融國際峰會上提到了區塊鏈的效率和隱私問題。在區塊鏈中,每一個人都在分享自己的數據,而且每一個交易記錄都需要被所有人核實、記錄和存儲。一方面,這個過程會使區塊鏈對傳統資料庫而言更慢。另一方面,區塊鏈雙方的交易過程中第三方必須知曉,且會去核實這個交易的合法性和正當性,而每一個人都能知道交易雙方的中間數據,這也帶來了隱私問題。
String Labs聯合創始人Tom Ding認為區塊鏈技術其實是一項有相當門檻的技術,在整個世界上可能也只有為數不多的團隊有能力開發底層區塊鏈系統。
Alphabet的DeepMind Health部門已經宣布計劃使用一種與分布式賬本一樣的系統來監視目前正在被使用的患者數據。他們的工具命名為Verifiable Date Audit(VDA)。Alphabet聲稱VDA並不是區塊鏈,而是類區塊鏈。VDA借鑒了很多來自比特幣區塊鏈的功能,包括不可更改性。同時還提供某種程度的透明度,所以第三方機構可以驗證這些數據。
R3的技術主管Richard Brown針對他們的產品Corda是這樣評述的:「Corda是一個分布式賬本平台,它很大程度上受到並吸取了區塊鏈系統的優勢,去掉了很多不適用於銀行業場景的區塊鏈設計。」
筆者和包括Thomas在內的一些專家做過深入探討,我們的共同觀點是從架構上來看,在未來的3年甚至更長的時間內,包括比特幣和以太坊區塊鏈在內的主流區塊鏈系統都無法有效提升技術應用到有高頻數據錄入需求的場景上。當然,如果一個區塊鏈系統未來的場景在有足夠大的用戶和數據量的情況下每秒的交易量也不會到達千這個數量級的話,還有實現的可能。
基於區塊鏈思想的區塊鏈資料庫
筆者一直堅持的觀點是不以實際應用為目的的技術都是耍流氓,那麼如何讓區塊鏈系統真正商用化?受到微軟和Google各位同學的啟發,我們認為如果要真正商用化區塊鏈系統,唯一的出路就是區塊鏈資料庫(Blockchain DataBase)。
我們在設計的區塊鏈資料庫兼有區塊鏈系統和資料庫系統兩個系統的優勢。
正如筆者在前面說過,區塊鏈系統是符合BASE理念的,不過並不滿足ACID。所以我們可以選擇一個不滿足ACID,而符合BASE理念的資料庫來做底層數據架構。對於了解資料庫系統的同學而言,可以選擇的資料庫底層架構已經呼之欲出了。
而與傳統的資料庫系統相比,區塊鏈資料庫將能夠擁有原先系統所不具備的特性,也就是筆者在前文中所講述的區塊鏈系統的各種特性。
區塊鏈資料庫中的數據
比特幣區塊鏈的可擴展性是一個大問題。如果不提升數據塊的大小,整體的交易量則無法提升,而如果提升了數據塊的大小,因為每個客戶端的節點都會有資料庫的完整拷貝,數據存儲會是一個非常頭疼的事情。
不同於傳統的區塊鏈系統,區塊鏈資料庫將會擁有資料庫系統的可擴展性和性能:
數據可以超過1TB,甚至到達PB的數量級
並發寫入的數量級可以達到10-30萬筆/秒
單條事務數據沒有上限
區塊鏈資料庫的共識模塊
區塊鏈資料庫中共識模塊的作用是讓系統中所有的數據節點都能夠保持一致。如果一個節點的區塊鏈上添加了一條新的交易,那麼資料庫中所有其他節點也會把同一個交易加入到各自的區塊鏈上。
共識模塊的關鍵點就在於保持整個系統中所有交易順序的一致性。
共識演算法在以太坊和比特幣區塊鏈中的達成是通過工作量證明(POW)或者權益證明(POS),而IBM Hyperledger和其他一些想要提升效率的區塊鏈系統採用的是PBFT(Practical Byzantine Fault Tolerance)協議。後者的效率會高很多,不過網路傳輸的數據會根據節點數的上升而成倍增加。
區塊鏈資料庫中,我們會採用Paxos共識演算法。
筆者認為在未來三年內,真正可以商用的區塊鏈系統,其底層都會是類似區塊鏈資料庫這樣的數據系統。
※實習申請被Apple Music拒了之後,我重新設計它
※閱文集團帥翔:從0到1落地分布式存儲系統架構
※無人駕駛的決策規劃控制技術
※如何撰寫一篇受人歡迎的博客
TAG:CSDN |
※TiesNetwork宣布新的區塊鏈資料庫產品將於4月發布
※IBM公司申請「區塊鏈資料庫管理系統「專利,意圖解決數據一致性問題
※區塊鏈資料庫與現有資料庫系統之比較
※區塊鏈資料庫是什麼?與傳統資料庫有什麼區別?
※優鏈資料庫初次面見投資者
※抱歉!區塊鏈資料庫並不安全
※土耳其國家支持的證券交易所宣布開發區塊鏈資料庫平台
※俄羅斯將創建區塊鏈資料庫,助力吉爾吉斯斯坦實現專利記錄電子化
※這份價值過萬的區塊鏈資料就任性分享給大家了!快來領取吧!