【Go 夜读】第 32 期 etcd raft 源码阅读

yangwen13 · · 487 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

>文章来自于:https://reading.developerlearning.cn/reading/32-2019-03-02-etcd-raft/ 分享者: 缪昌新 ## 观看视频 https://youtu.be/sL02PsR20gE *etcd raft 阅读* etcd 版本:3.3.10 2019.3.2 晚上 ### 总结 etcd里的raft模块只实现了raft共识算法,而像消息的网络传输,数据存储都由上层应用来完成。 下面是各个文件(夹)的功能简介: * raftpb 用[Protocol Buffer](https://developers.google.com/protocol-buffers/)定义了一些需要序列化的数据结构,比如`Entry`和`Message`。 * log_unstable.go `unstable`数据结构表示用于还没有被用户层持久化的数据,它维护了两部分内容`snapshot`和`entries`。 * storage.go 这个文件定义了一个`Storage`接口,应用层需要实现这个接口,以提供存储和查询日志的能力。 * log.go 维护本地日志信息。其中的`committed`和`applied`分别表示已提交和已经应用到状态机的日志索引。 * progress.go Leader节点通过`Progress`这个数据结构来追踪一个follower的状态,并根据`Progress`里的信息来决定每次同步的日志项。 * raft.go Raft协议的具体实现就在这个文件里。其中最重要的就是`Step`函数,它用来处理不同的消息。所以以后当我们想知道raft对某种消息的处理逻辑时,到这里找就对了。 * node.go `node`的主要作用是应用层和共识模块(raft)的衔接。将应用层的消息传递给底层共识模块,并将底层共识模块共识后的结果反馈给应用层。 ## 参考资料 1. [深入浅出 Raft - 基本概念](https://www.jianshu.com/p/138b4d267084) 2. [深入浅出 Raft - Membership Change](https://www.jianshu.com/p/99562bfec5c2) 3. [深入浅出 Raft - Leader 选举](https://www.jianshu.com/p/2b60542640e2) 4. [深入浅出 Raft - Optimization](https://www.jianshu.com/p/1bbd7162727d) 5. [Raft在etcd中的实现](http://blog.betacat.io/post/raft-implementation-in-etcd/) 6. [etcd contrib](https://github.com/etcd-io/etcd/tree/master/contrib) 7. [Etcd超全解:原理阐释及部署设置的最佳实践](https://mp.weixin.qq.com/s/kcWCxk0NbTuob0y6gN5emw)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

487 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传