区块链架构模式分析

本文介绍了当下比较流行的区块链技术,在查阅了大量资料的基础上,分析了区块链架构的模式,属于一篇综述性文章。

区块链的介绍

在区块链技术应用之前,主要有两种交易体系,一种是以银行为信任中心的货币体系,另一种是以第三方机构为信任中心的网络交易。但不管是以银行为信任中心的货币体系,还是以第三方机构为信任中心的网络交易体系,都或多或少的存在着各种问题,不能很好地满足各经济体之间交易的需要。

区块链背景介绍

以银行为信任中心的货币体系

陌生人之间完全缺少必要的互信,双方之间都对对方不信任。那么扩展到整个社会的交易关系,每个人形成了一个信任孤岛,社会经济也必然会衰败。这也是所谓的拜占庭将军问题,军队虽大,但是将军之间没有互信,最终也无法攻占一个小城池。

当银行的出现后,经济交易关系就不同了。银行作为一个充分稳定、可信的第三方权威机构坐落于两两交易双方,此时银行就充当了陌生人交易之间的信任中介。交易双方都是认同银行不可动摇的信用度,并将自己的资金流和银行交互,而银行作为一个中间人沟通陌生人之间的资金流,从而完成陌生人之间的可靠交易。此时银行成了整个社会交易关系的中心点,每个人都和银行产生联系,进而间接的和其他人发生可靠的交易。而至于银行发行的货币其实就是银行可靠信任度的代表,是银行信任的凭证。

以第三方机构为信任中心的网络交易

当前互联网高速发展下,网络交易频繁、交易额巨大,这已经成为国家GDP重要组成部分。保证网络交易的可靠就显得格外的重要。当前的网络交易都需要依赖于第三方可信机构。网络环境和现实环境下的交易关系是很相似的,卖家和买家之间缺少必要的可靠信任,那么设计到各自利益的交易就不是那么容易完成。

买卖双方的互信依赖于第三方机构的保证和维持。买家将所需资金存储到第三方可信机构,卖家在这个事件驱动下为买家提供商品、服务。当双方都确定得到了双方开始的承诺,第三方机构完成资金流的转移,交易完成。这些第三方机构有:微信、支付宝、网银等提供各种特定交易服务的平台。

基于区块链技术的比特币网络

当前的共享经济严重依赖于第三方信任中心,这种高度集中的交易关系网络必然有自己的劣势:

  • 过于集中。集中式机构的安全性是比较弱的。当外界对机构产生严重冲击, 就容易崩溃,无法对外提供稳定的可用服务,容灾能力较差。
  • 信任中心不是总是可靠的。信任中心是有团体维护的,必然会存在内部人员出于自身利益而偷偷在机构内部发生攻击,损害用户利益。同时信任中心可能会考虑自身整体利益采取极端措施。
  • 增加交易成本。基于第三方信任中心的交易为了提高信任度,必然要付出额外的信任代价,从而增加交易成本。

为了克服信任中心的劣势,区块链技术应运而生。区块链引人关注之处在于能够在网络中建立点对点之间可靠的信任,使得价值传递过程去除了中介的干扰,既公开信息又保护隐私,既共同决策又保护个体权益,这种机制提高了价值交互的效率并降低了成本。

区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式结构,并以密码学方式保证的不可篡改的分布式账本。通过“去中心化”和“去信任化”的方式进行直接的点对点的交易,运用“分布式结构”的数据存储、传递和验证,用数据区块取代了对中心化的依赖。这里的分布式不仅体现为数据的分布式存储,也体现为数据的分布式记录。每条记录从后向前有序链接起来,从而使保存在节点上的交易信息可以快速得到确认,并且由参与的成员集体维护一个可靠数据库的技术,具备公开透明、无法篡改、方便追溯的特点。

