《迅雷链精品课》第三课:区块链主流框架分析
上一节课我们学习了区块链的技术架构,系统地分析了区块链平台的6个层次:数据层、网络层、共识层、合约层、应用层、接口层。这节课我们将结合实际看看现在主流区块链项目的技术架构;思考我们在设计具体的业务架构时,需要决定什么业务应该上链,什么业务应该用链下服务处理,一个简单实用的判断依据是回答以下3个问题:业务是否与信任或价值转移相关?业务上链是否能提升效率?业务上链是否能降低成本?
在学习课程的时候,你也可以免费领取BaaS平台为期一个月的试用机会,免费使用高性能区块链服务(点击链接即可免费领取https://blockchain.xunlei.com/baas/try.html)。课程学习结合实践操作,让你迅速成为区块链大牛!
*以下为第三课的内容~
第三课 区块链主流框架分析
部分公链项目的技术架构概览
按照上节课介绍的分层架构,我们来分析一下部分公链项目的技术架构。目前一些主流的公链项目的技术方案如下表所示:
图1. 主流的公链项目的技术方案
分析一个架构前,我们首先要明白,无论哪个区块链项目,无论其采用哪种具体的技术方案,其核心功能都是维护一个分布式的账本:数据层要保证账本数据不丢失和不可篡改;网络层要保证网络规模的可伸缩性,新节点能方便加入,少数节点掉线不能影响系统的可用性;共识层要保证账本数据的一致性;智能合约是对账本数据进行修改的程序,因此合约层需要保证智能合约执行的确定性和可终止性等性质;应用层要结合账本的性质,其业务应用应该与信任、资产或价值转移相关。
限于篇幅,本文是概述性质的,重点介绍其创新性技术及其影响,让你对各个项目架构变迁的主线有个大概了解,而上表包含的所有这些技术的细节都会在后续章节详细分析。
比特币
比特币是首个以区块链技术为基础的数字货币系统,比特币的技术架构是开创性的,后续的很多数字货币项目都是直接使用比特币代码,其它的区块链项目也都继承了比特币系统的大部分概念。
根据比特币白皮书所述,中本聪创建比特币系统的目的,就是为了提供一种去中心化的,完全通过点对点技术实现的电子现金系统,以代替当前的法定货币+权威的中间机构的支付机制,所谓中间机构包括政府、银行或任何提供支付担保的服务商。中本聪为比特币设计了一系列的技术机制,包括UTXO交易模型、P2P网络、PoW共识算法、用于验证交易的脚本语言等,解决了电子货币的发行、流通、所有权验证、防双花、防篡改、激励、安全信任等问题。
UTXO(Unspent Transaction Output,未花费交易输出)是比特币首创的数据模型,这是一种以资产为中心的记账方式。
我们日常熟悉的银行、信用卡、微信、支付宝、证券交易等都是基于账户的设计,在账户中保存个人资料、余额等信息,比如A的账户有100元,B的账户有200元;现在A要转10元给B,系统就将A的账户余额减去10元,B的账户余额加上10元,最后A的账户余额变成90元,B的账户余额变成210元。
而在UTXO 模型的加密货币中,某一个“账户”中的余额并不是由一个数字表示的,而是由当前区块链网络中所有跟当前“账户”有关的 UTXO 组成的。在比特币系统中,一个UTXO就是被所有者(某个用户的钱包地址)锁住或记录于区块链中的一定数量的比特币。当用户进行转账交易时,系统修改的是UTXO的所有者,而不是用户的账户余额。
图2. UTXO交易示意图。A给B转8.5 BTC,用3个UTXO作为输入,总输入为9 BTC,输出为2个UTXO:B收到8.5 BTC,A收到0.4 BTC作为找零,总输入与总输出的差额是交易手续费。
交易就像复式记账法中的一个账目,分为来源和去向两个部分:每笔交易有一个或多个UTXO作为输入,另一头也是有一个或多个UTXO作为输出;总输出加上手续费等于总输入。每个作为输入的UTXO都是前面一笔或多笔交易的输出,这样每个UTXO都能追溯来源,最初的来源,就是某个矿工的挖矿所得。
中本聪并没有向外界说明他设计UTXO模型的原因,但人们普遍认为这有助于交易的并行处理、在去中心化架构下更容易追溯资产来源,但难于支持图灵完备的智能合约。
PoW(Proof-of-Work,工作量证明)的共识机制要求工作端进行一些耗时适当难度的对随机数的哈希散列函数计算,以寻找符合要求的随机数(哈希值的前缀要求存在一定数量的0),并且答案能被服务方快速验算,以此耗用的时间、设备与能源做为担保成本,以确保服务与资源是被真正的需求所使用。
比特币系统的智能合约是非图灵完备的,它不支持循环语句或递归调用、不能保存中间状态,而是只有一条一条的简单指令,用于执行签名验证等操作。
中本聪将UTXO的设计,跟区块链、PoW共识算法、智能合约和密码学相结合,技术创新结合制度设计,首次创造了一个完整而严密加密货币体系和可信协议,为人们打开了区块链创新的大门。
以太坊
以太坊最大的创新是推出了图灵完备的智能合约语言Solidity和执行环境EVM,让人们看到将区块链技术用于加密货币以外的领域的可能性。
图灵完备的智能合约意味着支持循环语句和保存多阶段中间结果的全局状态。
在以太坊系统中,状态是由被称为“账户”(每个账户由一个20字节的地址)的对象和在两个账户之间转移价值和信息的状态转换构成的。以太坊的账户包含四个部分:
1) 随机数,用于确定每笔交易只能被处理一次的计数器(nonce);
2) 账户目前的以太币余额(balance);
3) 账户的合约代码,如果有的话(code);
4) 账户的存储(storage);
以太坊有两种类型的账户:外部所有的账户(由私钥控制的)和合约账户(由合约代码控制)。外部所有的账户没有代码,人们可以通过创建和签名一笔交易从一个外部账户发送消息。每当合约账户收到一条消息,合约内部的代码就会被激活,允许它对内部存储进行读取和写入,和发送其它消息或者创建合约。
合约以账户的形式存在的方案意味着当一个智能合约被部署后,它成为了一个独立存在的实体,它有自己的账户余额、有自己的存储空间,这样普通的用户账户可以跟合约账户进行交易,普通用户可以转以太币给合约账户、合约账户也能转以太币给普通用户,它的所有交易记录可以被独立的追溯。
Hyperledger Fabric
Hyperledger Fabric项目是个面向企业应用场景的区块链项目,是首个专注于联盟链和私有链的开源项目。Fabric与其它公有链项目的思路有很大区别,为满足企业的应用, Fabric考虑的主要需求包括参与者的认证、网络的许可权限控制、交易的隐私保护、监管、审计等方面。因此,Fabric架构的核心除了区块链服务,包括账本(LEDGER)、交易(TRANSACTIONS)、智能合约(SMART CONTRACT)以外,还有身份认证服务(IDENTITY),其架构图如下所示:
图3. Hyperledger Fabric架构图
PKI (Public Key Infrastructure)体系是一种综合多种密码学手段来实现安全可靠传递消息和身份确认的一个框架和规范。Hyperledger Fabric的身份认证服务基于PKI体系构建,为整个区块链网络提供身份管理、密码学证书管理、认证、隐私、保密和审计的服务。公链项目的节点是匿名的、不可信任的,而Fabric网络中的节点需要首先获得授权,节点间互相认识。
Hyperledger Fabric支持可插拔的共识协议,可以方便的针对某种特定应用场景和信任模型来配置合适的共识算法。在单个企业内部或经过可信任的认证的情况下,拜占庭容错的共识算法是没有必要的,它会影响性能;而在多方参与的场景中,则需要使用拜占庭容错的共识算法。目前Fabric支持拜占庭容错的PBFT共识算法和故障容错的kafka共识算法。其中PBFT是Fabric 1.0版本之前默认的共识算法,支持3f+1节点集群(f为恶意节点数量);kafka共识机制是Fabric 1.0版本实现的共识算法,它基于kafka消息队列集群对orderer节点提交的交易执行去重和排序操作,kafka集群使用zookeeper(Paxos算法)做选举,支持2f+1节点集群(f为故障节点数量)。
Hyperledger Fabric的智能合约称为chaincode,可用通用编程语言如Java、go、Node.js等编写,运行在docker容器中。这个方案是Fabric首创的,好处是让开发者没有额外的学习和培训成本,并且和以太坊相比,Fabric链码和底层账本是分开的,升级链码时并不需要迁移账本数据到新链码当中,真正实现了逻辑与数据的分离。
Hyperledger Fabric底层并不发行加密货币,而是以其完善的身份认证服务、可插拔的共识协议、方便管理的docker容器化的智能合约,可用于企业中广泛的业务场景中,因此被公认为是区块链3.0的典型的项目架构。
EOS
针对比特币、以太坊等公链平台的性能低、交易手续费高的问题,EOS推出了高性能、免交易手续的方案。
EOS的性能提升来自共识算法改进和并发处理两个方面。共识算法方面,采用DPoS+aBFT共识算法,选举出21个超级节点作为投票节点,达到了0.5秒一个区块的出块速度;并发处理是采用了多线程并发处理的方案,方法是使用静态分析来对交易按账户进行划分(Shards),保证不存在两个线程都包含同一帐户下的交易,这样一个区块就可以并行的运行多个线程。经过这些优化后,EOS的实测性能可以接近4000 TPS,远远高于比特币、以太坊等项目的性能。
EOS采用WASM作为智能合约的虚拟机,支持使用C++编写智能合约代码。WASM是一种新的字节码格式,突出的特点就是精简,加载时间短以及高速的执行模型。
迅雷链
根据实际情况和业务需求,迅雷链提出了独有的同构多链架构结合DPoA + PBFT的共识机制。同构多链架构,即系统由一条条相对独立(独立进行共识)的链组成,每条链有多个节点,每个节点被分配到其中一条链上,不同的账户数据被锚定在不同的同构链上,然后接入层将交易路由到发送方所在的链上进行区块打包与共识,其中每条链都运行独立的DPoA + PBFT共识机制。迅雷链对PBFT算法作出了一些优化,降低网络消耗,提高了算法的可用性;DPoA共识机制是按各验证人节点的存储容量、网络稳定性、带宽、时延、CPU使用率等指标作为衡量标准,选择符合条件的验证人节点,每轮投票都从其中动态选择部分节点作为投票节点,以获得更好的公平性和网络效率。在这样的多链架构下,迅雷链的交易TPS性能可以达到百万级别,交易秒级确认。
图5. 迅雷链的同构多链示意图
智能合约方面,迅雷链同时支持EVM和WASM两种虚拟机,因此用户可以根据自己的实际情况选择使用solidity或C/C++来编写智能合约。
区块链3.0是超越货币、金融的应用领域,能够为各行各业提供解决方案,全面服务于实体经济。应用领域的扩大,也意味着业务模型会更庞大也更复杂,架构上也需要考虑更多的因素,例如:
1) 用户体验。好的用户体验需要更快的响应速度、更安全的通信、更稳定的网络连接,因此迅雷链引入了接入层服务,负责客户端的接入、鉴权、负载均衡、协议转换等。在此基础上搭建了迅雷链开放平台,助力开发者快速开发、部署智能合约,企业或个人可以轻松将自己的产品和服务上链,更加便捷地开发区块链应用。
2) 海量数据存储。迅雷链提供了高可靠、高安全性的TCFS(迅雷链文件系统)以支持用户存储大量的文件数据。
3) 数据分析。负责对交易数据做统计分析、数据挖掘等处理,输出统计报表。
4) 监控服务。负责对节点和各个服务模块做实时监控,检测到异常后及时触发告警,以便研发运维人员及时排除故障,保障服务的稳定运行。
考虑上述因素后,迅雷链架构如下所示(其中同构多链架构是属于Layer 1层的改进,也就是每条子链都有一个独立的Layer 1层):
图5. 迅雷链架构图
区块链应用的混合架构
在更具体的实际业务中,有些部分是机构的内部逻辑,实际会存在更多的链下服务,例如商城的用户注册、用户人个资料、商品展示、运营管理、交易所的买卖单撮合、隐私数据等,都属于链下的服务,需要和链上业务进行对接。
图6. 基于区块链的业务的混合架构图
上图是典型的一个基于区块链技术的应用业务架构图:
应用服务包含所有的链下业务逻辑,可能非常庞大,例如包括供应链、客户资料管理、订单管理、商品展示等等,使用LAMP、微服务等成熟的技术进行开发;
业务数据库可能包括MySQL、key-value数据库等多种数据库实例,用于存储应用服务的业务数据;
区块链网络负责交易的清结算,例如下单成功后的付款、资产转移等,由具体的应用服务向区块链发起交易请求;
对账服务负责检查需要上链的数据是否被区块链网络正确处理,对漏发的、超时或未处理成功的数据应进行重发或差错控制,以保障业务质量;
区块数据分析服务用于构建区块链数据分析服务,可以支持用SQL语句查询分析数据,以支持对数据的复杂检索。
结语
本文分析了一些具体的区块链项目的技术架构,从区块链1.0的比特币网络,到区块链2.0的以太坊、EOS,到区块链3.0的Hyperledger Fabric和迅雷链。从上述的区块链架构发展路径,我们可以看到,随着区块链应用范围的扩展,技术架构也越来越复杂,特别是链上链下混合的架构,是区块链3.0全面服务于实体经济的基本要求和重要特征。在设计具体的业务架构时,我们需要决定什么业务应该上链,什么业务应该用链下服务处理,一个简单实用的判断依据是回答以下3个问题:业务是否与信任或价值转移相关?业务上链是否能提升效率?业务上链是否能降低成本?
归根到底,区块链提供的是机器信任,在此基础上实现资产维护、价值转移等业务,这些业务都是以提升效率和降低成本为目的。不是跟信任关系相关的业务、上链后无法提升效率和降低成本的业务,都可以认为是不适用于区块链的。
*恭喜完成第三课的学习,第四课我们将深入了解区块链的技术发展趋势,讨论共识机制、隐私保护、数据存储和查询分析、混合架构的探索及互操作性、以及标准化及规范化等技术内容。
版权声明: 本文为 InfoQ 作者【迅雷链】的原创文章。
原文链接:【http://xie.infoq.cn/article/3531dea6a3167d05d17b27a39】。文章转载请联系作者。
评论