當前位置:
首頁 > 最新 > 物聯網區塊鏈共識機制漫談之一,DAG演算法優缺點淺析

物聯網區塊鏈共識機制漫談之一,DAG演算法優缺點淺析

共識機制一直是區塊鏈領域最值得爭議的話題之一。從最初的PoW到近期的PoS,到未來的DPoS,每種架構和理論所帶來性能、特點與優劣勢各自非常明顯。而近一段時間IOTA提出的DAG理論及其各種變型也充斥在社區上被大家討論。在這裡筆者闡述一下自己的看法,片面之處也請業界專家指正。

區塊鏈即分散式多活資料庫,這是筆者一直以來對區塊鏈本質的理解。拋開賬本即事務日誌的存儲模塊,其所謂的「共識」機制從本質上來說與分散式資料庫中「一致性演算法」有異曲同工之處。

縱觀資料庫歷史的發展,IBM DB2 for z/OS與Oracle RAC是Share Disk架構中的鼻祖,其核心理念在於多個服務實例共享存儲,而在服務之間通過高速網路連接以實現共享鎖與共享內存(RDMA等)。這種架構一般被用來實現高可用(HA),但是對於異地災備環境來說,業界的普遍做法是採用主從日誌複製(Log Shipping)的方式進行。

在傳統Log Shipping機制中,集群中存在一個可讀寫的主數據節點,與一個或多個只讀的從節點(開始時從節點只是冷備,後來2008年前後業界才提出在業務層面犧牲強一致的理念,做到備節點只讀)。因此可以看出,資料庫發展到今天,其災備架構中一般來說存在一個相對持久的主節點進行交易日誌生成,之後通過網路將該節點生成的交易日誌發送給其他備節點進行回訪,從而達到主備節點之間數據最終一致的目標。

而這種機制與區塊鏈的「出塊」何其相似。可以說區塊鏈數據同步的本質就是Log Shipping,唯一不同的地方在於每次出塊的過程中需要進行多節點間競爭,只有獲勝的節點才獲得記賬權(也就是發送事務日誌的權利)。這部分與傳統資料庫永遠由主節點發送日誌不同,區塊鏈的第一個開源實現比特幣,其十分鐘出塊的設計思路使得集群中的主節點每十分鐘改變一次,從而避免了任何「主從」概念,做到全節點對等。

而另一個與資料庫事務日誌不同之處則在於,區塊鏈的節點間數據同步採用定時檢查點的理念,而非以事務提交回滾為檢查點。這裡定義,檢查點即數據從內存真實落入磁碟的過程。只有數據從非永久存儲的內存寫入永久存儲介質後,才認為該數據被永久保存。資料庫一般在提交回滾操作時會觸發一個日誌緩存刷盤的過程,通過DIO的方式將日誌寫入磁碟。而比特幣則只有每次出塊時,才會將數據塊作為日誌永久結構寫入鏈條並發送給其他節點進行持久化存儲。從本質上講,兩者之間沒有任何區別。

因此可以看到,區塊鏈的出塊、同步、以及回放機制都是一種檢查點同步的過程,而該過程不論從PoW、PoS、甚至DPoS來看都是一種同步操作。因此,我們可以認為,區塊鏈的鏈式結構中,使用賬本同步機制實現的共識演算法為檢查點式同步持久化策略。

而IOTA則提出DAG模式,以及近期依據DAG思路所提出的一系列變種,則採用非同步持久化策略。

從數據結構體系來看,DAG模式是一種典型的謠言傳播演算法,那麼不論IOTA的DAG白皮書中寫到的一大堆數學公式再如何精妙,也無法改變謠言傳播演算法的本質,即非同步通訊。

非同步通訊所帶來最大的問題在於一致性不可控。就好像微服務架構中最讓開發者頭痛的在於各個微服務之間一致性與先後順序控制的邏輯,遠比傳統開發模式複雜許多。在DAG模型中所帶來最大的問題在於交易確認時間完全未知。當然,某種程度上同樣可以認為在鏈式模型中,一個區塊被超過2/3以上節點數接受才算全網最終確認,因此最終確認時間同樣無法準確判斷,但是IOTA的DAG所面對的是數以億計的海量小型設備節點,與全球萬級別的賬本節點所需要的通訊確認時長要高出很多。

另一個DAG一直宣稱的利用全部節點帶寬所帶來的優勢,實際上會被網路中成幾何級數增長的通訊量所迅速湮滅。為什麼這麼說?

試想鏈式結構中僅僅賬本節點記賬,大量的錢包節點僅僅向一個賬本節點通訊即可,因此全網路賬本節點的數量遠遠小於錢包節點。在這種情況下,所有的數據同步均在賬本節點之間完成,假設網路中有M個賬本節點,每一條記錄在網路中傳輸的次數為M+1(即錢包向一個賬本發送數據,同時賬本節點將數據轉發給其他賬本節點)。

而對比DAG結構,在全網存在N個設備節點時(N成千上萬倍大於M),每一個消息都需要在設備間進行點對點通訊,因此對於任何消息的發送,網路中都會存在N^2次數據發送(每一個節點都嘗試將信息發送給其他鄰居節點)。及時進行優化,每個節點有針對性地發送給相鄰的K個節點,那麼其網路信息傳播速度同樣為K*N,當N取值極大時對整體網路壓力極為誇張。

因此,DAG利用謠言傳播演算法可以有效使用大量節點閑置網路資源,但是帶來的負面影響則是每個節點的網路通訊量暴增,因此對於整體網路吞吐量並不一定會得到大幅度提升。

因此,DAG所帶來的兩個問題(1)交易時長不可控;(2)網路傳輸數據量大幅度增加;這兩個問題某種程度上制約著DAG的應用場景。

首先,問題(1)基本明確了DAG很難作為嚴格的支付結算手段應用於高速響應的物聯網設備遠程調用。一般來說,服務提供者希望能夠在提供服務之前收取一部分甚至全部費用,或在服務提供後能夠最短時間內得到支付。而以DAG作為結算手段,會造成支付時間完全不可控,而在IOTA給出的實現原理中更沒有對極端情況作出設計,導致一些權重較低的交易長時間甚至永久無法被其他節點審批。在這種情況下,DAG在支付結算領域是否能夠得到應用是一個問題。

而問題(2)則在於對於簡單設備之間的調用命令尚可,但是如果調用命令較為複雜,甚至需要傳輸一段較長的指令代碼,其通訊原理必須使用P2P直連,否則如果所有信息以DAG轉發的形式傳輸會造成嚴重網路風暴。

因此,筆者認為,DAG與鏈式結構相比有創新有不足,其優勢在於將非同步通訊理念替換傳統的同步檢查點機制,以期望提升設備的響應速度。但是其幾個核心問題使其在物聯網交互與結算領域能否真正得到大規模應用,提出了不小的挑戰。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 巴比特資訊 的精彩文章:

秘猿科技獲招銀國際 Pre-A 輪投資
DDoS新動向:攻擊同時發送勒索信 並不知道誰真的支付了加密幣

TAG:巴比特資訊 |