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