主頁 > 區塊鏈 > 分布式一致性演算法,你確定不了解一下?

分布式一致性演算法,你確定不了解一下?

2020-09-10 03:06:51 區塊鏈

 

  • 集中式與分布式
    • 集中式
    • 分布式
    • 分布式事務
  • 一致性協議
    • 2PC:Two-Phase Commit二階段提交協議
    • 3PC:Three-phase Commit 三階段提交協議
    • Paxos演算法
    • RAFT演算法
  • 總結

 

集中式與分布式

集中式

就是將所有的業務都部署在一個中心主機(節點)上,所有的功能都由這個主機集中處理,

特點

部署結構簡單、不需要考慮多個主機之間的分布式協作問題,

分布式

分布式系統:指將硬體或者軟體組件部署在不同的網路計算機上,彼此之間僅僅通過訊息傳遞進行通信和協調的系統,

特點

  1. 分布性:多臺計算機可空間上隨意分布,跨機房、跨城市都可以,
  2. 對等性:分布式系統中沒有主/從之分,都是對等的節點或者服務,
    • 副本:指分布式系統對資料或服務冗余,以此提供高可用,
    • 資料副本:是指在不同的節點上持久化一份資料,當某一個節點上存盤的資料丟失時,可以從副本上讀取到該資料,這是分布式系統資料丟失問題最為有效的手段,
    • 服務副本:指多個節點提供同樣的服務,每個節點都有能力接收來自外部的請求并進行相應的處理,
  3. **并發性:**分布式系統中的多個節點,可能會并發地操作一些共享資源,諸如資料庫或分布式存盤等,
  4. **缺乏全域時鐘:**一個典型的分布式系統是由一系列在空間上隨意分布的行程組成,行程彼此之間通過訊息進行通信,因此,無法判斷兩個事件誰先誰后,可使用邏輯時鐘,
  5. **故障總是會發生:**除非需求指標允許,在系統設計時不能放過任何例外情況,如宕機、網路磁區、網路超時等,

每一次分布式系統的請求與回應三態:成功,失敗,超時,

超時情況:

  1. 沒有成功發送到接收方,在發送程序中發生資訊丟失,
  2. 成功發送到接收方,并成功處理,但回傳給發送方程序中發生資訊丟失,

所以需要有冪等,

分布式事務

分布式事務是指事務的參與者支持事務的服務器資源服務器以及事務管理器分別位于分布式系統的**不同節點之上,**通常一個分布式事務中會涉及對多個資料源或業務系統的操作,分布式事務也可以被定義為一種嵌套型的事務,同時也就具有了ACID事務的特性,

CAP理論

  • Consistency(一致性):資料一致更新,所有資料變動都是同步的(強一致性),

  • Availability(可用性):好的回應性能

  • Partition tolerance(磁區容錯性) :可靠性

磁區容錯性:分布式系統在遇到任何網路磁區故障的時候,任然需要保證對外提供滿足一致性和可用性的服務,除非是整個網路環境都發生了故障,

網路磁區:是指在分布式系統中,不同的節點分布在不同的子網路(機房或異地網路等)中,由于一些特殊的原因導致這些子網路之間出現網路不連通的狀況,但各個子網路的內部網路是正常的,從而導致整個網路的環境被切成了若干個孤立的區域,

定理:任何分布式系統只可同時滿足二點,沒法三者兼顧,

需要根據實際業務進行取舍,

  • CA系統(放棄P):指將所有資料(或者僅僅是那些與事務相關的資料)都放在一個分布式節點上,就不會存在網路磁區,所以強一致性以及可用性得到滿足,
  • CP系統(放棄A):如果要求資料在各個服務器上是強一致的,然而網路磁區會導致同步時間無限延長,那么如此一來可用性就得不到保障了,堅持事務ACID(原子性、一致性、隔離性和持久性)的傳統資料庫以及對結果一致性非常敏感的應用通常會做出這樣的選擇,
  • AP系統(放棄C):這里所說的放棄一致性,并不是完全放棄資料一致性,而**是放棄資料的強一致性,而保留資料的最終一致性,**如果即要求系統高可用又要求磁區容錯,那么就要放棄一致性了,因為一旦發生網路磁區,節點之間將無法通信,為什么滿足高可用,每個節點只能用本地資料提供服務,這樣就會導致資料不一致,一些遵守BASE原則資料庫,(如:Cassandra、CouchDB等)往往會放寬對一致性的要求(滿足最終一致性即可),一次來獲取基本的可用性,

