区块链技术的核心是在没有中心控制的情况下,在互相没有信任基础的个体之间就交易的合法性等达成共识的共识机制
提起共识那么非常有名的拜占庭将军问题使我们应该首先应该了解
1.拜占庭将军问题
本文不讲故事,请移步http://baijiahao.baidu.com/s?id=1591728006111720793&wfr=spider&for=pc
我们在这里讨论拜占庭的2种情况
1.1.非拜占庭故障:
因为宕机、网络拥塞等原因产生故障的进程。 特点,仅停止服务,不主动作恶。例: Quorum,Paxos,Raft系统。
1.2.拜占庭故障:
进程被攻击者完全控制,可以进行任意行为。特点:进程的行为是不可预测的,常见有:停机、发送任意消息、篡改转发
的消息、合谋等。例: PBFT系统。
1.3.说明:
拜占庭故障是最严重缺陷或故障。可能的原因例如遭黑客入侵、管理员背叛等等。
2.共识机制
2.1.poW:
poW(工作量证明),也就像比特币的挖矿机制,矿工通过把网络尚未记录的现有交易打包到一个区块,然后不断遍历尝试来寻找一个随机数,使得新区块加上随机数的哈希值满足一定的难度条件,例如前面10位为0.找到满足条件的随机数,就相当于确定了区块链最新的一个区块,也就相当于获得了区块链的本轮记账权.矿工把满足挖矿难度条件的区块在网络中广播出去,全网的其他节点在验证该区块满足挖矿的难度条件,同时区块里的交易数据符合协议规范后,将各自把该区块连接到自己版本的区块链上,从而在全网形成对当前网络状态的共识
优点:完全去中心化,节点自由进出,避免了建立和维护中心化信用机构的成本.只要网络破坏者的算力不超过网络总算力的50%,网络的交易状态就能达成一致.
缺点:资源浪费,挖矿激励造成矿池算力的高度集中,背离了中心化的特征.更大的问题poW机制的共识达成时间较长,最多每秒7笔,不适合做商业应用.
2.2.poS:
poS权益证明,要求节点提供拥有一定数量的代币证明来获取竞争区块链记账权的一种分布式共识机制.如果单纯依靠代币余额来决定记账者必然使得富有者胜出,导致记账权的中心化,降低共识的公平性,因此不同的PoS机制在权益证明的基础上,采用不同的方式来增加记账权的随机性来避免中心化.例如点点币(peerCoin)PoS机制中,拥有最长链龄的比特币获得记账权的概率就很大.NXT和Blockcoin则采用一个共识来预测下一个记账节点.拥有多的代币被选为记账节点的概率就很大.未来以太坊也会从目前的poW机制转换的poS机制,从目前看到的资料来看,以太坊的poS机制将采用节点下赌注来赌下一个区块,赌中者有额外的以太币奖励,赌不中者会被扣以太币的方式来达成下一个区块共识
优点:在一定程度上缩短了达成共识的时间,降低了poW机制的资源浪费
缺点:破坏者对网络的攻击成本很低,网络安全性有待验证.另外拥有代币数量大的节点获得记账权的概率会更大,会使得网络共识受少数富裕账户支配,从而失去公正性
2.3.DPoS
DPoS(股份授权证明)机制,类似于董事会投票.比特股(bitshares)采用的PoS机制是持股者投票选出一定数量的见证人,每个见证人按序有两秒钟的权限时间生成区块,若见证人在给定的时间片不能生成区块,区块生成权限交给下一个时间片对应的见证人.持股人可以随时通过投票更换这些见证人.DPoS的这种设计使得区块的生成更为快速,也更加节能.
优点:大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证.
缺点:选举固定数量的见证人作为记账候选人有可能不适合于完全去中心化的场景.另外在网络节点很少的场景,选举的见证人的代表性也不强.
2.4.分布式一致性算法
分布式一致性算法是基于传统的分布式一致性技术.其中有分为解决拜占庭将军问题的拜占庭容错算法,如PBFT.另外解决非拜占庭问题的分布式一致性算法(Paxos.Raft).该类算法目前是联盟链和私有链场景中常用的共识机制
优点:实现秒级的共识机制,保证一致性.适合多方参与的多中心商业模式.
缺点:去中心化程度不如公有链上的共识机制
2.4.1拜占庭容错系统
这里讨论2种情况
拜占庭问题:节点中有可能出现被入侵后叛变的风险,乱发消息.
PBFT协议:
PBFT是一类状态机拜占庭系统。
每个独立进程共同维护一个状态,执行客户端发出的操作.
所有节点采取的行动一致,操作后达成的状态也是一致的。(顺序一致性)
为了方便讨论,假设client也是“好的”
这是一个简单的PBFT通信协议模型其中C为客户端,0-3代表服务节点,0为主节点,3为故障节点.
1)客户端发送请求,激活主节点的服务操作.
2)当主节点接受请求后,启动三阶段的协议以向各从节点广播请求.
2.1:序号分配阶段,主节点给请求赋值一个序号n,广播序号分配消息和客户端的请求m,并将构造的pre-prepare消息给各从节点
2.2:交互阶段,从节点接收pre-prepare消息,向其他服务节点广播prepare消息.
2.3:序号确认阶段,各个节点对视图内的请求和次序进行验证后,广播commit消息,执行收到的客户端的请求并给客户端响应
3)客户端等待来自不同节点的响应,若有m+1个相同,则该响应即为运算的结果
PBFT应用场景很多如:IBM主导的超级账本种,PBFT是一个可选的共识机制
以上就是解决所有拜占庭问题的共识机制
非拜占庭问题:节点中基本安全可靠,只是处理一般的死机故障.
RAFT协议
zookeeper也使用类似协议
看动画了解协议
http://thesecretlivesofdata.com/raft/
总结: