Raft實(shí)現(xiàn)報(bào)告(20)

Raft實(shí)現(xiàn)報(bào)告(20)

客戶端的交互

上節(jié)講到了給每個執(zhí)行的命令賦予序列號,那么接收到相同序列號的命令代表已經(jīng)執(zhí)行過了,不會重復(fù)執(zhí)行。

無需將任何內(nèi)容寫入日志即可處理制度操作。

但是,如果沒有額外的措施,這將冒著返回陳舊數(shù)據(jù)的風(fēng)險(xiǎn),因?yàn)轫憫?yīng)請求的leader可能已經(jīng)被他不知道的新leader取代了。線性化讀取不能返回陳舊數(shù)據(jù),Raft需要兩個額外的預(yù)防措施來保證這一點(diǎn),而不是用日志。

首先,leader必須擁有提交的條目的最新信息,leader完整性的特性保證leader擁有所有一提交的條目,但是從其的起始term開始,它可能不知道那些是哪些。要找到他們,他需要從其任期內(nèi)提交一個條目,Raft通過讓每個leader在其任期開始向日志中提交一個空白的條目,來處理這個問題。

然后,leader必須在處理制度請求之前檢查它是否已經(jīng)被廢除(如果選舉了更新的leader,其信息可能是陳舊的)。Raft通過讓leader在響應(yīng)時(shí)只讀請求之前與大多數(shù)集群交換心跳信息來處理這個問題?;蛘遧eader可以依靠心跳機(jī)制來提供一種合約形式,但這將依賴于安全時(shí)間。

實(shí)現(xiàn)與評估

Raft的實(shí)現(xiàn)大約2000行C++代碼,不包括測試,注釋,或空白行。源代碼http://github.com/ logcabin/logcabin。而根據(jù)他們論文相關(guān)的獨(dú)立實(shí)現(xiàn)也有25個第三方開源的,都處于不同的開發(fā)階段。
http://raftconsensus.github.io.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容