標籤:

迅雷鏈總工程師來鑫:TPS百萬級的超級區塊鏈架構解析

迅雷鏈總工程師來鑫:TPS百萬級的超級區塊鏈架構解析

來自專欄 雲計算&區塊鏈技術分享

隨著區塊鏈 3.0 的技術革新,在保證區塊鏈本身公開、篡改、透明特性的基礎上,還需要能夠支持商業級別的高性能的底層平台技術。迅雷鏈獨創同構多鏈框架,實現鏈的平行擴展,從而可達百萬TPS,滿足商業級別的應用。

迅雷鏈上最大規模的區塊鏈應用也是目前國內ToC端最大規模的應用就是共享計算,目前共享計算節點已有百萬量級,這對於底層的區塊鏈技術也帶來了很大的挑戰,這也是迅雷鏈做出高性能超級區塊鏈的動力開源。

共享計算是把老百姓家裡閑置的帶寬跟企業所需要的帶寬有效的結合起來,提升整個社會資源配置效率。那麼,區塊鏈起到一個什麼作用?區塊鏈記錄供給方和需求方的權力義務關係,讓分散的個體,能夠平等的與企業對話,並激勵用戶自發地更早期地參與到共享計算的體系中來。

她叫來鑫,是迅雷鏈的總工程師

曾在百度參與建設分散式計算及網頁搜索架構,後擔任騰訊雲高級工程師,主導去中心化負載均衡系統的大規模使用,以及分散式消息隊列服務、信鴿移動推送、應用加固等多項技術研發。在分散式計算領域擁有豐富的經驗。

2015 年加入迅雷,負責星域調度系統的技術研發,目前主導玩客雲及區塊鏈業務方案設計,建設共享計算的區塊鏈底層平台。個人擁有分散式計算多項專利。

迅雷鏈在做什麼?

隨著區塊鏈 3.0 的技術革新,在保證區塊鏈本身公開、篡改、透明特性的基礎上,還需要能夠支持商業級別的高性能的底層平台技術。迅雷做的是雲計算服務,同一般的後台服務一樣,需要通過平行擴展來提高性能,這樣的技術一樣能夠用到區塊鏈上。

例如,24 核服務機器可以做到每秒 2000TPS 的處理,一個超級節點需要 120 核,每秒能夠處理 3000TPS,這已經是很理想的狀態了。但如果做到 100 萬 TPS 就需要 500 組,成本需要上億。而這對於迅雷來說並不需要花那麼多錢買機器,因為迅雷有上百萬的共享計算的節點。共享計算是把老百姓家裡閑置的帶寬跟企業所需要的帶寬有效的結合起來,提升整個社會資源配置效率。

那麼,區塊鏈起到一個什麼作用?區塊鏈做的事,就是能夠平衡供給方和需求方的權力義務關係,讓分散的個體,能夠平等的與企業對話,從而激勵用戶自發地參與到共享計算的體系中來。現在已經有了百萬級的共享計算節點,而且還在快速增加,這是迅雷追求區塊鏈技術高性能的動力和來源。

迅雷鏈的系統架構是怎樣的呢?

下圖為迅雷區塊鏈的技術棧,可以直觀的看出各模塊的分工和協作。

(一)最上層的應用層,是 C 端用戶直接接觸到產品和服務,包括賬戶客戶端、第三方客戶端和合約應用。

  1. 賬戶客戶端:主要指迅雷鏈的鏈克口袋,負責管理鏈上資產。用戶可以通過鏈克獲取網路加速、數字內容等多種增值服務。而鏈克的查詢、兌換請求是通過服務層的「數據請求服務」提供的介面來完成。另一方面,鏈上資產如果是依託於某個智能合約,這部分資產的查詢和信息修改,就需要通過服務層提供的「合約調用」介面轉發到基礎層的鏈上執行。
  2. 第三方客戶端:主要指接入鏈克兌換的產品和服務,比如迅雷直播。用戶在這些應用中使用鏈克兌換產品和服務,會命令鏈克口袋相應鏈克。如果是在 pc、電視端等發出的請求,會彈出二維碼響應。服務層的「數據請求服務」會跟第三方客戶端的後台服務交互,通知兌換信息是否入鏈成功。
  3. 合約應用:指基於迅雷鏈開發的 DAPP。應用中使用的合約通過服務層的「合約部署」服務部署到區塊鏈上。DAPP 中的合約調用通過服務層的「合約調用」模塊進行校驗,合法的才會轉到鏈上處理。

