在这里记录下最近学习分布式相关知识时的一些参考资料,欢迎补充🎉

理论

认识分布式架构 - 掘金

CAP

分布式理论(一) - CAP定理 - 掘金
如果有人问你CAP理论是什么,就把这篇文章发给他

BASE

[分布式理论(二) - BASE理论 - 掘金


算法

Raft

Raft官网, 首页上的js是可以交互的,强烈建议动手操作下,能帮助你更好地了解细节。

Raft可视化动画

先对Raft有个大致的了解,想要了解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 语言之旅

  1. etcd raft 设计与实现(一) - 知乎
  2. etcd raft 设计与实现(二) - 知乎
  3. Etcd Raft架构设计和源码剖析1:宏观架构
  4. Etcd Raft架构设计和源码剖析2:数据流
  5. Etcd Raft架构设计和源码剖析3:重要结构体定义
  6. Raft 在 etcd 中的实现 - 喵叔没话说

TiKV

TiKV是一个分布式的key-value数据库,TiDB是基于TiKV实现的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库。该项目在社区非常活跃,在设计、实现、优化等层面上都有很多文章讨论。PingCAP也在社区发布了许多高质量文章。TiKV的架构借鉴了Google的Spanner/F1 的设计,raft实现借鉴了Etcd。

如果想从零开始实现一个工业级的分布式KV数据库的话,TiKV是一个值得参考的案例。

  1. TiKV | Deep Dive

课程

MIT 6.824 分布式系统里的 lab2,3,4 实现了一个基于raft分布式kv存储。


疑问

  1. 两个节点共识算法的可行性?

    对于paxos, raft, zab等强一致性算法来说,不现实。

    双节点的情况,failure tolerance为0。对于挂掉多数节点的情况,同样也不能获取共识。

    可以考虑gossip等弱一致性协议。

    参考:

    1. distributed - Consensus algorithm for two nodes - Stack Overflow
    2. consensus - Consul support or alternative for 2 nodes - Stack Overflow

除另有声明外,本博客文章均采用 知识共享(Creative Commons) 署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议 进行许可。