• 从零开始学区块链(4)


    转自:区块链大师

    1. 传统分布式一致性算法和区块链共识过程的异同点

    相同点:

    • Append only(只能增加)

    • 强调序列化

    • 少数服从多数原则

    • 分离覆盖的问题:即长链覆盖短链区块,多节点覆盖少数节点日志



    不同点:

      • 传统分布式一致性算法大多不考虑拜占庭容错(Byzanetine Paxos除外),即假设所有节点只发生宕机、网络故障等非人为问题,并不考虑恶意节点篡改数据的问题;

      • 传统分布式一致性算法是面向日志(数据库)的,即更通用的情况,而区块链共识模型面向交易的,所以严格来说,传统分布式一致性算法应该处于区块链共识模型的下面一层。

    2. 区块链共识模型与传统一致性算法的关系


    考虑上面的不同点,结合私有链和行业链的性质,我们有:

    • 私有链:封闭生态的存储网络,所有节点都是可信任的,如某大型集团内部多数公司。

    • 行业链:半封闭生态的交易网络,存在对等的不信任节点,如房地产行业A、B、C、D公司。

    • 公有链:开放生态的交易网络,这层主要是为行业链和私有链提供全球交易网络。

    由于私有链是封闭生态的存储网络,也就是说使用传统分布式一致性模型应该是最优的;

    由于联盟行业链其半封闭半开放特性,使用Delegated Proof of XXX 是最优的,可以考虑以传统一致性算法作为基础加入拜占庭容错/安全防护机制进行改进。

    公有链PoW应该仍然是最优的选择。

    传统分布式一致性算法介绍 

    本文主要讨论主流的Paxos算法家族和Raft算法,这里抛砖引玉,网络上有关两者的资料非常丰富,大家可自行搜索查阅。

    1. Paxos 算法家族

    1998年Lamport提出Paxos算法,后续又增添多个改进版本的Paxos形成Paxos协议家族,且Paxos都有共同点是不容易工程实现。

    • Classic Paxos :LeaderLess,又名Basic Paxos,以下均为Paxos的变种,基于CAP定律,侧重了不同方向。

    • Cheap Paxos

    • Egalitarian Paxos : conflicts rare

    • Fast Paxos : Leader only when needed ,conflicts common

    • Multi-Paxos :Leader driven

    • Byzanetine Paxos



    "Byzantine Paxos adds an extra message (Verify) which acts to distribute knowledge and verify the actions of the other processors".Lamport 在2011年的论文《Leaderless Byzanetine Paxos》中表示不清楚实践中是否有效,考虑Paxos本身实现的难度,此方案工程角度不是最优,但是系统角度应该是最好的。

    本小节Ref:

    Wikipedia_Paxos

    Leaderless Byzanetine Paxos



    2 Raft 算法

    这是一个非常友好的算法,容易理解、实现,不过它是Strong Leadership的,也就是说,

    任意包含Leader的时刻,Leader拥有完全记账权,如果此Leader节点是恶意的,后果不堪设想。

    且leadership的一致性算法都有个通病,吞吐量受单个节点的限制,这点在Raft身上体现尤甚。

    Raft算法简介:https://raft.github.io/

    Raft算法动态演示:http://thesecretlivesofdata.com/raft/


    3. 其他

    VRR(Viewstamped Replication Revisited)
    这也是一个基于leadership的一致性算法,相比上述其他算法,它的优点是延迟最小。



    三、常见区块链共识模型介绍

    转载自这里:https://bitsharestalk.org/index.php?topic=4031.0

    这是DPoS的白皮书,主要介绍了DPos,但也囊括了其他共识模型的介绍。



  • 相关阅读:
    python做一个数独小游戏
    通过进程快照枚举进程的信息
    单向链表 malloc与free
    指针常量&指向常量的指针
    变量在不同区域的默认初始值
    数组指针和指针数组
    堆的首地址和堆的指针
    创建对象时,系统会自动调用构造函数和析构函数
    对象所占内存的大小与首地址
    范磊 C++ 第8章 指针
  • 原文地址:https://www.cnblogs.com/cjy15639731813/p/6946765.html
Copyright © 2020-2023  润新知