paxos算法主要解決的問題就是一個分佈式系統中如何就某一個值達成一致。java
爲了理解paxos算法,首先定義這樣一個問題:有這樣一個變量a,它屬於不變變量(至關於java中的final變量),他的值一旦肯定,便不能改變。如今有n個異步請求要求給a變量賦值,那如何保證最好你們看到值都是一致(相同)的呢?算法
首先想到的一個簡單的方案就是加鎖,該方法分爲兩步:異步
一個請求r1到來,若是發現已經被其餘請求加鎖,則反回error,表示獲取鎖失敗(獲取賦值權限失敗)分佈式
仔細分析上面的問題,就會發現一個問題:若是發出請求r1的機器,在得到權限(給a加鎖)成功後,出現了故障,不能再經行第二變量
階段的操做,也就不能再釋放鎖,其餘請求就一直不能給a賦值,這樣一來就出現了死鎖現象。爲了解決這樣的死鎖問題,略微對權限
上面的方案就行修改。請求
上一個方案出現死鎖的根本緣由是一個請求得到鎖了,另外一個請求就不能再獲取鎖。因此在這個方案裏,咱們容許搶戰式獲取鎖。方法
。。。error