关于raft:不了解Raft算法怎敢说研究过分布式

1次阅读

共计 1865 个字符,预计需要花费 5 分钟才能阅读完成。

一、Raft 算法介绍

Raft 是一种“共识”算法,共识的含意是保障所有的参与者都有雷同的认知,简略来说就是如何做到强统一。

“共识”蕴含服务器之间及客户端和服务端两方面:

1、服务器之间

指的是所有服务器要达成“共识”,打个比方一个 KV 零碎像 Redis,如果服务端是 3 个节点:A、B、C 的集群,客户端先收回一个 set key1 a 的命令落在 A 节点上,而后收回 set key1 b 落在 B 节点上,最初应该在所有服务器上执行 get key1 都应该失去 b;

2、客户端和服务端之间

还是回到下面的例子,客户端执行 set key1 a 的命令,服务端返回胜利了,客户端就认为这里是胜利了,两头不能因为网络或其它起因导致客户端取 key1 的时候返回空或不为 a 的状况。

“共识”算法次要解决分布式系统的一致性的问题,目前相干的算法有:

1、Paxos 算法

这个是最早的,也是非常复杂的,说实话我看了好多文章,也只是大略懂了,细节还是不太分明,还是要观看一些实现代码能力加深了解;

2、Raft 算法

就是咱们明天要介绍的,由斯坦福大学的 Diego Ongaro 和 John Ousterhout 在 2014 年提出,在证实了算法的正确性之外,还提供了相干实现及参考代码,所以媒体始终宣传这个算法比 Paxos 要更容易了解;

3、ZAB 算法

Zookeeper 应用的算法,算是 Paxos 算法的一个变种,有趣味的能够到 Apache 官网学习下,联合 Zookeeper 源码学习下。

二、Raft 算法利用场景及案例

下面介绍了分布式相干算法,Raft 相对来说比拟容易上手,如果要深入研究,Paxox 是防止不了的;留神是绝对简略,因为进入剖析之后你会发现远没你想像的简略,以我目前学习进度看,学习快 3 周工夫才大略理解了一些细节。

学习的形式是先看官网的介绍,以下是其官方网站:

https://raft.github.io/raft.pdf

还有个动画介绍的:

http://thesecretlivesofdata.c…

当然还有中文版的,搜寻下 raft paper 中文版就能够了。

目前开源的实现也不少:

Etcd(Go 语言实现)

PingCAP(Rust 语言,Codis 作者所在公司)

Soft-Jraft(Java 语言,阿里开源)

下面几个都是大公司实现的,能够用在生产上,性能也比拟全,代码相对来说简单些,如果先只想简略搞个 Demo 剖析下,能够看以下几个:

1、百度工程师开源的 Java 实现

https://github.com/wenweihu86…

2、支付宝工程师实现

也是 Java 写的,不过性能比拟少,没有 PreVote 等性能,作者还出了本书:《分布式一致性算法开发实战》,倡议带着书学习下:

https://github.com/xnnyygn/xraft

以下是集体学习路线仅供参考:先看论文,即实践,而后跑代码,而后再反过来看实践,最初到了你不必看论文就晓得相应规定就能够熟练掌握了。

三、Raft 算法整体介绍

因 Raft 算法内容比拟多,前面会分几篇介绍,这篇先大略介绍下整体的货色。

官网将 Raft 算法分为以下几块:选举、日志复制、安全性 3 大块,从实现的角度分:选举、日志、新节点退出。

另外如果要实现一个残缺的利用的话,还要实现状态机的局部;什么是状态机呢,状态机指零碎 / 对象自身有多种状态,而后各种状态分产生切换、转变,其实大部分分布式系统都能够转移为状态机,而后各节点之间以统一的步骤转换状态,大家的状态就是统一了,对利用来说就是强统一了。

还是以后面的 redis 为例,假如客户端发过来的命令流如下:

set key1 a 状态:key1:a

set key2 b 状态:key1:a, key2:b

即客户端每 1 次操作都会引起服务端状态的扭转,而后把整个批改当成一个序列,则整个就是状态机了。

回到 Raft 算法,咱们看下每块要解决的问题:

1、选举

Raft 算法只反对单主,即任何时候只能从主上进行证读写操作,所以选举要解决以下问题:

以后谁是主节点;

如何保障肯定会只选出一个主节点;

如何疾速、正确的感知主节点挂掉;

如何疾速的选出主节点;

如何保障肯定会选出主节点,不会有限循环选举;

如何保障主节点的数据是最新的;

2、日志

Raft 算法通过日志达到统一的,日志局部要解决以下问题:

谁的日志最新;

主节点是如何将日志复制到其它节点;

如何保障日志复制的正确性,即不会串,不会错;

新节点退出日志如何复制;

各节点日志的一致性是如何实现的;

3、新节点退出

新节点退出集群不会呈现脑裂;

配置如何做到强统一,两头会呈现短暂不统一,是怎么不影响集群失常工作的;

未完待续……

正文完
 0