基于区块链的分布式存储系统开发论文研究

基于区块链的分布式存储系统开发论文研究(一)

论文一《基于区块链的应用系统开发方法研究》-蔡维德

论文引用:[1]蔡维德,郁莲,王荣,刘娜,邓恩艳.基于区块链的应用系统开发方法研究[J].软件学报,2017,28(06):1474-1487.

1. 区块链介绍

  区块链是由多独立节点参与的分布式数据系统,也可以理解为分布式账簿(distributed ledger technologt,简称DLT),由这些节点共同维护,它的特点是不易篡改,很难伪造,可追溯。区块链记录所有发生交易的信息,过程透明,数据高度安全。凡是需要公正、公平、诚实的应用领域,都可以用用区块链技术。
区块链具体把数据分成不同的区块(block),每个区块通过特定的信息链接到上一区块的后面,前后顺连,呈现一套完整的数据。每个区块的块头(block header)包含前一个区块的哈希值(previous block Hash),该值是对前区块的块头进行哈希函数计算而得到的。简单来说,区块链就是将普通指针替换成了哈希指针的“链表”。如下图所示。
在这里插入图片描述

  区块链具体把数据分成不同的区块(block),每个区块通过特定的信息链接到上一区块的后面,前后顺连,呈现一套完整的数据。每个区块的块头(block header)包含前一个区块的哈希值(previous block Hash),该值是对前区块的块头进行哈希函数计算而得到的。简单来说,区块链就是将普通指针替换成了哈希指针的“链表”。如下图所示。
技术层面上看,区块链的核心要素包括以下三个方面:
(1) 块链结构:每一块都使用前一区的哈希加密信息,对每个交易进行验证;
(2) 多独立拷贝存储:每个节点都存储同样信息,享有同样权力;独立作业;相 互怀疑,相互监督;
(3) 拜占庭容错:容忍少于三分之一的节点恶意作弊或被黑客攻击,保证系统仍 然能够正常工作。
  要素(1)指出,区块链是一个“账簿”;要素(2)指出,区块链是一个“分布式账簿”,尤其是指出”享有同样权力”对与区块链来说是至关重要的,如果这一点不能保障的话,就不可称为区块链。另外,与现有分布式存储方式不同,区块链分布式账本是以同步的方式进行的,而不是在一个账本形成之后,再制成多个备份;要素(3)指出,区块链是一个“一致性的同步分布式账簿”。
  区块链中另外一个重要的组成部分就是共识算法,以比特币的区块链为代表的第一代区块链采用的是PoW(51%的投票)。作为第二代区块链的代表以太坊的私有链选用了PBFT,作为第三代区块链的代表,北航链使用的是CBFT,提高了性能。
拜占庭将军模型的共识算法有串行与并行两种。
  (1) 拜占庭共识协议PBFT(practical byzantine fault tolerance):交易与投票是串行的,建块过程要经过3次投票;
  (2)并发拜占庭共识协议CBFT(concurrent byzantine fault tolerance):交易与投票并行进行。
应用层面,区块链具有以下特征:
  (1)极难篡改性。一旦数据进入了区块链,即使是系统内部的工作人员,在区块链中也无法做出任何更改。这源自于区块链自身的机制——修改需要通过共识算法,恶意篡改会被链中好的用户拒绝(前提假设是链中绝大部分用户是非恶意的)。
  (2)链上代码。区块链载入的合同或法律文件为可执行,在条件都满足时,会让法律事务自动生成,在以太坊里成为“智能合约”;
  (3)参与活动的每个人都拥有完整的数据。每个人可以根据自己的数据来做决定;
  (4)每个人都有完整的历史数据,因此很难被欺骗。区块链可以为互不信任的人建立一种信任网络,因为每个人都有完整的数据,每个人都信任自己的数据,而且知道自己的数据是有共识的;
(5)区块链的架构是分享的、分布式的、重复的、就地取材的;
根据不同的应用领域特点,可以选择不同类型的区块链,一般分为公有链和许可链。
  (1)公有链:所有节点中立、开放,都可以投票、记账、建块,因为全网都需要投票,所以速度非常慢。
  (2)许可连:只有被许可的节点才能参与投票、记账、建块;包含私有链、联盟链、企业链等所有非共有链,文章中预测,许可链会成为商业应用领域的主流。

2 区块链应用系统的需求与架构设计

2.1 区块链应用系统的需求
2.1.1 一致性需求

  在分布式环境下,数据为保证一致性需要使用一致性协议。公有链主要使用工作证明PoW(Proof of Work)和股权证明PoS(Proof of Stake)机制;而许可链中主要使用PBFT和CBFT。一般而言,区块链系统越告诉越好,但共识的代价昂贵,许多计算力及节点通信都花在共识机制上。例如PBFT,需要3轮投票,每轮都采用广播式通信方式,每次通信都需要签名、解签,再加上每笔交易都要签名和解签,因而80%的计算力都花在共识处理上。PoW面临的是速度和可扩展性问题,PBFT面临的是并发问题,PoW依靠节点的计算力来完成共识,PBFT却不需要。

