区块链游戏门户

 找回密码
 立即注册
查看: 252|回复: 0

迅雷链同构多链框架解析

[复制链接]

3749

主题

3934

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12064
发表于 2018-5-9 20:46:22 | 显示全部楼层 |阅读模式
传统意义上的、甚至是消费者端熟知的迅雷,是那家唯一在美国上市的中国下载服务商,主营业务还是在线广告、游戏和会员。迅雷从2015年开始对分布式计算和区块链领域的布局。这几年,迅雷布局了CDN,推出了C端的赚钱宝和玩客云,商业模式上,完成了用C端硬件节点为表现形式的,对「共享计算」、「分布式CDN」和「区块链技术」方向的探索。

如今的新迅雷,已经转型成为了一个“共享计算”服务和互联网基础技术的提供商。如果说此前的星域CDN和共享云计算业务只是在模式上做了些铺垫的话,那么迅雷链则代表着迅雷向着技术平台化的转变——过去迅雷拥有的下载/上载的能力,现在组成了一个新品的产品链路,迅雷链上拥有了平台级的能力,主要依托的是迅雷已经拥有的巨大算力,以及广阔的节点。

迅雷链,按照官方的说法,就是迅雷“脱虚向实”,让开发者形成技术社区,让区块链赋能实体经济的答案。一方面,它具备强大的并发处理能力,具备划分时代的硬实力。另一方面,高性能的区块链技术方案,助力开发者降低成本,快速部署智能合约,更加便捷地开发区块链应用。特别是在传统实体经济领域,迅雷超级区块链具备了超强赋能能力。

同时,InfoQ也和迅雷联合主办了“2018迅雷全球区块链应用大赛”,并以高达百万元奖金,支持国内外高校人员、科研院所等研究机构、企业从业人员及有志于区块链技术的开发者与研究人员,以个人或团队形式参加大赛并贡献出优秀区块链作品。有意向的伙伴,可以报名:http://t.cn/R3wBGRQ

首先我们先从整体看下迅雷区块链的技术栈,了解各模块的分工和协作。

最底层我们称为基础层,是构成区块链的最核心组成部分。最上层的应用层,是ToC端的用户直接接触到产品和服务。中间的服务层作为应用和链之间的桥梁,提供应用层需要的接口和服务。下面依次从上到下介绍各层各模块的功能和概要技术原理。

微信图片_20180509204546.png

应用层:
1.     账户客户端,主要指迅雷链的链克口袋,负责管理链上资产。链克的查询、兑换请求通过服务层的“数据请求服务”提供的接口完成,链上资产如果是依托于某个智能合约,这部分资产的查询和信息修改是通过服务层提供的合约调用接口转发到基础层的链上执行。

2.     第三方客户端,主要指接入链克兑换的产品和服务,比如迅雷直播。用户在这些应用中使用链克兑换产品和服务,会调起链克口袋扣除相应链克,如果是pc、电视端等会弹出二维码。服务层的“数据请求服务”会跟第三方客户端的后台服务交互,通知兑换信息是否入链成功。

3.     合约应用,指基于迅雷链开发的DAPP。应用中使用的合约通过服务层的“合约部署”服务部署到区块链上。DAPP中的合约调用通过服务层的“合约调用”模块进行校验,合法的才会转到链上处理。

服务层:
1.     安全控制:这一层类似我们做互联网架构的接入层,在这里一个核心的功能就是做好鉴权、合法性校验等安全相关的工作,将问题挡在最外层。

2.     合约部署:合约部署的触发主要是迅雷链内部的审核系统触发,只有企业资质审核通过、产品内容合法合规的才会部署到迅雷链上;同时,迅雷链是同构多链框架,合约会有自己所属的链,合约创建会在这个链完成,而普通链上的用户发起合约调用时,用户所在链请求入块后,需要知道将该请求和区块路由到哪个链上,所以合约部署的时候还需要将合约的路由信息通知到所有链。

