// 準備提案過程,獲得大多數決策者支援後進入確認提案階段。
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...
分布式一致性
分布式一致性是指在分布式環境中對某個副本資料進行更新操作時,必須確保其他副本也會更新,避免不同副本資料不一致。分布式系統乙個重要的問題時解決資料複製,一是為了增加系統的可用性防止單點故障,二是提高系統可用性,通過負載聚恆,使分布在不同位置的資料副本能夠提供服務。理想狀態下,當然希望分布式系統能夠實現...
分布式一致性
分布式系統的乙個重要問題是資料的複製。對資料的複製一般有兩個原因 資料複製的主要難題是保持各個副本的一致性。即在更新乙個副本時,必須確保同時更新其他的副本,否則資料的各個副本將不再相同。一致性模型實質上是程序和資料儲存之間的乙個約定。正常情況下,乙個資料項上執行讀操作時,它期待該操作返回的是該資料在...