狠狠干影院/欧美午夜电影在线观看/高黄文/国产精品一区二区在线观看完整版

騰訊云高可擴展性區塊鏈平臺原理剖析

| 瀏覽次數:

 騰訊云高可擴展性區塊鏈平臺原理剖析

 導語

 隨著產業互聯網加速推進,區塊鏈技術越來越受到重視。然而,區塊鏈平臺的構建也面臨著問題:成千上萬的數據中心有各自的數據管理模式,單個區塊鏈應用既承載不了大規模的數據量,也不能滿足多樣化的數據管理模式。

 一、新基建下的區塊鏈 區塊鏈集成了密碼學、分布式數據庫的技術,能夠有效并且安全的實現跨組織的數據共享的協作,以發揮在新基建中的作用。而新基建下的區塊鏈,有以下四個特征:

 ? 范圍廣,分區治理,跨鏈互聯 ? 層級化治理,滿足現有治理體系 ? 統一的實名身份,按身份授權 ? 支持敏感數據的跨鏈傳輸 首先是服務范圍更加廣。不再像之前幾年只是少數幾個企業聯盟搭建了一個信息化的設施,所以就要求能夠進行分區的治理,各個區域、業務可以建設相對獨立的區塊鏈,同時又支持與其他不同地域、業務的區塊鏈進行跨鏈協作。第二個特征是層級化的治理。區塊鏈在新基建場景下,節點并不是完全對等的,是有層級的,以滿足政府或者是企業現有的治理體系。第三是身份實名。最好是有統一的身份系統,類似于全國統一的身份證,即便是在跨地域或者是跨業務的時候,也可以按身份進行授權與驗證。第四個特征是要支持敏感數據的跨鏈傳輸。我們在保障數據跨機構共享的同時,還要保護數據的隱私。

 下面舉個例子說明一下新

 基建的區塊鏈應用場景到底是怎么樣的。在教育領域中,可以使用區塊鏈來管理學生的學籍、檔案,這些是需要長期去管理的重要數據,保證其不可以后續被篡改,保證數據是可以追溯的。通常不同的省市都會有自己的區塊鏈系統來維護其當地的數據,但如果學生升學或者是轉學,就會涉及到跨區塊鏈的數據流轉。在政務領域也有很多這樣的例子,比如戶口的遷移或者社保的轉移,都涉及到跨地域的數據流通,也會有很多跨業務的信息協作場景。總之,會存在很多按區域或者業務劃分的分區的鏈,這就涉及到跨鏈的協作。

 二、如何構建高可擴展的區塊鏈平臺 一個區塊鏈的內部數據是可以做到不可篡改,變更過程可追溯的。但在涉及到跨區塊鏈的環節,分區的鏈之間互相平行,不能夠驗證對方的數據是否可靠。在這種情況下為了保障區塊鏈的基本特性,就需要引入一個跨鏈治理的平臺。它的功能包括跨鏈的身份管理以及跨鏈的事務管理。

 既然區塊鏈被拉入到新基建的場景當中,就會要求區塊鏈能夠服務更廣的使用戶群體、管理更多的數據,這些最

 終都會歸結于區塊鏈能否實現更高的可擴展。目前區塊鏈在擴展性上所面臨的的問題主要有三點:

 ? 單個區塊鏈承載的數據量有限 ? 單個區塊鏈不能滿足不同業務的數據管理模式 ? 平行業務、地域、部門組建的區塊鏈相對獨立,但又有協作要求 區塊鏈為了追求去中心化以及數據的不可篡改、可追溯等特性,付出的成本與代價遠比我們通常使用的數據庫要高。所以用單個區塊鏈承載整個產業互聯網的數據是不現實的。第二點在產業區塊鏈里面各種各樣的業務會有不同的管理模式,比如不同的共識機制以及策略,這種情況下把不同的業務全部落在同一個區塊鏈里面也是不現實的。

 第三個問題就是每個區域、業務都會構建自己的區塊鏈。比如各個城市會有自己獨立的區塊鏈,但又涉及到跨地域、跨業務的協作,這也是擴展性的一個大問題。

 針對這些問題,目前的解決方案是通過跨鏈去解決區塊鏈的水平擴展問題,再通過分層解決跨鏈的效率監管。

 三、區塊鏈去中心化與效率的權衡 1. 分層治理 因為區塊鏈強調去中心化,所以就要求各個參與方之間要相互進行驗證。在產業互聯網的場景中,因為數據量規模很大,不同業務、不同地域的鏈之間是互相平行平等的,沒辦法去驗證其他業務鏈的數據是否正確,所以就有了分層的概念。層級化的治理模式可以提升效率,并且可以滿足監管的要求。這一點和我們的整個社會機制是相似的,包括政府、企業都是層級化管理。分層之所以能夠提升區

 塊鏈的效率,是因為分層相當于犧牲了一部分去中心化的特性。如果不進行分層,整個區塊鏈就是一個完全扁平的結構,就像大家熟知的公有鏈,每個節點都是對等的。做一次共識需要所有人來進行投票或者競爭,共識的節點就會非常多。如果我們把區塊鏈變成層次化,就可以讓共識的范圍限制在一小部分節點當中,共識的規模就會小很多。比如在比特幣中,為了提升比特幣應用的效率,會在比特幣上構建第二層的網絡,這也是分層的一個思路。

 騰訊云區塊鏈的分層方案在系統上主要分為兩個大的層面,上面是應用層,下面是治理層。

 (1)

 應用層 應用層可以構建大量平行的應用子鏈,應用子鏈可以實現不同的業務,也可以用不同的治理模式。子鏈只需要聚焦于自己的區塊鏈應用,并提供相關的 API 就可以,不需要關心復雜的跨鏈流程如何實現,也不需要關心和其他鏈互相通信的時候應該如何實現,因為跨鏈的流程是由治理層負責實現的。

 (2)治理層

 治理層為應用層的跨鏈協作或者是數據流通提供了底層的支持,功能主要分成兩部分:跨鏈的事務管理和跨鏈的身份管理。跨鏈的事務管理需要管理一筆交易在多個不同的鏈之間的執行狀態,以保證數據的一致性。也就是說交易在多個區塊鏈上要么全部執行成功,要么全部都失敗,從而確保數據的一致性。和傳統的分布式事務不同的一點,跨鏈事務處理的過程需要保證去中心化,因為是基于區塊鏈來管理事務,所以稱為事務鏈。這里采用了兩階段的去中心化的跨鏈互操作是可以實現靈活的,并且可以大規模跨鏈互聯的區塊鏈系統。最下面是跨鏈的身份管理,為區塊鏈的上層應用提供一個可信的身份服務,我們稱之為身份鏈,用于管理子鏈的身份以及用戶的身份。子鏈的身份就是上層應用子鏈的身份,應用子鏈如果需要與其他平行的子鏈進行跨鏈操作,必須先在身份鏈上注冊自己的身份。這個身份中包含子鏈對外公開的一些資源管理 API,以便實現基于身份的服務發現。所以身份鏈相當于一個公開的通訊錄,管理了各類的身份信息。身份信息包含兩類,第一個是區塊鏈應用的用戶身份,身份鏈為上層的所有子鏈都頒發了一個統一的身份,從而使子鏈可以驗證其他子鏈的用戶身份。有了身份鏈,我們就可以打通數據的擁有者、管理者以及訪問者不同權限間的驗證流程,為安全的跨鏈互通提供了信任的基礎。在聯盟鏈中,身份是信任的基石,基本上所有的授權驗證都是基于身份實現,一個統一的身份系統是跨鏈的關鍵。身份信息主要包含以下幾類:

 ? 身份標識符(ID):作為該身份的唯一識別碼; ? 身份類型(Type):分為個人、設備、機構、應用子鏈幾大類; ? 身份公鑰:該身份對應的非對稱加密公鑰,用于驗簽(私鑰由身份擁有者私有);

 ? 身份頒發簽名:由簽發機構/聯盟對該身份的簽名; ? 身份服務:記錄該身份的服務地址、API 等信息,按身份類型不同可分為「機構與應用子鏈」和「個人」。

 這里面最關鍵的就是身份服務,它記錄了身份關聯的網絡服務地址和 API 等信息。以個人身份為例,比如“我”現在在深圳,那么“我”的個人身份可能就是深圳某個應用鏈上對外的服務地址,把這些身份用區塊鏈的形式進行管理,就形成了身份鏈。身份鏈相當于提供了一個統一的身份,類似于現實中的身份證,可以為跨鏈提供身份的注冊查詢還有驗證等功能。有了身份鏈之后就可以走出跨鏈的第一步,基于身份的區塊鏈服務發現。身份鏈作為公開透明的身份注冊中心,提供對身份的信任背書,同時提供區塊鏈服務發現功能因為我們的身份里面包括對外服務的 API。比如說我有一個區塊鏈服務,我想提供我的服務就需要在區塊鏈上注冊我的身份,服務的調用者就可以在相關的鏈上查詢到我的服務并且發起調用。以查詢某個個人數據為例。某個 APP 要使用某個個人 A 的身份去查詢他在身

 份鏈上的身份服務,身份鏈就會返回個人的身份服務,也就是應用子鏈的身份 ID,APP 拿到應用子鏈的身份 ID 后再去區塊鏈上查詢鏈的身份服務,找到后就相當于找到了對外的網絡服務地址,也就是查詢 API 或者更新 API。這樣 APP 就可以直接調用 API 訪問應用鏈,發起對個人用戶的數據查詢或者更新操作。應用子鏈也可以審核操作權限并執行,這就是服務發現的功能。有了服務發現后,可以實現跨鏈的查詢。

 2. 跨鏈查詢 跨鏈查詢只相當于跨鏈里面的一小步,那么如何通過身份服務去實現跨鏈查詢?如圖所示,圖中共有四個角色

 最底層是身份鏈,最上面是申請者 C 以及兩條應用鏈 A 和 B。這個場景表示的是一個用戶的數據托管在藍色的區塊鏈鏈 A 上,但現在用戶要授權區塊鏈 B 去查詢其托管在 A 上的數據,這個場景中 A、B、C 都需要去身份鏈上查詢對方的身份信息并驗證對方的身份是否合法,以及請求或者授權的數字簽名是否正確。查到對方的服務地址之后,身份鏈就可以直接按照身份鏈上的服務地址去訪問對方。

 通常來說身份鏈是由監管部門管理的,比如發現某個身份有問題后,監管部門可以對其進行冷凍,凍結之后身份信息就相當于失效了。

 (1)預言機

 這里有一個細節,比如應用鏈 B 要去查詢身份鏈,他還要查詢子鏈 A,就涉及到區塊鏈的跨鏈查詢功能。對于區塊鏈來說,如果要查詢一個鏈外的數據,目前來說是不太好實現的,對于外部數據來說,它的有效性無法進行驗證,所以如果要查詢外部數據,就要引入區塊鏈的預言機功能,這也是區塊鏈中比較新的技術方向。預言機簡單來講就是區塊鏈外的信息寫入區塊鏈內的一個機制。我們把區塊鏈分為兩類節點,一類是普通的區塊鏈點,另一類是預言機的節點。預言機節

 點里面內置了預言機的模塊,當我們要訪問鏈外數據時,通常是調用預言機的智能合約,讓預言機去代理讀取鏈外的數據寫入到區塊鏈,之后同步給其他的區塊鏈節點。其他的節點會把這個數據寫入到它的狀態數據庫中,隨后這些普通的智能合約就可以使用這些鏈外的數據。區塊鏈不內置預言機的功能,原因是大部分的智能合約并不能直接訪問外部的網絡資源。有一些智能合約會采用通用的編程語言,比如 Java、GO,是可以調用網絡接口訪問外部的,但通常不用智能合約直接去調用外部接口,因為并不太規范。所以通常會從預言機來統一管理網絡接口的調用,然后把外部的數據最終寫入區塊鏈。用統一的方式管理一是比較規范,二是它能夠把鏈外數據直接寫到區塊里,寫入區塊里后這個外部數據才是可以追溯的。

 (2)預言機簡化

 這個流程比較復雜,對于聯盟鏈來說有更簡單的方案。因為聯盟鏈的節點規模并不太多,所以可以簡化智能合約的開發流程和部署的方式。

 如下圖所示就是把驗證節點和預言機節點融合在一起,不會單獨區分哪些是驗證節點哪些是預言機

 節點,都是通用的區塊鏈節點。智能合約也不會去區分預言機的智能合約和普通的智能合約,而是把它當成一份統一的智能合約,這樣智能合約既可以像普通的智能合約一樣去訪問本地的狀態數據庫,也可以訪問預言機模塊。

 智能合約的調用過程,也需要通過共識。整個數據流程簡化,如從外部調用智能合約,然后在智能合約的執行過程中,如果碰到查詢外部數據的指令,就會把指令發到預言機的模塊上,預言機就會代理合約去外部查詢數據,預言機得到外部數據后直接把數據返回給智能合約,智能合約就可以根據外部數據進行下一步的計算,把計算結果寫入到狀態數據庫。最終智能合約的處理結果以及預言機獲取的中間結果會被一起寫入到區塊鏈中。

 (3)

 預言機可信機制

 這里有一個關鍵,在使用預言機后,要如何保證可信度?可信主要包含兩個方面,一個是去中心化,一個是數據可驗證。去中心化就是可以部署多個不同組織的預言機節點,通過區塊鏈的方式保證去中心化。比如超過 2/3 的預言機節點都返回同樣的結果,我們就認為預言機獲取的結果是可信的。預言機的合約跟普通的預言機合約已經融為一體,所以也是通過共識的。只是因為它讀取的是鏈外的數據,所以本地沒有辦法對這個數據進行校驗,要依賴于預言機節點做背書,這是和本地數據不一樣的地方。第二個是數據可驗證,也就是要如何驗證外部的數據是有效的。這個過程是預言機的鏈外數據也需要有其他節點驗證和提交,并且一定要寫入到區塊文件里面。鏈外的數據就需要規范它的數據格式,才能保證它是可驗證的,第一就是鏈外的服務也要有身份,也就是證書,屬于哪個機構或者哪個鏈,數據的路徑訪問的是哪一個,鏈外服務可能或提供 URL 之類。除了數據

 的原始內容還有數據的簽名,鏈外服務的身份私鑰對原始數據進行簽名,通過這個方式,保證預言機的可信。

 3. 跨鏈互操作 預言機只能解決讀取鏈外數據的問題,但還有一個更復雜的就是跨鏈互操作。跨鏈互操作不是簡單的讀取,而是意味著一筆交易可能同時要修改多個鏈上的數據,相對于跨鏈查詢來說更為復雜。跨鏈互操作有三個挑戰:

 ? 一致性 ? 去中心化 ? 跨鏈數據可驗證 現有的分布式系統,解決一致性問題有比較成熟的方案,比如通過一個協調者來實現兩階段的提交。但問題在于區塊鏈要求去中心化,就需要有多個協調者做公證人,把公證人集合做成一個聯盟鏈,以聯盟鏈的方式做公證人的協調。第三就是跨鏈數據的可驗證,對于區塊鏈來說有一個非常重要的一點就是數據可驗證,如果數據不可驗證,就跟通常使用的數據庫沒有區別了。

 比如說在使用數據庫時,用客戶端提交了一個請求,數據庫返回給我們一個成功的響應。比如返回一個 OK,我們就認為這個數據在數據庫里已經提交了,這種方式對于區塊鏈來說是不可驗證的,因為對區塊鏈來說,它覺得這個數據是不可信的。所以采用去中心化的、兩階段的提交方式實現跨鏈互操作,并且保證事務的一致性。

 我們會從事務鏈里面選取多個節點作為一個公證人集合,公證人去協調不同的子鏈之間的互操作。為了保證跨鏈過程的可驗證,公證人集合和子鏈之間需要相互驗證。相互驗證包含兩個部分,一個是公證人會發起一個提案,就是兩邊都按我的提案去做,所以這個提案要求可以驗證。因為是公證人集合發起的,不是某一個公證人發起的,所以提案可驗證是為了防止公證人作惡,需要兩邊的應用子鏈對公證人的提案有效性進行驗證。第二個方面就是提交的可驗證。提交可驗證是防止兩邊的應用子鏈作惡。它需要公證人集合去對應用子鏈交易的執行結果進行驗證,要驗證交易所在的區塊有沒有確定提交,有沒有通過哈希的方式構成條鏈。舉個例子,從鏈 A 有一個用戶要將 10 塊錢轉到鏈 B 上的某個用戶,中間是一個公證人集合。如果要完成交易,首先由公證人集合發起提案,提案就是在左邊這個鏈 A 減掉 10 塊錢,右面的鏈 B 加上 10 塊錢。發起的提案也是要在區塊鏈上進行的,區塊鏈 A 和 B 都要驗證這個提案是否有效。假如公證人作惡,給鏈 A 發起的提案是鏈 A 減掉 10 塊錢,給 B 的提案是減掉 20 塊錢,就會出問題。這就是公證人作惡的情況,所以需要公證人也要去中心化,也要通過區塊鏈的方式來表決。另一方面就是公眾人集合也要驗證 A 和 B 是否真的提交了。可驗證要如何實現,就需要借助事務鏈。事務鏈是由公證人組成的聯盟鏈,管理跨鏈事務狀態、公開記錄跨鏈憑證。跨鏈的憑證分為兩部分,一個是應

 用子鏈的跨鏈憑證,另一個是公眾人的跨鏈憑證。子鏈的跨鏈憑證包括子鏈的元信息以及交易提交憑證,子鏈的元信息需要預先公開在事務鏈上。在跨鏈過程中,公證人要驗證子鏈的區塊以及子鏈的交易憑證是否滿足子鏈的提交條件。公證人及公證人集合的跨鏈憑證,包括公證人提案的簽名策略,以及提案的簽名集合。所以,需要公證人把提案集合事先要把已經約定好的提案寫到事務鏈中。提案策略會規定一個有效的策略應該滿足什么樣的公證和條件,比如需要哪些公證人一起簽名才是一個有效的提案,或者滿足多少百分比的簽名才有效。所以說在跨鏈的過程中,子鏈也會驗證公證人集合提案簽名是否滿足提案策略,這就是跨鏈互操作中數據可驗證的一些細節。

 事務鏈作為一個去中心化的協調者,通過兩階段的方式去協調多個不同的應用鏈,來維護數據的一致性。兩階段提交中的第一階段,就是預執行。一筆交易肯定是由事務鏈中的智能合約發起,最終會觸發到應用鏈的智能合約去執行,調用應用鏈。應用鏈智能合約執行的過程中,會調用智能合約的 API 去讀寫本地區塊鏈的賬本。當然,第一階段還只是預執行,并不是真正的提交。所以當應用鏈

 的合約要調用某個 API 去修改某個 key 的時候,需要對 key 先進行備份。原因是跨鏈的過程中,有可能提交成功了但另一個鏈沒辦法執行成功,這就需要支持后續的回滾操作。所以要事先進行備份,同時還要鎖定這個 key,以防在當前事務的執行過程中,就被其他的事務進行了修改。也就是說當我這個事務還沒有提交時,其他的事務也修改了這個 key 的值,如果不鎖定的話,當要執行回滾操作的時候就會出現問題。所以我們會把它轉換成 4 個操作。第一個操作就是查詢 key 的原始值,第二步是鎖定這個 key,第三步是對 key 的原始值進行備份,最后一步是真正對 key 進行修改。第二階段會出現兩種情況。如果應用鏈在預執行階段比較順利,就會進入第二階段的確認分支。確認分支比較簡單,會把第一階段預執行的備份先刪掉,然后接解除 key 的鎖定狀態,完成交易。如果有一條應用鏈的第一步失敗了,那么需要回滾其他鏈的預執行操作。在回滾的過程中,需要找出 key 的備份。比如說先找回備份,重置 key 的數據,最后再釋放鎖。在這里會涉及到一個 key 的修改機制,會替換成 4 個讀寫操作。為了降低開銷,后面的三個操作都是寫操作,也就是可以把后面的三個寫操作批量提交。最終相當于是一次讀、一次寫,兩次請求。加了兩階段后,為了防止跨鏈事務的邏輯侵入到應用合約的開發過程中,兩階段的執行過程的細節是由系統完成的。比如合約要修改某個 key,它其實是不知道底層做了幾步操作。這樣做的好處是可以支持不同的異構的區塊鏈。

 我們看到跨鏈的過程是很復雜的,整個跨鏈的流程也非常繁瑣,既要遵循去中心化,又要追求數據的可驗證,這就導致一次跨鏈事務的效率非常低。事務鏈作為多個應用鏈之間的一個通信的中間人,即使在簡單的跨鏈操作中也會涉及到三條鏈,并且沒有任何一個節點能夠單獨進行決策。就好比三群人來開會,沒有一個人能夠拍板做決定。所以共識決策的過程非常低效。為了找到一個在去中心化和效率之間兼顧的一個方案。在某些場景中,我們將跨鏈變成兩個流程。第一個流程就是在線的流程,我們假設節點是可信的,不會有節點作惡,我們就可以像傳統的中心化系統一樣進行通信。比如在每個鏈中找出一個代理,鏈與鏈之間的通信變成兩個代理間的通信。在線的流程中,任何的交付都需要附帶憑證。不管是做了一個響應或者發起一個請求,都會有自己的數字簽名,同時還有數據在提交過程中可驗證的數據結構。雖然為了簡化流程不會實時進行驗證,但會在第二部分的離線流程中,對在線流程中產生的各種憑證進行校驗。因為是離線的,所以對效率不會造成影響。在追求效率的場景下,可以利用聯盟鏈實名的特點,把跨

 鏈的流程分成在線和離線兩部分,把一些復雜的東西放到離線的對賬流程去進行。

 四、區塊鏈技術展望 除了上述提到的可擴展性跨鏈互聯,還有一些比較重要的區塊鏈技術。

 1. 鏈上鏈下協同 第一個就是鏈上鏈下協同。區塊鏈為了安全可信,犧牲了一定的效率。這種低效的處理方式如果想把一個業務完全放到區塊鏈上,完全閉環的解決,場景是有限的。區塊鏈只能解決鏈上數據的可信,但在現實世界肯定需要考慮到鏈上鏈下數據的協同。比如要如何保證現實世界的數據映射到鏈上,并且是可信的。比如說基于可信硬件的方法,就是先在鏈下把數據進行預處理,處理完之后再上鏈。也可以借助一些可信的系統進行背書,這都是鏈上鏈下協同相關的一些技術。

 2. 隱私保護 第二個就是隱私保護。區塊鏈為跨組織的數據共享協作帶來了便利,相對于中心化的互聯網業務,區塊鏈在可靠性和隱私性上面會面臨更大的挑戰。因為原來的數據只要在內部訪問就可以了,現在可能要公開給其他聯盟鏈中的成員,就會出現很多數學方法,比如像同臺加密和零知識證明相關的技術。但復雜的計算需要借助可信的硬件來實現。可信硬件的原理是把我們受保護的一些邏輯運行在可信的硬件模塊上,這就要求一定要相信 硬件是可信的。對外部來說是無法對運行邏輯和內存中的數據進行窺探或者篡改。

 3. 領域特定語言的智能合約 第三就是領域特定語言的智能合約。智能合約其實是一個多方約定的規則或者合同,本質上是越簡潔越好。簡潔一方面意味著代碼的 bug 少,另一方面對合約進行審計的時候也簡單。合約不像普通的程序,它會給更多的人看,并且不同的組織和公司都要共同審計它是否安全。所以在現實的應用中,會碰到幾百行、幾千行的智能合約,這個邏輯就非常復雜,對審計人員的技術背景要求也較高。

 所以以后有可能會出現針對特定場景的智能合約。因為針對特定場景,開發的部分就會比較少,審計難度和 bug 方面都會有比較大的改善。

推薦訪問: 騰訊 區塊 擴展性

【騰訊云高可擴展性區塊鏈平臺原理剖析】相關推薦

工作總結最新推薦

NEW