DHT與分佈式一致性

在分佈式系統中,必須得想辦法保持各個節點的狀態和數據是一致的,不然就會亂了套。在傳統的數據庫系統,是經過事務(其實就是交易的意思)機制來實現的,具體實現方法是加鎖,包括數據集、記錄或字段的列級鎖,並且是由主節點統一控制的。在同一臺機器裏,加鎖、寫入數據、解鎖的時間是比較短的,可以儘量減小數據的併發訪問衝突。git

可是,在分佈式系統裏,因爲網絡延遲的存在,鎖的維護會比較麻煩,並且容易出現持有鎖的節點失效的問題,若是鎖的節點出問題,那麼全部的鎖也就失效了,從而致使數據混亂。所以,須要創建新的分佈式鎖的機制。github

分佈式鎖包括兩個方面,即數據一致性和交易(事務,即修改)過程一致性。數據庫

第一個方面是如何可以確認數據是一致的,通常經過DHT(分佈式哈希表)來實現,只要任何一項數據更新,都會觸發整個DHT發生改變,經過MT(Merkle Tree)數據結構來實現,能夠高效地檢測到數據的變化。apache

第二個方面是若是數據改變了,如何將數據進行同步,從而動態地保持一致,因爲網絡延遲致使中間會出現不一致的時間段,因此也包括如何對不一致的狀態進行處理。分佈式的數據同步包括採用的通信傳輸協議、數據握手協議、事務表示和鎖的狀態的考慮。緩存

在局域網上,etcdzookeepper 是使用較爲普遍的分佈式鎖支持軟件,爲分佈式系統提供集羣狀態的一致性維護和加鎖機制。區塊鏈軟件主要實現了廣域分佈式的數據存儲和交易過程的一致性,能夠運行在廣域網上。網絡

比特幣(Bitcoin)、以太坊(Ethereum)、分佈式帳本(HyperLedger)是目前較爲普遍的廣域分佈式區塊鏈架構平臺。其中,提供了基礎數據的存儲、數據的加密交易及其一致性機制。可是,目前還存在不少缺陷:存儲並不是徹底分佈式而是複製模式,會有數據量過大後同步慢、存儲困難的狀況;數據交易(更改記錄)是經過工做量(計算量)證實等機制實現,並不能徹底防止惡意更改的可能;數據出現過不一致的狀況,不得不經過硬分叉的方式來解決;一致性協議性能不高,尚難以知足大規模高頻交易的須要。數據結構

IPFS是採用DHT存儲機制和BT/P2P傳輸機制的網絡協議,能夠在全球範圍內統一管理一個超大的文件系統。每個文件的改變都會觸發整個DHT的變化和重構,從而對文件提供惟一的永久標識。利用該標識,能夠在任何一個節點上緩存文件,供任何一個節點訪問,從而提供全球級別的分佈式存儲體系。不過,因爲目前應用規模尚小,這一巨大的DHT的變動是否真能知足全球規模級別的文檔統一存儲還有待時間的檢驗;因爲是無中心的架構,對於信息查找的支持仍是一個難點;目前的標識所用的HashCode不便於搜索(須要點對點分享),IPNS域名的支持性能比較低;缺乏版本管理的機制和工具。架構

由上面能夠看出,分佈式一致性目前雖然取得了很大的進步,但仍然存在巨大的挑戰。並且,數據的一致性並非最終目的,讓使用者得到一致的信息和對信息進行管理、利用纔是目的,分佈式機制還有很長的路要走。併發

相關文章
相關標籤/搜索