大咖推薦:Layer0層擴容,做區塊鏈的CDN

買賣虛擬貨幣

作者:思想的葦草zlf

最近研究了一下Bloxroute這個專案,算是擴容方案裡面比較獨特的,其參考了網際網路時代的CDN的思路,它基本沒有動共識相關的東西,而是重新構建了一箇中心化的網路,透過一定的技術來加速整個區塊的傳播,可擴充套件性和效能提升非常不錯,整個技術方案也非常有意思。

區塊鏈分發網路

Bloxroute透過在全球部署伺服器構造了一個高吞吐,低延時的網路,這個網路中的伺服器被稱為中繼,這個網路經過最佳化,可以快速的傳播區塊鏈中的交易和區塊。為了讓區塊鏈的節點和這個網路通訊,還開發了一套閘道器軟體,可以讓區塊鏈中的訊息和BDN的協議進行互動。具體如下圖所示:

網路中的角色

在整個BDN網路中分為多種角色:

1、閘道器

2、中繼(交易中繼和區塊中繼)

3、控制平面

4、遠端區塊鏈節點

閘道器:

閘道器是一種可以將你的區塊鏈全節點連線到BDN的應用程式,閘道器可以比區塊鏈的P2P網路更快的將區塊和交易傳輸到你的全節點。對於與閘道器相連的區塊鏈全節點來說,閘道器是透明的,就像另外一個節點一樣,但是因為閘道器不儲存區塊鏈的狀態,所以閘道器需要遠端的區塊鏈節點來響應節點的請求。

當開啟閘道器後,使用者需要指定一個IP,然後閘道器連線到控制平面,並提供它的IP,控制平面根據閘道器提供的IP的地理位置,返回一組最接近閘道器的中繼伺服器列表,並透過ping來確認最低延時的中繼伺服器,從而提高傳輸的效率。

中繼:

中繼是組成BDN的骨幹,中繼伺服器遍佈世界各地,給各地的區塊鏈節點提供更快的傳輸服務。

為了提高傳輸效率,分別設計了兩種中繼——交易中繼和區塊中繼,分別傳輸區塊鏈中的交易和區塊,這樣設計可以保證,交易和區塊的傳輸互不影響。

交易中繼和區塊中繼雖然邏輯上是分離的,但是物理上可以在同一臺機器上,透過不同的埠來提供交易和區塊的傳輸服務

控制平面:

控制平面主要負責給連線進BDN的閘道器,提供最低延時的中繼伺服器(根據地理位置資訊)

遠端區塊鏈節點:

閘道器在跟全節點進行通訊的時候,使用的是區塊鏈原生的P2P協議,但是因為他們並不是全節點,他們無法完成一些全節點的功能,比如驗證某個區塊是否合法,這個時候如果跟它聯通的節點向閘道器請求資訊是無法響應的,所以需要部署一些遠端區塊鏈節點來幫助閘道器響應正常的區塊鏈請求。

從整個設計中,我看到了高階路由的設計方式,也就是控制平面和資料平面的思想,這當然跟團隊本身就是搞網路出身相關。

透過這四個角色搭建的一套網路,可以從地理位置上分配更近,延遲更低的伺服器來進行區塊的傳播,從而達到了提升效能的目的。當然這只是從網路拓撲本身來提高效能,其實Bloxroute還從其他方面來進一步提升傳輸的效能。

高效能和可擴充套件性的關鍵

除了網路拓撲最佳化之外,Bloxroute還使用了基於交易索引的區塊壓縮技術和直通路由技術來提升效能。

基於交易索引的區塊壓縮技術

我們知道在區塊鏈中,每筆交易產生後會先進入一個交易池中,然後透過P2P網路進行擴散,進入每個節點的交易池中,然後等待被礦工打包。在Bloxroute的方案中,當未驗證的交易被傳輸到中繼後,會生成一個唯一的short ID(交易索引)和這筆交易對應,然後再將這個sID和交易一起傳播到其他的中繼中,再由中繼將這個交易索引對同步到和其相連的其他閘道器中,具體流程如圖所示:

經過這一輪傳播後,所有的閘道器裡面都包含了交易和交易的索引,這個時候它還不能發揮作用,需要等到礦工挖出區塊才行。

我們知道礦工經過POW競爭後,將未確認的交易包含在區塊中,並進行傳播,當礦工將它新的區塊傳送給閘道器後,閘道器會根據交易和交易索引表,將區塊中的交易部分全部替換成索引(如果沒有索引,則保持原交易不變),因為交易索引一般只是4個位元組的容量,所以這樣替換一下子將區塊的大小縮減了很多,從而達到擴容的目的。

然後閘道器會講壓縮的塊傳播到中繼,並進一步傳播到其他的閘道器,這個時候閘道器需要將壓縮後的區塊進行還原,首先它會根據索引來查詢自己的快取記憶體,如果不巧沒有找到,它會去請求連線的閘道器進行還原,如果還是還原不了,則它會直接丟棄這個壓縮的區塊。如果成功還原壓縮的區塊,閘道器就會將還原後的區塊傳輸給和它相連的全節點。

Bloxroute的交易壓縮是非常出彩的部分,本身在整個區塊中,區塊頭只佔非常小的部分,而區塊體中的交易佔大頭,在區塊鏈本身的P2P網路中非常難壓縮,因為還涉及到區塊和交易驗證的問題,而在BDN中完全不需要管這些東西,只要交易和交易索引的對應關係不要搞錯,可以非常方便的進行壓縮。

直通路由技術

在區塊鏈的P2P網路中,任何區塊在傳播之前都需要驗證它的有效性,所以每個節點必須接受該區塊的全部資訊,然後驗證完後才能傳播給下一個節點。而在BDN中不需要驗證區塊的有效性,所以當中繼接受到一個區塊的網路包後,它不需要等待其他網路包到來組成一個完整的區塊,而是立即將這個包傳輸到下一個中繼或者閘道器去,從而提升了傳輸的效率。

我們可以看到圖中,中繼沒有等到區塊全部接收到後在傳播,而是接收一部分後就立即傳播了。

結尾

Bloxroute使用了非常精妙的手段進行了擴容,對區塊鏈的入侵性小,可擴充套件性高,提升了非常多效能,但好的技術也需要市場推動,我們對這個專案拭目以待。

免責聲明:

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

推荐阅读

;