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
Go语言实现raft协议
Raft算法概述
Raft算法由leader节点来处理一致性问题。leader节点接收来自客户端的请求日志数据,然后同步到集群中其它节点进行复制,当日志已经同步到超过半数以上节点的时候,leader节点再通知集群中其它节点哪些日志已经被复制成功,可以提交到raft状态机中执行。Raft 提供了一种在计算系统集群中分布状态机的通用方法,确保集群中的每个节点都同意一系列相同的状态转换。
通过以上方式,Raft算法将要解决的一致性问题分为了以下几个子问题。
leader选举:集群中必须存在一个leader节点。
日志复制:leader节点接收来自客户端的请求然后将这些请求序列化成日志数据再同步到集群中其它节点。
安全性:如果某个节点已经将一条提交过的数据输入raft状态机执行了,那么其它节点不可能再将相同索引 的另一条日志数据输入到raft状态机中执行。
Raft 协议将整个过程分为主要3个步骤:
领导者:和其他一致性算法相比,Raft 使用一种更强的领导能力形式。比如,日志条目只从领导者发送给其他的服务器。这种方式简化了对复制日志的管理并且使得 Raft 算法更加易于理解。
领导选举:Raft 算法使用一个随机计时器来选举领导者。这种方式只是在任何一致性算法都必须实现的心跳机制上增加了一点机制。在解决冲突的时候会更加简单快捷。
关系调整:Raft 使用一种共同一致的方法来处理集群成员变换的问题,在这种方法中,两种不同的配置都要求的大多数机器会重叠。这就使得集群在成员变换的时候依然可以继续工作。
Raft算法基础
一个典型的 Raft 集群包含多个节点。在任意时刻,每个节点都将处于以下三个状态之一:
leader:处理所有来自客户端的请求,封装为可重入的日志记录(log entry),并将其复制给其他 follower 节点,并在收到超过半数的确认后将日志提交。
follower:follower 是被动的,他们自己不产生请求,只处理 leaders 和 candidates 的请求并回应。
candidate:follower 被选举成为 leader 之前的状态。
Raft 集群的节点之间只存在两种 RPC 调用:
RequestVote RPC:发起于 candidate 节点,作用于其他节点,用于收集选票,只有当 candidate 当前日志的 term 和 index 都比当前节点
AppendEntries RPC:发起于 leader 节点,作用于 follower 节点,用于将 leader 的 log entries 复制给 follower。当 AppendEntries RPC 不包含 log entry 时,则其作为心跳(heartbeat)告知所有 follower 节点 leader 的存活。
所有节点启动时都是 follower 状态,当一个 follower 在一段时间内没有收到来自其他节点的请求或心跳,其超时并转化为一个 candidate 并发起选举。
当收到大多数节点的同意后,candidate 转化为 leader,并开始处理其任期内的一切操作,直到其发现了集群中处于更高 term 的节点,则再次转化为 follower 接受其他请求。
待更新更多内容
推荐阅读
Raft算法分析与实现
ETCD 原理分析(一)- Raft 算法原理
Raft算法原理
etcd Raft库解析
Part III - Previous
Go语言实现dpos协议
Next - Part III
Go语言实现pbft协议
Last modified
2yr ago
Copy link
Contents
Raft算法概述
Raft 协议将整个过程分为主要3个步骤:
Raft算法基础
推荐阅读