ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

數字貨幣 比特幣 通信 MOOC 雷鋒網 2017-05-19
ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

雷鋒網AI金融評論報道,5 月 13 日,由 ThoughtWorks 主辦的 2017 技術雷達峰會在北京召開。ThoughtWorks 中國區區塊鏈能力負責人劉尚奇在大會上發表了題為《Blockchain in Enterprise》(企業區塊鏈)的主題演講,系統講解了區塊鏈技術在企業級應用中的實踐問題。

劉尚奇表示,區塊鏈的概念近兩年逐漸深入人心,但真正進入企業級應用的時候,實際上還面對許多問題。從業者應該清醒認識到:進行區塊鏈選擇的決策時,從業者一定要從當前需要解決的實際業務問題出發,將決策建立在真正的業務需求上,而不是一個純粹的技術。技術應該是應用解決方案的一部分。

但作為應用解決方案的一部分,企業開始部署區塊鏈時發現區塊鏈需要去中心化,這跟傳統應用的部署思路幾乎完全不同,並因此陷入困境。對此劉尚奇表示,在區塊鏈技術中除了智能合約和分佈式賬本等底層組件需要去中心化之外,其實上層架構跟傳統技術完全沒有區別。同時他建議:

不論區塊鏈的應用是去中心化的應用,企業都應該把它構建在一系列相互獨立的服務基礎上,將系統模塊化,這樣不同的部分就可以進行獨立的演化和部署。

關於區塊鏈理論和實踐的更多內容,雷鋒網 AI 慕課學院在“從零構建一個區塊鏈應用”系列課程中將做一個全面講解,劉尚奇也是導師之一,感興趣的朋友千萬不要錯過!

以下為演講全文(雷鋒網做了不改變原意的編輯):

如果你想要在你的組織裡引入區塊鏈技術,你應該注意哪些事情?我們覺得在一個企業裡面,你做區塊鏈的時候必須考慮下面這幾個因素:

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

第一點,現在市場上這麼多區塊鏈底層可以選擇,但可能只想做一個區塊鏈應用,什麼樣的技術適合我?把比特幣代碼分叉出來改一套自己的實現,還是採用某些供應商提供的解決方案?

第二點,現在圍繞區塊鏈開發的是所謂的去中心化應用(Decentrilized Application,dapp),很多人發現這跟我們做一個傳統的企業級應用或者互聯網應用的思路不太一樣。因為它所帶來的去中心化的思路,會對整個架構設計思路產生影響,這種情況應該如何設計軟件?

第三點,區塊鏈在部署層面,也跟傳統基於私有機房或者公有云私有云部署的應用不太一樣,因為需要去中心化地部署區塊鏈的節點,我們會遇到哪些挑戰,應該怎麼優化部署方式?

今天我將從以上三點跟大家分享一下我自己的認識。

區塊鏈的技術選擇

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

這個圖上的是 Willam Mougagyar 總結的 2016 年的區塊鏈在 Fintech 領域的 landscape,非常多的技術。當然區塊鏈不只是在金融領域,在供應鏈、醫療等很多其他領域都有應用。在這張全景圖裡的區塊鏈技術有基於比特幣等加密貨幣的基礎設施,有開發智能合約的平臺,有中間件,有上層更有針對性的行業解決方案。當你想要做一個區塊鏈的應用,你會發現有很多選擇。

不是所有的企業都是直接做區塊鏈業務的創業公司,企業更多地希望這項技術能給公司帶來什麼改變和價值。因為區塊鏈所具有的巨大潛力——很有可能顛覆當前支付、中介等業務形態,大家都可能想提前準備,防止被崛起的區塊鏈創新者顛覆掉。

我假設,我們自己不會從零研發一套區塊鏈的技術棧。我的確看到很多創業公司基於比特幣、瑞波幣等開源的加密貨幣,分叉出來在上面做開發。我們建議基於一些相對成熟的、開源的或者商業的解決方案,在上面構建應用。

