之前提到的分布式選舉問題,是通過分布式選舉演算法從多個節點中選出乙個主節點。不管是哪種選舉演算法,幾乎都有乙個共同特點:每個節點都有選舉權和被選舉權,當某個節點得到了大部分節點的同意或認可後成為主節點,然後主節點向其他節點宣告主權。從本質上看,分布式選舉問題,其實就是傳統的分布式共識方法,主要是基於多數投票策略實現的。
。區塊鏈是由包含交易資訊的區塊從後向前有序鏈結起來的資料結構,其中區塊是指很多交易資料的集合,每個區塊包括區塊頭和區塊體,區塊頭包括前一區塊的雜湊值、本區塊的雜湊值和時間戳;區塊體用來儲存交易資料。
5.1.1 pow 演算法獲取記賬權的原理
利用區塊的 index、前乙個區塊的雜湊值、交易的時間戳、區塊資料和 nonce 值,通過 sha256 雜湊演算法計算出乙個雜湊值,並判斷前 k 個值是否都為 0。如果不是,則遞增 nonce 值,重新按照上述方法計算;如果是,則本次計算的雜湊值為要解決的題目的正確答案。誰最先計算出正確答案,誰就獲得這個區塊的記賬權。
請注意:nonce 值是用來找到乙個滿足雜湊值的數字;k 為雜湊值前導零的個數,標記了計算的難度,0 越多計算難度越大。
達成共識的過程,就是獲得記賬權的節點將該區塊資訊廣播給其他節點,其他節點判斷該節點找到的區塊中的所有交易都是有效且之前未存在過的,則認為該區塊有效,並接受該區塊,達成一致。
5.1.2 pow共識記賬的過程
以分散在世界各地的 5 臺伺服器為例,說明基於 pow 的共識記賬過程。假設客戶端 a 產生乙個新的交易,基於 pow 的共識記賬過程為:
5.1.3 pow應用場景
目前,位元幣平台採用了 pow 演算法,屬於區塊鏈 1.0 階段,其重心在於貨幣,位元幣大約 10min 才會產生乙個區塊,區塊的大小也只有 1mb,僅能夠包含 3000~4000 筆交易,平均每秒只能夠處理 5~7(個位數)筆交易。
5.1.4 pow 優缺點
優點:較高的容錯機制;
缺點:共識達成的周期長、效率低,資源消耗大;
5.2.1 pos 演算法的核心原理
5.2.2 pos共識記賬的過程
假設乙個公鏈網路中,共有 3 個節點,a、b和c。其中 a 節點擁有 10000 個幣,總共持有 30 天,而 b 和 c 節點分別有 1000 和 2000 個幣,分別持有 15 和 20 天。通過 pos 演算法決定區塊記賬權的流程和 pow 演算法類似,唯一不同的就是,每個節點在計算自己記賬權的時候,通過計算自己的股權或權益來評估,如果發現自己權益最大,則將自己的區塊廣播給其他節點,當然必須保證該區塊的有效性。
5.2.3 pos應用場景
以太坊平台屬於區塊鏈 2.0 階段,在區塊鏈 1.0 的基礎上進一步強調了合約,採用了 pos 演算法。
5.2.4 pos優缺點
優點:1、pos 不需要消耗大量的電力就能夠保證區塊鏈網路的安全性;2、縮短了達成共識所需要的時間。
缺點:整個系統的安全性實際上被持幣數量較大的一部分人掌握,容易出現壟斷現象。
為了解決 pos 演算法的壟斷問題,2014 年位元股(bitshares)的首席開發者丹尼爾 · 拉里默(dan larimer)提出了委託權益證明法,也就是 dpos 演算法。
5.3.1 dpos 演算法的核心原理
在 dpos 演算法中,通常會選出 k(比如 101) 個受託節點,它們的權利是完全相等的。受託節點之間爭取記賬權也是根據算力進行競爭的。只要受託節點提供的算力不穩定,計算機宕機或者利用手中的權力作惡,隨時可以被握著貨幣的普通節點投票踢出整個系統,而後備的受託節點可以隨時頂上去。
5.3.2 dpos 應用場景
dpos 在位元股和 steem 上已執行多年,整個網路中選舉出的多個節點能夠在 1s 之內對 99.9% 的交易進行確認。此外,dpos在 eos(enterprise operation system,為商用分布式應用設計的一款區塊鏈作業系統)中也有廣泛應用,被稱為區塊鏈 3.0 階段。
5.3.3 dpos 優缺點
優點:解決了所有節點均參與競爭導致訊息量大、達成一致的周期長的問題。即:dpos 能耗更低,具有更快的交易速度。每隔一定週期會調整受託人,避免受託人造假和獨權。
缺點:由於大多數持幣人通過受託人參與投票,投票的積極性並不高;且一旦出現故障節點,dpos 無法及時做出應對,導致安全隱患。
一致性是指,分布式系統中的多個節點之間,給定一系列的操作,在約定協議的保障下,對外界呈現的資料或狀態是一致的。共識是指,分布式系統中多個節點之間,彼此對某個狀態達成一致結果的過程。
也就是說,一致性強調的是結果,共識強調的是達成一致的過程,共識演算法是保障系統滿足不同程度一致性的核心技術。
分布式技術架構原理解析之協調與同步(五)分布式鎖
前面的文章詳細介紹了 分布式互斥 解釋了同一臨界資源 共享資源 同一時刻只能被乙個程式訪問的問題,也就是說只有獲得訪問許可權的程序才可以訪問共享資源,而此時其他程序必須等待擁有該許可權的程序釋放許可權。那麼在訪問共享資源時,這個許可權是如何設定或產生的呢?以及設定或產生這個許可權的工作原理是什麼?本...
memcache分布式原理解析
所謂的分布式就是將不同的資料放在不同的伺服器上,獲取資料時需要根據路由從不同的伺服器上獲取。在memcache中,伺服器端並不支援分布式,而只是在客戶端程式中設定分布式。如果有多個memcache伺服器,那麼他們之間並不互相通訊,資料也無法同步。所以在很多語言對memcache操作的類庫中都可以配置...
分布式事務原理解析
了解過tcc分布式事務的都知道它有三個階段 try,confirm,cancel,但很多文章就只有原理圖,和對原理圖的解釋,看一遍也留不下印象,這裡用實際場景舉個例子,說明tcc分布式事務原理 tcc分布式框架推薦 bytetcc,tcc transaction,himly 最終一致性方案一般都是有...