区块基础-RAFT
Posted 磨链mochain社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块基础-RAFT相关的知识,希望对你有一定的参考价值。
RAFT算法:
RAFT算法引用原文论文翻译的第一句话:RAFT是一种为了管理复制日志的一致性算法(https://github.com/maemual/raft-zh_cn/blob/master/raft-zh_cn.md)。
同样RAFT算法中也先引入几个角色和概念:
Leader:领导者
Follower:群众
Candidate:竞选者
Term:任期
构建一个现实的环境场景来帮助理解,在一个封闭网络中,有多个分布式节点,节点间开始权利和义务一样,互相平等,然后通过一种投票的模式:
首先所有节点都是群众,开始投票,所有群众可以参与投票也可以参与竞选,参与竞选的群众就变成了竞选者,然后选择领导者,对领导者有一个任期的概念,在选举结束后,领导者开始任期,之前候选人变成群众,直到第二期选举开始。
从角色角度来看:群众-竞选者-领导者在选举过程中不停变化。
每个节点的角色随着投票选举过程一直在群众-竞选者-领导者-群众之间转换。
再细分下整个过程:
领导者的选举过程
所有网络中的节点,一开始都是群众,投票开始节点A、B、C等节点都转变为竞选者,这里会有一个问题,之前有个朋友也问过我,每个人都投自己那么这个领导者怎么出来。
这个环节其实很有意思,每个人投票开始时间不同,那么都有一个超时时间的控制,一旦出现超时还没有选出领导者,那么超时部分节点就变成了群众,他就必须在随机休息一段时间、再次投票就只能去投其他的竞选者,这个问题也就解决了。这样的模式下来领导者很快就能出现。
领导者在整个系统中用来确保分布式集群的一致性,客户终端发送请求至领导者,领导者接受一个未确认信息、然后把未确认信息发送给群众节点,收集群众节点的返回信息,一旦超过半数节点返回,领导者再发送信息给客户端,确认信息,确认信息后,领导者再发送确认信息给群众节点,确保信息一致。
选出领导者后,那么领导者一直和网络中其他节点进行心跳通信,一旦一段时间内领导者没有发出通信,那么就认为领导者出现不确定故障(主机宕机、网络故障等),那么就再发起一轮新的选举。
再假设几个场景:
1.领导者在接收客户端消息的时候出现故障。这个时候领导者和客户端就失去联系,客户端认为超时,那么领导者上没有数据,同样群众节点也就不会有数据,这个时候确定领导者出现问题就执行再次选举操作。
2.客户端数据到达领导者,领导者发送到至群众节点,群众节点数据一致,但是这时候领导者出现故障,那么这时候即刻进行领导者选举,客户端这时候虽然不知道数据是否递交成功,但是可以尝试重新提交,这时候RAFT通过内部去重方式保证一致性。
3.数据到达领导者,领导者部分发送成功给群众节点,领导者出现故障,那么RAFT模式要求投票选举时候只能拥有最新的数据的节点才能成为竞选者,新的领导者出现数据再次同步,保证一致性。
4.数据到达领导者,发送给群众节点,领导者已提交确认,但是群众节点未全部确认,那么这时候同样2的方法处理重新选举,去重后再保证一致性。
5.数据到达领导者,发送给群众节点,所有节点提交,但是领导者未响应客户端,这个时候其实数据已经一致,故可重复操作无影响。
6.网络脑裂出现双领导者,这种方式下会出现两个领导者分区,但是多数原则保证有一个领导者会提交不成功,所有只能等待网络恢复,更新TERM后,领导者降级后在同步数据一致性。
最后对选择过程中的时间再说明:
选举过程是有一个时间限制,就像上文说到一直自己投自己情况如何控制,选择过程中有超时时间设定,然后中间会有一个分裂投票的概念(split vote)。
这个时候两个竞争者都要求大家投票给自己,两个竞争者在选举时间内得到相同的票,那就再发起投票,在一段时间内只对两个竞争者发起投票,首先发起的理论上得到更多的同意,那么另外一个就称为群众。
简单对RAFT算法做了一个说明,想要深入了解的可以查一下网址:https://raft.github.io/
————/磨链热文HOT /————
- END -
群内工作
磨链(mochain)社区输出计划
招募条件:
1.需要一定的区块链基础。
2.对上述任何一方面有较为深入理解。
3.每周能保证一定的空余时间来折腾。
4.了解github相关
5.人员进行筛选,时间周期比较长。
有意向联系我。磨链在线课程
对自己擅长方面有一定的沉淀,愿意开设在线课程,会考虑和一些专业培训机构合作,要求有一定的一线经验,实实在在分享课程。有兴趣的联系,有偿工作。
磨链(mochain)社区内容输出计划
磨链社区内容输出计划,社区内划分6个模块,针对各模块细化分解,社区成员领取任务进行写作内容输出。审核通过后发布,整个过程中即是自己的一个学习提高,同时也有交流分享。
序号 | 项目 | 内容输出计划 |
1 | 区块链基础 | 包括密码学、共识机制、分布式、P2P网络等 |
2 | 以太坊 | 入门到精通,循序渐进学习以太坊 |
3 | 比特币 | 入门到精通,比特币相关内容深入琢磨 |
4 | 超级账本 | 架构、运行原理、共识机制、环境搭建配置开发相关 |
5 | EOS | 概念介绍,由浅入深,持续学习 |
6 | DAG | DAG的概念、原理机制、项目技术解读 |
PS:想加入磨链的,或者具体参与到磨链社区内容输出计划的,请加磨链组织者微信(jackyjin09)。欢迎每一位区块链技术爱好者加入磨链,一块琢磨区块链技术。
关于磨链和相关合作
磨链”---取磨炼之意,旨在普及区块链技术,磨炼技术,更好投身区块链行业。有兴趣一块琢磨区块链技术,联系笔者微信(jackyjin09)。
磨链社区是一个纯粹的技术社区,欢迎相关技术合作,在不违反原则的前提下,积极参与合作。
你也可以在这里找到我们:
2. Github : https://github.com/mochain
3. Gitter 聊天: https://gitter.im/mochain
4. 知识星球: https://t.zsxq.com/M3BMVZN
5. 知乎:https://www.zhihu.com/people/mochain
(持续更新中)
以上是关于区块基础-RAFT的主要内容,如果未能解决你的问题,请参考以下文章