在这里记录下最近学习分布式相关知识时的一些参考资料,欢迎补充🎉
理论
CAP
分布式理论(一) - CAP定理 - 掘金
如果有人问你CAP理论是什么,就把这篇文章发给他
BASE
算法
Raft
Raft官网, 首页上的js是可以交互的,强烈建议动手操作下,能帮助你更好地了解细节。
Raft可视化动画
先对Raft有个大致的了解,想要了解Raft实现细节的话,还是需要研读下论文原文。整体来说,Raft本身还是很好理解的。
这里有一个列表列出了社区里的raft算法实现,以下列出几个工程级别的实现:
- etcd CoreOS开源,基于Go和raft实现的分布式kv存储
- braft 百度开源,基础C++和brpc的raft实现
- sofa-jraft 蚂蚁金服开源,基于Java的raft实现
- tikv PingCap开源,基于Rust实现的分布式kv存储
源码解析
etcd
etcd里包含了一个工程级别的raft模块实现,通过状态机和CSP并发模型将共识算法、网络、持久化等部分充分解耦,并且做了一些工程上的优化,是一个非常值得参考的项目。
etcd基于Go实现,看下面的源码解析的话,需要了解Go的基本语法。关于Go语法,可参考Go 语言之旅。
- etcd raft 设计与实现(一) - 知乎
- etcd raft 设计与实现(二) - 知乎
- Etcd Raft架构设计和源码剖析1:宏观架构
- Etcd Raft架构设计和源码剖析2:数据流
- Etcd Raft架构设计和源码剖析3:重要结构体定义
- Raft 在 etcd 中的实现 - 喵叔没话说
TiKV
TiKV是一个分布式的key-value数据库,TiDB是基于TiKV实现的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库。该项目在社区非常活跃,在设计、实现、优化等层面上都有很多文章讨论。PingCAP也在社区发布了许多高质量文章。TiKV的架构借鉴了Google的Spanner/F1 的设计,raft实现借鉴了Etcd。
如果想从零开始实现一个工业级的分布式KV数据库的话,TiKV是一个值得参考的案例。
课程
MIT 6.824 分布式系统里的 lab2,3,4 实现了一个基于raft分布式kv存储。
疑问
两个节点共识算法的可行性?
对于paxos, raft, zab等强一致性算法来说,不现实。
双节点的情况,failure tolerance为0。对于挂掉多数节点的情况,同样也不能获取共识。
可以考虑gossip等弱一致性协议。
参考:
除另有声明外,本博客文章均采用 知识共享(Creative Commons) 署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议 进行许可。