簡體   English   中英

raft算法如何在節點成為leader並且有未提交的日志條目的情況下保持強讀一致性

[英]How raft algorithm maintains strong read consistency in case of a node become leader and it have an uncommitted log entry

考慮五個節點(S1、S2、S3、S4、S5)獲取鍵/值數據。 並發生了以下步驟

  1. S3 成為領導者,客戶端向集群寫入等於 2 的密鑰
  2. S3 append entry to S1,S2,S4,S5,然后S1,S2,S4,S5接受它並將entry寫入自己的日志(如圖1所示)
  3. S3 收到多數響應(來自 S1,S2,S4,S5),S3 提交 key 等於 2 的實體,並向客戶端發送寫入成功消息,然后向 S1,S2,S4,S5 發送提交消息
  4. S2,S4,S5 收到提交消息並提交條目成功,但 S1 崩潰。 就像在圖 2 中一樣,S1 將有一個未提交的條目。
  5. 現在,S1 重新啟動並成為具有未提交條目且 key 等於 2 的領導者(如圖 3 所示)

經過上述步驟,客戶端查詢一個條目(key等於2,剛剛寫成功)。 但是現在 S1 是領導者,並且 key equal 2 條目未提交。 因此,客戶將找不到自己剛才寫的條目。 那么,我在哪里做錯了? 請幫我圖片1 (圖片1) 圖 2 (圖二) 圖 3 (圖三)

我在 Diego Ongaro 論文中找到了解決方案更詳細的版本In Search of an Understanding Consensus Algorithm(Extended Version) 在第 8 節(客戶端交互)中,我找到了答案, Raft 通過讓每個領導者在其任期開始時向日志中提交一個空白的 no-op 條目來處理這個問題。 在此之后,問題 S1 將通過提交一個空白的無操作條目來提交日志索引等於 1 條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM