DPDK文档翻译程序员@IT·互联网

raft一致性算法简单解释

2017-08-19  本文已影响689人  半天妖

1. 理解分布式一致性问题

one-node-system.png

显然,对已只有一个节点的系统,我们写操作很简单的得到满足

multi-node-system.png

这就是分布式系统的一致性问题。

在分布式环境中, 一致性是指数据在多个副本之间是否能够保持一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作之后, 应该能够保证系统的数据仍然处于一致的状态。

对于一个将数据副本分别在不同分布式节点上的系统来说,如果对于第一个节点的数据进行了更新操作,并且成功更新之后,却没有使得其他节点上的数据得到相应的更新,于是在对第二个节点的数据进行读操作时,获取的是老数据(脏数据),这就是典型的分布式数据不一致的情况。

在一个分布式系统中,如果能够做到针对一个数据项的更新操作执行成功之后,所有的用户都可以读取到其中的最新值,那么这样的系统就被认为是具有强一致性(严格一致性)。

当然,在有些分布式系统实现中,并不需要实时保证系统数据的强一致性,它允许数据存在中间状态,并认为该中间状态不会影响系统的整体可用性(允许数据在不同节点之间的同步存在延时),在经过一段时间之后,最终能够达到一个一致的状态,这就是最终一致性(弱一致性)。

2. Raft过程概述

status.png leader-election.png log.png report.png commit.png

3. Leader Election

status-machine.png vote-1.png vote-2.png vote-3.png

注意:奇数个节点参与竞选Leader是个重要的要求,否则,将有可能无法达成多数个节点投票的条件,导致无法选出leader

vote-4.png

4. Log Replication

一旦选出了Leader节点,我们需要将Leader上的修订同步到所有的其他节点上,以满足分布式系统的一致性原则,这个过程是通过Append Entries消息实现的。

上一篇 下一篇

猜你喜欢

热点阅读