目前当我们单独说到区块链的时候,就是指区块链技术,是实现了数据公开、透明、可追溯的产品的架构设计方法,算作广义的区块链。而当在具体产品中谈到区块链的时候,可以指类似比特币的数据存储方式,或许是数据库设计,或许是文件形式的设计,这算作狭义的区块链。广义的区块链技术,必须包含点对点网络设计、加密技术应用、分布式算法的实现、数据存储技术的使用等4个方面,其他的可能涉及到分布式存储、机器学习、VR、物联网、大数据等。狭义的区块链仅仅涉及到数据存储技术,数据库或文件操作等。本文的区块链,指的是广义的区块链。

区块链解决的问题

在中心化集中式交易模式中,交易除了卖家和买家,还牵扯到了买家和卖家都信赖的第三方信任机构。比如传统交易中金融机构作为可资信赖的第三方为交易双方提供了电子支付服务。因为交易都围绕一个权威的中心化代理展开,一旦它出了问题便会造成交易的失败,所以该种模式内生性受制于“基于信用的模式”。该种“基于信用的模式”存在这样几大弊端:

  • 交易双方无法实现不可逆交易,逆交易的出现恰是对“信用”最直接的嘲讽,因为它制造了刷信用的潜在可能。一旦出现逆交易就需要中介机构出面协调,这就引致出第二个弊端。
  • 交易成本问题。通过第三方中介机构会产生额外的费用,这些成本最终将以各种形式由每个用户进行承担,增加了交易成本。因此,中介机构的存在限制了实际可行的最小交易规模;此外,第三方中介赚取利润的核心就在于通过转移资金获取各项服务费用,这些费用就是交易成本,而它不就不该存在;
  • 时间成本问题。在跨境交易时,交易的清算和结算都需要经过第三方,而不是直接由交易双方完成,时间成本较高。
  • 借助第三方机构来处理信息的模式拥有点与点之间缺乏信任的弱点,潜在的退款行为促使商家在销售货物之前会索要购买方个人信息(但仍然不能避免一定的欺诈行为),而这是完全没有必要存在的。
  • 数字签名本身能够解决电子货币身份问题,如果还需要第三方支持才能防止双重消费,则系统将失去价值。
  • 安全性问题。第三方公信系统的记录一旦被篡改,将无法被纠正,即使有备份记录,交易双方也会由于无法完全相信其中的一方而无法达成一致。

因此,针对这种随时都需要第三方金融机构的“基于信用的模式”,区块链提出了一种基于密码学而不是基于信用的交易,使得任何达成一致的双方可以直接支付,即直接排除了第三方中介参与的可能性。杜绝回滚支付交易的存在就可以保护卖家免于欺诈,而亦能使买家在担保机制下免于欺诈。此外,去中心化的处理方式会更便捷,同时也无须担心自己的与交易无关的信息泄漏。设想如果有成千上万笔交易在进行,去中心化的处理方式会节约很多资源,使得整个交易自主化、简单化,并且排除了被中心化代理控制的风险。

区块链在不引入第三方中介机构的前提下,可以提供去中心化、不可篡改、安全可靠等特性保证。因此,所有直接或间接依赖于第三方担保信任机构的活动,均可能从区块链技术中获益。未来几年内,可能深入应用区块链的场景将包括:

  • 金融服务:主要是降低交易成本,减少跨组织交易风险等。该领域的区块链应用将最快成熟起来,银行和金融交易机构将是主力推动者。
  • 征信和权属管理:这是大型社交平台和保险公司都梦寐以求的,目前还缺乏足够的数据来源、可靠的平台支持和有效的数据分析和管理。该领域创业的门槛极高,需要自上而下的推动。
  • 资源共享:Airbnb为代表的公司将欢迎这类应用,极大降低管理成本。这个领域创业门槛低,主题集中,会受到投资热捧。
  • 投资管理:无论公募还是私募基金,都可以应用区块链技术降低管理成本和管控风险。
  • 物联网与供应链:物联网是很适合的一个领域,短期内会有大量应用出现,特别是租赁、物流等特定场景。但物联网自身的发展局限将导致短期内较难出现规模应用。

