• PBFT(拜占庭容错)简述


    共识算法

    区块链中最重要的便是共识算法,比特币使用的是POW(Proof of Work,工作量证明),以太币使用的是POS(Proof of Stake,股权证明)使得算力变的不怎么重要了,而今POS的变体DPOS(Delegated Proof of Stake,股份授权证明)进一步削减算力的浪费,同时也加强了区块链的安全性。
    不过,对于不需要货币体系的许可链或者私有链而言,绝对信任的节点,以及高效的需求上述共识算法并不能够提供,因此对于这样的区块链,传统的一致性算法成为首选,PBFT(拜占庭容错)、PAXOS、RAFT。
     

    PBFT(拜占庭容错)

    这是一种基于消息传递的一致性算法,算法经过三个阶段达成一致性,这些阶段可能因为失败而重复进行。

    假设节点总数为3f+1,f为拜赞庭错误节点:

    1、当节点发现leader作恶时,通过算法选举其他的replica为leader。

    2、leader通过pre-prepare 消息把它选择的 value广播给其他replica节点,其他的replica节点如果接受则发送 prepare,如果失败则不发送。

    3、一旦2f个节点接受prepare消息,则节点发送commit消息。

    4、当2f+1个节点接受commit消息后,代表该value值被确定

    如下图表示了4个节点,0为leader,同时节点3为fault节点,该节点不响应和发出任何消息。最终节点状态达到commited时,表示该轮共识成功达成。

     
    其中C为发送请求端,0123为服务端,3为宕机的服务端,具体步骤如下:
    1. Request:请求端C发送请求到任意一节点,这里是0
    2. Pre-Prepare:服务端0收到C的请求后进行广播,扩散至123
    3. Prepare:123,收到后记录并再次广播,1->023,2->013,3因为宕机无法广播
    4. Commit:0123节点在Prepare阶段,若收到超过一定数量的相同请求,则进入Commit阶段,广播Commit请求
    5.Reply:0123节点在Commit阶段,若收到超过一定数量的相同请求,则对C进行反馈
     
    根据上述流程,在 N ≥ 3F + 1 的情況下一致性是可能解決,N为总计算机数,F为有问题的计算机总数
     
    N=4 F=0 时:
      得到数据 最终数据
    A 1 1 1 1 1
    B 1 1 1 1 1
    C 1 1 1 1 1
    D 1 1 1 1 1
    N=4 F=1 时:
      得到数据 最终数据
    A 1 1 1 0 1
    B 1 1 0 1 1
    C 1 0 1 1 1
    D 0 1 1 1 1

    N=4 F=2 时:
      得到数据 最终数据
    A 1 1 0 0 NA
    B 1 0 0 1 NA
    C 0 0 1 1 NA
    D 0 1 1 0 NA
    由此可以看出,拜占庭容错能够容纳将近1/3的错误节点误差,IBM创建的Hyperledger就是使用了该算法作为共识算法。

    优点:上述共识算法都脱离不了币的存在,系统的正常运转必须有币的奖励机制,系统的安全性实际上是由系统币的持有者维护保证。当我们区块链系统实际运用到商业应用时,由其承载的资产价值可能远远超出系统发行的币的价值,如果由币的持有者保证系统的安全及稳定性将是不可靠的 。

    1)系统运转可以脱离币的存在,pbft算法共识各节点由业务的参与方或者监管方组成,安全性与稳定性由业务相关方保证。

    2)共识的时延大约在2~5秒钟,基本达到商用实时处理的要求。

    3)共识效率高,可满足高频交易量的需求。

    应用:央行的数字货币、布萌区块链。


    作者:JoannaD
    链接:https://www.zhihu.com/question/55794026/answer/146667857
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    tomcat调试模式出问题的解决方法
    文本输入 的 onfucus 和 onblur
    how to choose one of compenent and control
    C# Captcha 测试 firefox 和 IE
    谈谈对GridView控件DataKeyName属性的一点认识
    Response.Redirect和Server.Transfer的区别
    select 基本常用语法
    top、postop、scrolltop、scrollHeight、offsetHeight
    onchange 和 onpropertychange区别
    try catch 和if else 语句区别细说
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/9036736.html
Copyright © 2020-2023  润新知