(二)中間的服務層作為應用和鏈之間的橋樑,提供應用層需要的介面和服務。包括安全控制、合約部署、合約請求和數據請求服務。

  1. 安全控制:這一層類似互聯網架構的接入層,其核心功能就是做好鑒權、合法性校驗等安全工作,將問題擋在最外層。
  2. 合約部署:合約部署的觸發主要是迅雷鏈內部的審核系統觸發,只有企業資質審核通過並且產品內容合法合規,才會被部署到迅雷鏈上。同時,迅雷鏈是同構多鏈框架,合約會有自己所屬的鏈,並在該鏈上完成合約創建。而普通鏈上的用戶發起合約調用時,用戶所在鏈請求入塊後,需要知道將該請求和區塊路由到哪個鏈上,所以合約部署時還需將合約的路由信息通知到所有鏈。
  3. 合約調用:檢查合約調用介面中參數的合法性,比如合約地址是否存在等。對於不合法的請求直接返回失敗,合法的請求會轉發給基礎層。
  4. 數據請求服務:該模塊包含鏈克相關的所有請求,包括查詢餘額、查詢兌換記錄、執行兌換等。對於餘額、兌換記錄這類請求量很大的模塊,會在所有接入節點上做緩存,每個節點通過基礎層的「訂閱及通知服務」訂閱區塊信息。當收到區塊產生的通知後,可以立即解析區塊內信息,並修改緩存中的餘額和兌換記錄。對於執行兌換的請求先校驗合法性,再將合法請求轉到基礎層。

(三) 最底層也叫基礎層,是構成迅雷鏈最核心的組成部分,由 11 個模塊組成。

  1. 路由模塊:包括普通請求路由和合約路由。當請求到達時,路由模塊會根據請求中 from(發起方)地址,將請求路由到該用戶所屬的鏈;另一方面,當請求入塊,需要鏈間通信將請求和區塊信息同步到目的鏈時,也需要路由模塊的信息。
  2. 跨鏈模塊:包括鏈間通信和跨鏈確認。該模塊將已入鏈的區塊中,需要跨鏈的請求、證明信息、區塊信息同步到對應鏈。
  3. 訂閱通知模塊:該模塊是為了支持「數據請求服務」功能,需要及時拿到新入鏈的區塊數據,比如監控服務、餘額查詢服務等。
  4. 共識:包括共識演算法和校驗。這是區塊鏈與分散式存儲服務共同的核心模塊,區塊鏈的共識比普通的分散式存儲服務多了一些安全上的校驗,比如日誌。所有參與共識的節點需要對區塊校驗其內部數據的合法性。至於如何達成共識就跟共識演算法有關了,迅雷鏈採用的共識演算法是 pbft,具體演算法的原理和選擇理由下一次分享會繼續介紹。
  5. 賬戶管理:主要是賬戶密鑰的生成,這部分會做成庫給賬戶客戶端使用。另一方面是對賬戶的許可權管理。
  6. 請求池:收到的請求需要在這裡等待校驗合法性,通過後被放入等待入塊的隊列。
  7. 智能合約:迅雷鏈上有越來越多的應用在接入,這些應用的業務邏輯代碼其實就是智能合約。而智能合約代碼是獨立於區塊鏈程序的,所以需要在區塊鏈程序中運行虛擬機來解釋和執行。再者,智能合約裡面需要讀取和修改區塊鏈上的數據,所以虛擬機還要提供方法來與區塊鏈交互。
  8. 數據存儲:包括區塊、原始請求和用戶數據。相比於以比特幣為代表的 UTXO 模型,迅雷鏈選擇了基於賬戶模型,方便支持智能合約。迅雷鏈的本地存儲系統選擇的是 leveldb,在數據存儲的結構上借鑒了以太坊的精髓,包括交易樹、賬戶樹、事件樹。每種樹都是一個 merkletree,在區塊頭部只存儲樹的 root 的 hash。
  9. 密碼學:包括簽名和加密。這也是區塊鏈非常核心和獨特的模塊,區塊鏈的不可篡改、隱私保護等特點都是源於此,涉及簽名、摘要計算、公私鑰對的生成等。
  10. 網路通信:包括 P2P 和 RPC。區塊鏈中所有參與的記賬節點都是對等的,記賬節點之間包括請求、區塊等信息都需要網路送達,當然要做一個健壯的區塊鏈網路,在網路通信模塊還需要不斷優化。
  11. 通用模塊:包括壓縮和事件機制。因為賬戶模型里要存儲的數據信息相對較多,而且隨著時間推移,鏈的長度也越來越大,所以數據落盤前需要壓縮。事件機制主要是為外圍系統提供鏈上執行合約、鏈上區塊產生等底層支持。

