就是將全部的業務都部署在一箇中心主機(節點)上,全部的功能都由這個主機集中處理。算法
特色數據庫
部署結構簡單、不須要考慮多個主機之間的分佈式協做問題。服務器
分佈式系統:指將硬件或者軟件組件部署在不一樣的網絡計算機上,彼此之間僅僅經過消息傳遞進行通訊和協調的系統。網絡
特色架構
每一次分佈式系統的請求與響應三態:成功,失敗,超時。併發
超時狀況:編輯器
因此須要有冪等。分佈式
分佈式事務是指事務的參與者,支持事務的服務器,資源服務器以及事務管理器分別位於分佈式系統的**不一樣節點之上。**一般一個分佈式事務中會涉及對多個數據源或業務系統的操做。分佈式事務也能夠被定義爲一種嵌套型的事務,同時也就具備了ACID事務的特性。性能
Consistency(一致性):數據一致更新,全部數據變更都是同步的(強一致性)。學習
Availability(可用性):好的響應性能
Partition tolerance(分區容錯性) :可靠性
分區容錯性:分佈式系統在遇到任何網絡分區故障的時候,任然須要保證對外提供知足一致性和可用性的服務,除非是整個網絡環境都發生了故障。
網絡分區:是指在分佈式系統中,不一樣的節點分佈在不一樣的子網絡(機房或異地網絡等)中,因爲一些特殊的緣由致使這些子網絡之間出現網絡不連通的情況,但各個子網絡的內部網絡是正常的,從而致使整個網絡的環境被切成了若干個孤立的區域。
須要根據實際業務進行取捨。
BASE思想主要強調基本的可用性,若是你須要High 可用性,也就是純粹的高性能,那麼就要以一致性或容錯性爲犧牲。
一致性協議:爲了使基於分佈式系統架構下的全部節點進行事務處理過程當中可以保持原子性和一致性而設計的一種算法。一般有二階段提交協議、三階段提交協議、Paxos、Zookeeper的ZAB協議、Raft、Pbft等。
2PC、3PC引入了兩個概念。
**協調者:**負責統一調度分佈式節點的執行邏輯
參與者:被調度的分佈式節點
二階段主要採起:先嚐試,後提交。
由於2PC有不少問題,因此在2PC基礎上,改進爲3PC:canCommit、preCommit、doCommit三個階段。
改進點:
3PC-第一階段 3PC-事務中斷1 3PC-第三階段 3PC-事務中斷2
三階段優勢:
三階段缺點:
因此2PC、3PC各有優缺點,可根據實際業務場景進行選擇。既然2PC、3PC都會產生數據不一致。下面咱們來看一看分佈式領域經常使用的一致性算法。
Paxos算法是萊斯利·蘭伯特(Leslie Lamport)1990年提出的基於消息傳遞且具備高度容錯特性的一致性算法,是目前公認的解決分佈式一致性問題最有效的算法之一。 Paxos算法解決的問題是一個分佈式系統如何就某個值(決議)達成一致。
Paxos以及下面的RAFT都假設不存在拜占庭將軍問題,只考慮節點宕機、網絡分區、消息不可靠等問題。屬於CFT(Crash Fault Tolerance)算法。
系統中有三種角色proposers,acceptors,和 learners。能夠一個節點多個角色。
多數派:指 n / 2 +1 。n爲總節點數量。
Paxos算法分爲兩個階段。具體以下:
階段一:
Proposer選擇一個提案編號N,而後向半數以上的Acceptor發送編號爲N的Prepare請求。
若是一個Acceptor收到一個編號爲N的Prepare請求,且N大於該Acceptor已經響應過的全部Prepare請求的編號,那麼它就會將它已經接受過的編號最大的提案(若是有的話)做爲響應反饋給Proposer,同時該Acceptor承諾再也不接受任何編號小於N的提案。
例如:一個acceptor已經響應過的全部prepare請求對應的提案編號分別爲一、二、。。。。5和7,那麼該acceptor在接收到一個編號爲8的prepare請求後,就會將編號爲7的提案做爲響應反饋給Proposer。
階段二
注意:Proposer能夠隨時丟棄提案,而且提出新的提案;Acceptor也能夠隨時響應,接受編號更大的提案。
思考:若是兩個Proposer還處於第一階段時,互相提出編號更大的提案?會發生什麼?
這時候會出現「活鎖」狀態,陷入了無限死循環中(破壞了算法活性)。
那須要怎麼防止呢?
能夠選出一個主Proposer,只有主Proposer能夠提出提案。
至於怎麼選擇,不屬於Paxos的範疇,能夠參考RAFT使用競選,誰快誰當選;也能夠參考PBFT的依次成爲leader等。
RAFT算法分爲兩個階段:Leader選舉,日誌複製。也有三種角色,分別爲:
每一個節點的身份均可以是以上三種中的其一。
Leader選舉階段:
日誌複製(是一個2PC提交)
若是leader沒有掛掉,或者發生網絡分區,就會一直是這個leader進行事務發起。
我這裏只是對於算法正常流程的描述,強烈推薦動畫版RAFT(看不懂算我輸,不過記得回來點個贊,哈哈哈)
本文從集中式到分佈式理論CAP、BASE以及2PC、3PC流程,描述了分佈式事務經常使用的思想;再詳細說明了Paxos以及Raft算法流程等。Paxos以及Raft算法屬於CFT算法範疇,都能容忍最多n/2(向下取整)的節點出現宕機、網絡分區等的強一致性算法。Paxos屬於比較晦澀的算法,工程實現比較複雜,但其思想頗有借鑑意義。有興趣的能夠去看看Paxos的推導過程,我的認爲頗有意思,可以想明白每一步,對於理解其餘算法,也大有幫助;也能夠去看看Zookeerper的ZAB算法,後面有機會專門寫一篇。但這些算法不能真正意義上用於區塊鏈共識,畢竟leader說什麼,其餘節點就會執行,沒有節點之間的共識過程。那什麼算法能夠用於區塊鏈共識呢?
參考書籍:
《從Paxos到Zookeeper++分佈式一致性原理與實踐++》
參考連接:
本文使用 mdnice 排版