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共识算法

数据副本与一致性问题

数据副本

数据副本是个很常见的概念和术语,我们经常遇到,但是也最容易让人产生迷惑。

副有以下几种含义:
(1)辅助的,区别于正和主,例如:副职,副手,副官。
(2)附带的,次要的,例如:副业,副品,副食,副刊。
(3)相配、相称之意,例如:名实相副,其实难副。
(4)量词,表示一组或一套,例如:一副手套,全副武装;也可指态度,例如,一副笑脸。

在分布式系统和大数据领域,所有的节点,所有的数据块,地位都是平等,所以副本并不是指正副的“副“,只是用作量词,没有主副之分。可以这么说,所有的数据都可以叫做“数据副本”。

一致性问题

一致性问题立足于数据副本,有数据副本的地方必定会有一致性问题。对于数据副本,人们往往印象不深,但是对于缓存,我想人人皆知。缓存就是数据副本。

我们知道,数据存在于内存中,然后被加载到寄存器中,此时出现了两个数据副本,如何保证两者的一致性呢?这就是一致性问题的起源。

一致性问题并不是分布式领域才有的问题,只不过在分布式领域更常见罢了。因为存在多个数据副本,如果对第一个数据副本进行了更新,而对其他的数据副本没有更新操作,那么这会导致数据不一致性。

人们发现了一致性问题之后,随后提出了CAP理论,而一致性位列其中的C位。一致性是个非常重要的概念,它前承数据副本 ,后接CAP理论。

副本、一致性这些基本的概念很重要。能够不假思索的说出来,很考验了一个的功底。搞分布式的,搞大数据的,如果这些都不甚明白,那真的还算没有入门。

一致性问题无关乎数据的对错

为了实现集群的高可用性,用户的数据往往要多重备份,多个副本虽然避免了单点故障,但同时也引入了新的挑战。

假设有一组服务器保存了用户的余额,初始是100块,现在用户提交了两个订单,一个订单是消费10元,一个订单是充值50元。由于网络错误和延迟等原因,导致一部分服务器只收到了第一个订单(余额更新为90元),一部分服务器只收到了第二个订单(余额更新为150元),还有一部分服务器两个订单都接收到了(余额更新为140元),这三者无法就最终余额达成一致。这就是一致性问题。

一致性算法并不保证所有提出的值都是正确的(这可能是安全管理员的职责)。我们假设所有提交的值都是正确的,算法需要对到底该选哪个做出决策,并使决策的结果被所有参与者获悉。

另外,一致性算法并不保证所有节点中的数据是完全一致的,但它能保证即使一小部分节点出现故障,仍然能对外提供一致的服务(客户端无感知)