你們以為分片(Sharding)真的是什麼新技術嗎

買賣虛擬貨幣
「效能」問題一直是區塊鏈發展的瓶頸,以太坊每秒幾十筆交易的速度,遠遠滿足不了現實世界的需求。自從V神提出以分片技術(Sharding)來解決以太坊效能之後,分片技術逐漸被各個區塊鏈專案引用,被譽為「解決效能的最佳方案」。其實,分片技術並不是什麼新概念,事實上在資料庫領域,分片技術已經得到非常成熟的應用。本文儘量通俗的語言來講解Sharding技術,讓大家可以理解,為什麼Sharding可以解決區塊鏈的效能問題。資料庫分片技術實質上分片的概念源自於資料庫的分割槽表理念,我們首先簡單介紹一下分割槽表:在傳統的IT架構中,資料庫負責儲存業務資料,比如我們打電話時,手機號、通話時長、話費餘額等等資訊資料,就存在IT架構的資料庫中。因此,隨著業務的不斷髮展,資料庫隨著訪問壓力逐漸加大,進而引發系統無法使用的問題。我在大學畢業後,一直從事於基礎軟體領域的研究和工作,已經有10多年的時間,其中一個很重要的職責就是保障資料庫的穩定執行,當資料庫不能工作時(宕機),無論前端的應用伺服器有多少備份,系統整體上都是不可用狀態的,所以資料庫是IT系統的重中之重。

當然,出現問題的原因是非常複雜的,其中很重要的一個原因就是單個資料庫表過熱,我們可以舉個例子來理解這個概念,比如超市購物結算時,結算臺的數量是有限的,這個時候人多就要排隊,就需要等待。資料庫表就像超市的結算臺,當業務高峰來臨的時候,它就成為緊俏的資源,當訪問表需要排隊的時候,系統的就會緩慢。我們稱這個現象為「熱表」。

在超市中,管理員可以大喊一嗓子說,大家排一下隊,慢慢來。但是在IT系統中,情況完全不同,訪問網頁或者打卡App多等待2秒,使用者就會不耐煩,甚至直接離開,而解決這個問題的一個很重要的辦法,就是分割槽表。

所謂分片技術,其實就是要把資料放到不同的資料庫和主機上。但是分片也帶來了一些新的問題,我們首先要考慮的就是分片策略,也就是說哪些資料該放哪一個DB上,總要有個規矩。
典型的分片策略,有這麼幾種:

·基於 使用者id 的區間分片,例將使用者 id 為 1-10W 的資料存放在 A 資料庫,10W-20W 的資料存放在 B 資料庫。

·基於 id 的 Hash 分片,例如將 id%2=0 的資料存放在 A 資料庫,id%2=1 的資料放在 B 資料庫。

·基於時間的區間分片,對於有一些業務場景,比如銀行賬單查詢,新資料被操作的機率更大,舊資料幾乎不會被操作,可以透過資料的插入時間進行分片(也稱為冷熱分離)。所以銀行的App裡面要查詢超過3個月的資料,總會讓使用者多操作幾下,想查詢超過1年的,幾乎不太可能,那個分割槽的資料已經變成冷資料刻在磁帶上放到倉庫了。

·基於檢索表分片,建立一張檢索表儲存 id 與所在資料庫節點的對應關係,就像是書的目錄一樣。

·基於地理位置分片,像大眾點評、滴滴打車之類的軟體,由於不同城市的資料不需要互通,可以按照城市分片,將不同城市的資料存放在不同資料庫中,這樣做的一個優點是可以將資料庫伺服器部署到離對應城市最近的節點上,還可以提高訪問速度。

總而言之,分割槽想要用的好,需要系統架構師根據業務特點來最佳化分割槽策略。也可以理解,為什麼這幾年系統架構師的收入,迅速在增長。

區塊鏈的分片技術


下面,我們來介紹一下區塊鏈的分片技術,我們拿以太坊為例,V神采用的是二次分片策略。其實,這個是很容易理解的東西,假設一個節點能處理N個交易,那麼主鏈能追蹤N個分片,每個分片都能處理N個交易,所以系統一共能處理N的2次方個交易。

在二次分片中,以太坊將鏈分成主鏈和分片兩個部分,當交易沒有涉及跨片時,則在所屬分片區域自行驗證完成。這樣的設計主鏈只記錄少量資訊,從而實現主鏈記錄N個分片的資訊,每個分片可以實現實現N個交易的管理。

但是問題是:分片之後,每個分片各自管理自己的交易,速度得到提升,但是如果要給好友轉賬,而很不幸被分到了不同的鏈上,這個轉賬該如何實現呢?在以太坊中,V神設計了收據的概念,來解決這個問題,如下圖所示。

兩個分片中。這樣就可以完成全域性交易的資訊收集。因為大部分交易不需要透過主鏈完成,同時主鏈只儲存少量資訊,所以這樣的設計即保證跨片交易可以順利完成,又能大大提升以太坊的整體效能。


更多區塊鏈資訊:http://www.qukuaiwang.com.cn/news

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;