在選擇區塊鏈技術的時候,首先它跟以往做技術決策沒有任何的區別:以前我們做技術決策會看這個方案提供什麼類型的編程語言的接口,要考慮程序員是不是熟悉,它的文檔支持什麼樣,它的背後是不是有一些大公司,是不是有開源組織背書,夠不夠穩定,行業裡面有沒有應用案例。

在這之外,當我們選擇區塊鏈技術的時候,一定要建立在自己需要解決的業務問題上。 Gartner 今年初的時候發佈的了篇文章叫“Top 10 Mistakes in Enterprise Blockchain Projects”,其中提到了一大家對區塊鏈應用的誤區是“Confusing a limited, foundation-level protocol with a complete business solution” 。

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

區塊鏈技術本身,跟我們的商業解決方案是有區別的,它是我們要構建的業務解決方案的一部分。很多時候我們需要更加關注在我們的區塊鏈解決方案上。

怎麼樣找到能用區塊鏈解決的業務問題,這些方法論包括:分析所面對的目標客戶群體,建立用戶畫像;通過對面向需求的場景進行分析,建立客戶體驗地圖;以及為了支撐該體驗,梳理各業務環節應該怎樣流轉,分析業務流程地圖;此外通過商業觸點分析跟你的業務模式之間的交互,通過體驗心情地圖和設計挑戰改善你的產品設計和用戶體驗。

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

此外,在區塊鏈應用中我們應該額外注意什麼?首先我們要明確區塊鏈解決的兩個核心問題:第一個是分佈式的信任(Distributed Trust),第二是不可抵賴的賬本(Indelible Ledgers)。

  • 分佈式信任

首先是分佈式信任,它能夠在所謂的去中心化的場景下,多個完全沒有信任關係的參與方,在沒有一箇中間的權威背書情況下,建立起共識和信任。

前面梳理業務流程和商業觸點的時候,需要:分析在企業整個業務流程裡,有哪些觸點是我需要跟第三方的組織、機構發生交互,需要去建立某種信任機制,我們的區塊鏈技術可以應用在這些觸點上。

  • 不可抵賴的賬本

區塊鏈的另一個使用場景是不可抵賴的賬本。區塊鏈通過將每一筆交易進行哈希、多個交易哈希通過 Merkle Tree(梅克爾樹)構建為區塊、再通過 Hash Point 串成一個鏈條,這種結構能夠非常容易和高效地校驗到對底層賬本的篡改。那些需要審計,需要合規的業務,一旦使用了區塊鏈類的技術,能夠給你帶來的成本降低是非常明顯的。

所以在我們說區塊鏈的應用的時候,一定不是單純看著這個技術去開腦洞,一定是基於真實的業務問題。

我們對真實的業務問題進行分析,找這類需要構建多方信任的點,找到需要不可抵賴的數據的點,在這些點上再去構建區塊鏈的解決方案。

找到了業務問題後,我們可能還需要關注兩個核心的業務指標。第一是業務的吞吐量,第二是業務的交易確認時間。

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的
  • 首先要了解這項業務交易的吞吐量有多少。比如如果做的是一個跨國結算的業務,每天的交易量是幾十萬筆,那區塊鏈系統所支持的日吞吐必須要支撐這個數字,這是交易吞吐量。

  • 另外一點是交易的確認時間,當我發生了一筆轉帳或者一筆支付,交易多長時間能夠確認。比特幣真正鏈上的交易吞吐量比較低,每秒 7 筆交易。如果直接基於比特幣開發商業應用,那可能很多日交易量超過百萬的業務場景是沒有辦法支撐的。另外,比特幣每十分鐘生成一個區塊,也就是一次轉帳的確認時間要花十分鐘。而一般連續生成 6 個區塊,也就是大概 1 個小時的時間,我們才認為你的這次轉賬已經在鏈上比較穩定,不太容易被篡改。十分鐘的時間,如果你想做的是跨國支付,這相比於傳統 T+2、 T+3 的到賬時間已經大大縮短了。但如果做一些面向消費者的應用,消費者不可能站在那裡等你十分鐘,才能知道我付款成功了。(當然這裡只是用比特幣舉例子,實際在比特幣上有很多像微支付通道、閃電網絡、隔離見證這樣的技術去改善比特幣的吞吐量和交易確認時間。)

