一致性
對某個指定的客戶端來說,讀操作保證能夠返回最新的寫操作結果。
可用性非故障的節點在合理的時間內返回合理的響應。
分割槽容忍性
當出現網路分割槽後,系統能夠繼續「履行職責」。
cap關注的粒度是資料,而不是整個系統。
一、拜占庭將軍問題
在很久很久以前,拜占庭是東羅馬帝國的首都。那個時候羅馬帝國國土遼闊,為了防禦目的,因此每個軍隊都分隔很遠,將軍與將軍之間只能靠信使傳遞訊息。
在打仗的時候,拜占庭軍隊內所有將軍必需達成一致的共識,才能更好地贏得勝利。但是,在軍隊內有可能存有叛徒,擾亂將軍們的決定。
這時候,在已知有成員不可靠的情況下,其餘忠誠的將軍需要在不受叛徒或間諜的影響下達成一致的協議。拜占庭將軍問題是計算機科學家萊斯利·蘭伯特提出的有關
計算機網路中所存在的一致性問題
的問題。
二、raft演算法流程
raft演算法依靠狀態機
和主從同步
的方式,在各個節點之間實現資料的一致性。
raft演算法的兩個核心要點:
同步資料(log replication)
選舉主節點
三種角色、狀態:
選舉流程:
所有節點的初始狀態都是follower,如果follower超過一段時間沒有接收到leader的心跳,就會成為candidate 。
candidate 會向follower發起投票,讓follower將票投給自己
follower將會投出它們的票(如果有3個candidate,那這個follower要投給誰?)
得到票數最多的candidate 成為主節點
同步資料
所有的修改操作都要經過leader,leader會等待,直到majority(大多數)節點都被修改,leader會commit這個修改。
三、raft演算法細節
選舉超時
follower等待,直到成為candidate的時間,選舉超時為150ms-300ms之間的任意值
follower超時之後,成為candidate,開始選舉流程,給它自己投票,並傳送投票請求給其他節點
其他節點投票給candidate,並reset自己的選舉超時時間
當candidate有majority(大多數)選票,就成為leader
心跳超時
直到follower沒有接收到leader的心跳,然後開始選舉過程,成為candidate
分布式系統 Raft演算法
什麼是拜占庭將軍問題?在很久很久以前,拜占庭是東羅馬帝國的首都。那個時候羅馬帝國國土遼闊,為了防禦目的,因此每個軍隊都分隔很遠,將軍與將軍之間只能靠信使傳遞訊息。在打仗的時候,拜占庭軍隊內所有將軍必需達成一致的共識,才能更好地贏得勝利。但是,在軍隊內有可能存有叛徒,擾亂將軍們的決定。這時候,在已知有...
分布式 Raft演算法
raft也是分布式一致性協議,主要是用來競選主節點。有三種節點 follower,candidate和leader。leader會週期性的傳送心跳給follower。每個follower都設定了乙個隨機的競選超時時間,一般為150ms 300ms,如果在這個時間內沒有收到leader的心跳包,就會變...
分布式系統的Raft演算法
過去,paxos一直是分布式協議的標準,但是paxos難於理解,更難以實現,google的分布式鎖系統chubby作為paxos實現曾經遭遇到很多坑。來自stanford的新的分布式協議研究稱為raft,它是乙個為真實世界應用建立的協議,主要注重協議的落地性和可理解性。在了解raft之前,我們先了解...