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

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

客戶端的交互

本篇將會(huì)介紹客戶端如何與Raft交互,包括客戶端如何找到集群的leader,以及Raft如何支持線性化語(yǔ)義。這些問(wèn)題適用于所有基于共識(shí)的系統(tǒng),Raft的解決方案與其他系統(tǒng)類似。

Raft的客戶端將所有請(qǐng)求發(fā)送給leader。當(dāng)客戶端第一次啟動(dòng)時(shí),他會(huì)連接到隨機(jī)選擇的服務(wù)器。如果客戶端的首選不是leader,則該服務(wù)器將拒絕客戶端的請(qǐng)求并提供有關(guān)它所聽(tīng)到的最新的leader的信息(AppendEntries請(qǐng)求包括leader的網(wǎng)絡(luò)地址)。如果leader崩潰,客戶端請(qǐng)求會(huì)超時(shí);客戶端然后使用隨機(jī)選擇的服務(wù)器重試。

我們對(duì)Raft的目標(biāo)是實(shí)現(xiàn)可線性化的語(yǔ)義。然而,到目前為止,Raft可以多次執(zhí)行命令:例如,如果leader在提交日志條目后但在響應(yīng)客戶端之前崩潰,則客戶端將使用新的leader重試命令,導(dǎo)致他被執(zhí)行了多幾秒的時(shí)間。解決方案是讓客戶為每一個(gè)命令分配唯一的序列號(hào)。然后,狀態(tài)機(jī)跟蹤為每個(gè)客戶端處理的最新序列號(hào)以及相關(guān)響應(yīng)。如果他收到一個(gè)序列號(hào)已經(jīng)被執(zhí)行過(guò)的命令,他會(huì)立即響應(yīng)而不重新執(zhí)行一次。

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

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

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