共识算法
共识算法主要是解决分布式系统中多个节点之间对某个状态达成一致性结果的问题。分布式系统都是由多个服务节点共同完成对事务的处理,分布式系统中多个副本对外呈现的数据状态需要保持一致性。
但是由于节点的不可靠性和节点间通讯的不稳定性,甚至节点作恶伪造信息进行恶意响应,节点之间就存在数据状态不一致性的问题。通过共识算法,可以实现将多个不可靠的单独节点组建成一个可靠的分布式系统,实现数据状态的一致性,提高系统的可靠性。
区块链系统本身是一个超大规模的分布式系统,但又与传统的分布式系统存在明显区别。区块链系统建立在去中心化的点对点网络基础之上,在整个系统中没有中央权威,并由共识算法实现在分散的节点间对交易的处理顺序达成一致,这是共识算法在区块链系统中起到的最主要作用。
另外,与企业分布式系统不同,区块链系统中的共识算法还承担着区块链系统中激励模型和治理模型中的部分功能,包括每个区块中对哪些矿工进行激励发放、网络中所有交易手续费的结算和分配、区块链网络共识周期的切换等。
算法分类
容错程度
共识算法根据容错能力不同,即在考虑节点故障不响应的情况下,再考虑节点是否会伪造信息进行恶意响应,可以分为
采用
在区块链网络发展前,
同步模型分类
另外,因为共识算法都建立在底层的网络模型基础上,所以从网络同步模型的角度来看,共识算法可以分为三种,即同步共识算法,半同步共识算法,和异步共识算法。
同步共识算法要求网络中任一消息能够在已知的限定时间内到达所有的共识节点,因此主要应用在限定规模的网络环境中,大多数联盟链采用同步共识算法。
异步共识算法对于消息在网络中的传播延迟没有任何限制,消息可以在无限长时间后才能发送到其他共识节点,由于
半同步共识算法在前两者之间做了权衡,要求网络中消息某限定时间后到达所有共识节点的的概率与时间的关系是已知的,目前主流的区块链共识算法都是基于半同步的网络模型,即半同步共识算法。
共识算法优劣
评价一个区块链共识算法的优劣,可以从以下四个方面进行,即容错性能、终局性性能、扩展性(消息复杂度)以及网络模型性能。
容错性能:指共识算法的容错能力,比如
终局性性能:指区块链网络对一个候选区块完成终局一致性所需要的时间,这对于面向用户的
扩展性:指随着区块链网络节点数目与共识算法性能的相关关系,比如
共识算法的网络模型性能对其容错性能和终局性能都有很大的影响。在区块链大规模网络条件下,同步共识算法要求所有节点在规定时间内响应对其他节点的消息,否则将被认为是故障节点,因此受网络波动影响较大,从而进一步导致算法容错性能的降低;而由于