科普小知识:区块链与分布式系统
杨洋铁粉
发表于 2022-11-30 00:58:50
110
0
0
区块链技术真的值得去研究吗?
- i' s3 O9 ~" F3 a4 E
区块链技术的火热推动了传统分布式技术的进一步发展。从区块链技术的本质来看,基本脱离不开传统分布式系统跟密码学的核心技术。那么区块链技术真的值得去研究吗?是区块链选择了我们,还是我们选择了区块链?本文从一个分布式系统研究者的角度来理解区块链。, b* Q+ }" h) F
/ ^ s% ^- @4 v0 \+ h) u
人们常常把区块链当作分布式数据库,或者是分布式账本,这种说法不准确,而且具有迷惑性。区块链与我们常见到的分布式数据库相比,我认为区别主要有两个:共识算法和链式结构。这两者相辅相成,共同构成了区块链的独特性。
共识算法+ t6 J, Q% @' h0 [4 {
, t: j2 v6 J5 |% ^% P e# T
分布式数据库所采用的共识算法一般都是基于Paxos所衍生出来的一系列算法。这些算法的安全性仰赖于中心化的假设,即所有的节点由一个可信赖的中心管理。在这个假设下,所有节点都被认为是“诚实”的,也就是说,所有节点都竭尽全力去传递消息,并且消息不会被篡改。如果有少部分节点宕机,或者失联也不会影响协议的安全性。: o2 i8 T0 k; N, i3 }' w
0 s: k1 W. D+ i: `
然而区块链中的共识算法没有中心化的假设,每个节点都可以被认为是有独立行为的,这也是区块链“去中心化”的由来。协议允许一部分节点(一般少于1/3)是拜占庭节点,它们可以按照自己的意愿选择遵从或者违背协议,发送任意消息或者假装宕机。拜占庭节点可以是被攻击者完全控制的节点,也可以是自身软件出现严重bug的节点。这类算法被称作拜占庭容错(Byzantinefault-tolerant)算法,简称BFT。很明显可以看出,区块链的共识算法的容错性要远远高于传统的分布式数据库,因此往往也更低效。
针对BFT共识算法的研究从很早就开始了,其中影响力最大的就是图灵奖得主Barbara在1999OSDI年提出的PBFT(PracticalBFT)[1]。然而由于算法的复杂性过高,很难进行大规模部署。除此之外,这类算法还要求每个节点的身份已知,也就是说,在协议初始或者新节点加入时,都需要有准入控制(AccessControl)机制,保证节点之间可以互相验证身份。基于以上原因,针对传统的BFT协议的研究到了2010年也没有很大的进展。( {% a6 v r0 P; Z& t
比特币的出现打破了人们对这一领域的认知,它使得人人都可以轻易加入到网络中来,不需要任何准入控制机制。只要拥有至少51%算力的计算机是诚实的,整个网络就是安全的,并且通过比特币的奖励机制鼓励参与者规范自己的行为。比特币通过极其简单的设计就在某种程度上实现了“海纳百川,一视同仁”,不得不说是一个奇迹。然而奇迹的诞生是要付出代价的。比特币付出的代价在我看来主要有三个:1 M! y: y) [8 j/ c
极大的资源消耗。参与到网络中的矿工需要付出庞大的硬件费用和电费。; z. a8 k* z5 |, Q7 V! }# q1 t- m& h' b
( Y1 K* j5 p/ Q4 X; _) O# P
极低的性能。比特币的网络每秒钟大概能处理7个交易,每个区块的平均生成时间是10分钟左右。
交易的不确定性。即使一个区块在比特币网络中被确认了,由于区块链可能存在分叉fork,这个区块仍然有被重写的风险。只有等待一个区块被确认若干次(比如6次)之后,才能使得这个区块被重写的风险降到足够低。这也进一步提高了交易被确认的延迟。3 w( z1 B# o' c( m0 Q3 L
为了减少上述代价,有不少研究者都做出了卓越努力。例如,为了提高共识算法的性能,来自Cornell大学的研究者在2016年的NDSI提出了Bitcoin-NG[2]。来自MIT和Stanford的研究者在2019年的CCS提出了Prism[3],进一步对比特币进行扩容。此外,为了减少资源消耗,来自MIT的研究者在2017年SOSP上提出了基于Proof-of-Stake的Algorand,移除了挖矿的消耗。6 ]+ i! x) ] K: m
链式结构+ e8 U2 O0 m/ G! e+ y
0 z! } P" B6 P: c/ `1 w
区块链带来的另一项革新就是链式的结构。每个区块都通过哈希跟前面的区块链接在一起,一直追溯到初始区块,形成一条绵延不绝的链。这个结构带来的一个好处就是当一个节点确认一个区块的时候,意味着同时确认了这个区块所在链上之前的所有区块。基于这种链式的结构,区块链中很容易采用一种“最长链”原则发布新的区块。比如在比特币中,由于网络问题和恶意攻击的存在,一个矿工可能会看到多条链,但矿工总是倾向于在最长的一条链上挖矿。
即使挖矿挖到一半发现了一条比所在的链更长的链出现,也要切换到更长的链。“最长链”原则并不一定是非遵守不可,它并不会对协议安全造成严重影响,但当所有矿工都遵守这一原则的时候,每个矿工所能期望获得的收益最大。当然,也有例外,当一个矿工占有比较多的资源的时候(少于50%),可以采取一种“自私挖矿”(selfishmining)[4]的策略,违背“最长链”原则,谋求更高的收益。
' w5 L7 M5 K) C/ y, ], E" I$ x" H. ^
区块链的链式结构也给研究传统BFT的研究者带来很大启发,很多为区块链量身定做的BFT协议开始涌现。这其中最著名的要数Facebook所采用的LibraBFT[5]共识协议。LibraBFT基于HotStuff[6],由来自VMware的研究者提出。HotSutff通过采用区块链的链式结构改进了传统BFT的性能,使得协议能够部署在具有上百个节点的网络中。下面我简单说明一下这种链式结构的神奇之处。3 V4 i5 z+ B# o" G. D
P- e0 I6 S& {! h8 a& V
首先,我们想象用传统的BFT协议实现区块链。由于在传统的BFT协议**识是一次性(one-shot)的,我们需要对每个区块单独进行共识。
% c" F" e% L( P6 o+ U& X
例如在PBFT中,每个区块链都要经历Propose,Prepare,Precommit,Commit若干阶段。每个阶段都要经历一轮投票,似乎都在做相同的事情,存在很多消息冗余。如下图所示(来源[1])。
为了解决这一问题,HotStuff在PBFT的基础上引入了链式结构。由于之前所说的链式结构的特性,一个节点对一个区块的投票实际上是对这个区块所在链上之前的所有区块的投票。因此链式HotStuff缩减了不同的投票阶段,只保留了统一的Propose-Vote的形式。如下图所示(来源[6])。7 W" D, g3 P; |2 T
HotStuff进一步利用了链式结构的特点规定了投票规则(votingrule)以及区块被确认的规则(commitrule),从而保证协议的安全性。链式的结构使得BFT协议变得简洁而优美,能够很好地进行流程化(Pipelined)作业,提高了协议的性能,极大降低了状态空间。
除了上述的好处之外,链式的结构也给协议留足了设计空间,比如激励机制,信用管理,公平机制等,这些机制对一个多方参与的网络来说都会起到积极作用。
* u. w' C9 M3 r/ o
总结
4 C, w7 ^) e: ^* U7 d0 Y, _3 |) J
在10多年前,中本聪发明比特币,区块链应运而生。现在,我们对区块链的研究逐渐拨云见日,我们也应用一种客观专业的眼光去看待这项技术。毫无疑问,区块链的诞生给分布式系统的研究带来了新的生命力。但在研究区块链的时候,不能粗暴的将共识算法和链式结构分开去研究,因为这两者相辅相成,共同构成区块链的基本要素。' z% y) C- r7 Y: e. g" | {
成为第一个吐槽的人