paxos演算法是基於訊息傳遞且具有高度容錯特性的一致性演算法。我們將從乙個簡單的問題開始,逐步的改進我們的設計方案,最終得到paxos,乙個可以在逆境下工作的協議。
一、客戶端-伺服器模型
我們從最小的分布式系統開始,在這個系統中,只有兩個結點,客戶端結點與服務端結點,客戶端結點能夠操作(儲存或更新)遠端伺服器結點上的資料。
演算法1.1 樸素的客戶端/伺服器演算法:客戶端每次向伺服器傳送一條命令。
在存在訊息丟失的訊息傳遞模型中,該演算法卻不能很好的工作,客戶端不能確認訊息是否正確的被伺服器所接受。因此我們需要對其進行一些小的改進。
演算法1.2 待確認的客戶端/伺服器演算法
1.客戶端向服務端傳送一條請求命令訊息。
2.服務端接受請求並回覆確認資訊。
3.客戶端在一定的時間範圍內,沒有收到伺服器端傳送的請求確認資訊的回覆,則重新傳送命令請求資訊。
基於可變訊息延遲模型我們可以得出如下定理,即訊息的延遲時間是不定的,同一對結點的訊息傳送的時間延遲也是不同的。
定理1.1 如果演算法在多個客戶端與服務端執行,伺服器收到的命令順序可能是不同的,這會導致不一致的狀態。
假設在如下的場景中,存在客戶端c1,c2 ,服務端 s1,s2. 服務端s1,s2存在相同的值x = 0。 如果此時 c1,向伺服器s1,s2 傳送 x = x + 1. 在同一時刻 c2 向伺服器 s1,s2 傳送 x = 2*x. 假設c1 先於 c2 到達 s1 ,則此時s1的狀態值x為 2, 而 c2 先於 c1 到達 s2 , 則此時 s2 的狀態值x為 1. 導致集群的狀態不一致。
定義1.1 (狀態複製)對於一組結點,如果所有結點都以相同的順序執行命令序列 c1,c2,c3,c4……,則這組結點實現了狀態複製
演算法1.3 借助單一的序列化器實現狀態複製
1. 所有的客戶端將請求命令傳送到序列化器
2.序列化器逐個處理客戶端請求,並將客戶端請求逐個傳送給所有伺服器
3.當序列化器接受到所有伺服器的確認訊息時,它將返回給對應客戶端命令執行成功的訊息。
演算法 1.4 兩階段鎖
階段 1 :
客戶端向所有伺服器請求獲取鎖
階段 2:
if 客戶端獲得所有伺服器的加鎖請求
客戶端以可靠的方式向所有伺服器傳送命令請求,釋放鎖
else
客戶端釋放已經獲取的鎖,休眠一段時間,進入階段 1
下一節中我們將從弱化的鎖機制來引出paxos演算法 。
Paxos 演算法簡介
拜占庭將軍問題 byzantine failure 是由萊斯利 蘭伯特提出的點對點通訊中的基本問題。意思就是,在存在訊息丟失的不可靠的通道上保證資訊的一致性是不可能的。所以在一般討論一致性的問題上時,比如paxos 演算法,都先假定不會存在拜占庭問題。paxos 是乙個分布式一致性演算法。主要解決的...
Zookeeper與paxos演算法
一 zookeeper是什麼 官方說辭 zookeeper 分布式服務框架是apache hadoop 的乙個子專案,它主要是用來解決分布式應用中經常遇到的一些資料管理問題,如 統一命名服務 狀態同步服務 集群管理 分布式應用配置項的管理等。好抽象,我們改變一下方式,先看看它都提供了哪些功能,然後再...
Zookeeper與paxos演算法
一 zookeeper是什麼 官方說辭 zookeeper 分布式服務框架是apache hadoop 的乙個子專案,它主要是用來解決分布式應用中經常遇到的一些資料管理問題,如 統一命名服務 狀態同步服務 集群管理 分布式應用配置項的管理等。好抽象,我們改變一下方式,先看看它都提供了哪些功能,然後再...