基于以上的应用场景,区块链针对交易中存在的典型问题,提供了如下的解决方案:

  • 安全性问题:分布式账本存储。每个用户的计算机都被视作一个账本记录区块,如果某些区块的某条记录被篡改,但是与其他区块的记录相矛盾,该条记录会被更正。进一步,如果需要篡改某条信息,则至少需要篡改50%以上区块的该条信息,显然这样的代价几乎是不可能实现的。
  • 费用成本问题:共识算法共同管理。将每个存储账本的用户的计算机当作存储设备,此设备由用户自身进行维护,这样相比于中心化信任过程,机房设备和维护的费用都能几乎降为0。
  • 时间成本问题:互联网直接对接交易双方。所有交易直接通过互联网进行,无需经过清算、结算中心,既避免了错误产生后人工更正的时间,又将交易双方直接相连接,节省了交易时间。

区块链模式分析

区块链模式

概述

区块链是用分布式数据库识别、传播和记载信息的智能化对等网络, 也称为价值互联网。区块链模式将系统功能分为区块、交易、结点、智能合约和共享数据账本这几个模块。实现了在分布式环境里多方参与的双边交易中的去中心化,信息是分布式和分散式的,需要在节点之间进行逻辑验证交易。值得注意的是,虽然区块链也可以用来存储数据,但它要解决的问题是多方的互信问题。

元素

  • 交易:可识别的数据包,记录一笔资产转移的过程。包含加密的货币值、代码、函数调用的参数/结果和公钥/签名等。
  • 区块:存放交易的容器,记录一段时间内全局最新交易的数据块。
  • 节点:拥有一系列已达成一致的交易区块记录,是对当前账本状态的一次共识。
  • 智能合约:数字化合约,在交易完成后自动执行。
    共享数据账本(元数据,小数据):记录一个业务活动的系统,记录了参与者之间的资产转移,在参与者间共享且每个人都有自己的副本

关系

  • 每个节点都将新的交易记录存放到一个区块中。
  • 区块中保存数据,每个区块包含一个时间戳和链接到前一个块的信息。
  • 全局认可的区块按时序串接在一起,形成全局共享账本。
  • 节点中包含区块,区块中包含交易。

约束

  • 每个节点都拥有一份完整的数据备份。
  • 区块链每个节点都按照块链式结构存储完整的数据,每个节点存储都是独立的、地位等同的,依靠共识机制保证存储的一致性
  • 保证大多数节点都对交易结果达成一致。
  • 在区块链模式上会强制执行全局规则。
  • 新区块只能添加,不能被修改和删除。采用密码学的方法保证已有数据不能被篡改。
  • 至少有一个区块,并且从第二个区块开始,每个区块中都包含上一个区块的哈希值。
  • 区块链中的节点采用共识算法,对新增数据达成一致。
  • 区块中的每一笔交易都要遵守和执行智能合约,都有发起人的数字签名来保证真实性和合法性

区块链系统架构图

从架构设计上来说,区块链可以简单的分为三个层次,协议层、扩展层和应用层。其中,协议层又可以分为存储层和网络层,它们相互独立但又不可分割。

协议层

协议层,指代最底层的技术。这个层次通常是一个完整的区块链产品,维护着网络节点,仅提供API供调用。通常官方会提供简单的客户端,这个客户端功能也很简单,只能建立地址、验证签名、转账支付、查看余额等。这个层次是一切的基础,构建了网络环境,搭建了交易通道,制定了节点奖励规则,至于你要交易什么,想干什么,它一概不过问,也过问不了。

从用到的技术来说,协议层主要包括网络编程、分布式算法、加密签名、数据存储技术等4个方面。在架构设计图里,我们把这个层面进一步分成了存储层和网络层。数据存储可以相对独立,选择自由度大一些,可以单独来讨论。选择的原则无非是性能和易用性。我们知道,系统的整体性能主要取决于网络或数据存储的I/O性能,网络I/O优化空间不大,但是本地数据存储的I/O是可以优化的。目前,困扰业界的一个重大问题是加密货币交易处理量远不如现在中心化的支付系统(银行等),除了I/O,需要全方位的突破。

