酸餅1星評價
2020-05-06 14:09:53
「性能」問題一直是區(qū)塊鏈發(fā)展的瓶頸,以太坊每秒幾十筆交易的速度,遠遠滿足不了現(xiàn)實世界的需求。自從V神提出以分片技術(shù)(Sharding)來解決以太坊性能之后,分片技術(shù)逐漸被各個區(qū)塊鏈項目引用,被譽為「解決性能的最佳方案」。
其實,分片技術(shù)并不是什么新概念,事實上在數(shù)據(jù)庫領(lǐng)域,分片技術(shù)已經(jīng)得到非常成熟的應(yīng)用。本文盡量通俗的語言來講解Sharding技術(shù),讓大家可以理解,為什么Sharding可以解決區(qū)塊鏈的性能問題。
數(shù)據(jù)庫分片技術(shù)
實質(zhì)上分片的概念源自于數(shù)據(jù)庫的分區(qū)表理念,我們首先簡單介紹一下分區(qū)表:
在傳統(tǒng)的IT架構(gòu)中,數(shù)據(jù)庫負責(zé)存儲業(yè)務(wù)數(shù)據(jù),比如我們打電話時,手機號、通話時長、話費余額等等信息數(shù)據(jù),就存在IT架構(gòu)的數(shù)據(jù)庫中。因此,隨著業(yè)務(wù)的不斷發(fā)展,數(shù)據(jù)庫隨著訪問壓力逐漸加大,進而引發(fā)系統(tǒng)無法使用的問題。我在大學(xué)畢業(yè)后,一直從事于基礎(chǔ)軟件領(lǐng)域的研究和工作,已經(jīng)有10多年的時間,其中一個很重要的職責(zé)就是保障數(shù)據(jù)庫的穩(wěn)定運行,當(dāng)數(shù)據(jù)庫不能工作時(宕機),無論前端的應(yīng)用服務(wù)器有多少備份,系統(tǒng)整體上都是不可用狀態(tài)的,所以數(shù)據(jù)庫是IT系統(tǒng)的重中之重。
當(dāng)然,出現(xiàn)問題的原因是非常復(fù)雜的,其中很重要的一個原因就是單個數(shù)據(jù)庫表過熱,我們可以舉個例子來理解這個概念,比如超市購物結(jié)算時,結(jié)算臺的數(shù)量是有限的,這個時候人多就要排隊,就需要等待。數(shù)據(jù)庫表就像超市的結(jié)算臺,當(dāng)業(yè)務(wù)高峰來臨的時候,它就成為緊俏的資源,當(dāng)訪問表需要排隊的時候,系統(tǒng)的就會緩慢。我們稱這個現(xiàn)象為「熱表」。
在超市中,管理員可以大喊一嗓子說,大家排一下隊,慢慢來。但是在IT系統(tǒng)中,情況完全不同,訪問網(wǎng)頁或者打卡App多等待2秒,用戶就會不耐煩,甚至直接離開,而解決這個問題的一個很重要的辦法,就是分區(qū)表。
所謂分片技術(shù),其實就是要把數(shù)據(jù)放到不同的數(shù)據(jù)庫和主機上。但是分片也帶來了一些新的問題,我們首先要考慮的就是分片策略,也就是說哪些數(shù)據(jù)該放哪一個DB上,總要有個規(guī)矩。
典型的分片策略,有這么幾種:
·基于 用戶id 的區(qū)間分片,例將用戶 id 為 1-10W 的數(shù)據(jù)存放在 A 數(shù)據(jù)庫,10W-20W 的數(shù)據(jù)存放在 B 數(shù)據(jù)庫。
·基于 id 的 Hash 分片,例如將 id%2=0 的數(shù)據(jù)存放在 A 數(shù)據(jù)庫,id%2=1 的數(shù)據(jù)放在 B 數(shù)據(jù)庫。
·基于時間的區(qū)間分片,對于有一些業(yè)務(wù)場景,比如銀行賬單查詢,新數(shù)據(jù)被操作的幾率更大,舊數(shù)據(jù)幾乎不會被操作,可以通過數(shù)據(jù)的插入時間進行分片(也稱為冷熱分離)。所以銀行的App里面要查詢超過3個月的數(shù)據(jù),總會讓用戶多操作幾下,想查詢超過1年的,幾乎不太可能,那個分區(qū)的數(shù)據(jù)已經(jīng)變成冷數(shù)據(jù)刻在磁帶上放到倉庫了。
·基于檢索表分片,建立一張檢索表保存 id 與所在數(shù)據(jù)庫節(jié)點的對應(yīng)關(guān)系,就像是書的目錄一樣。
·基于地理位置分片,像大眾點評、滴滴打車之類的軟件,由于不同城市的數(shù)據(jù)不需要互通,可以按照城市分片,將不同城市的數(shù)據(jù)存放在不同數(shù)據(jù)庫中,這樣做的一個優(yōu)點是可以將數(shù)據(jù)庫服務(wù)器部署到離對應(yīng)城市最近的節(jié)點上,還可以提高訪問速度。
總而言之,分區(qū)想要用的好,需要系統(tǒng)架構(gòu)師根據(jù)業(yè)務(wù)特點來優(yōu)化分區(qū)策略。也可以理解,為什么這幾年系統(tǒng)架構(gòu)師的收入,迅速在增長。
區(qū)塊鏈的分片技術(shù)
下面,我們來介紹一下區(qū)塊鏈的分片技術(shù),我們拿以太坊為例,V神采用的是二次分片策略。其實,這個是很容易理解的東西,假設(shè)一個節(jié)點能處理N個交易,那么主鏈能追蹤N個分片,每個分片都能處理N個交易,所以系統(tǒng)一共能處理N的2次方個交易。
在二次分片中,以太坊將鏈分成主鏈和分片兩個部分,當(dāng)交易沒有涉及跨片時,則在所屬分片區(qū)域自行驗證完成。這樣的設(shè)計主鏈只記錄少量信息,從而實現(xiàn)主鏈記錄N個分片的信息,每個分片可以實現(xiàn)實現(xiàn)N個交易的管理。
但是問題是:分片之后,每個分片各自管理自己的交易,速度得到提升,但是如果要給好友轉(zhuǎn)賬,而很不幸被分到了不同的鏈上,這個轉(zhuǎn)賬該如何實現(xiàn)呢?在以太坊中,V神設(shè)計了收據(jù)的概念,來解決這個問題,如下圖所示。
兩個分片中。這樣就可以完成全局交易的信息收集。因為大部分交易不需要通過主鏈完成,同時主鏈只存儲少量信息,所以這樣的設(shè)計即保證跨片交易可以順利完成,又能大大提升以太坊的整體性能。
造夢者9星評價
2020-05-06 14:10:26
目前的區(qū)塊練技術(shù)面臨著一個巨大的瓶頸,那就是:如何有效地提升區(qū)塊的吞吐量(TPS)。
區(qū)塊鏈的擴展性一直是大多數(shù)公鏈發(fā)展過程中難以避開的一塊攔路石,比特幣因之有一段長達三年的擴容之爭,以太坊一度因為一個小小的密碼貓游戲而長時間擁堵不堪。
目前提出的問題解決思路主要有以下幾種:治標(biāo)不治本的擴容(擴大區(qū)塊容量)、犧牲部分去中心化的DPoS和pBFT共識機制、不同于區(qū)塊鏈的DAG、鏈下擴容(子鏈和側(cè)鏈),以及分片。
分片(Sharding)技術(shù),被認為是一種有效的、能夠解決區(qū)塊鏈吞吐量問題的解決方案。
一、起源
分片原本是一種數(shù)據(jù)庫分區(qū)技術(shù),能夠?qū)⒁粋€大型的數(shù)據(jù)庫分割成小的數(shù)據(jù)碎片,并將這些碎片儲存在不同的服務(wù)器上,使其能夠更快更有效地管理數(shù)據(jù)。
而區(qū)塊鏈中的分片技術(shù),是在2015年初次提出的。當(dāng)時新加坡國立大學(xué)的一對師生,在國際頂尖安全會議CCS上發(fā)表了一篇論文《A Secure Sharding Protocol For Open Blockchains》,首次提出了區(qū)塊鏈領(lǐng)域中的分片概念。
后來,這對師生發(fā)展出了第一個分片技術(shù)的落地項目Zilliqa,它結(jié)合pBFT和PoW共識機制,有6個分片,3600個節(jié)點的測試網(wǎng)絡(luò),已經(jīng)能夠達到每秒處理2800次交易的速度,是目前公鏈中處理速度最快的。
珠玉在前,很多為擴展性煩惱不已的項目開始考慮將分片技術(shù)應(yīng)用在自家的區(qū)塊鏈上,比如以太坊,V神已經(jīng)打算在以太坊的區(qū)塊鏈上應(yīng)用分片技術(shù)來擴大吞吐量了。此外,還有很多以此為核心技術(shù)的新項目正在出現(xiàn),當(dāng)然其中也不乏打著分片旗號掛羊頭賣狗肉的項目。
不過,分片技術(shù)并不是那么容易掌握的。
二、分類和原理
分片技術(shù),有這么幾大類:網(wǎng)絡(luò)分片、交易分片、狀態(tài)分片。它們的基本原理,都是“化整為零,分而治之”,用多個分片同時處理不同的交易,最后匯總到主鏈上。
首先,網(wǎng)絡(luò)分片。網(wǎng)絡(luò)分片較為簡單,但也最為重要,因為其他分片機制都必須建立在網(wǎng)絡(luò)分片之上。網(wǎng)絡(luò)分片首先要保證安全,預(yù)防網(wǎng)絡(luò)攻擊和惡意節(jié)點的干擾,隨機抽取出特定數(shù)量的節(jié)點,創(chuàng)建成一個分片。當(dāng)形成多個分片后,分片中自行建立共識,對交易進行確認。這些分片可以同時、平行地處理相互未建立連接的交易,提高網(wǎng)絡(luò)并發(fā)量。
Zilliqa便是運用網(wǎng)絡(luò)分片,然后配合網(wǎng)絡(luò)分片的共識機制,即pBFT共識機制和PoW共識機制,來提升交易速度的。在其中,共識機制之所以重要,在于確認一筆交易,使用pBFT共識機制,可以提高確認速度;而在建立分片之前,要先對網(wǎng)絡(luò)攻擊進行防范,Zilliqa加入PoW機制,就可以有效地阻止女巫攻擊(Sybil Attacks)和惡意節(jié)點的進入。
其次是交易分片。網(wǎng)絡(luò)上創(chuàng)建好的分片處理不同的交易,劃分為不同的交易分片,交易劃分的依據(jù)可以是交易發(fā)起者的地址。
假設(shè)有人用一個地址向兩個人發(fā)起相同的交易,即所謂的“雙花”,一般情況下,這兩筆交易將被劃分到同一個分片進行處理,之后分片能夠迅速識別出相同的發(fā)起地址,從而阻止雙重花費。
而如果這兩筆交易被分到了不同的分片,分片中的節(jié)點同樣能夠檢測出來,將這筆交易拒絕。不過,要防止雙花,在驗證中就需要分片之間相互通信,這樣就會出現(xiàn)跨片交易的情況,影響整個網(wǎng)絡(luò)的運行和效益。所以,這里的分片最好采用UTXO交易模型,更加容易監(jiān)測出雙花,以保證效率。
但UTXO會對大宗交易額進行拆分,一定程度上會影響效率。不過,目前的交易分片技術(shù)已經(jīng)較為成熟,能夠允許多種共識機制運行。
最后是狀態(tài)分片,這是最為復(fù)雜、最具有挑戰(zhàn)性的一種分片機制。狀態(tài)分片的核心在于,不同的分片能夠儲存不同的數(shù)據(jù),也就是說,整個儲存庫被分開,分別放在了不同的分片上。每個分片儲存自己分片中的所有數(shù)據(jù),而不是整個區(qū)塊鏈的狀態(tài)。
這一分片機制的挑戰(zhàn)在于:
首先,由于每個分片儲存的狀態(tài)不同,如果一筆交易的發(fā)起人和接收者處在兩個不同的分片,那么這兩個分片對于這筆交易的信息就應(yīng)該進行共享,這樣一來,跨片交易的現(xiàn)象又出現(xiàn)了,兩個分片之間又得進行頻繁的通信和狀態(tài)互換,將會大大影響分片的效益和性能。
然后,當(dāng)分片遭到攻擊不得不進行脫機工作,其中的交易是無法被驗證的。要解決這個問題,就必須在每個節(jié)點進行信息的存檔和備份,以幫助系統(tǒng)修復(fù)數(shù)據(jù),但這樣的話,節(jié)點就必須要備份整個存儲系統(tǒng)的狀態(tài),失去狀態(tài)分片的意義,甚至還可能具有中心化的風(fēng)險。
三、優(yōu)勢與阻礙
分片技術(shù)作為能解決區(qū)塊鏈拓展性問題的新技術(shù)之一,具有非常強的技術(shù)優(yōu)勢和廣闊的發(fā)展前景。通過分片處理交易和數(shù)據(jù)的方式來消除區(qū)塊的擁堵,擴大吞吐量,結(jié)合其他技術(shù)加強安全性和效率,進行互補,是目前分片技術(shù)的主要運用趨勢。
分片中安全性和性能的平衡是一個值得重視的問題,Zilliqa經(jīng)過多次實驗,決定用600個節(jié)點構(gòu)建一個分片,這是因為600個節(jié)點能夠到達性能和安全的最佳平衡。而如果為了提高TPS一味減少節(jié)點,對于分片的去中心化和安全性都是很不利的。
分片技術(shù)依然存在著很多難題需要解決,尤其是狀態(tài)分片,計算機技術(shù)人員尚未研究出好的解決方案。同時,分片的原理不僅僅在于如何分片,更在于如何對每個分片進行安全有效的治理,很多項目一味追求其中的一個方面,忽視了區(qū)塊鏈的基本治理問題,這也是需要注意的。