Hyperledger Fabric on SAP Cloud Platform

今天的文章來自Wen Aviva, 坐Jerry面對面的程序媛。html

Jerry在以前的公衆號文章《在SAP UI中使用純JavaScript顯示產品主數據的3D模型視圖》已經介紹過Aviva了,SAP成都C4C開發團隊中其餘同事評價她爲:「美膩與智慧的化身」,「雲時代女王」,「是你們前沿技術的引路人」。由於Jerry和Aviva就在一個組,因此個人見解是,這些評價都實至名歸。java

好比Jerry瞭解到的Javascript 3D渲染,加強現實(Argument Reality)和這篇文章談到的Hyperledger Fabric, 所有都是從Aviva那裏學到的。node

SAP成都研究院的每位同事,只要是參加了2017年歲末年會掃福字領紅包的活動,則理論上都使用了Aviva和成都另外一位程序媛Zhao Rina開發的基於AR的小應用。算法

2017年7月初成都C4C開發團隊剛剛建立,除了老大Max以外,只有5位組員:哈公子,大衛哥,象老師,勇哥和阿爽。當時這支新的開發團隊面臨的最緊迫問題,就是贏得C4C美國開發總部的信任,從而從總部攬活到成都本地來作。用什麼得到信任呢?對程序猿來講,固然是talk is cheap, show me the code。當時這支剛剛組建起來的五人小團隊對C4C絕不瞭解,可是卻選擇了一箇中國客戶呼聲很是高,很是但願可以添加到C4C標準產品去的backlog。短短一個月時間,這個五人小團隊完成了從現學C4C產品知識和先後臺開發知識,到將backlog實現成一個原型的全過程。當原型錄成的視頻給美國開發老大過目以後,獲得了極高的評價,驚歎這隻團隊從建立到productive只花了短短一個月的時間。這個原型的順利完成,爲成都C4C團隊後續的發展壯大打下了一個堅實的基礎。數據庫

這個原型最後的交付形式是iOS應用。當時五位同事都沒有作過iOS平臺上的開發,不過幸虧咱們有Aviva。Max從SAP成都數字創新空間租借了Aviva。在她的幫助下,原型發佈順利完成。更使人敬佩的是,Aviva將她的iOS開發經驗無私地分享給了團隊其餘同事,如今C4C團隊已經有多位同事可以在iOS平臺上進行工做。我想,今年三月成都C4C團隊參加編程馬拉松時,在組隊階段給隊伍取名爲「Hi Aviva!」, 或許是想經過這種方式感謝Aviva對C4C團隊作出的貢獻。編程

Jerry很慶幸天天能夠和這樣的同事一塊兒工做。安全

下面是Aviva的正文。性能優化

    • *

什麼是區塊鏈?簡單來講區塊鏈就是一個分佈式的記帳本,或者分佈式的數據庫。

區塊鏈的數據結構是一個鏈表,交易數據被存儲到鏈表的區塊中,區塊鏈的第一個區塊叫創世區塊,除了創世塊之外,每一個區塊還包含前一個區塊的哈希指針,這個哈希指針的值是根據前一個區塊的實際數據計算出來的。哈希指針指向前一個區塊,後面的區塊能夠查找前面全部區塊的信息。網絡

帳本的數據結構就是這樣的一個鏈表,那麼分佈式的含義是什麼呢?數據結構

區塊鏈的衆多參與者組成了一個鬆散自治的P2P網絡,咱們把區塊鏈網絡的參與者叫作節點,每一個節點都擁有一個帳本拷貝,全部帳本的信息都是一致的,在區塊鏈裏沒有中心節點。每當有新的交易進來,全部節點的帳本都會更新,而且最終保持一致。更新的方式不是去修改某個區塊的值,而是保存交易記錄。好比在比特幣系統中,它沒有用戶資產記錄這樣的概念,不像普通數據庫那樣用一條數據存儲資產,比特幣用戶資產的值是經過把全部的交易記錄串聯聚合後獲得的,帳戶裏資產的來源能夠一直向上追溯,直到創世塊爲止。區塊鏈裏的交易數據根據具體場景,能夠是任何須要記錄的信息。                  

智能合約