BASE理論

  • Basically Available基本可用:指分布式系統在出現不可預知的故障的時候,允許損失部分可用性——但不是系統不可用,
    • 回應時間上的損失:假如正常一個在線搜索0.5秒之內回傳,但由于故障(機房斷電或網路不通),查詢結果的回應時間增加到1—2秒,
    • 功能上的損失:如果流量激增或者一個請求需要多個服務間配合,而此時有的服務發生了故障,這時需要進行服務降級,進而保護系統穩定性,
  • Soft state軟狀態:允許系統在不同節點的資料副本之間進行資料同步的程序存在延遲,
  • Eventually consistent最終一致:最終資料是一致的就可以了,而不是時時高一致,

BASE思想主要強調基本的可用性,如果你需要High 可用性,也就是純粹的高性能,那么就要以一致性或容錯性為犧牲,

一致性協議

一致性協議:為了使基于分布式系統架構下的所有節點進行事務處理程序中能夠保持原子性和一致性而設計的一種演算法,通常有二階段提交協議、三階段提交協議、PaxosZookeeper的ZAB協議、Raft、Pbft等,

2PC、3PC引入了兩個概念,

**協調者:**負責統一調度分布式節點的執行邏輯

參與者:被調度的分布式節點

2PC:Two-Phase Commit二階段提交協議

二階段主要采取:先嘗試,后提交,

2PC優缺點

  • 二階段優點:原理簡單,實作方便;解決分布式事務的原子性,要么全部執行成功,要么全部執行失敗
  • 二階段缺點
    1. 同步阻塞:在提交執行程序中,各個參與者都在等待其他參與者回應的程序中,將無法執行其他操作,
    2. 單點問題:只有一個協調者,協調者掛掉,整個二階段提交流程無法執行;更為嚴重是,在階段二時,協調者出現問題,那參與者將會一直處于鎖定事務狀態中,無法繼續完成事務操作,
    3. 資料不一致:在階段二,協調者發送了Commit請求后,發生了網路故障,導致只有部分參與者收到commit請求,并執行提交操作,就導致資料不一致問題,
    4. 太過保守:階段一中,若參與者出現故障,協調者無法收到參與者的詢問反饋,只能通過自身超時機制來中斷事務,這樣的策略顯得過于保守,

3PC:Three-phase Commit 三階段提交協議

因為2PC有很多問題,所以在2PC基礎上,改進為3PC:canCommit、preCommit、doCommit三個階段,

改進點:

  1. 3PC是將2PC的第一階段分為兩個階段,先發起事務詢問,再執行事務,
  2. 同時在協調者、參與者中引入超時機制,

3PC-第一階段3PC-第一階段 3PC-事務中斷13PC-事務中斷1 3PC-第三階段3PC-第三階段 3PC-事務中斷23PC-事務中斷2

3PC優缺點

  • 三階段優點:

    • 降低了二階段的同步阻塞范圍(在第二階段,只要參與者收到preCommit請求,就會執行事務,此后,不管能不能收到協調者的doCommit請求,都會執行事務提交,不會出現阻塞問題)
    • 解決單點問題:進入階段三會出現兩種情況: 1:協調者出現問題; 2:協調者與參與者之間出現網路故障;
      • 都導致參與者無法收到doCommit請求,但參與者在超時之后都會提交事務
  • 三階段缺點

    • 資料不一致:參與者收到preCommit請求,此時如果出現網路磁區,協調者與參與者之間無法進行正常網路通信,參與者在超時之后還是會進行事務提交,就會出現資料不一致,

所以2PC、3PC各有優缺點,可根據實際業務場景進行選擇,既然2PC、3PC都會產生資料不一致,下面我們來看一看分布式領域常用的一致性演算法,

Paxos演算法

Paxos演算法是萊斯利·蘭伯特(Leslie Lamport)1990年提出的基于訊息傳遞具有高度容錯特性的一致性演算法,是目前公認的解決分布式一致性問題最有效的演算法之一, Paxos演算法解決的問題是一個分布式系統如何就某個值(決議)達成一致,

Paxos以及下面的RAFT都假設不存在拜占庭將軍問題,只考慮節點宕機、網路磁區、訊息不可靠等問題,屬于CFT(Crash Fault Tolerance)演算法,

系統中有三種角色proposers,acceptors,和 learners,可以一個節點多個角色,

  1. proposers 提出提案,提案資訊包括提案編號和提議的 value;
  2. acceptor 收到提案后可以接受(accept)提案,若提案獲得多數派(majority)的 acceptors 的接受,則稱該提案被批準(chosen);
  3. learners 只能“學習”被批準的提案,

多數派:指 n / 2 +1 ,n為總節點數量,

