單純從技術的角度來講,區塊鏈的應用技術自己其實並不複雜,它是多種原有的技術的組合。java
咱們常常碰到的第一個問題每每是:爲何要選擇用區塊鏈技術來解決咱們的問題?node
這個問題在開發的過程當中,以及社羣的討論中常常被說起。算法
先舉個相似的例子,當時在引入微服務的時候,對於已經習慣了這種單體開發的人來講,發現引入微服務後對於業務自己開發上的變化並非特別大,可是在運維層面上要求反而更高了,要有一系列看起來好像跟開發業務沒什麼關係的東西,好比服務註冊已發現、熔斷器等,因此在引入微服務的時候也會有不少爭論。數據庫
「原來的業務開發模式不是挺好的嗎?有新的問題多加幾臺服務器不就解決了嗎?」這是一個思惟認知的差異,從理論上看起來可行的解決方案,實際上在現實上並不見得可行。安全
由於不少的時候,沒有考慮到人的因素,你們在一個項目中,混雜在一塊兒進行開發,牽一髮而全身,影響開發團隊的士氣,大大下降了開發效率。服務器
說到區塊鏈技術,其實也是同樣的狀況,從技術上來看,彷佛中心化的解決方案也能解決幾乎全部的問題,可是實際上並不是如此,好比就很難解決組織或者各個實體之間的信任問題。網絡
在一個行業裏,或者一個生態系統裏,有不一樣的實體。這些實體之間有不一樣的利益,以及彼此之間信任問題。某個中心想要壟斷全部的業務,其實是也不太可能,由於每每其餘個體由於信任問題,可能徹底就不會使用某個中心的服務。架構
其次,當服務愈來愈複雜的時候,中心化提供服務的成本其實都會不斷地提升,並且開發效率和服務水平都會愈來愈低,這也是爲何一些大的平臺會經過開放平臺的方式吸引其餘開發者入住提供更爲豐富的服務。運維
而區塊鏈提供了一個很是好的解決方案,能夠連接起互不信任的陌生個體,爲他們提供了一個良好的相互協做的價值網絡。微服務
接下來,本次分享的主題是聯盟鏈,會更多介紹聯盟鏈的實際用處,以及相關碰到的問題。
這裏思考**另一個值得思考的問題:**對於區塊鏈應用,徹底去中心化就必定是最好的選擇嗎?首先所謂徹底去中心化,是不太可能出現的,只是在某些層面消滅了某些中心化的東西,但頗有可能會引入一種新的中心化的東西。
去中心化可能意味着犧牲效率,而中心化程度提高可使得某些效率提高,因此在實際的落地中,是須要一個權衡。
另外我認爲多中心化或弱中心化,多是在某些場景中也是解決問題的更好的方案。
如今不少大的企業,尤爲是一些偏金融的大公司,基本上都比較傾向於使用聯盟鏈。
大企業落地區塊鏈爲何傾向首選聯盟鏈?
相比公鏈對全部人開放,任何人不用通過受權就能夠直接進入網絡而言,聯盟鏈要求全部想進入聯盟的成員必需要有聯盟的受權。因爲企業對於數據安全的要求和管控更嚴格,不可能對全部人徹底開放,因此聯盟鏈更適合企業落地。
從面向的用戶角度來看,聯盟鏈更可能是2B,公鏈更可能是2C,好比比特幣,任何人均可以加入到這個網絡中來,而聯盟鏈更多的是企業加入使用。
**到底什麼是聯盟鏈?**你們能夠參考網上的定義。
聯盟鏈屬於半公開、半私有的區塊鏈,換句話說就是**只有獲得受權和許可才能進入到這個網絡中。**無論是聯盟鏈、公鏈、私鏈,本質都是區塊鏈,只是各自在不一樣行業、不一樣場景中的應用,只是開放程度不同,其本質沒有太大差異,都是利用區塊鏈的底層技術。
聯盟鏈有什麼優勢?
目前相對來講是最容易落地的一種區塊鏈技術。
聯盟鏈的特色:
**權限可控。**聯盟鏈的好處就在於權限可控,每一個聯盟成員進來都須要通過認證,每每都是行業領域內的合做夥伴,信任度自己相對來講比較高,而且可以控制整個聯盟的規模,一旦出現問題也更容易從源頭排查和修復或下降由此帶來的危害程度。
**數據隱私保護。**大公司都對數據安全很是重視,因爲聯盟鏈有權限認證,因此相對來講在隱私保護層面更加讓人放心。
**部分去中心化。**聯盟鏈每每須要一箇中心認證機構對聯盟成員進行受權認證,而在聯盟內,各個成員進行協做是去中心化的。
**交易速度快。**聯盟鏈的成員相對公鏈不會太多且數量每每相對固定,因此無論採用哪一種共識算法,其事務執行的效率也會比較快。
聯盟鏈的應用領域
聯盟鏈的應用領域最主要仍是在金融行業,其中包括:供應鏈金融、小額信貸、票據、股票、公證、政權發行交易等。例如:最簡單的應用能夠是作一個內部聯盟成員範圍內的金融資產的交易系統。
Fabric 超級帳本的架構設計
目前比較流行的聯盟鏈技術應用之一是IBM的Hyperledger,它其實包括四個子項目,其中最火的是Fabric 超級帳本,目前至關多的企業使用它來搭建聯盟鏈。
若是想要入手學習Hyperledger Fabric,最好的方式之一是先從瞭解它的整個架構設計開始入手。
不少系統都有一個特色:採用所謂的三層架構:底層、中間層(也是核心層)、應用層。若是對於大多數應用開發者來講,通常只須要關注應用層怎麼使用和交互。
若是想要作一些底層的研發,這時就須要更多關注項目的中間層。
Fabric超級帳本的架構也是分爲三層:
網絡層,實現了P2P網絡,提供構建區塊鏈網絡的基本能力,包括表明不一樣角色的節點和服務。
中間層,包括區塊鏈結構,狀態數據庫,共識機制以及基於PKI體系數字證書的權限管理,爲聯盟鏈的帳本,交易,事件上層應用等提供技術實現基礎。
應用層,這多是絕大多數開發人員要關心的地方,包括帳本,交易,事件,鏈碼等。應用開發人員,經過編寫chaincode實現各類應用。Fabric提供SDK來訪問聯盟鏈,這樣大大簡化了開發。
Hyperledger Fabric 的Transaction Flow
聯盟鏈或者說區塊鏈,它很是重要的落地應用之一,就是用來做爲數據資產的清算系統。
這是Hyperledger Fabric 的Transaction Flow,這張圖是官方提供的事務處理流程圖,經過這張圖能夠看到整個Fabric裏事務執行的交互流程,以及客戶端或應用端怎麼跟聯盟鏈進行交互。
首先,應用經過聯盟鏈所提供的SDK工具,將交易請求消息進行序列化,而後經過gRPC協議向聯盟鏈的某一個節點發送請求,這個請求的處理是分階段的,在第一階段它只是一個提案不會被真正執行落地到帳本中。
當請求發送到了背書節點時,全部的相關的背書節點都會收到請求,而且驗證該請求,經過則會調用鏈碼,而後執行獲得一個結果,包括生成一些讀寫集,加上本身相關的簽名等,再經過網絡把執行結果返回給應用方,這個過程只是一個模擬執行的操做,不會真正把帳本更新,能夠理解成一個預處理的過程。
應用方收到相應的執行結果後要經過SDK對它作一個驗證以及比較,而後進行下一步的動做。
接下來應用經過SDK會把交易請求,發送給Ordering Service,咱們稱之爲排序服務。聯盟鏈有一個比較有意思的地方,在於共識服務和記帳是分開的,這樣能更好地提高事務的處理的效率。當應用把服務提交給Ordering Service時,排序服務會對服務進行校驗、處理、排序,生成一個新的區塊,前面提到過通道的概念,這個區塊是分通道的,也就是說Fabric能夠實現多鏈多帳本,而不像比特幣同樣只有一條區塊鏈,維護同一個帳本。
排序服務器把排序好的結果打包成一個區塊,發送給對應的記帳節點,記帳節點把接收過來的交易列表進行逐條校驗,校驗完了以後把整個區塊上的交易進行執行,並把相應結果寫入到帳本中,更新world state。
最後一步是記帳節點更新完後經過廣播的方式把事務處理結果通知給應用端,整個過程就結束了。
提供一些學習經驗和學習資料,供你們參考。
首先推薦官方手冊,專門介紹了Fabric的使用教程,包括核心架構設計的相關知識內容。
若是想了解Fabric的動態,能夠關注兩個地方:官網和IBM,IBM有一個開發者中心,裏面有不少相關的技術文章,質量很高。
PPT裏面推薦了一篇文章,《IBM關於超級帳本的簡介》,這是一篇介紹Fabric技術應用的文章。
目前關於超級帳本的技術圖書推薦:《深刻探索區塊鏈》
思考一:做爲初學者怎麼入門?
首先得掌握相關語言,由於如今不少比較知名的區塊鏈開源項目都是基於go開發的,因此我認爲go語言是必須的掌握的基礎語言之一,固然還有java,node等其餘開發語言也是須要掌握的。其次,還包括,關於區塊鏈的一些相關的底層算法,尤爲是各類共識算法的掌握和深刻理解。
思考二:對區塊鏈技術開發的保持高度的熱情
目前你們都在相同的起跑線上,我以爲能成事的很重要的一點,就是保持對區塊鏈技術開發學習的高度熱情,若是不喜歡的話很難堅持下去。雖然如今概念很是火,但真正要落地還得一行一行敲代碼才能實現,因此這是一個長期的過程,只有持續學習纔是有效的學習。
思考三:區塊鏈技術的迭代將是長期的過程
在技術層面來講,區塊鏈技術仍是很是有挑戰的,好比區塊鏈,由於它去中心化的特質,一旦出現bug怎麼測試出來?怎麼修復?這對運營和開發人員提出來更高的要求,須要掌握更多技術以及技術以外的知識和能力。
思考四:把握機會,多參與社羣的活動,爲社羣貢獻本身的力量
區塊鏈開發是一個將來前景很好的行業,對於技術開發者來講也是一個很好的機會,能夠實現彎道超車,這一點從招聘職位和薪酬標準能看出來。因此你們能夠抓住機會提高本身,自學是一方面,參與項目實戰是一方面,可是積極參與社羣活動,在交流中學習也是一個很好且很重要的提高的途徑。
內容來源:HiBlock區塊鏈課堂003期 胡華傑老師的線上分享《一線開發者在超級帳本項目開發實踐——hyperledger開發分享》
本文編輯:Cynthia
點擊「閱讀原文」便可回聽課程分享。
點擊「閱讀原文」回聽胡華傑老師的課程分享。