爲了支持信息的持續更新,以及對帳本進行管理(寫入交易,進行查詢等),區塊鏈網絡引入了智能合約來實現對帳本的訪問和控制。智能合約不只僅可用於在區塊鏈網絡中打包信息,它們也能夠被用於自動的執行由參與者定義的特定交易操做。

好比智能合約能夠規定物流中的運輸費用,根據物流的快慢收取不一樣的費用,根據貨物的到達時間進行自動轉帳等。上傳到區塊鏈網絡中的的智能合約會被打包到某一個區塊中,所以智能合約一旦寫入區塊鏈,也是不可更改的。

共識機制

區塊鏈網絡中交易信息同步的過程,確保交易只有得到適當參與者批准後才更新,全部的參與者都會將一樣的信息按照一樣的順序更新,這樣的過程叫作共識。共識機制是區塊鏈的核心之一。

區塊鏈的第一個應用比特幣,採用的是Proof of Work(工做量證實)的共識機制。簡單介紹一下比特幣的共識機制,算法的具體細節你們能夠去查白皮書。節點收到一個交易後,會根據判斷標準對該交易進行有效性校驗,無效的交易會被廢棄。經過有效性驗證以後的交易將會被廣播給其餘節點。其餘節點會作一樣的獨立校驗,當有效的交易達到整個網絡全部節點時,即全網達成了「該交易有效」的共識。每一個節點都會收到不少有效可是還未被打包到區塊中的交易,這些交易被組裝成Merkle Tree,Merkle Tree的第一個交易比較特殊,叫作coinbase,由節點本身建立,將挖礦獎勵支付到礦工本身的地址。挖礦獎勵包括新建立的比特幣和打包進該區塊全部交易的手續費總額。而後節點計算一個符合難度的哈希值,挖礦就是經過修改參數不斷計算區塊哈希值,直至達到難度要求,也就間接證實了該節點付出了對應的工做量,這就是工做量證實。Jerry的公衆號文章《300行ABAP代碼實現一個最簡單的區塊鏈原型》裏用了一個ABAP方法CL_ABAP_MESSAGE_DIGEST=>CALCULATE_HASH_FOR_CHAR來計算區塊的哈希值。

當節點計算出一個符合難度的區塊哈希時,即說明該礦工挖礦成功了,該節點將該區塊組裝到本地的區塊鏈,同時也將此區塊廣播給其餘節點。其餘節點接收到該區塊後會驗證該區塊是否有效,有可能有兩個節點同時挖出了新的區塊B1和B2,它們的上一個區塊都是同一個區塊P。有的節點可能會先收到B1,有的會先收到B2,這時區塊鏈出現了暫時性的兩個分叉。要打破這種局面,要看下一個區塊是基於B1生成仍是基於B2生成。若是基於B1,B1這條鏈就變成了最長鏈,其餘包含B2的節點會從新選擇最長鏈,而B2做爲孤塊被丟棄掉。

到目前爲止,咱們能夠將區塊鏈看作是一個共享的,去中心化的多備份系統,經過智能合約更新交易數據,同時藉助共識的協做流程使網絡中全部的節點保持一致。

這裏的交易能夠指代任何數據,例如:數字貨幣,合同,記錄或者其它任何信息。

區塊鏈的類型

  • 公有鏈:網絡中的節點能夠任意接入,網絡中數據讀寫權限不受限制,全部節點都參與共識過程。比特幣,以太坊等數字貨幣都屬於公有鏈。
  • 私有鏈:網絡中的節點被一個組織控制,由其獨享該區塊鏈的寫入權限,私有鏈和其餘的分佈式存儲沒有太大區別。
  • 聯盟鏈:多個公司或組織經過受權接入,由某些節點參與共識過程。Hyperledger Fabric屬於聯盟鏈。

什麼是Hyperledger Fabric?

Hyperledger Fabric 是Linux基金會發起的Hyperledger項目之一。Hyperledger Fabric 專爲在企業環境中使用而設計的開源的基於區塊鏈的分佈式帳本。Hyperledger Fabric可用於全球供應鏈管理、金融交易、資產記帳、人力資源、保險、健康和數字音樂等領域。

Hyperledger Fabric中的帳本子系統(ledger)包括兩個組件:世界觀(world state)和事務日誌(transaction log)。世界觀記錄了帳本在特定時間點的現狀,是一個鍵值數據庫。交易日誌記錄產生世界狀態當前值的全部交易,是世界觀的更新歷史。帳本的世界觀的底層數據庫能夠更換,能夠選擇使用levelDB或couchDB。

