以太坊狀態分片數據分片
『壹』 以太坊的「分片」是指什麼
「分片」的大致思路是:將區塊鏈網路中的每個區塊變為一個子區塊鏈,子區塊鏈中可以容納若干(目前為 100 個)打包了交易數據的 Collation(大概可以稱為「校驗塊」,為了在分片的情景中將其與區塊的概念區分開),這些 Collation 最終組成一個在主鏈上區塊;因為這些 Collation 是整體作為區塊存在的,所以其數據必定是全部由某個特定的礦工所打包生成,本質上和現有協議中的區塊沒有區別,所以不再需要增加額外的網路確認。這樣,每個區塊的交易容量就大概擴大了 100 倍;而且這種設計還有利於未來的繼續擴展。整個擴展計劃目前也被大致分為 4 個階段;本文所介紹的僅僅是第一階段的相關實現細節。轉自簡書。數字貨幣交易所幣匯
『貳』 以太坊的「分片」是指什麼
以太坊的「分片」是指(幣匯數字貨幣交易平台)
『叄』 什麼是數據分片
MTU(Maximum Transmission Unit)是指一個特定的網路所允許的物理幀的最大數據量,當路由器收到一個大於其要轉發的網路的MTU的數據報時,路由器必須將這個數據報分成可通過該網路的數據報片,每一片仍採用數據報的格式,且保留原數據報的標識符,但只包含原數據報的部分數據,在需要時,數據報片可以再次分片。
在一個TCP/IP互聯網上,一旦數據報分片後,每片都作為獨立的數據報傳送,一直等到到達目的網點的主機後,才對它們重組。目的網點的主機通過數據報首部的標識符來查證各片是否為同一個數據報的分片,且根據片偏移及標志來控制分片和重組。目的主機首次接到某一數據報的一個分片時,就啟動一個計時器,如果在收到所有分片之前計時器超時,則接收機廢棄已收到的分片,不對數據報處理。
http://blog.csdn.net/yliang/archive/2004/08/02/58982.aspx
『肆』 為什麼有時需要對IP數據報進行分片如何分片
任何時候IP層接收到一份要發送的IP數據報時,它要判斷向本地哪個介面發送數據(選路),並查詢該介面獲得其MTU。IP把MTU與數據報長度進行比較,如果需要則進行分片。分片可以發生在原始發送端主機上,也可以發生在中間路由器上。
把一份IP數據報分片以後,只有到達目的地才進行重新組裝(這里的重新組裝與其他網路協議不同,它們要求在下一站就進行進行重新組裝,而不是在最終的目的地)。重新組裝由目的端的IP層來完成,其目的是使分片和重新組裝過程對運輸層( T C P和UDP)是透明的,除了某些可能的越級操作外。已經分片過的數據報有可能會再次進行分片(可能不止一次)。IP首部中包含的數據為分片和重新組裝提供了足夠的信息。
回憶IP首部(圖3 - 1),下面這些欄位用於分片過程。對於發送端發送的每份IP數據報來說,其標識欄位都包含一個唯一值。該值在數據報分片時被復制到每個片中(我們現在已經看到這個欄位的用途)。標志欄位用其中一個比特來表示「更多的片」。除了最後一片外,其他每個組成數據報的片都要把該比特置1。片偏移欄位指的是該片偏移原始數據報開始處的位置。另外,當數據報被分片後,每個片的總長度值要改為該片的長度值。
最後,標志欄位中有一個比特稱作「不分片」位。如果將這一比特置1,IP將不對數據報進行分片。相反把數據報丟棄並發送一個I C M P差錯報文(「需要進行分片但設置了不分片比特」,見圖6 - 3)給起始端。在下一節我們將看到出現這個差錯的例子。
當IP數據報被分片後,每一片都成為一個分組,具有自己的IP首部,並在選擇路由時與其他分組獨立。這樣,當數據報的這些片到達目的端時有可能會失序,但是在IP首部中有足夠的信息讓接收端能正確組裝這些數據報片。
盡管IP分片過程看起來是透明的,但有一點讓人不想使用它:即使只丟失一片數據也要重傳整個數據報。為什麼會發生這種情況呢?因為IP層本身沒有超時重傳的機制——由更高層來負責超時和重傳(T C P有超時和重傳機制,但UDP沒有。一些UDP應用程序本身也執行超時和重傳)。當來自T C P報文段的某一片丟失後,T C P在超時後會重發整個T C P報文段,該報文段對應於一份IP數據報。沒有辦法只重傳數據報中的一個數據報片。事實上,如果對數據報分片的是中間路由器,而不是起始端系統,那麼起始端系統就無法知道數據報是如何被分片的。就這個原因,經常要避免分片。文獻[Kent and Mogul 1987]對避免分片進行了論述。
使用UDP很容易導致IP分片(在後面我們將看到, T C P試圖避免分片,但對於應用程序來說幾乎不可能強迫T C P發送一個需要進行分片的長報文段)。我們可以用s o c k程序來增加數據報的長度,直到分片發生。在一個乙太網上,數據幀的最大長度是1 5 0 0位元組(見圖2 - 1),其中1 4 7 2位元組留給數據,假定IP首部為2 0位元組, UDP首部為8位元組。我們分別以數據長度為1471, 1472, 1473和1 4 7 4位元組運行s o c k程序。最後兩次應該發生分片:
bsdi % sock -u -i -nl -w1471 svr4 discard
bsdi % sock -u -i -nl -w1472 svr4 discard
bsdi % sock -u -i -nl -w1473 svr4 discard
bsdi % sock -u -i -nl -w1474 svr4 discard
相應的tcpmp輸出如圖11 - 7所示。
前兩份UDP數據報(第1行和第2行)能裝入乙太網數據幀,沒有被分片。但是對應於寫1473位元組的IP數據報長度為1 5 0 1,就必須進行分片(第3行和第4行)。同理,寫1 4 7 4位元組產生的數據報長度為1 5 0 2,它也需要進行分片(第5行和第6行)。
當IP數據報被分片後, tcpmp列印出其他的信息。首先,frag 26304(第3行和第4行)和frag 26313(第5行和第6行)指的是IP首部中標識欄位的值。
分片信息中的下一個數字,即第3行中位於冒號和@號之間的1480,是除IP首部外的片長。兩份數據報第一片的長度均為1480:UDP首部佔8位元組,用戶數據佔1 4 7 2位元組(加上IP首部的2 0位元組分組長度正好為1 5 0 0位元組)。第1份數據報的第2片(第4行)只包含1位元組數據—剩下的用戶數據。第2份數據報的第2片(第6行)包含剩下的2位元組用戶數據。
在分片時,除最後一片外,其他每一片中的數據部分(除IP首部外的其餘部分)必須是8位元組的整數倍。在本例中, 1480是8的整數倍。
位於@符號後的數字是從數據報開始處計算的片偏移值。兩份數據報第1片的偏移值均為0(第3行和第5行),第2片的偏移值為1480(第4行和第6行)。跟在偏移值後面的加號對應於IP首部中3 bit標志欄位中的「更多片」比特。設置這一比特的目的是讓接收端知道在什麼時候完成所有的分片組裝。
最後,注意第4行和第6行(不是第1片)省略了協議名( UDP)、源埠號和目的埠號。協議名是可以列印出來的,因為它在IP首部並被復制到各個片中。但是,埠號在UDP首部,只能在第1片中被發現。
發送的第3份數據報(用戶數據為1473位元組)分片情況如圖11 - 8所示。需要重申的是,任何運輸層首部只出現在第1片數據中。
另外需要解釋幾個術語: IP數據報是指IP層端到端的傳輸單元(在分片之前和重新組裝之後),分組是指在IP層和鏈路層之間傳送的數據單元。一個分組可以是一個完整的IP數據報,也可以是IP數據報的一個分片。
『伍』 啥是分片技術
寫在文前:視頻版本和文字版本略有不同,想要看我深情並茂演繹,請看視頻版本 (喵懂區塊鏈22期|分片(Sharding):以太坊太慢,「盤」他!),思維邏輯怪,請看文案加長版。
最近以太坊由於君士坦丁堡升級(Constantinople)而出現了壓倒性的積極走勢,而以太坊的升級之路則猶如升級打怪一般,落入了rabbithole,誰也不知道這洞有多深。既然是「路漫漫其修遠兮」,則把腳下的每一步走好走准,則成了至關重要的點。攻破這一難點之後,以太坊的下一技術難點---Sharding分片,則又被擺到了檯面上。本期《喵懂區塊鏈》會帶大家走進讓以太坊快起來的法寶--- Sharding分片。
什麼是sharding分片?
分片技術其實並不是什麼新概念,起初是針對大型中心資料庫提出的優化方案,具體來說就是將大型資料庫中的數據劃按照某種規則分成很多數據分片(shard),再將這些數據分片分別存放在不同的伺服器中,以減小每個伺服器的數據訪問壓力,從而提高整個資料庫系統的性能。
我們舉一個通俗的小例子:
比如我們平時經常使用的美團,滴滴打車等軟體,就可以按照「城市」來進行分片,由於不同城市的數據不需要互通,就可以將不同城市的數據存放在不同資料庫中,這樣既可以把資料庫伺服器部署到離對應城市最近的節點上,還可以提高訪問速度,何樂而不為呢?!
從上面的例子中,我大家應該對分片的概念有了初步了解,那麼對應到區塊鏈場景中來說,分片又是怎麼樣的呢?
以以太坊分片為例,在原有的單鏈系統中,公鏈整體的性能取決於單個節點的性能,進行分片之後,每個節點只需要承當全網部分工作,各個分片並行工作,按照Vitalik的話來說,each shard is like a separate galaxy每個分片都像是獨立的小宇宙,這樣效率自然噌噌噌提升!原本以太坊鏈全網TPS約為20,現在若增加到100個分片,那麼全網TPS可以提升至2000,同理,全網容量也將提升至原來的100倍。
「每個節點只需要承擔全網部分工作」,這就會引出幾大問題,1.怎麼確定這個節點是負責哪個分片的工作?2.哪些交易應該歸類到哪些分片當中去?3.每個節點是否只需要儲存自己所在分片的交易信息(賬本)?
根據以上問題的實現與否,我們可以將分片依次分為三種類型:網路分片,交易分片,狀態分片。
網路分片:如何將全網節點劃分到不同分片當中去。
交易分片:如何將全網交易劃分到不同分片當中去。
狀態分片:如何讓各個節點只維護各自分片內的賬本,但又不影響整個系統的安全性。
主鏈和分片鏈的區別和聯系?
分片的類型我們已經明白了,那麼主鏈(Main chain)和分片鏈(shard chain)有什麼不同呢?
向左轉|向右轉
以太坊分片的實現是一個漫長的過程,就連Vitalik自己也說將會分階段來逐步實現,分片到底能不能從理論走向實踐,我們還是小小期待一下吧。
『陸』 數據分片應遵守哪些基本原則數據分片有哪些基本類型和方法
鏈路層具有最大傳輸單元MTU這個特性,它限制了數據幀的最大長度,不同的網路類型都有一個上限值。乙太網的MTU是1500,你可以用 netstat -i 命令查看這個值。如果IP層有數據包要傳,而且數據包的長度超過了MTU,那麼IP層就要對數據包進行分(fragmentation)操作,使每一片的長度都小於或等於MTU。我們假設要傳輸一個UDP數據包,乙太網的MTU為1500位元組,一般IP首部為20位元組,UDP首部為8位元組,數據的凈荷(payload)部分預留是1500-20-8=1472位元組。如果數據部分大於1472位元組,就會出現分片現象。
分片(sharding)是資料庫分區的一種,它將大型資料庫分成更小、更快、更容易管理的部分,這些部分叫做數據碎片。碎片這個詞意思就是整體的一小部分。
Jason Tee表示:「簡言之,分片(sharding)資料庫需要將資料庫(database)分成多個沒有共同點的小型資料庫,且它們可以跨多台伺服器傳播。」
技術上來說,分片(sharding)是水平分區的同義詞。在實際操作中,這個術語常用來表示讓一個大型資料庫更易於管理的所有資料庫分區。
分片(sharding)的核心理念基於一個想法:資料庫大小以及資料庫上每單元時間內的交易數呈線型增長,查詢資料庫的響應時間(response time)以指數方式增長。
另外,在一個地方創建和維護一個大型資料庫的成本會成指數增長,因為資料庫將需要高端的計算機。相反地,數據碎片可以分布到大量便宜得多的商用伺服器上。就硬體和軟體要求而言,數據碎片相對來說沒什麼限制。
在某些情況中,資料庫分片(sharding)可以很簡單地完成。按地理位置拆分用戶資料庫就是一個常見的例子。位於東海岸的用戶被分到一台伺服器上,在西海岸的用戶被分在另一台伺服器上。假設沒有用戶有多個地理位置,這種分區很易於維護和創建規則。
但是數據分片(sharding)在某些情況下會是更為復雜的過程。例如,一個資料庫持有很少結構化數據,分片它就可能非常復雜,並且結果碎片可能會很難維護。
分片過程
對於發送端發送的每份IP數據報來說,其標識欄位都包含一個唯一值。該值在數據報分片時被復制到每個片中。標志欄位用其中一個比特來表示「更多的片」。除了最後一片外,其他每個組成數據報的片都要把該比特置1。片偏移欄位指的是該片偏移原始數據報開始處的位置。另外,當數據報被分片後,每個片的總長度值要改為該片的長度值。
最後,標志欄位中有一個比特稱作「不分片」位。如果將這一比特置1,IP將不對數據報進行分片。相反把數據報丟棄並發送一個ICMP差錯報文給起始端。
當IP數據報被分片後,每一片都成為一個分組,具有自己的IP首部,並在選擇路由時與其他分組獨立。這樣,當數據報的這些片到達目的端時有可能會失序,但是在IP首部中有足夠的信息讓接收端能正確組裝這些數據報片。
『柒』 以太坊架構是怎麼樣的
以太坊最上層的是DApp。它通過Web3.js和智能合約層進行交換。所有的智能合約都運行在EVM(以太坊虛擬機)上,並會用到RPC的調用。在EVM和RPC下面是以太坊的四大核心內容,包括:blockChain, 共識演算法,挖礦以及網路層。除了DApp外,其他的所有部分都在以太坊的客戶端里,目前最流行的以太坊客戶端就是Geth(Go-Ethereum)
『捌』 當一個8192B的UDP數據報通過乙太網傳送時,導致分片,問需要分成幾個數據報片每個數據報片的長
1)首先,計算數據包總長度:
數據包總長度=IP頭(20位元組)+UDP頭(8位元組)+UDP數據(8192位元組)=8220(位元組)
2)由於你沒有提到分片大小,以一般的乙太網MTU值(Maximum Transmission Unit,最大傳輸單元)1500位元組計算。
因為要考慮20個位元組的IP報文頭,所以每個數據分片的數據段長度最大為1480位元組。
3)分片結果,分為6片,具體長度和偏移量(IP報偏移量的單位是8位元組,要除以8)如下:
第一片用戶數據報的數據欄位長度1480,偏移量0
第二片用戶數據報的數據欄位長度1480,偏移量1480/8
第三片用戶數據報的數據欄位長度1480,偏移量2960/8
第四片用戶數據報的數據欄位長度1480,偏移量4440/8
第五片用戶數據報的數據欄位長度1480,偏移量5920/8
第六片用戶數據報的數據欄位長度800,偏移量7400/8
4)如果分片大小有變化,即MTU值不是1500,請按照設定的MTU值計算即可。