但這裡是想提醒大家,你所面對業務的交易吞吐量和交易確認時間,會很大程度影響你選擇什麼樣的區塊鏈技術。

有些因素其實不用考慮

跟具體的區塊鏈技術相關,我認為有一些因素是不用考慮的:

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的
  • 加密算法

比如你用了什麼樣的加密算法,單向加密是用的 SHA128 還是 SHA256,非對稱加密是用的 RSA 還是橢圓曲線。我們認為作為企業中你其實不需要太關注具體的加密算法,這應當是你選擇的區塊鏈技術棧的一部分,加密算法實現封裝在內部。自己去實現加密算法和做調優非常難寫對,儘量不要自己寫。

  • 底層網絡通信協議

另外,還有一些基於開源區塊鏈技術去擴展自己應用的公司,可能會去調優 P2P 網絡的通信性能。這個我們也是同樣的觀點,作為企業來說沒有必要自己去調這些底層的網絡通信協議,它應該是你在選擇某種區塊鏈技術時就考察過的。

  • 互操作性

還有很多人在提區塊鏈的交互操作性(Interoperability)。我們知道前面列了這麼多區塊鏈的技術實現,它們底層的協議,包括賬本的數據結構,節點的驗證和通信方式,在上面跑的只能合約都是互不兼容的。有點像我們在上世紀建立全球的 Internet 前,每個組織有很多自己的局域網。當然這些局域網都發揮了它們自己的作用,但彼此之間是信息孤島沒有打通。

所以很多人說選用區塊鏈的時候要考慮交互操作性,考慮是不是和其他的區塊鏈實現兼容,這樣將來大一統的時候不用做太多遷移工作。我承認交互操作性非常重要,但坦白來說,在這個時間點,我不建議大家在這上面花太多的時間。因為現在並沒有哪一種實現成為所謂的事實標準(defacto standard)。未來比特幣或是以太坊是否完成大一統,都不一定。這個時候沒必要投入太多時間去試圖預測不確定的未來。

應考慮的重點

跟具體區塊鏈技術相關的因素,我建議可以考慮這三個點:第一點,共識算法。第二點是賬戶模型,第三點是智能合約。

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

共識算法

有人開玩笑說解決的是“今天中午吃什麼”的問題?這是一個很貼切的描述。所謂的分佈式共識算法——我有這麼多分佈式的節點,彼此之間需要網絡通信對某個狀態達成共識,但彼此之間又不信任。這跟我們在互聯網應用做分佈式系統有很大的區別。傳統的分佈式系統節點都部署在自己的機房裡,不需要考慮拜占庭錯誤,你需要考慮的只有丟包、超時、機器 crash 這些問題,用 Paxos 和 Raft 一類的算法就可以了。

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

但是如果做區塊鏈的應用,我一定要處理拜占庭錯誤,面對潛在的欺詐和篡改的情況。這裡選擇不同的共識算法,會對你的區塊鏈應用有比較大的影響。有的區塊鏈應用可能就是要做公有鏈,面向公開網絡;有的區塊鏈應用做的是聯盟鏈,有限節點,追求高性能、高吞吐量,它們選用的共識算法一定是不同的。這裡是主要算法的對比。

  • 一個類是在比特幣驗證了很多年的 PoW,工作量證明, PoW 已經被證明非常適合這種全開放網絡的公有鏈,對於拜佔廷錯誤的容忍率比較高,一般我們認為有 51%的節點聯合起來進行欺詐,才能對整個區塊鏈產生有效供給。但相應的,PoW 非常消耗算力,吞吐量和確認時間也都不太理想。

  • 還有一大類是以太坊採用的 PoS,權益證明,以及 DPoS 等擴展。權益證明是基於不同節點的股權數,有點像真實的股東大會投票一樣,在股東里面隨機選舉節點進行記賬。這類算法也比較適合公有鏈,相比 PoW 在容量和計算資源上都是有優化的。

  • 還有一類是拜佔廷容錯協議 BFT,比較有名的像 PBFT。這類算法是基於狀態機同步的算法(state machine replication),不需要代幣。當客戶端發送請求給一個節點,每一個節點互相廣播其他所有節點發送消息,彼此之間進行交易的確認。一般來說它的延時比較低,吞吐量也更高,但是相對來說對網絡壓力也比較高,更加適合有限網絡節點。另外 BFT 類算法對拜占庭錯誤的容忍度也相對較低,像 PBFT 有 f 個節點發生拜占庭錯誤時,整個網絡要大於 3f+1 個節點才能保證正確性。

