區塊鏈與分布式系統一致性解決方案

2021-10-25 03:56:42 字數 2611 閱讀 5616

分布式系統中的節點通訊存在兩種模型:共享記憶體(shared memory)和訊息傳遞(messages passing)。基於訊息傳遞通訊模型的分布式系統,不可避免的會發生以下錯誤:程序可能會慢、被殺死或者重啟,訊息可能會延遲、丟失、重複。分布式系統面臨的這個問題就是拜占庭將軍問題,對於拜占庭將軍問題,不同系統給出了不同的解決方案。拜占庭將軍問題提現在區塊鏈系統中就是:對於一筆合規交易如何讓大家能夠達成一確認;在其他分布式系統中是如何保證資料一致性。

拜占庭將軍問題最早由圖靈獎得主 leslie lamport 老爺子於 1982 年提出:一組拜占庭將軍分別各率領一支軍隊共同圍困一座城市。為了簡化問題,將各支軍隊的行動策略限定為進攻或撤離兩種。因為部分軍隊進攻部分軍隊撤離可能會造成災難性後果,因此各位將軍必須通過投票來達成一致策略,即所有軍隊一起進攻或所有軍隊一起撤離。因為各位將軍分處城市不同方向,他們只能通過信使互相聯絡。在投票過程中每位將軍都將自己投票給進攻還是撤退的資訊通過信使分別通知其他所有將軍,這樣一來每位將軍根據自己的投票和其他所有將軍送來的資訊就可以知道共同的投票結果而決定行動策略。

系統的問題在於,可能將軍**現叛徒,他們不僅可能向較為糟糕的策略投票,還可能選擇性地傳送投票資訊。假設有9位將軍投票,其中1名叛徒。8名忠誠的將軍**現了4人投進攻,4人投撤離的情況。這時候叛徒可能故意給4名投進攻的將領送信表示投票進攻,而給4名投撤離的將領送信表示投撤離。這樣一來在4名投進攻的將領看來,投票結果是5人投進攻,從而發起進攻;而在4名投撤離的將軍看來則是5人投撤離。這樣各支軍隊的一致協同就遭到了破壞。

對映到計算機領域就是:在乙個分布式資料庫系統中,如果各節點的初始狀態一致,每個節點都執行相同的操作序列,那麼他們最後能得到乙個一致的狀態。

所謂共識,簡單理解就是指大家都達成一致的意思。其實在現實生活中,有很多需要達成共識的場景,比如開會討論,雙方或多方簽訂乙份合作協議等。

​ 而在區塊鏈系統中,每個節點必須要做的事情就是讓自己的賬本跟其他節點的賬本保持一致。如果是在傳統的軟體結構中,這幾乎就不是問題,因為有乙個中心伺服器存在,也就是所謂的主庫,其他的從庫向主庫看齊就行了。

​ 在現實生活中,很多事情人們也都是按照這種思路來的,比如企業老闆發布乙個通知,員工照著做。但是區塊鏈是乙個分布式的對等網路結構,在這個結構中沒有哪個節點是「老大」,一切都要商量著來。

​ 所以在區塊鏈系統中,如何讓每個節點通過乙個規則將各自的資料保持一致是乙個很核心的問題,這個問題的解決方案就是制定一套共識演算法。

​ 共識演算法其實就是乙個規則,每個節點都按照這個規則去確認各自的資料。我們暫且拋開演算法的原理,先來想一想在生活中我們會如何解決這樣乙個問題:假設一群人開會,這群人中沒有乙個領導或者說老大,大家各抒己見,那麼最後如何統一出乙個決定出來呢?一般,我們一般會在某乙個時間段中選出乙個人,那個人負責彙總大家的內容,然後發布完整的意見,其他人投票表決,每個人都有機會來做彙總發表,最後誰的支持者多就以誰的最終意見為準。

這種思路其實就算是一種共識演算法了。然而在實際過程中,如果人數不多並且數量是確定的還好處理,如果人數很多且數量也不固定,那就很難通過這種方式投票決定了,效率太低。我們需要通過一種機制篩選出最有代表性的人,在共識演算法中就是篩選出具有代表性的節點

這就需要設計出一組條件,而這組條件就是我們所談的共識演算法。目前主流的共識演算法有很多:比如 pow(proof of work,工作量證明)、pos(proof of stake,權益證明)、dpos(delegate proof of stake,委託權益證明)、pbft(practical byzantine fault tolerance,實用拜占庭容錯演算法)等。區塊鏈系統就是通過這種篩選方式(共識演算法)來使得網路中各個節點的賬本資料達成一致的。

我們常說的一致性問題就是:對於同乙個資料的多個副本之間,如何保持其對外表現的資料一致性。而共識則不同。分布式共識問題,簡單說,就是在乙個或多個程序提議了乙個值應當是什麼後,採用一種大家都認可的方法,使得系統中所有程序對這個值達成一致意見。

最先創造出一統共識演算法江湖的paxos,是提出拜占庭問題的圖靈獎獲得者 leslie lamport 老爺子。paxos演算法解決的問題正是分布式一致性問題,即乙個分布式系統中的各個程序如何就某個值(決議)達成一致。但是 paxos 演算法依然十分難以理解。並且,paxos 自身的演算法結構需要進行大幅的修改才能夠應用到實際的系統中。這些都導致了工業界和學術界都對 paxos 演算法感到十分頭疼。

raft 是一種為了管理複製日誌的一致性演算法。它提供了和 paxos 演算法相同的功能和效能,但是它的演算法結構和 paxos 不同,使得 raft 演算法更加容易理解並且更容易構建實際的系統。為了提公升可理解性,raft 將一致性演算法分解成了幾個關鍵模組,例如領導人選舉、日誌複製和安全性。同時它通過實施乙個更強的一致性來減少需要考慮的狀態的數量。從乙個使用者研究的結果可以證明,對於學生而言,raft 演算法比 paxos 演算法更加容易學習。raft算**文

位元幣的共識演算法:工作量證明(proof of work,以下簡稱 pow)拜占庭問題難解,傳統的破解思路是具有拜占庭容錯的分布式一致性演算法。而位元幣的創始人中本聰提出了另一種思路,這就是**工作量證明(**為了防止節點作惡,需要提高生成乙個區塊的難度(工作量證明),客戶端需要做一定難度的工作得出乙個結果,來防止臥底節點做惡)。

分布式系統 一致性模型

分布式系統中乙個重要的問題就是資料複製,資料複製一般是為了增強系統的可用性或提高效能。而實現資料複製的乙個主要難題就是保持各個副本的一致性。本文首先討論資料複製的場景中一致性模型如此重要的原因,然後討論一致性模型的含義,最後分析常用的一致性模型。資料複製主要的目的有兩個 可用性和效能。首先資料複製可...

分布式系統 一致性模型

原創 阿里云云棲社群 2019 03 13 13 00 00 分布式系統中乙個重要的問題就是資料複製,資料複製一般是為了增強系統的可用性或提高效能。而實現資料複製的乙個主要難題就是保持各個副本的一致性。本文首先討論資料複製的場景中一致性模型如此重要的原因,然後討論一致性模型的含義,最後分析常用的一致...

分布式系統一致性分類

找到了一篇比較詳細的介紹。詳細連線 大概內容 一致性的角度 以資料為中心的一致性模型 以客戶為中心的一致性模型 保證最低的序列化,以達到最好的效率。以資料為中心的一致性模型 一致性模型 嚴格一致性 因果一致性 順序一致性 fifo一致性 fifo 保證單程序的寫順序 同步變數的一致性 弱一致性 釋放...