bsatoshi-bitcoin-blockchain-basic
Search…
1.0.0
Introduction
Part I
README
导读
什么是比特币
为什么会出现比特币
为什么要持有比特币
比特币真的是货币吗?
比特币的价值是什么
比特币是怎么产生的,它是否真实存在
什么是挖矿?
为什么挖矿可以挖到比特币
除了挖矿还可以怎么得到比特币
比特币这么多年是如何运行并未宕机的
比特币解决了什么痛点
比特币对现在社会的影响是什么
比特币会有持续的价值吗
现实社会的不公平,在比特币的世界存在吗
结束语
区块链基础-前序
区块链基础-什么是区块链
区块链基础-区块链用到了哪些技术
区块链基础-为什么会出现区块链
区块链基础-区块链是怎么产生的,它是否真实存在
区块链基础-区块链的价值是什么
区块链基础-区块链解决了什么痛点
区块链基础-区块链对现在社会的影响是什么
区块链基础-区块链未来可以应用在哪些行业
区块链基础-区块链目前是否有落地项目
区块链基础-区块链技术是否值得学习
区块链基础-公有链,联盟链、私有链、跨链、侧链是什么意思
区块链基础-什么是超级账本
区块链基础-什么是以太坊
区块链基础-什么是智能合约
区块链基础-什么是Defi
区块链基础-共识算法有哪些?Pow、Pos、Dpos、拜占庭都是什么?
区块链基础-什么是零知识证明
区块链基础-什么是闪电网络
区块链基础-什么是DAG技术
炒币基础-为什么要炒币
炒币基础-炒币真的可以财富自由吗?
炒币基础-炒币的流程是什么
炒币基础-币币交易和OTC的区别
炒币基础-炒币常用交易所有哪些
炒币基础-炒币常用钱包推荐
炒币基础-炒币常用工具推荐
炒币基础-炒币有哪些媒体值得看
炒币基础-炒币有哪些行情分析师可以看
炒币基础-怎么查询区块交易
炒币基础-怎么判断一个币是好是坏
炒币基础-怎么样埋伏百倍币?
炒币基础-炒币是投机吗?
炒币基础-一个币的基本面要怎么看,怎么识别这个币是否是cx?
炒币基础-定投炒币靠谱吗
炒币基础-Pos和Defi可以玩吗?
炒币基础-如何当一个合格的矿工?
炒币基础-为什么炒币总是卖出就涨,买入就跌?
炒币基础-庄是什么、韭菜是什么?
炒币基础-币圈有哪些不为人知的黑幕?
炒币基础-币圈和链圈的区别
炒币基础-币圈有哪些国外的渠道值得关注
炒币基础-借钱炒币这事靠谱吗?
Part II
比特币开发系列文章:虚拟机搭建比特币运行环境
加密算法系列之:des加密、aes加密、3des加密、对称加密、非对称加密、Hash 算法
bip协议是什么
raft协议是什么
pbft协议是什么
侧链开发和跨链开发需要了解哪些知识
比特币交易流程
比特币挖矿流程和默克尔树
比特币多重签名
比特币闪电网络
eos区块链环境搭建
2020年Macos最全 ETH区块链环境搭建,并使用Truffle创建第一个Dapps
eth 开发快速开发一个dapp
Part III
Go语言基础入门课程
Golang 快速搭建开发环境
Golang 基础语法
Golang 基础之编码规范
Golang 基础之接口
Golang 基础之错误处理
Golang 基础之json
Golang 基础之如何使用Go Module和Go proxy
Go语言基础常用包
Go语言之channel
Go语言之select用法
细说Go语言之Goroutine
Go语言实现pos协议
Go语言实现dpos协议
Go语言实现raft协议
Go语言实现pbft协议
Go语言系列课程之solidity语法入门
Go语言高级课程
Go语言开发区块链实战
Part IV
React实现区块链入门课程
Vue实现区块链入门课程
cosmos 开发dapp
Powered By
GitBook
raft协议是什么
Raft历史背景
在讲Raft前,有必要提一下Paxos算法,Paxos算法是Leslie Lamport于1990年提出的基于消息传递的一致性算法。然而,由于算法难以理解,刚开始并没有得到很多人的重视。其后,作者在八年后,也就是1998年在ACM上正式发表,然而由于算法难以理解还是没有得到重视。而作者之后用更容易接受的方法重新发表了一篇论文《Paxos Made Simple》。
可见,Paxos算法是有多难理解,即便现在放到很多高校,依然很多学生、教授都反馈Paxos算法难以理解。同时,Paxos算法在实际应用实现的时候也是比较困难的。这也是为什么会有后来Raft算法的提出。
Raft定义(概念)
Raft 是用于实现分散式系统的一种容易理解的共识机制,主要用来管理日志複製的一致性。
Raft 的核心思想很简单:
如果在分散式系统中多个数据库的初始状态一致,只要之后进行的操作顺序一致,就能保证之后的执行结果一致。
试想一下,假设把三个数据库想像成是你面前的三本账本,只要每次在第一本账本上写上了一笔记录时,同时将这笔记录同样地写在另外两本账本上,那麽这三本账本的数据始终是一样的。
Raft 取代複杂难懂的Paxos算法,并且证明可以提供与Paxos相同的容错性以及性能,并且更容易应用到实际系统中。
Raft 集群中,伺服器的三种角色
Could not load image
Raft 集群中,伺服器的三种角色
一个 Raft 集群(Raft cluster)中,至少包含 5 个伺服器,允许系统有 2 个故障伺服器,在系统初始时,每个伺服器都处于追随者的状态。而每个伺服器将会是这三种角色其中一个:
领袖(Leader):正常状态下只有一个领袖 ,其他都是追随者,它会负责处理所有来自外部 Client 的请求及进行日志複製(日志複製是单向的,即领袖发送给追随者),先就是负责"出块"的节点。
候选人(Candidate):由追随者向领袖转换的中间状态,等待被选举为领袖。
追随者(Follower):它是被动的节点,对来自 Client 和候选人的请求做出响应。如果收到外部 Client 的请求,就会将请求会被转发给领袖。
而这三种角色在条件满足下可以互相转换,而在正常情况下只会有一个领袖,其他都是追随者。而领袖会负责所有外部的请求。
几个关键概念
复制状态机
我们知道,在一个分布式系统数据库中,如果每个节点的状态一致,每个节点都执行相同的命令序列,那么最终他们会得到一个一致的状态。也就是和说,为了保证整个分布式系统的一致性,我们需要保证每个节点执行相同的命令序列,也就是说每个节点的日志要保持一样。所以说,保证日志复制一致就是Raft等一致性算法的工作了。
任期(Term)概念
在分布式系统中,“时间同步”是一个很大的难题,因为每个机器可能由于所处的地理位置、机器环境等因素会不同程度造成时钟不一致,但是为了识别“过期信息”,时间信息必不可少。
Raft算法中就采用任期(Term)的概念,将时间切分为一个个的Term(同时每个节点自身也会本地维护currentTerm),可以认为是逻辑上的时间,如下图。
Could not load image
任期(Term)概念
每一任期的开始都是一次领导人选举,一个或多个候选人(Candidate)会尝试成为领导(Leader)。如果一个人赢得选举,就会在该任期(Term)内剩余的时间担任领导人。在某些情况下,选票可能会被评分,有可能没有选出领导人(如t3),那么,将会开始另一任期,并且理科开始下一次选举。Raft 算法保证在给定的一个任期最少要有一个领导人。
心跳(heartbeats)和超时机制(timeout)
在Raft算法中,有两个timeout机制来控制领导人选举:
一个是选举定时器(eletion timeout):即Follower等待成为Candidate状态的等待时间,这个时间被随机设定为150ms~300ms之间
另一个是headrbeat timeout:在某个节点成为Leader以后,它会发送Append Entries消息给其他节点,这些消息就是通过heartbeat timeout来传送,Follower接收到Leader的心跳包的同时也重置选举定时器。
Raft 有几个新的特性
强领导者(Strong Leader):Raft 使用一种比其他算法更强的领导形式。例如,日志条目只从领导者发送向其他服务器。这样就简化了对日志复制的管理,使得 Raft 更易于理解。
领导选取(Leader Selection):Raft 使用随机定时器来选取领导者。这种方式仅仅是在所有算法都需要实现的心跳机制上增加了一点变化,它使得在解决冲突时更简单和快速。
成员变化(Membership Change):Raft 为了调整集群中成员关系使用了新的联合一致性(joint consensus)的方法,这种方法中大多数不同配置的机器在转换关系的时候会交迭(overlap)。这使得在配置改变的时候,集群能够继续操作。
推荐阅读
Raft 一致性算法论文译文
區塊鏈 Blockchain – 共識機制之 Raft
Part II - Previous
bip协议是什么
Next - Part II
pbft协议是什么
Last modified
2yr ago
Copy link
Contents
Raft历史背景
Raft定义(概念)
Raft 集群中,伺服器的三种角色
几个关键概念
Raft 有几个新的特性
推荐阅读