共识算法

1、定义

共识算法解决的是对某个提案大家达成一致意见的过程。(提案的含义在分布式系统中十分宽泛,如多个事件发生的顺序、某个键对应的值、谁是领导……等等。可以认为任何可以达成一致的信息都是一个提案。)对于分布式系统来讲,各个节点通常都是相同的确定性状态机模型,从相同初始状态开始接收相同顺序的指令,则可以保证相同的结果状态。因此,系统中多个节点最关键的是对多个事件的顺序进行共识,即排序。共识算法保证了区块链系统中每一个节点之间事务记录的一致性,同时起到防范系统遭受诸多种类的安全攻击,包括拜占庭攻击、女巫攻击、51%攻击等。

实际上,如果分布式系统中各个单节点都能保证以十分“理想”的性能(瞬间响应、超高吞吐)无故障地运行,节点之间通信瞬时送达,则实现共识过程并不十分复杂,简单地通过广播进行瞬时投票和应答即可。

可惜的是,现实中这样的“理想”系统并不存在。不同节点之间通信存在延迟(光速物理限制,通信处理延迟),并且任意环节都可能存在故障(系统规模越大,发生故障可能性越高) 。如通信网络会发生中断、节点会发生故障、甚至存在恶意节点故意要伪造消息,破坏系统的正常工作流程。

2、BFT & CFT

一般地,把出现故障( crash 或fail-stop ,即不响应)但不会伪造信息的情况称为“非拜占庭错误(CFT)”( non-byzantine fault )或“故障错误”( Crash Fault );伪造信息恶意响应的情况称为“拜占庭错误(BFT)”( Byzantine Fault ),对应节点为拜占庭节点。BFT至多容忍n/3为恶意节点,CFT至多容忍n/2个节点出现故障,CFT性能更好。

CFT(Crash Fault Tolerance):Paxos、Raft系列,这类容错算法往往性能比较好,处理较快,容忍不超过一半的故障节点。

BFT(Byzantine Fault Tolerance):PBFT为代表的确定性系列算法、Pow为代表的概率算法,拜占庭类容错算法往往性能较差,容忍不超过1/3 的故障节点。

确定性算法, 一旦达成对某个结果的共识就不可逆转,即共识是最终结果;

概率类算法,共识结果则是临时的,随着时间推移或某种强化,共识结果被推翻的概率越来越小,成为事实上的最终结果。

3、FLP不可能原理

在网络可靠但允许节点失效(即便只有一个)的最小化异步模型中不存在一个可以解决一致性问题的确定性共识算法。

在分布式系统中,同步和异步这两个术语存在特殊的含义。

同步是指系统中的各个节点的时钟误差存在上限;并且消息传递必须在一定时间内完成, 否则认为失败;同时各个节点完成处理消息的时间是一定的。对于同步系统,可以很容易地判断消息是否丢失。

异步是指系统中各个节点可能存在较大的时钟差异,同时消息传输时间是任意长的,各节点对消息进行处理的时间也可能是任意长的,这就造成无法判断某个消息迟迟没有被响应是哪里出了问题(节点故障还是传输故障?)。

不幸地是,现实生活中的系统往往都是异步系统。

4、CAP原理

分布式计算系统不可能同时确保以下三个特性:一致性( Consistency )、可用性( Availability )和分区容忍性( Partition)。分区容忍性是分布式系统的基本要求,否则就失去了价值,因此分布式系统要在一致性和可用性之间取一个平衡,设计中往往需要弱化对某个特性的保证。

  • 分区容忍性:在网络中断,消息丢失的情况下,系统照样能够工作;
  • 一致性:在分布式系统中,所有节点在同一时刻看到同一个值;
  • 可用性:每个请求都会收到一个应答,无论该应答是成功还是失败。

5、ACID原则

ACID 也是一种比较出名的描述一致性的原则,通常出现在分布式数据库领域。具体来说, ACID 原则描述了分布式数据库需要满足的一致性需求,同时允许付出可用性的代价。

 

  • Atomicity (原子性):每次操作是原子的,要么成功,要么不执行;
  • Consistency (一致性):数据库的状态是一致的,无中间状态;
  • Isolation (隔离性):各种操作彼此之间互相不影响;
  • Durability (持久性):状态的改变是持久的,不会失效。

6、共识算法分类

按应用场景划分:

  • 适用于公链:POW、POS、DPOS、RIPPLE
  • 适用于联盟链:PBFT、DBFT
  • 适用于私链:PAXOS、RAFT

按原理进行划分:

  • POW:去中心化、大规模节点支持、效率低、资源消耗高
  • POS:去中心化、大规模节点支持、效率中
  • 投票机制(RPCA、DPOS):半中心化、大规模节点支持、效率高;(RPCA Ripple共识、DPOS股权代理人共识),两者协议上稍有不同,但核心思想都是使用类似人大代表选举的制度来保证新区块的产生不会由同一个人控制,即代表轮流挖矿
  • 分布式一致性算法(SBFT、PBFT、PAXOS、RAFT):去中心化、大规模节点无法支持、效率低;PBFT对大体量节点系统的支持非常差,效率上基本等同于无法实现;PBFT上发展出的Paxos是理论上的高效算法,很难实现;Raft是Google牵头开发的一个Paxos的理论实现版本;

版权声明:本文为Black_BearB原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。