鏈客,專爲開發者而生,有問必答!數據庫
此文章來自區塊鏈技術社區,未經容許拒絕轉載。
安全
前言:關於區塊鏈適合作什麼和不適合作什麼?一直都有爭議。那麼,經過什麼方式來辨別呢?本文用詳細的流程圖來應對這個問題。本文做者是Mohammed ElSeidy,由「藍狐筆記」社羣的「鑫鑫」翻譯。服務器
圍繞區塊鏈的大肆炒做嚴重誇大了這項新技術的實際能力和應用。這種狂熱使得企業、開發者和投資人難以理解其實際的侷限性並找出適合區塊鏈或者分佈式帳本技術的正確應用場景。網絡
來自ETH Zurich的Karl Wüst和Arthur Gervais最近發佈了一份同行評審論文,它提出了一種結構性的方法,該方法有助於肯定特定應用問題應該如何解決的合理技術方案。本文中,咱們將介紹這種方法並解釋論文中的用到的一些例子。less
技術對比分佈式
不一樣類型的狀態持久化對比性能
區塊鏈是一種持久化(保存)狀態的"僅可添加"的帳本。狀態能夠是交易信息,程序數據,或者哈希過的文檔等等。基本上,就是任何須要持久化存儲的信息。數據庫擔當這項任務已有幾十個年頭。此外,區塊鏈表明瞭一種新的狀態持久化技術——而且包含數字簽名和防篡改在內的額外特性。讓咱們來從新審查一下三種主流技術:區塊鏈
1.數據庫優化
首先,數據庫(單個,並行,或者分佈式)被用於持久化狀態和查詢數據已經有幾十年歷史。大量有價值的研究已經被用於優化不一樣層級的查詢處理和狀態持久化上。spa
• 天然地,在交易吞吐量和查詢延遲方面它們擁有最高的性能。
• 然而,一直以來,它們被設計爲單一機構的中心化管理。所以,不一樣參與方之間不須要共識機制。
2.公鏈(Permissionless Blockchains)
公鏈是不受中心化機構管理的公共帳本(狀態)。也就是說,帳本分佈在一個動態P2P網絡中,網絡中可能還會有惡意的節點。
• 中本聰的智慧在於設計了一種分佈式狀態上維持共識的機制,且是在動態和不可信的網絡中實現的。這意味着公鏈能夠容忍網絡中包含少許拜占庭或不可信行爲。
• 凡事都有代價,須要在性能消耗(吞吐量和延遲)上有所取捨。在比特幣中,急劇的性能降低是因爲POW協議自己的設計就很是慢。和普通數據庫相比,在任何公鏈中,性能的降低都是不可避免的。由於無論怎麼樣,要維護分佈式狀態的一致性,(地理分佈)網絡中的不一樣節點之間就必須進行通訊。
3.聯盟鏈(Permissioned Blockchains)
聯盟鏈表明瞭一種混合式的設計選擇。特別的,他們不是單一的中心化實體,而是受權給一小部分預先選定能夠寫入狀態的可信節點。
• 因爲數據庫網絡不會擴展到大量的公共節點,和公鏈相比,它的吞吐量和延遲要好得多。
• 儘管如此,它的性能仍然沒法跟一箇中心化數據庫相匹敵。
在看完這些不一樣系統以後,咱們很容易認識到沒有一個適用於全部場景的方案。任何事情都須要有所取捨。不一樣的應用有不一樣的需求,所以須要不一樣的合適的解決方案。
"你須要區塊鏈嗎?"流程圖
選擇正確技術方案的流程圖。TTP(Trusted Third Party)表明可信第三方,writer是一個能夠寫入狀態到數據庫或者區塊鏈的實體。
這一節描述了論文中一個通用的高層次流程圖,用於爲你的應用尋找合適的技術。注意writer是一個能夠將狀態寫入數據庫或區塊鏈的實體。
1.若是你的應用不須要持久化狀態,那麼很明顯不須要區塊鏈或者任何數據庫。
2.相似的,若是隻有一個寫入狀態的writer,那麼和常規數據庫相比區塊鏈並不能提供額外的保障。相反,從性能角度來講數據庫可能更加高效。
3.不然,若是有超過一個寫入狀態的writer,咱們選擇另一條路徑。問題變成了是否是有一個在線TTP(可信第三方)就足夠了,或者換句話說,是否須要防篡改。若是應用不能依賴單一可信實體,咱們能夠進一步分析是否須要區塊鏈。不然,不須要用區塊鏈,從性能角度來講依賴一箇中心化實體更加高效。
4.下一個問題是"全部寫入狀態的writer的身份是否可知?"。若是因爲身處不可信的動態網絡於是身份不可知,好比互聯網,那麼公鏈是合適的選擇。
5.不然,若是身份是可知的,那麼下一個問題是"這些writer是否彼此信任?"。若是是,那麼也不須要區塊鏈,使用提供共享寫入權限的數據庫就足夠了。不然,若是writer們不信任彼此,那麼最合適的技術是聯盟鏈。
6.最後,若是是聯盟鏈,取決因而否要求公開可驗證性,容許任何人讀取狀態(公開聯盟鏈)或者只有少部分受限的用戶(私有聯盟鏈)。
應用實例
讓咱們經過一些例子來理解什麼應用確實須要區塊鏈,哪些不須要以及爲何不須要。
不須要區塊鏈的應用
供應鏈管理系統
• 供應鏈管理(SCM):這的確是一類反覆出現的應用。讓咱們按照流程圖來找出最爲匹配的技術。
1.SCM確實須要存儲數據。
2.涉及多個writer,即擁有最終產品的某些部分的不一樣參與方。
3.繼續咱們的方法,SCM在技術上極可能老是使用一個在線TTP。例如,Skuchain認可只須要單一的信任源,然而這就去除了區塊鏈的去中心化成分,所以它等價於一個可信的中心化服務器。
4.若是那樣作不可行,至少全部的writer是可知的,這樣留給咱們的只有聯盟鏈或者不使用區塊鏈這兩個選擇。
5.SCM在數字和物理世界之間的接口存在一致性問題。一般須要人或者某些受單一writer控制的機器來登記到達倉庫的某個商品,若是質量沒有問題的話。若是這些僱員的操做是不可信的,那麼整個供應鏈就是一種技術上的妥協,由於惡意writer能夠提供任意數據。從另外一方面來講,若是全部的writer們都是可信的,那麼就不須要區塊鏈,由於使用一個提供共享寫入權限的常規數據庫便可。
注意若是經過一些技術手段,數字和物理世界之間的鏈接能夠經過一種安全的方式實現,那麼前面的論證可能會發生變化。
• 物聯網:不少人提出了區塊鏈技術在物聯網(IoT)上的可能使用場景,經過智能合約來爲資源的消費和供給的支付提供一個自治系統。因爲系統固有的去中心化特性,實體們彼此互不信任,使用區塊鏈彷佛很天然。
然而,和供應鏈管理同樣,物理和數字世界之間的接口形成了潛在的問題。若是計算機把從傳感器中讀到的數值提供給區塊鏈,區塊鏈沒法保證這些數值的正確性。若是隻是須要自動化,沒有必要使用區塊鏈,能夠用一個可信方來代替。
適合使用區塊鏈的應用
跨行和跨境支付:對於金融應用,通常來講區塊鏈技術很是合適,由於參與方一般都但願規避風險而且不想依賴強信任假設。
1.在跨行支付中包含多方(銀行)擔任的writer及想要交換價值和交易的主體。所以狀態須要被持久化。
2.銀行都是writer,所以有不止一個writer。
3.在單幣種系統中,中央銀行能夠做爲TTP。
4.不然,還有一種配置,中央銀行不想擔任每筆交易的驗證者,只想做爲一個認證受權機構給銀行們發放牌照,讓它們參與到系統中來。這意味着系統的全部writer都是可知的,咱們可使用聯盟鏈。
• 貿易和公平交易協議:相似的,數字商品的交易極可能不須要一個可信的爭端調停者,所以很是適合使用區塊鏈,而物理商品則仍然須要可信第三方來解決爭端。
• 電子投票:相似的,電子投票也具備區塊鏈能夠派上用場的屬性。例如,一方面,隱私是一個主要需求,由於投票必須是匿名的從而避免被脅迫。另外一方面,電子投票須要提供必定的公開可驗證性。因爲有這些需求,使用區塊鏈來幫忙獲取這些渴望獲得的屬性彷佛是合理的。
結論
和傳統觀點相反,區塊鏈不是一種能解決全部技術問題的方案。實際上,它們更適用於知足一組要求的某一類應用。特別是那些寧肯犧牲性能來換取去中心化和防篡改的一致性狀態的應用。
儘管如此,目前不少"承諾的"應用仍然不適合使用區塊鏈,好比供應鏈管理。在遇到那些狂熱的開發者和那些跟風炒做而且不真正去思考他們方案的底層技術和必要性的企業家們時,咱們須要保持警戒。
到如今爲止,有信任需求的數字商品和服務彷佛是最適合使用區塊鏈的應用場景。
風險警示:藍狐筆記全部文章都不構成投資推薦,投資有風險,投資應該考慮我的風險承受能力,建議對項目進行深刻考察,慎重作好本身的投資決策。