区块链新思维迅雷同构多链架构实现百万TPS

 

区块链新思维迅雷同构多链架构实现百万TPS

                 --学习迅雷链总工程师来鑫笔记

今天跟大家介绍迅雷链的同构多链框架,介绍框架之前会先从整体介绍迅雷链的模块组成、迅雷连的整体架构,方便大家理解,也为我们后面机器的分享做铺垫。

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

 

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

一。应用层

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

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

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

 

二。服务层

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

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

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

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

 

三。基础层

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

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

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

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

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

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

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

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

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

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

11.通用模块。因为账户模型里要存储的数据信息相对较多,而且随着时间推移,链的长度也越来越大,所以数据落盘前需要压缩。事件机制抓哟是为外围系统提供链上执行合约、链上区块产生等底层支持。

 

了解完迅雷链的系统构成后,我们看一个上链请求的执行过程,方便大家理解迅雷的同构多链框架。

 

 

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

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

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

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

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

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

      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导致占用大量资源,所以需要根据合约执行情况收取相应的手续费。

      手续费是需要重请求发起方的账户里面扣除的,而真正执行合约的是再合约所在的另一条链,所以最终需要的手续费具体值,再发起请求放所在链入链这笔请求的时候尚未可知,这怎么办呢?

 

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

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

 

最后要讲的是,整个体系如何水平扩展,也就是整体性能怎么实现想提高久提高。通过上面的介绍我们知道整体吞吐的提升,主要通过增加新链的方式,那么怎么能做到轻量地增加新链呢?

路由规则目前我们想着地是最检点直接地针对地址取模,比如针对1024取模,以为地址是根据公约经过hash运算出来地,整体是随机分布地,所以基本上所有用户会平均分布到这些链上。

当前有1024条链举例,编号为0-1023,地址取模结构是1、1025、2049、3073……会落到1号链。那么当我们想扩容到2048条链地时候,实际上原来每条链上地一半用户迁移到新链。新链启动时区块数据来自原来地链,比如1025号区块地数据来自原来地1号链,原来再1号链上地址取模为1025、3073、…..地用户数据之后会都落在1025这条链;而原来在1号链上地址取模为1、2049、…..地用户数据之后还在1号这条链上。通过这样地方式让扩链地整体变动最小化。

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

 

下面的问题解惑:

1. 数据压力大吗?日均产生多少数据?比传统分布式系统数据压力能大多少?

答:数据压力跟请求量有关,随着迅雷链上的应用越来越多,请求链会不断增大。

3.执行合约之后收到gas,系统如何处理?

答:收到的gas给了记账节点的coinbase

5.用户链和合约链的记账者(共识节点)都有谁参与?

答:目前都是迅雷可控的节点,包括玩客云

6.迅雷链开源了吗?另外经济系统是如何设计?如果吸引和驱动开发者在迅雷链的智能合约构建应用?

答:暂时还没有开源。主要通过链克作为激励机制。迅雷链上开发Dapp有很多优势:1.底层技术基础号,包括百万tps、秒级确认,适合企业ToC应用大规模使用;2.接入免费,相比传统中性化的开发模式,节省了服务器等成本;3.我们会提供很多扶持政策,包括投资孵化、开发指导、迅雷流量扶植等

 

7.采用多链就是为了性能吗?还是有更多其它考虑?普通链和合约链有什么本质区别?现在都有什么应用?以后会准备在什么方向上发展?远期远景是什么?

答:多链主要是解决性能问题,方便平行扩展。普通链和合约链也是同构的,跑的区块链程序是同一份,主要考虑是出于安全以及性能扩展,将合约的执行分开。现在的应用公益、基因、文化娱乐等。后面的发展方向是迅雷链作为底层基础平台,开放给各行各业使用。

 

8.整个系统有多个链构成的,写入区块链的节点,只负责一个链的对吧?

答:一个节点同时只会负责一个链

 

9.跨链的合约调用现在支持没有?

答:如果合约之间有调用关系可以部署在同一个链上,这个在合约发布的时候可以指定。

 

10.Gaslimit给的越高是不是越有限执行?

答:并不会

13.迅雷链是怎么实现接入层判定合法性的,并且还是在不同的请求发在不同的链上?

答:接入层的合法性校验,比如校验签名是否合法,这些过呢链本身关系不大。

 

14.数据最后都是必须记账到目标链上吗?就是图中的6没有解释,目标链是用户指定还是随机?

答:设计跨链请求,一定会在目标链记账。目标链是根据to地址进行取模,所以一笔请求目标链是固定的。

 

      16.执行合约之后收到的gas系统如何处理?收到的gas给了记账节点的coinbase,然后呢?这部分token算系统回收了?

      答:没有回收,这个收取手续费的地址是一个真实地址,是可以把链克转出来的

 

17 .跨链的合约调用现在支持没有?比如链A的合约X,链B的合约Y,调用关系是X->Y,如果X执行一些逻辑后,再执行Y逻辑,再回来执行X后续逻辑,如何完成事务性?

答:这个目前还不支持。

 

18.每条链的数据都一样吗?

答:每条链的树都不一样,只有这条链的相关的数据

 

22.执行分开,合约链上的合约是用户请求后再调度运行的吧?动态绑定实现的吧?

答:合约提前部署及创建再链上,合约的执行都是由用户发起请求触发的 。

 

 

总结一点,可能不对:多链取模,实现百万并发


发布了51 篇原创文章 · 获赞 19 · 访问量 10万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览