分布式算法、加密签名等都要在实现点对点网络的过程中加以使用,所以是网络层的事情,也是编码的重点难点。当然,也有把点对点网络的实现单独分开的,把节点查找、数据传输和验证等逻辑独立出来,而把共识算法、加密签名、数据存储等操作放在一起组成核心层。无论怎么组合,这两个部分都是最核心最底层的部分,都是协议层的内容。

扩展层

这个层面类似于电脑的驱动程序,是为了让区块链产品更加实用。目前有两类,一是各类交易市场,是法币兑换加密货币的重要渠道,实现简单。二是针对某个方向的扩展实现。值得一提的就是我们平时听得最多的“智能合约”的概念,这是典型的扩展层面的应用开发。所谓“智能合约”就是“可编程合约”,或者叫做“合约智能化”,其中的“智能”是执行上的智能,也就是说达到某个条件,合约自动执行,比如自动转移证券、自动付款等,目前还没有比较成型的产品,但不可否认,这将是区块链技术重要的发展方向。

扩展层使用的技术没有什么限制,可以包括很多,上面提到的分布式存储、机器学习、VR、物联网、大数据等等,都可以使用。这个层面与应用层更加接近,也可以理解为B/S架构的产品中的服务端。这样不仅在架构设计上更加科学,让区块链数据更小,网络更独立,同时也可以保证扩展层开发不受约束。

从这个层面来看,区块链可以架构开发任何类型的产品,不仅仅是用在金融行业。在未来,随着底层协议的更加完善,任何需要第三方支付的产品都可以方便的使用区块链技术;任何需要确权、征信和追溯的信息,都可以借助区块链来实现。

应用层

这个层面类似于电脑中的各种软件程序,是普通人可以真正直接使用的产品,也可以理解为B/S架构的产品中的浏览器端。这个层面的应用,目前几乎是空白。市场亟待出现这样的应用,引爆市场,形成真正的扩张之势,让区块链技术快速走进寻常百姓,服务于大众。目前使用的各类轻钱包。
image

区块链对软件质量属性的影响

区块链对软件质量属性的影响

作为一种软件架构,区块链模式对软件的质量属性有着或好或坏的影响。下表列举了区块链架构对软件系统的质量属性的影响。

