关于Raft的学习记录。如有疑问欢迎指正,也欢迎讨论。

paxos的思想理解起来很困难,只是简单地理解了一下,连着看了几天都不能真正理解,跳过先看《In Search of an Understandable Consensus Algorithm》。

个人感觉学习这两个算法就不要想着 10 分钟学会的那种文章了,越长越好,毕竟论文 18 页?

#摘要

Raft是一个共识算法,为了解决paxos难以理解的问题,解决方式是将一些共识算法中的一些概念分离,并通过safety来约束这些之间的关系。具体有四个方面,leader electionlog replicationsafetymembership changes

#Raft

raft 通过选举出一位 leader 来实现共识,所有的日志复制和管理都由 leader 来全权负责

leader 的工作内容:

  1. 接收来自客户端的指令,并将其复制给其他的服务器(Followers)。
  2. 告诉这些服务器什么时候可以应用(提交)这些指令到状态机。

#Raft basics

一个Raft集群由多台服务器组成,5 台机器的集群允许 2 台机器 down 掉(另外 3 个可以满足大多数这个需求)。
任意时刻,每个服务器只拥有以下状态之一的状态:leaderfollowercandidate

follower:对leadercandidate的请求作出回应。
leader:接收所有来自客户端的请求。(如果客户端请求了一个follower,该请求会被重定向给leader

关系转换

#参考链接