zoukankan      html  css  js  c++  java
  • Raft共识算法介绍

    提要

    共识算法就是一致性算法,目的是分布式场景下达成一致的方法。Raft共识算法就选择一个领导人leader来进行一致性裁决,leader的选举规则也是Raft算法的一部分。

    Fabric2.0版本进行重大变革,支持的共识算法:

    • Raft 默认,官方推荐

    • Kafak 废弃,官方废弃。

    • Solo 废弃,官方废弃。

    Raft共识算法

    Raft是在非拜占庭故障下达成共识的强一致协议。在区块链系统中,使用Raft实现记账共识的过程可以描述如下:首先选举一个leader,接着赋予leader完全的权利管理记账。leader从客户端接收记账请求,完成记账操作,生成区块,并复制到其他记账节点。有了leader简化了记账操作的管理。如果leader失效或与其他节点失去联系,这时,系统就会选出新的leader。
    Raft基础

    一个Raft集群通常包含5个服务器,允许系统有2个故障服务器。每个服务器处于3个状态之一:leader、follower或candidate。正常操作状态下,仅有一个leader,其他的服务器均为follower。follower是被动的,不会对自身发出的请求而是对来自leader和candidate的请求做出响应。leader处理所有的客户端请求(若客户端联系follower,则该follower将转发给leader)。candidate状态用来选举leader。

    Raft阶段主要分为两个,首先是leader选举过程,然后在选举出来的leader基础上进行正常操作,比如日志复制、记账等。
    leader选举

    当follower在选举超时时间内未收到leader的心跳消息,则转换为candidate状态。为了避免选举冲突,这个超时时间是一个150~300ms之间的随机数。

    一般而言,在Raft系统中:

    1)任何一个服务器都可以成为一个候选者candidate,它向其他服务器follower发出要求选举自己的请求。
    2)其他服务器同意了,发出OK。如果在这个过程中,有一个follower宕机,没有收到请求选举的要求,此时候选者可以自己选自己,只要达到 N / 2 + 1 N/2+1 N/2+1的大多数票,候选人还是可以成为leader。
    3)这样这个候选者就成为了leader领导人,它可以向follower发出指令,比如进行记账。
    4)以后可以通过心跳进行记账的通知。
    5)一旦这个leader崩溃了,那么follower中有一个成为候选者,并发出邀票选举。
    6)follower同意后,其成为leader,继续承担记账等指导工作。
    在这里插入图片描述

    记账过程

    Raft的记账过程按以下步骤完成:
    1)假设leader领导人已经选出,这时客户端发出增加一个日志的要求;
    2)leader要求follower遵从他的指令,都将这个新的日志内容追加到他们各自日志中;
    3)大多数follower服务器将交易记录写入账本后,确认追加成功,发出确认成功消息;
    4)在下一个心跳中,leader会通知所有follower更新确认的项目。
    对于每个新的交易记录,重复上述过程。

    如果在这一过程中,发生了网络通信故障,使得leader不能访问大多数follower,那么leader只能正常更新它能访问的那些follower服务器。而大多数的服务器follower因为没有了leader,它们将重新选举一个候选者作为leader,然后这个leader作为代表与外界打交道,如果外界要求其添加新的交易记录,这个新的leader就按上述步骤通知大多数follower,如果这时网络故障修复了,那么原先的leader就变成follower,在失联阶段,这个老leader的任何更新都不能算确认,都回滚,接收新的leader的新更新。

    ————————————————
    版权声明:本文为CSDN博主「让我思考一下」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/s_lisheng/article/details/78022645

  • 相关阅读:
    初识HTML
    CSS字体
    CSS层叠
    CSS选择器
    DOM一致性检测
    javascript中关于value的一个小知识点(value既是属性也是变量)
    IE浏览器下常见的CSS兼容问题
    haslayout详解
    去除IE6浏览器下获得焦点的元素的虚线框的两个小办法
    引入CSS
  • 原文地址:https://www.cnblogs.com/jiftle/p/14600559.html
Copyright © 2011-2022 走看看