案例:上鏈請求的執行過程

以用戶在客戶端應用中發起鏈克兌換為例。

  1. 鏈克口袋將請求發到鏈的服務層——從架構角度看的最外層就是接入層;
  2. 接入層會根據 from(發起方)地址將請求路由到對應鏈的鏈,接入層也會判斷請求的合法性,針對非法的請求直接返回失敗;
  3. 外層驗證 ok 後,會進入服務層——從架構角度看的內層,會驗證請求是否為重放、餘額是否不足等;
  4. 服務層驗證通過的請求到達基礎層——從架構角度看就是我們的記賬節點,也叫驗證人;
  5. 記賬節點之間轉發請求,記賬節點中本輪的 proposer 負責發起區塊,區塊數據在幾個記賬節點之間也相互轉發,收到區塊的節點進行投票,並把投票信息廣播,根據我們的 pbft 共識演算法記賬節點達成共識,區塊入鏈;
  6. 新區塊產生後,記賬節點中鏈間通信的模塊會針對新區塊中涉及跨鏈的請求,依次根據請求的目的鏈,將跟該目的鏈有關的請求原始數據、本鏈的區塊頭信息、本鏈的交易證明信息等轉發給目的鏈的記賬節點;
  7. 目的鏈的記賬節點將收到的信息轉發,並達成共識,將請求寫入目的鏈區塊的同時也完成了目的鏈對應地址的餘額增加。

從使用的角度再看同構多鏈框架

所謂同構多鏈框架,顧名思義就是有多條鏈,每條鏈上都運行相同的程序。不同用戶的請求會發到不同的鏈上進行處理。

當 A、B、C、D 同時發起請求,比如有 A->B,A->C,A->D , 同時有 B->C, C->D,D->E。A、B、C、D 根據路由規則落到不同的鏈上,四條鏈可以並行進行處理,如果一條鏈每秒的打包請求並落區塊的速度是 1000,那麼上千條鏈,就可以達到百萬 TPS。

對於普通請求,消耗的鏈克 gas 是固定的,這種鏈間的處理是相對容易的,而支持智能合約,需要一些額外的處理。因為要防止惡意的合約或者合約本身的 bug 導致佔用大量資源,所以需要根據合約執行情況扣除相應的鏈克 gas。

消耗的鏈克 gas 是需要從請求發起方的賬戶里扣除的,而真正執行合約的是在合約所在的另一條鏈,所以最終需要的具體數量,在發起請求方所在鏈入鏈這筆請求的時候尚未可知,這怎麼辦呢?

解決辦法是在發起方所在鏈扣除請求中傳入的 gasLimit 值,也就是用戶指定的上限值,這個請求入塊後同步到合約所在鏈,合約執行後請求入塊能知道這筆請求真正扣掉的通證數量,再通過鏈間通信將鏈裡面入塊的合約調用請求同步到發起方所在鏈,發起方確認合約鏈的區塊數據,並把多扣掉的通證退回給發起方。這些對賬戶餘額的操作在鏈上都有相應的操作記錄寫入,方便對賬。

迅雷鏈整體性能如何按需進行水平擴展?

前文介紹了整體吞吐的提升主要通過增加新鏈的方式,那怎麼能做到輕量地增加新鏈呢?

迅雷鏈的路由規則選擇的是最簡單直接的針對地址取模,比如針對 1024 取模,因為地址是根據公鑰經過 hash 運算出來的,整體隨機分布,所以基本上所有用戶會平均分布到這些鏈上。