2.1.2 软件设计需求

  区块链技术应用于系统开发,可以省去很多中间环节,简化流程,但设计区块链应用系统有一个新问题,即,可以把功能放在应用系统上,或是放到区块链上用链上代码执行。但如此会消耗大量的计算力,建议大部分的功能应该是在应用系统里。

2.1.3 可扩展性需求

  目前一些方案通过放弃区块链的定义来解决可扩展性需求,例如放弃区块链多拷贝的需求来提高交易速度。
值得一提的是,北航链的可扩展性分为三步:(1)使用CBFT并行的算法来做投票,从而提高建块速度;(2)ABC,TBC双链架构,保护隐私、并行计算、节省计算力、简化应用架构;(3)利用双链的特点,使一条链可以在运行时分裂成两条链,有两套不同的而硬件分别执行这两条链,以提高速度。如此,既可以使用原始定义的区块链,又可以有告诉以及可扩展性。
北航链可作为私链的一个参考。

2.1.4 数据库需求

  区块链虽然成为分布式数据库,但是却与传统数据库截然不同。高速区块链与低速区块链是也是不同的;在低速环境下,交易是串行的方法来处理,所以低速环境下一致性问题容易解决;高速环境下,交易和建块是并行的,所以一致性是一个新问题。
  传统数据库是以个别交易,而区块链是以建块来维持一致性的。一个显著的区别就是,传统的数据库只允许最多执行一个写入操作,而区块链要求允许同时在一个块中有上千个写入操作作用在同一个数据中。

2.1.5 链上代码需求

  链上代码与建块流程相互影响,如何解决链上代码与建块之间的冲突是关键问题。

2.2 北航链的体系架构

  北航链是北京航空航天大学与北京大学联合开发的许可链,其设计初衷是为公信和金融服务,北航链摒弃了P2P网络和挖矿机制 ,以可扩展性为第一目标,并且重视速度优化.为了确保系统安全,北航链加入了 节点信用制度.这是首次采用信誉机制(reputation system)来识别作弊节点,一旦发现节点的作弊行为,立即将其 排除在投票节点之外。图2是北航链架构图。
北航链是北京航空航天大学与北京大学联合开发的许可链,其设计初衷是为公信和金融服务,北航链摒弃了P2P网络和挖矿机制 ,以可扩展性为第一目标,并且重视速度优化.为了确保系统安全,北航链加入了 节点信用制度.这是首次采用信誉机制(reputation system)来识别作弊节点,一旦发现节点的作弊行为,立即将其 排除在投票节点之外。图2是北航链架构图。
在这里插入图片描述

  • 存储层:存储层包括操作系统和数据库服务;
  • 基础区块链层:传输服务将缓存中的交易放入桶中;块服务为每个桶中的交易创建位图;Round Robin 使用循环法选择线索,创建并向所有其他节点发送块,进一步执行信誉计算;同步器广播本地区块链的 长度,接收遗漏的块,并存储接收的块;ABC(帐户区块链)同步区块链,以确保不同节点的一致状态,创建 帐户索引以加速查询,并提供帐户公私密钥服务;对于链上代码交易,TBC(交易区块链)首先执行链上 代码,然后将结果放入桶中,对于非链上代码交易,直接放入桶中,并准备创建块;
  • 缓存层:用于缓存内存中的临时信息,包括从用户和链上代码接收的新交易;那些块尚未传输到磁盘;并 且支持系统运行的临时数据存储;
  • API层:提供了外部和内部API接口.内部API用于节点之间的内部通信,例如投票、广播块;外部API 用于外部用户,例如接受新交易和查询操作;
  • 链上代码层:提供与合同相关的服务.链上代码根据领域特定要求编写,由所有利益相关者进行合法正 确性验证,然后部署在区块链系统中执行.该层具有3个功能:与用户的交互(编辑)、流程执行引擎和支持帐户管理、状态存储和发送交易的合同服务;
  • 应用层:此层有应用程序,例如银行系统、计算法律系统、信用认证系统和供应链系统.在设计区块链 时,节点越多,系统越安全,但是共识起来会更慢,所耗的计算力越大.
2.3 区块链接口设计

  OBCC(open blockchain connector)是一套区块链的统一接口,提供应用方便高校地使用区块链地功能,包括将用户数据存入区块链、查询用户需要的而信息。如图3所示。
在这里插入图片描述

写入区块链的接口定义为put(action,data),其中,

  • 参数action表明用户的数据处理意图,可以是create,insert, update或delete.注意:区块链是不能更改已 经存入区块链的数据,这里的update和delete不是像数据库那样对数据执行update或delete,而是在区 块链上记录下对数据所发生过的操作,即,作为一笔新交易记录在案;
  • 参数data是用户的数据,根据不同的应用领域,格式和内容会不同.
    区块链查询接口定义为get(condition),其中,参数condition表明用户的查询条件,可以是块的哈希值或交易 的哈希值,也可以与应用有关的关键字等.倒排索引、大数据分析技术的使用,使得用户可以快速高效地获取有 价值的查询结果
    OBCC提供一个工具包,可以直接把他导入到自己的软件项目工程里,编程开发时,像是调用本地函数或方法一样使用区块链的功能接口。如图4所示。
    在这里插入图片描述

  文章中实现了Java版的区块链连接器——JBCC,已经支持多个区块链的应用系统的开发,包括央视微电影管 理平台、高校学籍及档案管理系统、金融跨国支付系统、银行信用卡消费管理系统、跨行业积分跟踪管理系 统.基于OBCC的区块链的应用系统开发,具有开发周期短、可扩展性高、运行速度快的特点.