3.     合约调用:检查合约调用接口中参数的合法性,比如合约地址是否存在等,对于不合法的请求直接返回失败,合法的会转发给基础层。

4.     数据请求服务:这个模块涵盖了跟链克相关的所有请求,包括查询余额、查询兑换记录、执行兑换。余额、兑换记录请求量很大,所以会在所有接入节点上做缓存,每个节点通过基础层的“订阅及通知服务”,订阅区块信息,当有区块产生得到通知的时候,解析区块内的信息,并修改缓存中的余额和兑换记录。对于执行兑换的请求,会校验合法性,包括签名是否正确等,合法的请求转到基础层。

基础层:
1.     先讲路由模块:当请求到达的时候,路由模块会根据请求中的from地址也就是发起方地址,将请求路由到该用户所属的链;另一方面,当请求入块,需要链间通信将请求和区块信息同步到目的链的时候,也需要路由模块的信息。

2.     链间通信模块:将已入链的区块中,需要跨链的请求、证明信息、区块信息同步到对应链,具体同构多链框架会在后面。

3.     订阅通知模块:刚才服务层也有提到,一些外围的服务,需要及时拿到新入链的区块数据,比如监控服务、余额查询等服务。

4.     共识:这是区块链等分布式存储服务共同的核心模块,区块链的共识比普通的分布式存储服务比如日志服务多了一些安全上的校验,所有参与共识的节点需要对要达成一致的数据也就是区块,校验内部数据的合法性。如何算怎样才是达成了共识,这跟共识算法有关,共识算法由很多,迅雷链采用了pbft,具体算法的原理和选择理由这里先暂不展开介绍了。

5.     账户管理:账户管理主要是账户的密钥对生成,这部分会做成库,给账户客户端使用,另一方面是做账户的权限管理。

6.     请求池:一方面收到请求后先放在这个队列里等待校验合法性,另一方面校验合法性通过后放入等待入块的队列。

7.     智能合约:迅雷链上之后会有越来越多的应用接入,这些应用的业务逻辑代码其实就是智能合约,智能合约代码是独立于区块链程序的,是在区块链程序执行过程中调起的,所以需要在区块链程序中运行虚拟机来解释和执行这段代码,而且因为智能合约里面需要读取和修改区块链上的数据,所以虚拟机还要提供方法来与区块链交互。

8.     数据存储:相比于以比特币为代表的UTXO模型,迅雷链选择了基于账户模型,方便支持智能合约,本地存储系统我们也是选择了leveldb,在数据存储的结构上借鉴了以太坊的精髓,包括交易树、账户树、事件树。每种树都是一个merkletree,在区块头部只存储树的root的hash。

9.     密码学:这也是区块链非常核心和独特的模块,区块链的不可篡改、隐私保护等特点都是源于此,涉及签名、摘要计算、公私钥对的生成等等。

10.     网络通信:区块链中所有参与的记账节点都是对等的,记账节点之间包括请求、区块等信息都需要网络送达,当然要做一个健壮的区块链网络,在网络通信模块还是有很多可做的优化。

11.     通用模块:因为账户模型里要存储的数据信息相对较多,而且随着时间推移,链的长度也越来越大,所以数据落盘前需要压缩。事件机制主要是为外围系统提供链上执行合约、链上区块产生等底层支持。
了解完迅雷链的系统构成后,我们看一个上链请求的执行过程,方便大家理解迅雷链的同构多链框架。

微信图片_20180509205027.png

以用户在客户端应用中发起链克兑换为例。

1.     链克口袋将请求发到链的服务层,服务层从架构角度看的最外层就是接入层;

2.     接入层会根据from(发起方)地址将请求路由到对应链的链,接入层也会判断请求的合法性,针对非法的请求直接返回失败;

3.     外层验证ok后,会进入服务层从架构角度看的内层,会验证请求是否为重放、余额是否不足等;

