4.1.2两个原理:FLP与CAP
1.FLP定理:在网络可靠、存在节点失效的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。在这个原理的前提下,也告诉人们:不要浪费时间去为异步分布式系统设计在任意场景下都能实现共识的算法,在允许节点失效的情况下,纯粹异步系统无法确保一致性在有限时间内完成。
2.CAP定理:分布式计算系统不可能同时确保一致性、可用性和分区容错性,这三者不可兼得。
一致性(consistency):所有节点在同一时刻能够看到同样的数据,即“强一致性”
可用性(availability):确保每个请求都可以收到确定其是否成功的响应,并且是在有限的时间内。
分区容错性(partition tolerance):因为网络故障导致的系统分区不影响系统正常运行。
共识算法的适用范围:
1)私有链:封闭生态的存储网络,所有节点都是可信任的,如某大兴集团内部的多数公司
2)联盟链:半封闭生态的交易网络,存在对等的不信任节点,如行业内部的公司A,B,C等。
3)公有链:开放生态的交易网络,即所有人都可以参与交易,没有任何限制和资格审核。
由于私有链 是封闭生态的存储网络,因此使用传统分布式一致性模型应该是最优的;由于联盟行业链的半封闭、半开放特性,使用Delegated Proof of XXX是最优的;对于公有链,POW应该是最优的选择。
4.4PBFT算法(Practical Byzantine Fault Tolerance)
在PBFT算法中,至多可以容忍不超过系统全部节点数量的1/3的拜占庭节点“背叛”,即如果有超过2/3的节点正常,整个系统就可以正常工作。央行推出的区块链数字票据交易平台用的就是优化后的PBFT算法。腾讯的区块链用的也是PBFT.
PBFT算法的优点:
1.PBFT算法共识各节点由业务的参与方或者监管方组成,安全性与稳定性由业务相关方保证。
2.共识的时延大约在2-5秒,基本达到商用实时处理的要求。
3.共识效率高,可满足高频交易量的需求。
PBFT非常适合联盟链的应用场景,但是在公有链中就有很大的问题。
4.5工作量证明--POW(Proof of Work)
POW协议·简述如下:
1)向所有的节点广播新的交易
2)每个节点把收到的交易放进块中
3)在每一轮中,一个被随机选中的节点广播它所保有的块
4)其他节点在验证快中的所有的交易正确无误后接受该区块
5)其他节点将该区块的哈希值放入下一个它们创建的区块中,表示它们承认这个区块的正确性
Pow共识协议的优点是完全去中心化,节点自由进出。但是依赖机器进行数学运算来获取记账权,资源的消耗相比其他共识机制高,可监管性弱,每次达成共识需要全网共同参与运算,性能效率比较低,容错性方面允许全网50%节点出错。
挖矿造成大量的资源浪费
共识达成的周期较长
4.6股权权益证明---Pos(Proof of Stack)
Pos最基本的概念就是选择生成新的区块的机会应和股权的大小成正比。
Pos运作的机制大致如下:
1)加入Pos机制的都是持币人,成为验证者(validator)
2)Pos算法在这些验证者里挑一个给予权利生成新的区块,挑选顺序依据持币的多少
3)如果在一定时间内,没有生产区块,Pos则挑选下一个验证者,给予生成新区块的权利
4)以此类推,以区块链中最长的链为准
Pos和PoW有一个很大的区别:在Pos机制下,持币是有利息的,Pos机制下不会产生通缩的情况,和POW相比,Pos不需要为了生成新区块而大量的消耗电力,也一定程度上缩短了共识达成·的时间,但缺点是PoS还是需要挖矿。
4.7委托权益人证明机制---DPoS
DPoS(Delegated Proof of Stake)机制是PoS算法的改进。DPoS算法中使用见证人机制解决中心化问题。总共有N个见证人对区块进行签名。DPoS消除了交易需要等待一定数据区块被非信任节点验证的时间消耗。通过减少确认的要求,DPoS算法大大提高了交易的速度。通过信任少量的诚信节点,可以去除区块签名过程中不必要的步骤。见证人机制有以下特点:
1.见证人的数量由权益所有者确定,至少需要确保11个见证人
2.见证人必须尽量长时间在线,以便做出响应
3.见证人代表权益所有人签署和广播新的区块链
4.见证人如果无法签署区块链,就将失去资格,也将失去这一部分的收入
5.见证人无法签署无效的交易,因为交易需要所有见证人都确认