<aside> 📢 暑期实习的 Talent Plan 项目,基于raft算法实现一个键值对分布式存储库TinyKV。

</aside>

Project 1

参考文献

Project 2

2A Raft 算法

主要是处理各种情况下的 Message

如何处理 Message ?按优先级参考以下来源:

  1. 测试函数 (最具体)
  2. doc.go (大体思路)
  3. raft 论文 (学习思想、关乎安全性的设计)

对于某些特殊情况可以考虑用 raft 官网上的交互式系统(Raft Visualization)模拟出相应情形加深理解

<div class="mermaid"> flowchart LR RaftLog --> Raft --> RawNode </div>

if m.MsgType != pb.MessageType_MsgAppend || len(m.Entries) != 1 || m.Entries[0].Data != nil {
	panic("not a message to append noop entry")
}	//noop entry 指代 Data 字段为 nil 的 Entry