【技术实现步骤摘要】
一种支持高并发的区块链请求处理系统与方法
[0001]本专利技术属于区块链
,具体涉及一种支持高并发的区块链请求处理系统与方法。
技术介绍
[0002]对于应用了区块链的计算机系统,为了保证交易事务性,交易是串行进行的。区块链节点会先对交易排序,然后以单线程的方式执行智能合约,以避免乱序执行导致的事务混乱、数据冲突等。并且为了达到区块链节点间的共识,在区块链中所有的交易数据,都会通过共识机制框架驱动,在网络上广播出去,由所有的节点运行多步复杂的验算和表决,大多数节点认可的数据,才会落地确认。
[0003]以上这些特点是由区块链的特性决定的,虽然这些特点保障了区块链系统的一致性与可靠性,但是无论是单线程执行智能合约还是节点达成一致的过程都极大的限制了区块链的吞吐量与响应速度。这使区块链无法应用到一些要求及时响应的环境当中。因此如何针对区块链的特点,提高区块链并发响应量,是区块链研究的重点之一。
[0004]CN113986961B通过消息队列排列与多机协同的方式有效提高了系统的并发量。但是区块链采用单线程的方式运行已经排序好的交易,因此在区块链环境下采用此方法不能达到其所述多机协同的效果。此外由于区块链节点间达成共识需要消耗一定的时间,过多的节点反而会导致系统响应速度下降。因此,此方法并不适用于基于区块链的系统环境。
[0005]CN113726828A需要建立区块链网关并用到其提出的MBFT共识算法。而对于已经部署共识算法的区块链系统,若想要采用该方法,需要重新部署共识算法并建立区块链网 ...
【技术保护点】
【技术特征摘要】
1.一种支持高并发的区块链请求处理系统,其特征在于,包括缓冲模块、提交模块和区块链模块;所述缓冲模块负责接收、初步处理、缓存任务请求;提交模块负责进一步处理数据,并将部分任务提交到区块链模块当中,区块链模块负责保障数据安全,并能够一次性接收处理大量任务;任务请求是系统对外提供微服务的接口,外部根据接口要求发送http请求以获取服务,一条http请求称为一个任务;进一步处理数据是提交模块以多协程的方式调度任务,并根据不同的任务内容提供不同的服务;部分任务指需要调度区块链智能合约的任务,不需要调度区块链智能合约,在提交模块处理完毕。2.根据权利要求1所述的一种支持高并发的区块链请求处理系统,其特征在于,所述缓冲模块用于接收系统外部的请求,对请求进行初步的解析与处理,并且将请求放入缓冲池等待进一步的处理;缓冲模块由接收与处理子模块、工作池子模块,具体功能如下:1)接收与处理子模块:当系统中的服务器接收到外部传来的http请求时,首先由接收与处理子模块对请求进行初步处理,处理的结果被保存为一个特定的结构体(Job),之后再将此结构体放入到工作池中等待进一步的处理;2)工作池子模块:在系统开始运行之初创建关于结构体Job通道,称为总工作池,总工作池中预设了大量的缓冲空间,使系统能够接收足够多的外部请求而不会丢失,工作池将会暂存Job信息,等待进一步的处理。3.根据权利要求2所述的一种支持高并发的区块链请求处理系统,其特征在于,将http请求保存为Job的方法:http请求中包含请求者的身份信息(Pid)、请求的服务类型(SvcType)、服务对象名称(SvcName)以及操作类型(Operate),工作池子模块将这些信息从http请求中解析出来后,将这些信息以及http的环境信息(Context)还有同步等待变量(Waitgroup),一一赋值到Job结构体的成员变量(Job结构体包含成员:Pid、SvcType、SvcName、Operate、Context、Waitgroup)。所述结构体Job涉及到Go语言中的协程(goroutine)与通道(channel)的相关概念;协程是一种轻量级的线程,协程切换的时候只需消耗很少的计算机资源,有利于高并发系统的实现;通道是协程间通信的工具,当一个协程将变量放入通道后,另一个协程可以将通道中的变量取出。通道可以设置容量大小,并且占用内存较少,作为缓冲空间;Go语言提供了创建通道的结构,通道实例:=make(chan数据类型,通道容量),在本系统中创建总工作池通道的方式如下:jobQueue:=make(chan Job,maxQueueSize)jobQueue表示总工作池实例,chan Job表示创建关于Job结构体的通道,maxQueueSize设置了通道容量大小,也是缓冲空间大小。本系统中maxQueueSize为足够大的整数,以确保
总工作池的缓冲空间足够大。总工作池在系统Main函数中创建,即系统运行之处创建完毕,由所有协程共享;4.根据权利要求1所述的一种支持高并发的区块链请求处理系统,其特征在于,所述提交模块负责将Job从工作池中批量读取出来,并将部分Job的请求内容以交易的形式提交到区块链进行进一步的处理,接收到区块链模块的处理结果后,根据Job当中的Context对http请求进行响应,通过Waitgroup唤醒Job对应的缓冲模块的协程,提交模块由调度人子模块、工人子模块构成,具体功能如下:1)工人子模块:此模块由在系统开始运行时创建的多个工人协程构成,每个协程中对应一个关于Job结构体的通道,称为工作池,工作池预设一定数量的缓冲空间,用于缓冲正在处理的Job,同时每个工人协程都持有区块链智能合约的地址,这使得每个工人协程能够调用区块链智能合约所提供的接口;系统运行之初(系统Main方法里)会创建N+1个协程,协程根据Go语言提供的go func()接口来创建,func表示此协程需要执行的方法;其中N个协程称为工人协程,负责根据Job的内容提供不同的服务,每一个工人协程都创建了一个通道作为缓冲空间,里面可以缓冲一定数量的Job,这样的缓冲空间称为工作池,工作池的创建方法与总工作池相似,workerQueue:=make(chan Job,QueueSize),其中workerQueue表示工作池实例,QueueSize表示一定数量的缓冲空间,用于缓冲Job,工作池与工人协程一一对应,工人协程处理对应工作池中的Job;另一个协程称为调度人协程,负责读取总工作池中的Job,并将Job放入空闲的工人协程的工作池,为了方便调度人协程完成Job的调度,需要对一些信息进行记录;信息包括:总工作池的地址、工人协程的数量以及一个关于Job的双重通道,将这些信息一一赋值到一个结构体内部,称为调度人结构体,其中关于Job的双重通道用来缓冲当前空闲的工人协程对应的工作池,由于其缓冲的数据类型是一个...
【专利技术属性】
技术研发人员:覃伯君,习宁,曾辉祥,李雅洁,刘瑾,程珂,穆旭彤,沈玉龙,
申请(专利权)人:西安电子科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。