Hyperledger Fabric是第一個支持以通用語言編寫智能合約的區塊鏈平臺,可使用java,nodejs和go語言來編寫智能合約。Hyperledger Fabric中的智能合約也叫鏈碼(chain code)。

和其餘公有區塊鏈平臺最大的不一樣,Hyperledger Fabric 是私有的而且須要受權才能接入,它擁有一個MSP(Membership Service Provider)模塊專門提供成員管理服務。

CA(Certificate Authority)負責權限管理,成員身份相關證書管理(Enrollment CertificateAuthority)和維護交易相關證書管理(Transaction Certificate Authority)等等。

Hyperledger Fabric提供了創建channel的功能,這容許參與者爲交易新建一個單獨的帳本。當網絡中的一些參與者是競爭對手時,這個功能變得尤其重要。由於這些參與者並不但願全部的交易信息——好比提供給部分客戶的特訂價格信息——都對網絡中全部參與者公開。只有在同一個channel中的參與者,纔會擁有該channel中的帳本,而其餘不在此channel中的參與者則看不到這個帳本。

Hyperledger Fabric使用獨立的排序節點(order)來提供共識服務,負責排序交易,提供全局確認的交易順序。

應用程序經過SDK訪問Hyperledger Fabric。

最新版Hyperledger Fabric的設計中,根據功能將節點角色解耦開,讓不一樣節點處理不一樣類型的工做負載。從業務邏輯上又將節點分爲背書節點(Endorser)和提交節點(Committer)。

  • Endorser peer:負責對來自客戶端的交易進行合法性和權限檢查(模擬交易),通 過檢查則簽名並返回結果給客戶端。
  • Committer peer:負責維護帳本,將達成一致順序的批量交易結果進行狀態檢查,生成區塊,執行合法的交易,並寫入帳本,同一個物理節點能夠同時擔任endorser和committer兩個角色。

Hyperledger Fabric 交易流程:共識

共識流程主要分Proposal,Packaging和Validation三個階段。

Proposal

應用提交一個交易proposal,而後將其提交給全部的背書節點,後者接到後,將其做爲輸入執行鏈碼生成相應的交易proposal響應。此時並不會更新Ledger,而是對交易proposal 響應簽名,並將其返回給應用。應用收到簽名後的響應,共識流程的第一階段就完成了。

Packaging

這個階段是order節點對交易進行排序打包。Order節點從各個應用接收交易proposal響應,而後對這些交易進行排序,排序以後打包成區塊。

Validation

共識流程的最後一個階段,由order節點將區塊分發給全部和它鏈接的節點,這些節點將確認區塊中的交易都通過背書節點簽名,而後將確認後的區塊更新到ledger中。

整個流程稱爲共識,全部節點都已對交易內容和順序達成一致,這一過程由order節點控制。 共識是一個多步驟的過程,只有在整個流程完成時纔會更新帳本 ,可能每一個節點的更新時間稍有不一樣。

Hyperledger Fabric Service on SAP Cloud Platform(一)

構建一個Hyperledger Fabric平臺絕非易事,既須要硬件基礎設施的投入,也須要全方位的開發和運營管理(DevOps)。除了平臺自己,一套完整的解決方案,還包括設備接入,訪問控制,服務監控等管理功能。

SAP Cloud Platform(下文簡稱SCP)提供了開箱即用的Hyperledger Fabric Service,爲開發者提供了強大的服務支持:

  • 直觀友好的可視化監控與操做界面,幫助開發者按需申請區塊鏈網絡,建立管理節點、渠道,而無需考慮底層硬件資源。
  • 簡單易用的智能合約開發與測試環境,方便開發者對應用代碼進行管理。
  • 安全,隱私性方面的保障,並對相關資源進行了性能優化。

以上是我對Hyperledger Fabric的一些理解,接觸和了解區塊鏈的時間有限,不免存在一些錯誤,歡迎你們指正。後續會給你們帶來SAP雲平臺上Hyperledger Fabric開發的一些細節介紹。

主要參考文獻

要獲取更多Jerry的原創文章,請關注公衆號"汪子熙":

相關文章
相關標籤/搜索