2016 年業界在共識算法上面也做了很多探索,現在大家基本達成的共識是:如果你的區塊鏈應用場景是公有鏈,可以使用 PoW、 PoS 這類算法,如果你的區塊鏈應用場景是許可鏈聯盟鏈,可以採用 BFT 類算法。

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

賬戶模型

另外一個,你所使用區塊鏈技術的賬戶模型。有兩個流派,第一個流派以比特幣為代表的 UTSO 模型,第二個以以太坊為代表的簡單賬戶模型。

先說一下簡單賬戶模型,很簡單,我轉帳支付就是錢加減、付錢。 UTSO,在每一個構建交易的時候,有輸入和輸出。比特幣我有一千塊錢,給艾麗斯轉一百塊錢的時候,我不是扣掉一百塊錢,我是構造這麼一個交易,輸入一百塊錢,輸出一百塊錢。你的每一次交易數據會記錄在這個賬本里面,這樣日後做一些數據分析更加容易。因為最早是比特幣提出的,對於雙發問題比較奏效。簡單賬戶模型它比較有效,就是簡單的轉帳,可以支持一些比較高級的,如果你基於 UTSO 做可能會更麻煩一些。

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

智能合約

第三個是對智能合約的支持,很多人做了一兩年,發現我們原來只需要一個分佈式賬本,只需要一個記賬的。如果你只做一個不可篡改的記賬,但是很多公司,很多組織看中它的智能合約的能力。選擇技術,在技術雷達裡面出現了兩個,這是我們做過一些共同試驗的解決方案。

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

去中心化

另外一點,在構建區塊鏈的應用的時候,你應該怎麼構建。很多人說區塊鏈是完全去中心化的,跟傳統的思路完全不一樣,怎麼構建我的應用,完全懵了。

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

在你的傳統的應用裡面,最上層是 UI 層,最下層是數據庫。而在區塊鏈部署中,最上層是你的 Cllent,它裡面不會跑真正的節點,只是一個輕客戶端,負責調用後層的區塊鏈的合約,包括你做一個網站也好,你可以使用任何熟悉的技術。真正的核心部分是 SMART contract,最底層是分佈式的賬本。只有下面這幾層才需要去中心化的部署,去構建的。上層跟我們傳統的技術沒有任何區別。

在去構建區塊鏈應用的時候,我們看到一些公司做諮詢,發現它們把很多東西做到一塊了。因為是一個新的東西,做在一塊非常方便。但是區塊鏈有一些共識算法,這就導致往後演化非常不容易,因為這裡面每一部分都可以獨立的演化和獨立發展。

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

這裡是 hyperledger,我的身份管理,我的註冊,一部分是所謂的負責底下的共識算法、分佈式賬本,這些都是特別像共識算法,一部分是在 hyperledger 裡面的智能合約。即使我們沒有使用 hyperledger,我們自己做公有云也是類似,這部分一定要跟業務的應用不能放在一個代碼進行編譯打包。

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

