区块链深入理解---BLOCKBENCH:A Framework for Analyzing Blockchains

论文发表在SIGMOD'2017 ,SIGMOD是数据库顶级会议。可见论文作者基本是数据库界的大牛,从论文中也可以看出这一点。这样也好,站在不同视角理解区块链。可能更开脑洞。本文的确是一篇分析私有(或许可型)区块链的难得好文。

 

下面是笔者在读这篇论文时做的一点笔记。

 

1、引言

 

区块链,也称分布式账本,本质上是系统互不信任的节点维护了一种只可附加的数据结构。(系统所有节点对存储在区块链上的交易及其顺序达成一致,基于此,区块链经常被称作分布式账本)

 

在数据库视角下,可以将区块链视作对分布式事务管理问题的一种解决方案:所有的节点保存数据副本并且事务的执行顺序达成一致。但是传统的数据库运作在可信的环境中,并且使用了众所周知的并发控制技术对事务排序。(笔者注:因此比特币在特殊的场景下解决了公开网络上的拜占庭共识问题,这是对计算机科学的一大贡献。)

 

区块链的关键优势是其不假设节点之间互相信任,因此旨在实现拜占庭容错。

 

在最初的设计中,比特币区块链存储比特币(bitcoin)作为所有参与者共享的系统状态。对于这种简单应用,比特币节点实现了一种简单的复制状态机模型,将bitcoin从一个地址转到另一个地址。此后,区块链快速发展成支持用户自定义的状态和图灵完备状态机模型。以太坊是一个典型的例子。更重要的是,产业界开始推动开发新的区块链平台,这些平台为私有环境所设计,其中参与者都是要经过认证的。在这种环境下的区块链系统被称为私有(或许可型)区块链。面向安全交易和清算,资产和金融管理,银行和保险的应用正在建设和评估。这些应用目前都跑在企业级数据库系统上,例如Oracle和MySQL。但是区块链有潜力颠覆现状,因为它可以带来更低的基础设施和人力成本。特别是,区块链的不可篡改性和透明性减少人为错误和手动干预冲突数据的需要。区块链可以通过消除重复工作简化商业过程。

 

鉴于在这些传统数据库技术已经确定统治地位的应用场景中部署区块链,我们不得不自问:区块链能在多大程度上处理数据工作量?此外,应该选哪一个平台呢

 

作者开发了一个基准测试框架BLOCKBENCH来解决这两个问题。该框架是首个研究和比较许可型区块链的性能的benchmark。尽管在许可型环境下,节点仍然可以是互不信任的,但是节点身份是已知的,比起公开环境(使用PoW),系统可以使用更高效的协议容忍拜占庭故障。

 

公有区块链的性能有了相当细致的研究。本文聚焦许可型区块链。

ps:当然在许可型下,仍然可以使用PoW,但是在节点身份已知的情况下有更高效且确定性的方法

 

本文结论:

1、区块链系统的性能有限,远远低于最先进的数据库系统(例如H-Store)的预期。

2、在七个基准测试指标下,Hyperledger相较于以太坊和Parity都是一骑绝尘。但是其节点数超过16个,就不具备可扩展性。

 

 

2、私有区块链

Blockchain transactions:区块链中的一次transaction(交易)与传统的数据库中的transaction(事务)是一样的,即对某些状态进行实施的操作序列(a sequence of operations applied on some states)。就这一点而论,一次区块链transaction需具备相同的ACID(即原子性、一致性、隔离性和持久性)语义。关键的区别是考虑的failure模型。目前的事务性分布式数据库使用了经典的并发控制技术来确保ACID,例如两阶段提交。他们可以实现高性能,因为简单的failure模型,例如:crash failure(宕机故障)。但是,最初的区块链设计考虑了一种更加不利的环境,即节点是拜占庭节点并且可以自由加入和离开。此模型下,并发控制的开销更高(ps:O(N2))。

 

比特币PoW是容忍拜占庭故障的,但实际上是一个概率算法,即相同时刻有两个块被追加到区块链上是可能的,这样就产生了分叉。比特币解决分叉仅仅是通过一个块后面连接的块的个数来定的(一般为六个)。这种概率性保证导致安全和性能问题。已经有证明一个敌手只要控制25%的节点就可以发起攻击。

 

以太坊:由于(比特币)简单的交易语义,比特币节点实现了一个非常简单的状态机,该状态机提前预置在协议中。以太坊区块链扩展了比特币的功能,支持用户自定义和图灵完备的状态机。尤其是以太坊区块链允许用户以智能合约的形式定义任何复杂的计算。一旦部署,该智能合约就在所有的以太坊节点上执行。

 

以太坊与比特币相比一个关键区别是以太坊维护了智能合约状态以及正常交易。实际上,一段智能合约是被唯一的(合约)地址所标识,该地址有自己的资金余额(以太币),并且一经检索到有一笔交易发送至该(合约)地址,以太坊网络节点就会执行合约逻辑。以太坊自带执行引擎,即以太坊虚拟机(EVM)来执行智能合约。

 

私有区块链:事实上,90%的公有区块链系统使用了PoW的变种。PoW是非确定性的并且计算代价高。这两者导致其不适合诸如银行和金融应用,这些应用必须以一种确定性方式处理大量交易。最近的区块链系统,例如Hyperledger,考虑了受限制的环境,其中所有的节点均要经过认证。尽管PoW仍然适用于这种许可型环境,但是在节点身份已知的情况下有更高效且确定性的解决方案。在这种封闭的(closed)环境中,分布式容错共识在分布式系统中已经是一个深入研究过的话题。Zab,Raft,Paxos和PBFT都是今天积极使用流行协议。最近的许可型区块链要么使用已有的PBFT(Hypeledger),要么开发自己的变体(例如Parity、Ripple和ErisDB)。大多数支持智能合约,尽管编程语言不同、API不同、执行引擎不同。相交基于PoW的区块链,许可型区块链可以更高效地执行复杂应用,同时是拜占庭容错的。这些属性(支持智能合约、拜占庭容错)和来自主流银行和金融机构的商业利益纷纷押宝在私有区块链(颠覆数据管理的当前实践)。

 

3 区块链设计

 

作者将区块链抽象为4层,如图所示。

应用层包括各种各样的区块链应用;

执行层包括支持区块链操作的运行环境细节;

数据层包括对区块链数据的结构、内容和操作;

共识层包括共识协议;

 

区块链深入理解---BLOCKBENCH:A Framework for Analyzing Blockchains_第1张图片
 

 

数据模型

在比特币中,交易是一等公民,它们是比特币网络中代表数字货币的系统状态。私有区块链借助账户背离这一模型。这样一个直接利好是简单性,尤其是对相关密码货币应用。例如:在比特币中转一笔钱是这样的:寻找属于发送者的交易,标记其中的一些交易为已花费。但是在以太坊中就比较简单,通过更新交易双方的账户就可以搞定。以太坊中还有一类特殊的账户,称为合约账户,包括可执行代码和私有状态。

 

5.讨论

 

区块链仍未做好大规模使用的准备,目前除了密码货币应用,没有其他已建立的应用。

将数据库设计引入到区块链,作者提出了四种方法改进区块链。

(1)首先将存储、执行引擎和共识层彼此解耦,然后独立优化和扩展;

(2)接纳新的硬件:多核CPUs和大内存、可信硬件

(3)分片分区:区块链本质上是一种复制状态机系统,系统内每一个节点维护了相同的数据。

(4)support declarative language

 

区块链平台综述

区块链深入理解---BLOCKBENCH:A Framework for Analyzing Blockchains_第2张图片

你可能感兴趣的:(云计算)