以當前有 1024 條鏈舉例,其編號從 0 到 1023,地址取模結果是 1、1025、2049、3073、……會落到 1 號鏈。 那麼當我們想擴容到 2048 條鏈的時候,實際上是原來每條鏈上的一半用戶遷移到新鏈。新鏈啟動時區塊數據來自原來的鏈,比如 1025 號鏈的數據來自原來的 1 號鏈,原來在 1 號鏈上地址取模為 1025、3073、……的用戶數據之後會都落在 1025 這條鏈;而原來在 1 號鏈上地址取模為 1、2049、……的用戶數據之後還在 1 號這條鏈上。

通過這樣的方式,可以讓擴鏈的整體變動最小化。

整體分享下來,我們發現,迅雷一直在根據自身優勢確定技術方向。正如來鑫所說:「做技術重點是解決問題,而不需要對標什麼」。在分享結束後的 QA 環節,我們收集到很多有針對性的問題,來鑫都一一做了解答。

此外,今天,迅雷發布了星域雲和迅雷鏈開放平台。以下是具體消息。

迅雷發布現象級區塊鏈生態 3.0 時代來臨

5 月 16 日,迅雷發布了星域雲和迅雷鏈開放平台。

迅雷集團 CEO、網心科技 CEO 陳磊表示,發布這兩大產品目的是幫助更多開發者快速接觸並應用區塊鏈,推動區塊鏈應用落和幫助眾多企業和開發者以更低的成本接入雲計算。

迅雷稱,迅雷要做現象級的區塊鏈 3.0 應用。

星域雲推新產品

此次發布的星域雲是迅雷共享計算戰略的最新產品,其主要特徵是,用海量共享節點取代了傳統大型雲計算中心,從而使企業廠商能夠接入分散式雲計算服務。

此次,迅雷將在雲計算領域裡上線三大全新產品:邊緣計算、函數計算和 CDN 共享版。

據介紹,經過數年發展,迅雷共享計算已擁有超過 150 萬個玩客雲節點,海量節點形成的共享計算網路已足夠提供穩定、高性能的雲計算服務。在此基礎上,星域 CDN 升級為星域雲,進入全新的發展階段。

相較於傳統的雲計算模式,星域雲在響應延時、資源數量、傳輸速度以及性價比等重要指標上有優勢。目前,星域雲的儲備帶寬已超過 30T,儲備存儲已超過 1500PB。

此次發布會上還公布,星域雲將採用基於區塊鏈技術的鏈克作為共享計算生態封閉場景內的激勵工具,企業可以使用鏈克來耗用用戶分享的雲計算資源。目前,星域雲的服務領域已涵蓋視頻分發、資源存儲、人工智慧等,適用範圍包括直播、點播、網盤、監控、深度學習等多個行業。

迅雷稱推出區塊鏈 3.0 應用

迅雷在 4 月份推出了迅雷鏈,在此基礎上,此次又推出了迅雷鏈開放平台,以讓全球開發者更好更快地完成區塊鏈應用開發。陳磊表示,迅雷鏈開放平台要讓每一個開發者都具備百萬級 TPS 能力。

此外,陳磊還當場宣布,迅雷將把預留共享計算運營活動的 3 億鏈克全部投入到迅雷鏈開放平台開發者扶持計劃中去。承諾自 5 月 16 日起,每年從預留用於共享計算生態運營活動的 3 億鏈克中,投放 1 億鏈克用於扶持迅雷鏈開放平台開發者,直至投放完畢。

對於滿足迅雷鏈平台對智能合約應用的接入要求,2018 年 5 月 16 日至 2019 年 5 月 15 日期間發生的智能合約執行成本,將全部耗用第一年官方承諾投入的鏈克。對於接入迅雷鏈開放平台的開發者,迅雷將按照建設共享計算生態的需要和設定的規則向開發者提供用於兌換星域雲計算資源服務的鏈克,由迅雷直接投放至開發者的星域雲賬戶中。

需要說明的是,開發者獲得上述鏈克將定向用於智能合約執行與消費星域雲服務,不具備流通功能。迅雷承諾通過上述兩類安排於 2021 年 5 月 15 日之前將預留運營活動的 3 億鏈克全部投放完畢,實現與共享計算生態共同成長的遠景目標。


推薦閱讀:

三本學生想要的出路,希望各位可以指點迷津,不勝感激!?
虛擬貨幣將死得很慘……巴菲特說的
長期性停滯格局仍將延續
中國的 P2P 行業真的會在 2015 年爆發危機么?
今天隨便聊幾個話題

TAG:金融 |