分布式一致性演算法Paxos JAVA多執行緒方式實現

2021-08-09 16:23:19 字數 1583 閱讀 9036

//	準備提案過程,獲得大多數決策者支援後進入確認提案階段。

public synchronized boolean prepare()

// 獲得承諾

if (prepareresult.ispromised())else

// 決策者已經通過了乙個題案

if (prepareresult.getacceptorstatus()==acceptorstatus.accepted)

}}// end of for

// 獲得多數決策者的承諾

// 可以進行第二階段:題案提交

if (promisedcount >= halfcount)

proposal votedproposal = votedend(acceptedproposals);

// 決策者已經半數通過題案

if (votedproposal !=null)

proposal maxidacceptedproposal = getmaxidproposal(acceptedproposals);

// 在已經被決策者通過題案中選擇序列號最大的決策,作為自己的決策。

if (maxidacceptedproposal != null)else

}while(iscontinue);

return false; }

// 獲得大多數決策者承諾後,開始進行提案確認

public synchronized boolean commit()

// 題案被決策者接受。

if (commitresult.isaccepted())else

}// 題案被半數以上決策者接受,說明題案已經被選出來。

if (acceptedcount >= halfcount)elseelse

// 回退到決策準備階段

if (prepare())

return true;

}}while(iscontinue);

return true;

}

//	加鎖此準備函式,不允許同時訪問。模擬單個決策者序列處理乙個請求。

public synchronized prepareresult onprepare(proposal szproposal)

switch (status)else

// 已經批准過提案

case accepted:

// 如果是同乙個提案,只是序列號增大

// 批准提案,更新序列號。

if (promisedproposal.getid()= promisedproposal.getid())else

// 已接受過提案

case accepted:

// 同一提案,序列號較大,接受

if (szproposal.getid() > acceptedproposal.getid()

&& szproposal.getvalue().equals(acceptedproposal.getvalue()))else

} return null;

}

分布式一致性演算法

補習了一下分布式相關知識,嗯,還是有很些不懂地方,閱讀不少不錯資源,記錄一下有時間回頭再讀。分布式儲存的強一致性實現方式 1.quorum w r n 2.同步複製 如 pacifica 3.複製狀態機 分布式一致性協議paxos raft zab等 學習分布式系統需要怎樣的知識?cse 552 f...

分布式一致性

分布式一致性是指在分布式環境中對某個副本資料進行更新操作時,必須確保其他副本也會更新,避免不同副本資料不一致。分布式系統乙個重要的問題時解決資料複製,一是為了增加系統的可用性防止單點故障,二是提高系統可用性,通過負載聚恆,使分布在不同位置的資料副本能夠提供服務。理想狀態下,當然希望分布式系統能夠實現...

分布式一致性

分布式系統的乙個重要問題是資料的複製。對資料的複製一般有兩個原因 資料複製的主要難題是保持各個副本的一致性。即在更新乙個副本時,必須確保同時更新其他的副本,否則資料的各個副本將不再相同。一致性模型實質上是程序和資料儲存之間的乙個約定。正常情況下,乙個資料項上執行讀操作時,它期待該操作返回的是該資料在...