raft协议详解
1、raft协议是什么?
分布式系统之于单机系统,优势之一就是有更好的 容错性 。
这是如何做到的?比较容易的一个想法就是 备份(backup) 。一个系统的工作模是:接受客户端的command,系统进行处理,将处理的结果返回给客户端。由此可见,系统里的数据可能会因为command而变化。
实现备份的做法之一就是 复制状态机(Repilcated State Machine,RSM) ,它有一个很重要的性质—— 确定性(deterministic) :
也就是说,如果我们能按顺序将command作用于状态机,它就可以产生相同的状态和相同的输出
那么一个状态机 如何实现 呢?如下图所示(来自raft协议):
上图中,每个RSM都有一个replicated log,存储的是来自客户端的commands。每个RSM中replicate log中commads的顺序都是相同的,状态机按顺序处理replicate log中的command,并将处理的结果返回给客户端。由于状态机具有确定性,因此每个状态机的输出和状态都是相同的。
上图中有一个模块——Consensus Module刚刚没有提及。这个模块用于保证 每个server上Log的一致性 !
因此,raft是一致性协议,是用来保障servers上副本一致性的一种算法。
2、raft协议原理
下面将看论文时我认为的重要点进行记录。
raft协议 遵循的性质
2.1 如何保证Election Safty
raft中,只要candidate获得多数投票,就可以成为领导人。follower在投票的时候遵循两个条件:
对于选举结果:
这里重要的一点是:如何保证在有限的时间内确定出一个候选人,而 不会总是出现票被瓜分的情况 ?raft使用了一个比较优雅的实现方式, 随机选举超时(randomize election timeouts) 。这就使得每个server的timeout不一样,发起新一轮选举的时候,有些server还不是voter;或者一些符合条件的candidate还没有参加下一轮。这种做法使得单个leader会很快被选举出来。
2.2 如何保证Log Matching
Leader在进行AppendEntry RPCs的时候,这个消息中会携带 preLogIndex和preLogTerm 这两个信息,follower收到消息的时候,首先判断它最新日志条目的index和term是否和rpc中的一样,如果一样,才会append.
这就保证了新加日志和其前一条日志一定是一样的。从第一条日志起就开始遵循这个原理,很自然地可以作出这样的推断。
2.3 如何保证Leader Completeness
这个在raft协议中是有完整证明的,这个证明比较简短,用反正法,我在看的时候加了一些标注。
假设leaderU是 第一个 没有包含leaderT中commitT点(T<U)
2.4 raft协议中有一个约定,不能提交之前任期内log entry作为commit点。这是为什么?
这个问题主要是raft协议中commiting entries from previous term部分看的时候有点困惑,开始 误解成了 这个约定是用来保证之前任期内已经被复制到大多数server却没有被提交的日志在新的仍期内不会被覆盖。
实际上,论文中的figrure8的过程是一个正确的过程。
在(c)中,index=2并没有被提交,在(d)中被复制了是一个正确的做法。论文想阐述的是:如果在(c)中,leader提交了这个之前任期内的entry,在(d)中依然会被覆盖,也就是说被commit的entry覆盖了,这是一个错误!因此约定“can not commit entries from previous term”
2.5 cluster membership changes
如果集群的配置发生了变化,例如,新加入几台server,挂掉几台server。这是会影响选举的。
raft的解决方法就是two phase approch,引入一个过度配置,称为共同一致状态。具体的做法和图示:
考虑上述过程:
2.6 log过长或日志回放时间过长怎么办?
此时就需要做log compaction
raft采用的方法是 写时复制 的snapshot(写是复制在linux中可以通过fork来完成)
写时复制主要是处于性能考虑的 ,如果state machine数据太多,snapshot将会耗费大量的时间,也许会 导致系统可用性大大降低
公司要搬走合同未到期如何赔偿
您提到的工厂要从南通搬到上海是工作地点发生变化,属于客观情况发生变化、劳动合同内容需要进行变更的范畴,在这个时候用人单位可以提前三十日以书面形式通知劳动者本人或者额外支付劳动者一个月工资后,然后就可以解除劳动合同了。呵呵,这种问题在阿凡提求职网站上也有很多人问的,你可以去aftjob上面看看,有...
百度贴吧为什么没加入成功??
2.申请人须在所申请贴吧内有过适当的贡献。如发表一定数量的,且有建设意义、并对其他网友有帮助作用的内容,个人贴吧除外;3.申请人在申请吧主之前,须在所申请贴吧的每周平均活动时长不少于10小时;4.申请人须具备在所申请贴吧的话题领域的相关知识;5.申请人帐号从未违反过百度贴吧协议等相关规定;6...
石家庄如何办理居住证
4、以合法稳定住所为由申请办理的,申请人还需提供:房屋产权证明文件、购房合同、购房协议和发票、已在房管部门登记备案出租屋的房屋租赁合同、用人单位住宿证明和缴纳社会保险费凭证、政府(部队)或单位出具的房屋使用证明之一(指政府保障性住房、军产房)。在居住地共同居住的直系亲属申领居住证的,应同时...
求传世服务端架设方法
现在传世的服务端主要用的有两大引擎,一个是AFT(原阿凡提),另一个是飘逸(原凤凰),虽然引擎不同,但其实主要是一些功能和名字不同了.这些对于架设(单机设置)没多大关系.因为都有相应的配置器(启动器).配置步骤都是一样的.要说区别,那就是AFT引擎许多设置需要自己打开文档自己手动改下(主要是服务端IP和服务器名...
兆昆委维可: raft游戏里面玩家是可以在主界面选择自己一个人挑战生存下来也可以和好友进行多人联机,这样会让玩家可以更好的进行冒险生存,很多玩家不知道该怎么联机,下面就让我们来看看raft联机方法介绍.raft联机方法介绍1、打开游戏,在steam中打开游戏.2、开始游戏,在游戏界面中点击载入世界,选择世界,勾选好友可以加入.3、点击载入世界,这样就开始游戏了,等steam上的好友加入即可.》游侠对战平台下载地址点击进入《
开平区19869464321: 羊毛衫必须设计省道吗 ?
兆昆委维可: 羊毛衫不是必须设计省道的,要根据衣服的设计、版型确定.由于成型编织工艺的限制,羊毛衫结构板型往往比较简洁,没有或者很少有省道与分割处理.外衣设计有很多省道,而针织面料的特性又要求尽可能少地设计省道.羊毛衫本指用羊毛织制的针织衫,这也是一般老百姓认同的含义,而实际上羊毛衫现在已成为一类产品的代名词,即用来泛指针织毛衫或称毛针织品.毛针织品指主要是以羊毛、羊绒、兔毛等动物毛纤维为主要原料纺成纱线后织成的织物,如兔毛衫、雪兰毛衫、羊仔毛衫、腈纶衫等都是羊毛衫大家族.
开平区19869464321: 阴阳西游热血版装备获取途径全解析 ?
兆昆委维可: 阴阳西游热血版装备获取途径全解析小编已经整理好了,现第一时间把阴阳西游热血版装备获取途径全解析分享给大家.希望由小编所提供的这篇攻略玩家朋友们喜欢,也...
开平区19869464321: 未来正义联盟2.0(关于未来正义联盟2.0的简介) ?
兆昆委维可: 1、 《未来正义联盟2.0》,是美国DC漫画公司推出发售的人气漫画作品.2、讲述近未来的正义联盟.本文关于未来正义联盟2.0的简介就讲解完毕,希望对大家有所帮助.
开平区19869464321: raft为什么海上没东西 ?
兆昆委维可: raft海上没东西是因为方向的问题,可以把船帆左右调一下,或者顺着风向即可.《木筏:求生(RAFT)》是由Raft Developer制作的一款生存类游戏,游戏中玩家被困在大海,脚下只有一个小木筏,手上只有一个钩子,可以用钩子钩到海上的垃圾.
开平区19869464321: 江苏省南通市海门市三厂镇海化街建南弄邮编是什么? ?
兆昆委维可: 江苏省南通市海门市三厂镇海化街建南弄邮编是226121
开平区19869464321: 新台币和人民币怎么换算?一韩元=多少人民币? ?
兆昆委维可: 1元人民币=4.14738元新台币; 1元新台币=0.24116元人民币1韩元=人民币1分钱
开平区19869464321: raft中有几种可以抓的动物 ?
兆昆委维可: raft中有9种可以抓的动物,《Raft》是由Redbeet Interactive开发Axolot Games发行的一款第一人称海上生存冒险游戏,游戏中主角将出生在一片漫无边际的海洋上,靠一只小木筏和一只钩子努力求生.《Raft》游戏中玩家要做的就是利用钩子勾住海洋上漂流的东西,利用这些物资制作有用的工具、武器,来加固自己的木筏,同时玩家还要防止海中饥肠辘辘的鲨鱼,抵御他们的攻击.游戏支持多人模式.
开平区19869464321: 要吃点什么好这个时候应该多吃点什么好呢?没有胃口吃饭?怎么办 ?
兆昆委维可: 青菜还可以吃,粥完全吃不了,白开水泡饭勉强能吃一点点
开平区19869464321: 毒害宝宝健康的气味有哪些? ?
兆昆委维可: 1、香烟味 成人呼出的烟气和点燃香烟时散发的烟雾,会“呛”着宝宝,直接威胁着他们稚嫩的呼吸道、口腔、交感神经和成长中的大脑,引起孩子哮喘、龋齿、耳鸣或听...