另外一部分,有可能不是由智能合約,我們希望把這部分單獨拿出來,單獨做一個服務的模塊。一般來說在你的區塊鏈裡面一定會涉及身份的管理,無論你使用什麼樣的技術都會有這一塊,我們也建立獨立出來。它給推薦了一個架構,我們看到它也是把我們分佈式賬本,把身份跟密鑰管理服務做成共同的服務,包括加密算法能夠提煉出來,在上面承載了一些 ML、 BI 的 servlces。最上面是應用,監控端,跑一些真正的解決方案,這是區塊鏈相關的技術,這是底層的賬本,旁邊可以結合其他的區塊鏈的定製工具,結合市場做一些架構。

這是我們推薦的方式,因為區塊鏈是很多技術的混雜,一定不要混在一塊,要構成一個一個獨立的服務。這樣像身份管理,像區塊鏈技術、共識算法、加密技術,都可以選擇獨立的技術的提供商,或者獨立的開元實現,去構建自己獨立的業務,這樣不會綁死在某一個平臺上,可以有更大的發揮空間。

部署和建議

說到部署,這裡只提一點原計劃的應用。一些同學問我,他們是自己做技術的創業者。說區塊鏈這個技術,我一旦數據寫進去就不可篡改了,很多時候我想要改這個數據怎麼辦?

我說分兩種情況。第一種情況,真的是出於監管審計的要求做篡改,也是分兩個流派,一派認為區塊鏈的技術應該提供這樣的能力,我是站在另外一派,我認為不應該提供這種能力。另外,你明明寫錯了,我看到個人開發者面臨的問題,因為我自己的應用寫錯了,導致數據損壞和數據錯誤。你在正常的企業裡面做開發,一定是經過嚴格的開發和測試,要提前測試才能上到生產環境的。我們一般開發可能本機布幾個節點,然後一個網絡,不可能開發完之後直接去了,你一定會有區塊鏈不同的測試網絡節點,你上生產環境之前一定要充分的測試,去保證這部分的邏輯沒有錯,不會因為邏輯的問題導致數據的錯誤,然後才能上升到生產環節。怎麼在本地的生產環境、開發之間能夠維護一套統一的環境,包括基礎設施,區塊鏈的網絡配置,我們認為是用這個技術非常容易解決的。

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

另外一點,你真正面臨一個問題,你現在部署的應用不是隻是在你自己的機房裡邊,你有全部的權限部署。為了建立分佈式的信任,你需要在不同的節點上,不同的參與方,可能在你的組織之外,你去分發你的應用,你沒有一個蘋果商店,你很難約束他們的環境,他們的技術環境,他們的條件。這時候,我們認為你只是分送給他們一個最新的軟件包讓他們升級,可能會有很多不可控的因素。包括他們使用的技術、軟件版本、中間件會有一些衝突,可能有些難以預料的問題。在這種場景下,從你的軟件和環境整個標準化,去分發,我認為是很好的策略。所以我們建議當你做應用的時候,還是用原計劃管理環境,管理部署和發佈。

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

最後,在企業想要嘗試區塊鏈技術的時候,會面臨非常多不確定的因素,這裡我總結了三點建議給大家:

ThoughtWorks技術專家詳解:企業級區塊鏈原來是這麼玩的

● 當你選擇區塊鏈技術的時候,一定是在你的業務上,它不是一個純粹的技術,一定是應用解決方案的一部分。

● 區塊鏈的應用也好,還是去中心化應用,我們建議把它構建在一系列獨立的服務上,這樣不同的部分可以獨立的演化和部署。

● 希望原計劃來管理,提高你的部署,包括軟件分發的效率。

今天的分享就是這些,謝謝大家。

現場答疑

提問一:剛才說到一個問題,假如我的業務真是有問題影響了數據,假如在生產環境中改我的區塊鏈的數據是合理的嗎?

