Raft共识算法入门教程


1 分布式基础概念

    1.1  数据副本与一致性问题

    1.2  分布式系统的进化史

    1.3  全面解读CAP定理

    1.4  CAP理论为什么不能同时满足?

    1.5  BASE原则

2 全面解读Raft共识算法

    2.1  全面解读Raft共识算法

    2.2  Raft日志的作用

    2.3  Raft日志复制

    2.4  Raft共识算法是否属于二阶段提交?

    2.5  Raft算法中的三种超时时间

    2.6  Raft算法动图展示

3 实战操练Raft共识算法

Raft共识算法是否属于二阶段提交?

1、什么是二阶段提交?

为了解决分布式问题,为了使系统尽量能够达到 CAP,涌现了很多经典的算法和协议,最著名的就是二阶段提交协议,简称 2PC。顾名思义,二阶段提交就是将事务的提交过程分成了两个阶段来进行处理。第一阶段:准备阶段(投票阶段)和第二阶段:提交阶段(执行阶段)。流程如下:

2、二阶段提交的优点与缺点

优点:原理简单,实现方便。

缺点:同步阻塞,单点问题,数据不一致,过于保守。

(1)同步阻塞。在二阶段提交的过程中,所有的节点都在等待其他节点的响应,无法进行其他操作。这种同步阻塞极大的限制了分布式系统的性能。

(2)单点问题。协调者在整个二阶段提交过程中很重要,如果协调者在提交阶段出现问题,那么整个流程将无法运转,更重要的是:其他参与者将会处于一直锁定事务资源的状态中,而无法继续完成事务操作。

(3)数据不一致。假设当协调者向所有的参与者发送 commit请求之后,发生了局部网络异常或者是协调者在尚未发送完所有commit请求之前自身发生了崩溃,导致最终只有部分参与者收到了 commit请求,这将导致严重的数据不一致问题。

(4)过于保守。如果在二阶段提交的提交询问阶段中,参与者出现故障而导致协调者始终无法获取到所有参与者的响应信息的化,这时协调者只能依靠其自身的超时机制来判断是否需要中断事务,显然,这种策略过于保守。换句话说,二阶段提交协议没有设计较为完善的容错机制,任意一个节点是失败都会导致整个事务的失败。

3、Raft共识算法是否属于二阶段提交?

在Raft共识算法中,不存在分阶段提交,所以不属于二阶段提交。

在Raft共识算法中,Leader选出后,就开始接收客户端的请求。Leader把请求作为日志条目(Log entries)加入到它的日志中,然后并行地向其他服务器发起 AppendEntries RPC 复制日志条目。当这条日志被复制到大多数服务器上,Leader将这条日志应用到它的状态机并向客户端返回执行结果。