4.     服务层验证通过的请求到达基础层,基础层从架构上看就是我们的记账节点,也叫验证人;

5.     记账节点之间转发请求,记账节点中本轮的proposer负责发起区块,区块数据在几个记账节点之间也相互转发,收到区块的节点进行投票,并把投票信息广播,根据我们的pbft共识算法记账节点达成共识,区块入链;

6.     新区块产生后,记账节点中链间通信的模块会针对新区块中涉及跨链的请求,依次根据请求的目的链,将跟该目的链有关的请求原始数据、本链的区块头信息、本链的交易证明信息等转发给目的链的记账节点

7.     目的链的记账节点将收到的信息转发,并达成共识,将请求写入目的链区块的同时也完成了目的链对应地址的余额增加。

看完一个请求的基本处理过程,我们再从更上一层的角度看迅雷链的同构多链框架。
所谓同构多链框架,顾名思义就是有多条链,每条链上运行的程序是一样的。不同用户的请求会发到不同的链上进行处理。

当A、B、C、D同时发起请求,比如有 A->B,A->C,A->D , 同时有B->C, C->D,D->E。A、B、C、D根据路由规则落到不同的链上,四条链可以并行进行处理,如果一条链每秒的打包请求并落区块的速度是1000,那么上千条链,就可以达到百万TPS。

对于普通请求,手续费是固定的,这种链间的处理是相对容易的,而支持智能合约,需要一些额外的处理。

因为要防止恶意的合约或者合约本身的bug导致占用大量资源,所以需要根据合约执行情况收取相应的手续费。
手续费是需要从请求发起方的账户里扣除的,而真正执行合约的是在合约所在的另一条链,所以最终需要的手续费具体值,在发起请求方所在链入链这笔请求的时候尚未可知,这怎么办呢?

11.jpg

12.jpg

13.jpg

我们想到的解决办法是在发起方所在链扣除请求中传入的gasLimit值,也就是用户指定的手续费的上限值,这个请求入块后同步到合约所在链,合约执行后请求入块能知道这笔请求真正扣掉的手续费,再通过链间通信将链里面入块的合约调用的请求同步到发起方所在链,发起方确认合约链的区块数据,并把多扣掉的手续费加回给发起方。

这些对账户余额的操作在链上都有相应的操作记录写入,方便对账。

最后要讲的是,整个体系如何水平扩展,也就是整体性能怎么实现想提高就提高。
通过上面的介绍我们知道整体吞吐的提升,主要通过增加新链的方式,那怎么能做到轻量地增加新链呢?
路由规则目前我们选择的是最简单直接的针对地址取模,比如针对1024取模,因为地址是根据公钥经过hash运算出来的,整体是随机分布的,所以基本上所有用户会平均分布到这些链上。

以当前有1024条链举例,编号为0-1023,地址取模结果是1、1025、2049、3073、……会落到1号链。 那么当我们想扩容到2048条链的时候,实际上是原来每条链上的一半用户迁移到新链。新链启动时区块数据来自原来的链,比如1025号链的数据来自原来的1 号链,原来在1号链上地址取模为1025、3073、……的用户数据之后会都落在1025这条链;而原来在1号链上地址取模为1、2049、……的用户数据之后还在1号这条链上。

通过这样的方式让扩链的整体变动最小化。

今天更多的从架构和设计的角度给大家做的分享,更多具体的细节我们会在下面几期针对大家感兴趣的点展开来谈。

迅雷将在5月16日在北京召开“迅雷区块链生态及新品发布会”,会上将发布星域云新品及迅雷区块链生态并揭秘迅雷链。感兴趣的同学可以报名,现场还有豪华开发者大礼包赠送!欢迎大家到现场交流!

报名链接:

http://www.huodongxing.com/event/2438574522700



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

玩客云托管|有令币|关于我们|谜恋猫|商务合作|区块链游戏  

GMT+8, 2018-10-18 22:36 , Processed in 0.222243 second(s), 5 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表