Skip to content

Instantly share code, notes, and snippets.

@tianchaijz
Created September 7, 2022 13:01
Show Gist options
  • Save tianchaijz/284fdcd3d7161eb15e89650b63f296f4 to your computer and use it in GitHub Desktop.
Save tianchaijz/284fdcd3d7161eb15e89650b63f296f4 to your computer and use it in GitHub Desktop.

Raft

Paper

Projects

Blog

Example

课程

MultiRaft

建议

Ed Huang

对分布式系统学习还是有点心得,理论基础要打牢。

从存储系统入手,Google 的老三篇入门,最好能顺手把 6.824 做了,不难, 智商正常的本科生都能做完,另外推荐一本书 Distributed systems for fun and profit

做完 6.824 后就可以从复制协议开始入手,Paxos 的几篇,Lamport 那篇有空膜拜一下好了, 真正有价值的是 Paxos made live / Paxos made simple 那几篇,然后可以深入看看 Raft, 这个在 6.824 里面会用到。

我做分布式数据库

这个实现还可以继续简化,Raft 核心可以看成四种相对独立状态机, RPC 和别的各类事件都可以统一看成是状态机的消息输入,每个单独的 RPC 不应该有预期回复, 而应该看成单向的消息传递。

Raft 本身可以抽象为状态机,比如可以看成 membership, core, flow control, application RSM 四个状态机, 外部所有的 RPC、定时事件(心跳选举)都可看成是状态机收到消息以后做出反应。可以看看 etcd 的 raft 实现, 我自己做的和 etcd 的 Raft 都是这样实现的。


commit index 可以从多数派恢复,也就是 n/2+1 个节点的最小日志 index,所以不需要持久化。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment