兄弟连区块链入门到精通教程区块链共识算法分布式一致性算法Raft

Paxos自1990年提出以后,相当长时间内几乎已成为分布式一致性算法的代名词。
但因其难以理解和实现,目前知名实现仅有Chubby、Zookeeper、libpaxos几种,其中Zookeeper使用的ZAB对Paxos做了大量改进。
为此,2013年斯坦福的Diego Ongaro、John Ousterhout,提出了新的更易理解和实现的一致性算法,即Raft。

Raft和Paxos均只要保证n/2+1节点正常,即可服务。相比Paxos,其优势即为易于理解和实现。
Raf将算法分解为:选择领导者、日志复制、安全性等几个子问题。
它的流程即为:开始时在集群中选举出Leader负责日志复制的管理,Leader接收来自客户端的事务请求(日志),
并将它们复制给集群中的其他节点,然后通知集群中的其他节点提交日志,Leader负责保证其他节点与它的日志同步。
当Leader宕机时,集群其他节点重新发起选举,选出的新的Leader。

角色

Raft涉及三种角色:

  • Leader:即领导者,负责处理来自客户端的请求,管理日志复制、以及与Follower保持心跳以维持其领导者地位。
  • Follower:即追随者,负责响应来自Leader的日志复制请求,响应来自Candidate的选举请求。初始时所有节点均为Follower。
  • Candidate:即候选者,负责发起选举投票,Raft启动后或Leader宕机后,一个节点从Follower转为Candidate,并发起选举,选举成功后,由Candidate转为Leader。

Term(任期)

在Raft中使用了Term(任期)的概念,一轮选举即为一个Term(任期),一个Term中仅能产生一个Leader。
Term使用连续递增的编号表示,初始时所有Follower的Term均为1。
其中某个Follower定时器到期触发选举,其状态转换为Candidate,此时Term加1变为2,然后开始选举,有如下几种可能:

  • 1、如果当前Term为2的任期内没有选举出Leader或出现异常,Term递增为3,并开始新一轮选举。
  • 2、此轮Term为2的任期内选举出Leader后,如果Leader宕机,此时其他Follower转为Candidate,Term递增,并发起新的选举。
  • 3、如果Leader或Candidate发现自己的Term比其他Follower小时,Leader或Candidate转为Follower,Term递增。
  • 4、如果Follower发现自己的Term比其他Follower小时,更新Term与其他Follower保持一致。

每次Term递增都将发生新一轮选举,在Raft正常运行过程中,所有节点Term均一致。
如果节点不发生故障,一个Term(任期)会一直保持下去,当某节点收到的请求中Term比当前Term小时拒绝请求。

选举

初始时所有节点均为Follower,且定时器时间不同。
某个节点定时器触发选举后,Term递增,该节点由Follower转换为Candidate,向其他节点发起投票请求(RequestVote RPC)。
有如下几种可能:

  • 1、收到过半数节点(n/2+1)投票,由Candidate转换为Leader,向其他节点发送心跳以维持领导者地位。
  • 2、如果收到其他节点发送的AppendEntries RPC请求,且该节点Term大于当前节点Term,即发现了新的有效领导者,转换为Follower,否则保持Candidate拒绝该请求。
  • 3、选举超时,Term递增,重新发起选举。

每轮Term期间,每个节点均只能投票1次,如果多个Candidate均没有接收到过半数投票,则每个Candidate Term递增,重启定时器并重新发起选举。
因定时器时间随机,因此不会多次出现多个Candidate同时发起投票的问题。

日志复制

保证节点的一致性,就要保证所有节点都按顺序执行相同的操作序列,日志复制目的即为此。

  • 1、Leader接收到客户端事务请求(即日志),先将日志追加到本地Log中,并通过AppendEntries RPC复制给其他Follower。
  • 2、Follower接收到日志后,追加到本地Log中,并向Leader发送ACK消息。
  • 3、Leader收到过半数Follower的ACK消息后,将日志置为已提交并正式提交日志,通知客户端,并发送AppendEntries RPC请求通知Follower提交日志。

安全性

  • 1、每个Term期间只能选举一个Leader。
  • 2、Leader不会删除或覆盖已有日志条目,只会追加。
  • 3、如果相同索引位置的日志条目Term任期号相同,那么认为从头到这个索引位置均相同。
  • 4、如果某个日志条目在某任期内提交,那么这个日志条目必然出现在更大的Term任期号的所有领导中。
  • 5、如果Leader在某索引位置的日志条目已提交,那么其他节点相同索引位置不会提交不同的日志条目。

RequestVote RPC和AppendEntries RPC

Raft中节点通信使用两种RPC,即RequestVote RPC和AppendEntries RPC:
RequestVote RPC:即请求投票,由Candidate在选举期间发起。
AppendEntries RPC:即附加条目RPC,由Leader发起,用于日志复制和心跳机制。

原文地址:http://blog.51cto.com/12918475/2298340

时间: 2024-07-30 15:00:01

兄弟连区块链入门到精通教程区块链共识算法分布式一致性算法Raft的相关文章

兄弟连区块链入门到精通教程基础开发通过接口查询xrp提币情况

package main import ( "errors" "fmt" "math" "strconv" "strings" "github.com/buger/jsonparser" "github.com/levigross/grequests" ) const min = 0.000000000001 func isEqual(f1, f2 float64)

MySQL从入门到精通教程(性能测试与调优)

MySQL从入门到精通(性能测试与调优) 课程观看地址:http://www.xuetuwuyou.com/course/33 课程出自学途无忧网:http://www.xuetuwuyou.com/ 从基础开始,一直到高级方面,包括但不限于SQL语句,SQL调优.数据库调优等方面,里面穿插多个案例,大部分都是实例讲解. 课时1:SQL语句实战-1 课时2:SQL语句实战-2 课时3:高级SQL语句实战-1 课时4:高级SQL语句实战-2 课时5:存储引擎讲解 课时6:存储过程精讲 课时7:锁的

600集Python从入门到精通教程(懂中文就能学会)

目录大纲: 本套教程15天 1-3   天内容为Linux基础命令 4-13  天内容为Python基础教程 14-15 天内容为 飞机大战项目演练 视频概括: 第一阶段(1-3天): 该阶段首先通过介绍不同领域的三种操作系统,操作系统的发展简史以及Linux系统的文件目录结构让大家对Linux系统有一个简单的认识,同时知道为什么要学习Linux命令.然后我们会正式学习Linux命令 1. 文件和目录命令:ls,cd,touch,mkdir,rm 2. 拷贝和移动命令:tree,cp,mv 3.

JPA入门到精通教程 109个视频

https://ke.qq.com/course/199224#tuin=337f5ff2 随着Spring Boot微服务框架的逐渐流行,使用注解的方式写代码会越来越多,源码时代顺应企业需求,即时更新了原Hibernate内容,使用JPA代替,后续还会逐渐推出Spring Data JPA.Spring Boot等一系列框架,敬请期待.

区块链从入门到精通

一.预备知识 一个故事告诉你比特币的原理及运作机制 区块链是什么 二.比特币 比特币白皮书 英文版< Bitcoin: A Peer-to-Peer Electronic Cash System> 中文版<比特币白皮书:一种点对点的电子现金系统> Coursera的比特币和数字货币技术 公开课大致内容包括密码学原理,bitcoin的基本概念,共识机制,区块链现状,区块的应用问题. Bitcoin and cryptocurrency 斯坦福大学比特币课程 CS 251: Bitco

区块链技术从入门到精通

详情请交流  QQ  709639943 01.区块链技术从入门到精通 02.2017年新生大学区块链视频教程 03.Node.js入门到企业Web开发中的应用 04.精通高级RxJava 2响应式编程思想 05.Java秒杀系统方案优化 高性能高并发实战 06.Java深入微服务原理改造房产销售平台 07.快速上手Linux 玩转典型应用 08.快速上手Ionic3 多平台开发企业级问答社区 09.Java Spring Security开发安全的REST服务 10.深入Java虚拟机(JVM

区块链入门教程

区块链(blockchain)是眼下的大热门,新闻媒体大量报道,宣称它将创造未来. 可是,简单易懂的入门文章却很少.区块链到底是什么,有何特别之处,很少有解释. 下面,我就来尝试,写一篇最好懂的区块链教程.毕竟它也不是很难的东西,核心概念非常简单,几句话就能说清楚.我希望读完本文,你不仅可以理解区块链,还会明白什么是挖矿.为什么挖矿越来越难等问题. 需要说明的是,我并非这方面的专家.虽然很早就关注,但是仔细地了解区块链,还是从今年初开始.文中的错误和不准确的地方,欢迎大家指正. 一.区块链的本质

区块链入门教程(转)

原作者:阮一峰 原文链接:http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html 区块链(blockchain)是眼下的大热门,新闻媒体大量报道,宣称它将创造未来. 可是,简单易懂的入门文章却很少.区块链到底是什么,有何特别之处,很少有解释. 下面,我就来尝试,写一篇最好懂的区块链教程.毕竟它也不是很难的东西,核心概念非常简单,几句话就能说清楚.我希望读完本文,你不仅可以理解区块链,还会明白什么是挖矿.为什么挖矿越来越难等问

2018最新区块链技术,从入门到精通视频教程(比特币基础技术)

2017最新区块链技术,从入门到精通视频教程(视频+源码+工具) 最新整理区块链技术视频包含开发工具,源码,视频教程,从小白到大神,分享给大家学习. 区块链最早是比特币的基础技术,目前世界各地均在研究,可广泛应用于金融等各领域 区块链的基本原理 交易(Transaction):一次操作,导致账本状态的一次改变,如添加一条记录: 区块(Block):记录一段时间内发生的交易和状态结果,是对当前账本状态的一次共识: 链(Chain):由一个个区块按照发生顺序串联而成,是整个状态变化的日志记录. 如果