区块链应用开发方法研究

3.1 区块链双链设计研究

  目前,大多数区块链的应用通常只有一条区块链,将账目、合约、交易等全部放在这条区块链上。例如欧盟银行提出的通用一条链概念,如此,凡是加入的机构都需要将内部信息与其他加入机构共享,所有参与的而机构都在该链上作为一个节点投票,维持账目一致性。这个设计扩展性差、吞吐量低。随着业务增多,延迟会越来越高,性能会更低。
文章中提出的一种新的架构是所有参与的机构分享元数据(metadata)及协议(protocols),但不分享数据(data 就是账户).所有参与的单位都可以与其他单位互相交易,而保证隐私性.根据这个概念,至少有下面两类区块链, 如图5所示。
文章中提出的一种新的架构是所有参与的机构分享元数据(metadata)及协议(protocols),但不分享数据(data 就是账户).所有参与的单位都可以与其他单位互相交易,而保证隐私性.根据这个概念,至少有下面两类区块链, 如图5所示。
(1)ABC账户区块链(account blockchain):ABC仅存储账户信息和交易后的信息,但不执行交易;
(2)TBC交易区块链(trading blockchain):TBC仅存储对交易有用的信息并且执行相关交易.
  ABC负责查询、保存账目、建块.比如,ABC存储金融机构或家庭帐户信息,一条链内账户信息是共享的, 这样使得账户信息很难被篡改.同时,ABC也提供可扩展性,即:当区块链处理大小超过限制,可以被分割成多个 子ABC,由不同机器上托管以保持平衡的工作量.一个区块链(链1)(如图6所示,块1、块2、块3)可以分成两个 区块链,第1条(链2)为块1、块2、块3、块4A,第2条(链3)为块1、块2、块3、块4B,而这两个区块链都符 合区块链的定义.
  ABC负责查询、保存账目、建块.比如,ABC存储金融机构或家庭帐户信息,一条链内账户信息是共享的, 这样使得账户信息很难被篡改.同时,ABC也提供可扩展性,即:当区块链处理大小超过限制,可以被分割成多个 子ABC,由不同机器上托管以保持平衡的工作量.一个区块链(链1)(如图6所示,块1、块2、块3)可以分成两个 区块链,第1条(链2)为块1、块2、块3、块4A,第2条(链3)为块1、块2、块3、块4B,而这两个区块链都符 合区块链的定义.

3.2 基于法律的区块链应用开发技术

  传统的应用需求分析及建模通常包含功能、性能、安全、界面等方面,而区块链应用需求分析及建模还需 要考虑法律,因为很多区块链应用与法律有关系.例如,使用区块链来存储电子证物,在中国必须要满足下面3个 条件.
(1)及时性:数据必须是及时收集的;
(2)过程性:过程的数据必须被记录;
(3)不可篡改性:所收集及存储的数据必须证明没有被篡改过

3.3 链上代码设计研究

  区块链系统里使用的智能合约,意图建立一种无法被人为篡改和操控的升级版的代码合同,
在传统的可靠数据库管理系统(DBMS)中,事务(transaction)应该具有的4个特性ACID(ISO/IEC 10026-1:1992):原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability).CAP理论指出, 分布式计算系统不可能同时确保一致性(consistency)、可用性(availability)和分区容忍性(partition).
  在区块链数据库中,是不遵循ACID原则的.区块链用分布式账本保证数据的一致性,由建块来维持一致性, 每块包含许多交易.区块链的事务方式和传统数据库事务方式并不相同,见表2。

4 总结

  本文主要针对区块链的各种特性进行应用系统开发的研究,大致脉络如下:第一部分介绍了区块链用于系统开发的优势,即,不可篡改性。随后引入区块链中重要的机制——共识机制。针对共识机制分析了现有的几套方案,PoW是相对低效的,拜占庭共识法最初是串行工作的,本文提出的并行拜占庭法弥补了这个缺陷。
第二部分针对应用系统开发的角度,给出了相对合理的北航链架构。第三部分,确定了北航链中双链模式的领先地位(这一段在文章中有举案例介绍,感兴趣的话可以自行查看)。

5 一点心得

  给我的感受是,在接下来的开发任务中,可以尝试向双链模型靠拢。私有链的属性更适用于应用系统,双链的设计又更能保证加入到链中的机构的隐私。
  本文中有很多内容是比较宽泛的,例如智能合约/链上代码这一块提及的还是比较浅的,后续随着研究的深入,可以再与大家探讨。

6 本文仅用于个人学习记录,还请各位多多指教!

猜你喜欢

转载自blog.csdn.net/qq_41247688/article/details/129289858