质量属性 影响 理由
可用性 提高 由于网络通信中存在各种不稳定因素,节点间通信可能会暂时中断,而在区块链中每个节点都有一份数据备份,所以一旦一个节点暂时无响应也没有影响,可以去另一个节点获得数据,区块链可以容错1/3左右的节点的异常状态。
读性能 提高 可以快速地读,因为每个节点都有一份数据备份,可以直接从本地的数据备份中高效地读取数据。
写性能 降低 因为每次交易为了验证你确实拥有足够的钱而需要追溯历史每一笔记录来计算余额,而且需要将数据传送给所有节点。当交易数据较大的时候,就会有性能问题。而且,新增区块时,因为目前还没有一个有效的启发式hash算法,所以需要消费非常多的计算资源来进行hash计算,这严重降低了性能。
吞吐量 降低 所有交易相关的数据和文件需要即时写入区块链,而区块链的各个参与节点的数据又需要保持同步,所以吞吐量会降低。
延迟性 提高 因为交易需要网络上大多数节点达成共识,而网络传输存在延迟,所以区块链的交易是存在延迟性的。还受一个小概率事件影响,就是当网络上同时有2个或以上节点竞争到记账权力,那么在网络中就会产生2个或以上的区块链分支,这时候到底哪个分支记录的数据是有效的,则要再等下一个记账周期,最终由最长的区块链分支来决定。因此区块链的交易数据是有延迟性的。
可修改性 降低 不可更改性是区块链关键的特征。每个节点都有一个账本,系统会自动比较,认为相同数量最多的账本是真的账本,少部分和别人数量不一样的账本是虚假的账本。因此,任何人修改自己的账本是没有意义的,除非能够篡改整个系统里的大部分节点。而且,所有的操作都需要得到系统内绝大部分节点的认同,也降低了可修改性。
数据完整性 提高 参与的节点各自都有独立的、完整的数据存储,数据的完整性是区块链的内在特性。
机密性 降低 在公有链上,等于每个人手上都有一份完整账本,并且由于区块链计算余额、验证交易有效性等等都需要追溯每一笔账,因此交易数据都是公开透明的,如果我知道某个人的账户,我就能知道他的所有财富和每一笔交易,没有隐私可言。所以机密性降低,但是可以通过加密等方式来增强隐私性。
安全性 提高 采取了加密的hash技术和数字签名,能够全网记录,可追溯,防篡改,具有最终性。记录通过哈希、加密和个人签名得到保护,ID和交易不能直接联系,此外,对于交易有认证机制。密码学的应用保证了未经授权者能访问到数据,但无法解析。
可扩展性 提高 在区块链里添加一个节点,不需要向任何人申请,只要按照约定的算法流程自己生成一个私钥公钥对,再用公钥生成地址,就可以使用该地址。当需要与区块链上其他节点发生交易或者有要提交到区块链上记录的交互内容时,可以全网广播,经所有参与生成区块和记录区块内容的节点确认后,地址便被区块链记住了。
可伸缩性 提高 去除了中央控制服务器的瓶颈,拥有很好的读可伸缩性,但是写可伸缩性会被公有链限制,但总体来说可伸缩性是提升的。
互操作性 降低 数据格式需要事先达成一致,新加入的参与者需要与整个区块链的参与者整合以降低已有参与者的负担,降低了系统的互操作性。
可移植性 降低 可移植性需要考量智能合约的可移植性和数据的可移植性。智能合约和数据在部署到新版区块链时,都需要考虑到向前兼容性、平台兼容性等问题。
可测试性 降低 区块链的测试很复杂,区块链提供了天然可信的分布式账本平台,但是分布式的应用本身的测试面临着很大的困难。另外,由于节点众多,不仅需要测试连接、交易、结算等常见基本功能,而且还要测含任意节点的加入、离开、跨多个节点的穿透交易等。目前缺乏有效的启发式算法来计算新区块的链接过程,所以导致测试中的消耗的时间和计算资源会非常大,降低了可测试性。
可靠性 提高 区块链每个节点都按照块链式结构存储完整一致的数据,即使部分客户端被毁也不影响数据的可靠性。使用“少数服从多数”的共识机制,保证数据不容易丢失,一旦出错可以很快恢复。
稳定性 提高 一旦信息经过验证并添加至区块链,就会永久的存储起来,除非能够同时控制住系统中超过51%的节点,否则单个节点上对数据库的修改是无效的,因此区块链的数据稳定性极高。
易用性 降低 区块链中,账户安全由私钥保护,如果不添加别的手段,如在别处备份等方式,一旦用户丢失了密钥,账户便无法找回。
自治性 提高 区块链是一个高度自治的系统,采用基于协商一致的规范和协议,使得整个系统中的所有节点能够在去信任的环境自由安全地交换数据,使得对“人”的信任改成了对机器的信任,任何人为的干预不起作用。
可管理性 降低 区块链是一个高度自治的系统,没有管理员,是彻底的无中心的。果有人想对区块链添加审核,也实现不了,因为它的设计目标就是防止出现居于中心地位的管理当局 ,所以区块链不存在可管理性。

典型质量属性的刺激响应序列

接下来选取区块链架构中几个典型的质量属性,描述它们的场景刺激响应序列。

可用性

image

性能

image

安全性

image

可修改性

image

机密性

image

可扩展性

image

可测试性

image

可靠性

image

鸣谢

感谢Lucy同学。考虑到单个人查阅的资料存在不全面性的情况,因此,我们俩分别对文章的每部分都做出自己的解答。然后聚在一起讨论自己找到的资料和文章中每部分的内容,整合了两个人的认知,最终形成本文。