首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

链块技术 03期

Raft最初是一个用于管理复制日志的共识算法,它是一个为真实世界应用建立的协议,主要注重协议的落地性和可理解性。

Raft是在非拜占庭故障下达成共识的强一致性协议。

算法理解

RAFT核心思想很容易理解,大致就如下:

如果多个数据库初始状态一致,只要之后进行的操作一致,就能保证之后的数据一致。

过程概述

在区块链系统中,使用Raft算法实现共识记账的过程如下:首先,选举一个leader,接着赋予leader赋予完全的权力管理记账。

Leader从客户端接收记账请求,完成记账操作,生成区块,并复制到其他记账节点。

有了leader简化了记账操作的管理。leader可能失效或与其他节点失去联系,这时,系统就会选出新的leader。

问题分解

Raft将共识问题分解为三个相对独立的子问题:

1. Leader选举

现有的leader失效时,必须选出新的leader。

2. 记账

Leader接收来自客户端的交易记录项,在参与共识记账的节点中进行复制,并使其他的记账节点认可交易所对应的区块。

3. 安全

若某个记账节点对其状态机应用了某个特定的区块项,其他的服务器不能对同一个区块索引应用不同的命令。

RAFT基础

RAFT将服务器分为三种角色:LeaderFollowerCandidate,三种角色可以互相转换。

一个Raft集群至少包含5个服务器,允许系统有两个故障服务器,每个服务器处于3种角色之一

Leader:正常操作状态下仅一个;处理所有的客户端请求。

Follower:被动的节点,对来自leader和candidate的请求做出响应(若客户端联系follower,则该follower将请求转发给leader)。

Candidate:该状态用来选举leader。

操作过程

1.选举Leader

Follower自增当前任期,转换为Candidate,对自己投票,并发起RequestVoteRPC,等待下面三种情形发生;

a)获得超过半数服务器的投票,赢得选举,成为Leader

b)另一台服务器赢得选举,并接收到对应的心跳,成为Follower

c)选举超时,没有任何一台服务器赢得选举,自增当前任期,重新发起选举

2.共识记账

Leader接受客户端请求,Leader更新日志,并向所有Follower发送心跳Heatbeats,同步日志。

所有Follwer都有ElectionTimeout,如果在ElectionTimeout时间之内,没有收到Leader的Headbeats,则认为Leader失效,重新选举Leader。

3.故障处理

如果在这一过程中,发生了网络通信故障,使得当前Leader不能访问大多数follower了,那么当前leader只能更新它能正常访问的那些follower服务器。

而大多数follower服务器因为没有了leader,他们将重新选举一个候选者作为leader,然后这个新leader作为代表与外界打交道,如果外界要求其添加新的交易记录,这个新的leader就按照上数步骤通知大多数follower。

如果这时网络故障恢复了,那么原先的leader就变成follower。在失联阶段,这个老leader的任何更新都不能算确认,都回滚,接收新的leader的新的更新。

安全性保证

1.日志的流向只有Leader到Follower,并且Leader不能覆盖日志

2.日志不是最新者不能成为Candidate

RAFT应用

在超级账本的Fabric项目中,共识算法被设计成可插拔的模块,支持像PBFT、Raft等共识算法。

参考资料

动画:http://thesecretlivesofdata.com/raft/

官网:https://raft.github.io/

论文:https://raft.github.io/raft.pdf

本文完,获取更多资讯,敬请关注区块链工程师。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180317G1EZCW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券