Paxos演算法分為兩個階段,具體如下:

  • 階段一:

    • Proposer選擇一個提案編號N,然后向半數以上的Acceptor發送編號為N的Prepare請求

    • 如果一個Acceptor收到一個編號為N的Prepare請求,且N大于該Acceptor已經回應過的所有Prepare請求的編號,那么它就會將它已經接受過的編號最大的提案(如果有的話)作為回應反饋給Proposer,同時該Acceptor承諾不再接受任何編號小于N的提案

      例如:一個acceptor已經回應過的所有prepare請求對應的提案編號分別為1、2、,,,,5和7,那么該acceptor在接收到一個編號為8的prepare請求后,就會將編號為7的提案作為回應反饋給Proposer,

  • 階段二

    • 如果Proposer收到半數以上Acceptor對其發出的編號為N的Prepare請求的回應,那么它就會發送一個針對**[N,V]提案Accept請求半數以上的Acceptor,注意:V就是階段一收到的回應中編號最大的提案的value**,如果回應中不包含任何提案,那么V就由Proposer自己決定(任意值)
    • 如果Acceptor收到一個針對編號為N的提案的Accept請求,只要該Acceptor沒有對編號大于NPrepare請求做出過回應,它就接受該提案

注意:Proposer可以隨時丟棄提案,并且提出新的提案;Acceptor也可以隨時回應,接受編號更大的提案,

思考:如果兩個Proposer還處于第一階段時,互相提出編號更大的提案?會發生什么?

這時候會出現“活鎖”狀態,陷入了無限死回圈中(破壞了演算法活性),

那需要怎么防止呢?

可以選出一個主Proposer,只有主Proposer可以提出提案,

至于怎么選擇,不屬于Paxos的范疇,可以參考RAFT使用競選,誰快誰當選;也可以參考PBFT的依次成為leader等,

RAFT演算法

RAFT演算法分為兩個階段:Leader選舉,日志復制,也有三種角色,分別為:

  1. Leader(領導者):負責發送要進行共識的資料,如果客戶端發送的資料不是發送到Leader而是其他角色,其他角色會進行轉發至Leader,
  2. Follower(追隨者):參與共識的角色
  3. Candidate(候選者):如果Follower沒有收到Leader的心跳回應超過150——300ms,會進行Leader選舉,

每個節點的身份都可以是以上三種中的其一,

  • Leader選舉階段

    • 所有節點初始狀態為Follower狀態,此時沒有Leader,肯定會與Leader的心跳超時(一般150——300ms,隨機的,這樣就是想誰先發出競選,誰當選leader),此時Candidate就會發出leader競選給其他節點(大家快選我啊,leader掛掉了);其他節點收到競選請求,會回應同意,當一個Candidate收到大多數(n/2 + 1)節點的回復,就成為leader,然后與Candidate保持心跳連接,Raft有個Term(任期)的概念,只有在發生Leader選舉階段,term+1,表示新的leader產生,掛掉的節點,或者掛掉的leader重啟后,會發現自己的term小于最新的,此時就會切換到日志復制,去同步之前丟失的訊息,
    • 如果同時有多個Candidate發出競選,并且都沒有獲得大多數投票,會一直進行競選,直到選出leader
  • 日志復制(是一個2PC提交)

    • leader收到客戶端或者其他節點轉發過來需要共識的值,會跟隨心跳一起廣播給其他節點,進行寫入
    • 其他節點寫入后回應成功給leader,當leader收到大多數的follower回應的成功,發出commit命令
    • 其他節點收到commit后,進行事務提交,回應成功為leader,leader收到大多數的commit成功,Raft完成,

    如果leader沒有掛掉,或者發生網路磁區,就會一直是這個leader進行事務發起,

我這里只是對于演算法正常流程的描述,強烈推薦影片版RAFT(看不懂算我輸,不過記得回來點個贊,哈哈哈)

總結

本文從集中式到分布式理論CAP、BASE以及2PC、3PC流程,描述了分布式事務常用的思想;再詳細說明了Paxos以及Raft演算法流程等,Paxos以及Raft演算法屬于CFT演算法范疇,都能容忍最多n/2(向下取整)的節點出現宕機、網路磁區等的強一致性演算法,Paxos屬于比較晦澀的演算法,工程實作比較復雜,但其思想很有借鑒意義,有興趣的可以去看看Paxos的推導程序,個人認為很有意思,能夠想明白每一步,對于理解其他演算法,也大有幫助;也可以去看看Zookeerper的ZAB演算法,后面有機會專門寫一篇,但這些演算法不能真正意義上用于區塊鏈共識,畢竟leader說什么,其他節點就會執行,沒有節點之間的共識程序,那什么演算法可以用于區塊鏈共識呢?

參考書籍

《從Paxos到Zookeeper++分布式一致性原理與實踐++》

參考鏈接

PAXOS演算法

RAFT影片版

本文使用 mdnice 排版

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/635.html

標籤:區塊鏈

上一篇:北斗同步時鐘(主時鐘控制器)應用于電氣化鐵道遠動系統

下一篇:Substrate開發者檔案入口收藏

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more