区块链核心技术:共识算法与分布式一致性算法

从相亲大会说起:分布式系统的模型

由于区块链就是一种分布式系统,所以这篇文章我就从这一概念开始讲起。 为了让你更容易理解分布式系统,我们先来构建一个模型。

大村子因为人口增长变成 11 个小村落分散在地图各地;村落之间的通信只能依靠信鸽;一只信鸽可能无法完全覆盖所有村落,需要有中继村落代为传输消息。相亲大会的举办权会为村子带来巨大收益,为了产生合理的举办者,人们约定了几条规则:大会举办权从 A 和 B 两个村子中产生,他们每一届都是候选村;投票时所有村落仅能投 A 或 B;用投票的方式产生举办者,少数服从多数。

所有村子会为了举办权都会使出浑身解数,比如延迟发送投票结果、篡改别人的投票结果、假装没有接收到通知等等。其实这是一个典型的分布式系统,可以看成是我们简化版的区块链网络环境,那么这个分布式系统会遇到什么样的问题呢?

分布式系统面临的问题

分布式系统面临了几个问题:一致性问题,可终止性问题、合法性问题。

可终止性可以理解为系统必须在有限的时间内给出一致性结果,合法性是指提案必须是系统内的节点提出。当然其中面对的最重要也是最基础的问题,就是我们常说的一致性问题。

一致性是指在某个分布式系统中,任意节点的提案能够在约定的协议下,最终所有节点对外呈现的信息一致。

一致性也分严格一致性、最终一致性,我们这里所说的一致性到底体现在那里呢?

主要体现在下面两种类型的问题上。

非人为恶意的意外投票过程。

非人为恶意篡改可归类为信鸽半路挂掉、信鸽迷路、信鸽送错目的地、信鸽送信途中下雨导致信件内容模糊、接收信件的人不在家、天气变化信鸽延迟送达等等。这些对应到分布式系统面临的问题就是:消息丢包、网络拥堵、消息延迟、消息内容校验失败、节点宕机等。

人为恶意篡改投票过程。

人为恶意篡改包括“精神分裂式投票”,中继篡改上一个村落的投票信息。对应到分布式系统面临的问题就是:消息被伪造、系统安全攻击等等。发生的人为恶意篡改的过程就可以称之为系统发生了拜占庭错误(Byzantine Fault),如果系统可以容忍拜占庭错误而不至于崩溃,也就是在发生系统被恶意篡改的情况下仍然可以达成一致,我们将这样的系统称为拜占庭容错系统。

有关分布式系统的定理

我们在介绍具体的分布式一致性算法之前,先介绍两个定理,做一下铺垫。

第一个是 FLP 不可能性,简单来说是:即使网络通信完全可靠,只要产生了拜占庭错误,就不存在一个确定性的共识算法能够为异步分布式系统提供一致性。

第二个是 CAP 定理,CAP 定理是分布式系统领域最重要的定理之一。也就是在设计分布式系统的过程中,“一致性”“可用性”“分区容忍性”三者中,我们只能选择两个作为主要强化的点,另外一个必然会被弱化。

我们由 CAP 定理可以推导出严格一致性和最终一致性。严格一致性是指在约定的时间内,通常是非常短、高精度的时间内,系统达到一致性的状态,这种系统很难实现,即使实现也很难有高的性能。所以人们从工程的角度提出了最终一致性,最终一致性不要求严格的短时间内达到一致。

分区容忍性在企业内部极少出现,尤其是中心化的服务性应用,所以很少考虑。然而区块链的 P2P 网络环境十分复杂,所以必须要保证很高的分区容忍性。通过以上我们可以发现比特币、以太坊等公链是偏重高可用性、分区容忍性(AP),满足最终一致性(C)且 TPS 较低的分布式系统。

接下来我来介绍一下经典的分布式一致性算法和区块链的共识算法。经典的分布式一致性算法在多数的论文中一般被叫做共识算法,在这里我为了与区块链的共识算法做出区别,所以在命名上改成了分布式一致性算法,但是它们要解决的问题是一样的。

共识算法与分布式一致性算法

1. 经典的分布式一致性算法

经典分布式一致性算法有 Raft 协议,Raft 协议是一种强 Leader 的一致性算法,它的吞吐量基本就是 Leader 的吞吐量,它无法抵御节点恶意篡改数据的攻击。稍微复杂一点的就是 Paxos 协议,Paxos 能提供不同场合不同种类的一致性算法,所以 Paxos 有很多变种,经典 Paxos 是 Leaderless 的,有变种是强 Leader 型的,叫做 Fast Paxos,有关 Paxos 的文献非常丰富,这里就不赘述了。

以上两种都是不提供拜占庭容错的系统,下面介绍一种具有拜占庭容错的一致性算法。PBFT 全称实用性拜占庭容错系统(Practical Byzantine Fault Tolerance, PBFT),PBFT 是一种状态机,要求所有节点共同维护一个状态,所有节点采取的行动一致,PBFT 非常适合联盟链等对性能具有较高要求的场合,超级账本项目中的 Fabric 框架默认采用的就是 PBFT 的修改版本。

2. 区块链共识算法

区块链的共识算法,我在某些场合直接称作基于经济学的博弈算法,以区别于经典分布式一致性算法思路,它的整体思路就是让攻击者的攻击成本远远大于收益。区块链中的共识算法目前具有工业成熟度的是 PoW,另外两种比较成熟的是 PoS 和 DPoS,其次还有一些变种和单一币种使用的共识算法,例如 Ripple 共识、PoC 共识(概念性证明)、PoE 共识(存在性证明)。

在使用 PoW 共识算法的情况下,容错阈值是 50%,而 PBFT 及其变种的容错阈值是 33% 左右,这里的百分比是指作弊节点占全网节点的比例。PoX 类的算法其实都延续了PoW的设计理念,相比较经典分布式一致性算法,PoX 类算法通过概率选择记账者降低了潜在的提案者,另外是延长了达成最终一致性的时间。第一条降低了系统通信复杂度,每次记账系统的确定性其实是概率确定的,又由于被选中需要付出成本,此处才提高了记账成本阈值,结合区块链的基础代币设计,是一个非常天才的想法。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

emeson_ch

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值