分布式共识算法
如何理解分布式共识?
多个参与者 针对 某一件事 达成完全 一致 :一件事,一个结论
已达成一致的结论,不可推翻
有哪些分布式共识算法?
- Paxos:被认为是分布式共识算法的根本,其他都是其变种,但是 paxos 论文中只给出了单个提案的过程,并没有给出复制状态机中需要的 multi-paxos 的相关细节的描述,实现 paxos 具有很高的工程复杂度(如多点可写,允许日志空洞等)
- Zab:被应用在 zookeeper 中,业界使用广泛,但没有抽象成通用的 library
- Raft:以容易理解著称,业界也涌现出很多 raft 实现,比如大名鼎鼎的 etcd, braft, tikv 等
什么是 Raft?
Raft 是一种更易于理解的分布式共识算法,核心协议本质上还是师承 paxos 的精髓,不同的是依靠 raft 模块化的拆分以及更加简化的设计,raft 协议相对更容易实现。
模块化的拆分主要体现在:Raft 把一致性协议划分为 Leader 选举、MemberShip 变更、日志复制、Snapshot 等几个几乎完全解耦的模块
更加简化的设计则体现在:Raft 不允许类似 paxos 中的乱序提交、简化系统中的角色状态(只有 Leader、Follower、Candidate三种角色)、限制仅 Leader 可写入、使用随机化的超时时间来设计 Leader Election 等等
特点:Strong Leader
系统中必须存在且同一时刻只能有一个 leader,只有 leader 可以接受 clients 发过来的请求
Leader 负责主动与所有 followers 通信,负责将’提案’发送给所有 followers,同时收集多数派的 followers 应答
Leader 还需向所有 followers 主动发送心跳维持领导地位(保持存在感)
一句话总结 Strong Leader: “你们不要 BB! 按我说的做,做完了向我汇报!” 另外,身为 leader 必须保持一直 BB(heartbeat) 的状态,否则就会有别人跳出来想要 BB