劉尚奇:因為我們知道這個區塊鏈技術它的特點就是所謂的數據不可篡改性。其實很多人問這個問題,我在生產環境改這個數據真的合理嗎?我剛才也說兩個流派,第一個流派,認為我作為現實中一定會發生錯誤的,一定是有包括監管的需要,特別像中國的場景會更明顯一些,如果技術不提供監管和改數據的能力,可能政府都不會放行。這個由區塊鏈的技術平臺實現,可能會建立一個單獨仲裁的節點和實現,像 Oracle,它來做我們的數據的最終審計,它是一個更權威的,去做一些修改的操作。但是我個人,包括很多做區塊鏈技術的社區同仁也是認為,這個是不合理的,因為這個會抹殺區塊鏈技術帶來的價值,會抹殺你對區塊鏈的信任。如果真的出現這樣的情況怎麼辦?現實生活中人類一定會犯錯,業務一定會犯錯,現實生活中怎麼處理的?通過線下的方式,你打個電話,你打錯了錢,我們打錢回來,通過線下的契約彌補技術本身,技術保持它的價值,我靠其他的業務運轉活動做補償。謝謝。

提問二:我有一個問題,您說的可能更多是金融行業。我想它對於其他的行業有什麼影響?比如傳統的行業。

劉尚奇:這裡可以開一個腦洞,如果大家熟悉 DEO 是什麼概念。除了金融行業,因為你的區塊鏈可以在一個一個不同的參與方之間建立起來分佈式的共識,所以現在很多所謂的 O2O,一些中介化的應用也不需要了,包括 P2P。我不知道在座有沒有滴滴打車或者大眾點評這樣的。如果你基於區塊鏈的平臺,大家開發出來這麼一套打車軟件或者租房軟件,或者大眾點評,我為什麼還需要專門的公司去運營呢?我是租房的,有一個租房的租戶,我有一個出租房源的房主,只需要這兩方參與,我的信任和程序,不需要一個真正的公司和實體去建立這種信任。所以如果從這個角度去看的話,你發現我們現在很多做互聯網 O2O,或者線上到線下,一些互聯網化的應用,一些崛起的巨頭公司,它們的業務場景都可以用區塊鏈的智能合約去取代的。不知道有沒有嘗試解答這個問題。

提問三:我想問一下,公有鏈、私有鏈,現在還有一個聯盟鏈。我簡單理解聯盟鏈就是幾個私有鏈加在一起?

劉尚奇:私有鏈,我是一個組織,在組織內部,組織內部即使不用區塊鏈,你也是有足夠的信任度的。 聯盟鏈是多家組織之間,比如說銀行之間的信用卡的結算,我以前可能需要 visa 這樣的機構,因為我銀行 A 是建行,給招商銀行轉帳,我是在數據庫裡面扣一百塊錢,給你的數據庫裡面加一百塊錢,但是我們的數據庫是分開的,沒有辦法確認你加的是一百塊錢,不是兩百塊錢,我們需要像 vasa 這樣的中介。如果出來了聯盟鏈,我們在不同的參與方之間建立節點,我們達成一個共識,我們底下是共享賬本,我知道扣了一百塊錢,就是給你增加了一百塊錢。聯盟鏈更加適合於銀行之間的結算,我們本身在業務上有一定往來和聯繫的實體,可能以前需要一箇中介,一個背書方,一個權威的認證者做權威的授權,現在可以拋開它自己玩兒了。

編者注:按照官方介紹,"ThoughtWorks技術雷達"並不是一個客觀的行業分析或者報告,也無意成為一份權威的官方文檔,他所展現的就是當下技術領域上的一個“快照”,並進行了粗粒度的分類和趨勢分析。ThoughtWorks 全球技術委員會(TAB)定期討論技術發展現狀,並以雷達形式對各類技術的成熟度進行評估並給出建議,為從程序員到 CIO/CTO 的利益相關者提供參考。這也是大會名稱中“雷達”一詞的意義。

——————————————————————————————

“從零構建一個區塊鏈應用”開課啦!

ThoughtWorks 頂級專家手把手教你實現區塊鏈應用!

課程詳情:http://www.mooc.ai/course/78

相關推薦

推薦中...