什么是分布式一致性?

我们先来看一个例子:

我们有一个单节点node,这个节点可以是数据库,也可以是一台服务器,当client向node发送data时,X节点收到data,记录下来

由此可见对于单个节点,一致性是很容易实现的。

然而对于多个节点,我们如何来实现一致性,这就是分布式一致性的问题。

Raft就是一个实现分布式一致性的协议

下面让我们来看看它是如何工作的?

node介绍:

每一个节点有三种state

(1) follower state

(2) leader state

(3) candidate state

Leader Election

所有的节点都是从follower state开始的,如果一个follower状态的节点没有被某个leader所控制,它就有可能成为候选者。而当一个节点成为候选者时,它就会向其他节点收集选票,而其他节点在收到候选者发出的信号后,就会把选票发给候选者。如果某个候选者获取了大多数选票,则会成为领导者。这个过程就是领导者选举。

整个选举过程是有一个时间限制的,如下图:

Splite Vote是因为如果同时有两个候选人向大家邀票,这时通过类似加时赛来解决,两个候选者在一段timeout比如300ms互相不服气的等待以后,因为双方得到的票数是一样的,一半对一半,那么在300ms以后,再由这两个候选者发出邀票,这时同时的概率大大降低,那么首先发出邀票的的候选者得到了大多数同意,成为领导者Leader,而另外一个候选者后来发出邀票时,那些Follower选民已经投票给第一个候选者,不能再投票给它,它就成为落选者了,最后这个落选者也成为普通Follower一员了。

Log Replication

选出领导者后,对于这些节点组成的一个系统中的所有变化都会经过这个领导者,由它掌管全局。

领导者收到client发来的消息后,会把每一次的请求操作记录在日志上,在这条日志记录没被提交之前,其他节点的值不会有任何改变。

领导者先把日志条目set 5 拷贝到跟随者节点中,当大多数的跟随者节点已经把日志记录追加到本节点的日志时,领导者就开始执行该条日志,即把5写入改节点。然后在下一个heartbeat中,领导者就会通知followers,该日志条目已经提交,follows也会写入5。这时整个集群保持了数据的一致性。这个过程叫做日志复制。

对于每个新的日志记录,重复上述过程。

如果在这一过程中,发生了网络分区或者网络通信故障,使得Leader不能访问大多数Follwers了,那么Leader只能正常更新它能访问的那些Follower服务器,而大多数的服务器Follower因为没有了Leader,他们重新选举一个候选者作为Leader,然后这个Leader作为代表于外界打交道,如果外界要求其添加新的日志,这个新的Leader就按上述步骤通知大多数Followers,如果这时网络故障修复了,那么原先的Leader就变成Follower,在失联阶段这个老Leader的任何更新都不能算commit,都回滚,接受新的Leader的新的更新。

分布式一致性算法Raft的更多相关文章

  1. 分布式一致性算法--Raft

    前面一篇文章讲了Paxos协议,这篇文章讲它的姊妹篇Raft协议,相对于Paxos协议,Raft协议更为简单,也更容易工程实现.有关Raft协议和工程实现可以参考这个链接https://raft.gi ...

  2. 一致性算法--Raft

    分布式一致性算法--Raft 前面一篇文章讲了Paxos协议,这篇文章讲它的姊妹篇Raft协议,相对于Paxos协议,Raft协议更为简单,也更容易工程实现.有关Raft协议和工程实现可以参考这个链接 ...

  3. 分布式一致性算法:Raft 算法(论文翻译)

    Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,而且 raft 算法比 Paxos 算法更易懂且更容易实现.本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的 ...

  4. 【转】Raft 为什么是更易理解的分布式一致性算法

    编者按:这是看过的Raft算法博客中比较通俗的一篇了,讲解问题的角度比较新奇,图文并茂,值得一看.原文链接:Raft 为什么是更易理解的分布式一致性算法 一致性问题可以算是分布式领域的一个圣殿级问题了 ...

  5. 【转】分布式一致性算法:Raft 算法(Raft 论文翻译)

    编者按:这篇文章来自简书的一个位博主Jeffbond,读了好几遍,翻译的质量比较高,原文链接:分布式一致性算法:Raft 算法(Raft 论文翻译),版权一切归原译者. 同时,第6部分的集群成员变更读 ...

  6. 理解分布式一致性与Raft算法

    理解分布式一致性与Raft算法 永远绕不开的CAP定理 出于可用性及负载方面考虑,一个分布式系统中数据必然不会只存在于一台机器,一致性简单地说就是分布式系统中的各个部分保持数据一致 但让数据保持一致往 ...

  7. 分布式一致性协议Raft原理与实例

    分布式一致性协议Raft原理与实例 1.Raft协议 1.1 Raft简介 Raft是由Stanford提出的一种更易理解的一致性算法,意在取代目前广为使用的Paxos算法.目前,在各种主流语言中都有 ...

  8. 一致性算法RAFT详解

    原帖地址:http://www.solinx.co/archives/415?utm_source=tuicool&utm_medium=referral一致性算法Raft详解背景 熟悉或了解 ...

  9. 分布式一致性算法2PC和3PC

    为了解决分布式一致性问题,产生了不少经典的分布式一致性算法,本文将介绍其中的2PC和3PC.2PC即Two-Phase Commit,译为二阶段提交协议.3PC即Three-Phase Commit, ...

随机推荐

  1. 设计模式,Let's Go! (上)

    * { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...

  2. SQL练习题完整(做完你就是高手)

    SQL 练习题答案 一.补充作业一.   设有三个关系:                S(SNO, SNAME, AGE, SEX,Sdept)                SC(SNO, CNO ...

  3. MYSQL创建数据库时候直接指定编码和排序规则

    安装我 在网上搜索的结果执行 代码: sudo gedit /etc/mysql/my.cnf 设置了默认编码为 UTF8 代码: [client]port            = 3306sock ...

  4. AngularJS 动画总结

    对读过的几篇文章的总结,尽量保证逻辑性,不断补充.精简.更正. 后面会列出参考文章地址,方便以后取用.感谢各位作者以及翻译者. AngularJS 动画思考 一.如何使用 1)我们需要构建什么 2)如 ...

  5. Ubuntu 发行版的 Linux 操作系统

    Ubuntu 发行版的 Linux 操作系统.. ------------------------------------- ------------------------------------- ...

  6. go web 第二天 学习笔记

    package main import ( "crypto/md5" "fmt" "html/template" "io" ...

  7. Jmeter录制脚本工具之chrome插件--BlazeMeter

    前几天在我们的交流群,看到有童鞋问到BlazeMeter这个工具的用法,感觉还是一个比较不错的插件,比起我们大费周章的去安装badboy或者是使用Jmeter的代理服务器去录制脚本要容易多啦!大家有问 ...

  8. linux(十三)之磁盘分区、创建文件系统、挂载

    前面学习了linux的用户管理 ,感觉是不是多lnux的多用户多任务的系统感觉十分了解了,但是其实并不然的.你还需要了解更多.接下来给大家分享的是 在vmware中添加硬盘创建分区,然后挂载到指定目录 ...

  9. css基础:样式属性

    1.背景与前景:background-color::背景色,样式表优先级高. background-image:url(路径):设置背景图片 background-attachment:fixed:背 ...

  10. 锋利的jQuery幻灯片实例

    //锋利的jQuery幻灯片实例 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...