CN115720238B - 一种支持高并发的区块链请求处理系统与方法 - Google Patents
一种支持高并发的区块链请求处理系统与方法 Download PDFInfo
- Publication number
- CN115720238B CN115720238B CN202211065485.3A CN202211065485A CN115720238B CN 115720238 B CN115720238 B CN 115720238B CN 202211065485 A CN202211065485 A CN 202211065485A CN 115720238 B CN115720238 B CN 115720238B
- Authority
- CN
- China
- Prior art keywords
- worker
- job
- pool
- module
- request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012545 processing Methods 0.000 title claims abstract description 89
- 238000000034 method Methods 0.000 title claims abstract description 72
- 230000008569 process Effects 0.000 claims abstract description 42
- 230000003139 buffering effect Effects 0.000 claims description 20
- 230000006870 function Effects 0.000 claims description 11
- 230000000903 blocking effect Effects 0.000 claims description 8
- 238000003672 processing method Methods 0.000 claims description 6
- 230000002618 waking effect Effects 0.000 claims description 6
- 238000004458 analytical method Methods 0.000 claims description 5
- 230000003993 interaction Effects 0.000 claims description 4
- 230000007246 mechanism Effects 0.000 claims description 4
- 230000001360 synchronised effect Effects 0.000 claims description 4
- 238000004891 communication Methods 0.000 claims description 2
- 239000004744 fabric Substances 0.000 claims description 2
- 238000013461 design Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种支持高并发的区块链请求处理系统与方法,包括缓冲模块、提交模块、区块链模块;所述缓冲模块负责接收、初步处理、缓存任务请求;提交模块负责进一步处理数据,并将部分任务提交到区块链模块当中,区块链模块负责保障数据安全,并能够一次性接收处理大量任务。本发明能够并发处理大量的请求,根据请求者的身份信息、请求的服务类型、服务对象名称以及操作类型,进行不同的操作。
Description
技术领域
本发明属于区块链技术领域,具体涉及一种支持高并发的区块链请求处理系统与方法。
背景技术
对于应用了区块链的计算机系统,为了保证交易事务性,交易是串行进行的。区块链节点会先对交易排序,然后以单线程的方式执行智能合约,以避免乱序执行导致的事务混乱、数据冲突等。并且为了达到区块链节点间的共识,在区块链中所有的交易数据,都会通过共识机制框架驱动,在网络上广播出去,由所有的节点运行多步复杂的验算和表决,大多数节点认可的数据,才会落地确认。
以上这些特点是由区块链的特性决定的,虽然这些特点保障了区块链系统的一致性与可靠性,但是无论是单线程执行智能合约还是节点达成一致的过程都极大的限制了区块链的吞吐量与响应速度。这使区块链无法应用到一些要求及时响应的环境当中。因此如何针对区块链的特点,提高区块链并发响应量,是区块链研究的重点之一。
CN113986961B通过消息队列排列与多机协同的方式有效提高了系统的并发量。但是区块链采用单线程的方式运行已经排序好的交易,因此在区块链环境下采用此方法不能达到其所述多机协同的效果。此外由于区块链节点间达成共识需要消耗一定的时间,过多的节点反而会导致系统响应速度下降。因此,此方法并不适用于基于区块链的系统环境。
CN113726828A需要建立区块链网关并用到其提出的MBFT共识算法。而对于已经部署共识算法的区块链系统,若想要采用该方法,需要重新部署共识算法并建立区块链网关。这个过程将会非常困难,对于一些系统来说是无法接受的。因此该方法适用性较低。
发明内容
为了克服上述现有技术存在的不足,本发明的目的在于提供一种支持高并发的区块链请求处理系统与方法,能够并发处理大量的请求,根据请求者的身份信息(Pid)、请求的服务类型(SvcType)、服务对象名称(SvcName)以及操作类型(Operate),进行不同的操作。
为了实现上述目的,本发明采用的技术方案是:
一种支持高并发的区块链请求处理系统,包括缓冲模块、提交模块和区块链模块;
所述缓冲模块负责接收、初步处理、缓存任务请求;提交模块负责进一步处理数据,并将部分任务提交到区块链模块当中,区块链模块负责保障数据安全,并能够一次性接收处理大量任务;
任务请求是系统对外提供微服务的接口,外部根据接口要求发送http请求以获取服务,一条http请求称为一个任务;
进一步处理数据是提交模块以多协程的方式调度任务,并根据不同的任务内容提供不同的服务;
部分任务指需要调度区块链智能合约的任务,不需要调度区块链智能合约,在提交模块处理完毕。
所述缓冲模块用于接收系统外部的请求,对请求进行初步的解析与处理,并且将请求放入缓冲池等待进一步的处理;缓冲模块由接收与处理子模块、工作池子模块,具体功能如下:
1)接收与处理子模块:
当系统中的服务器接收到外部传来的http请求时,首先由接收与处理子模块对请求进行初步处理,处理的结果被保存为一个特定的结构体(Job),之后再将此结构体放入到工作池中等待进一步的处理;
2)工作池子模块:
在系统开始运行之初创建关于结构体Job通道,称为总工作池,总工作池中预设了大量的缓冲空间,使系统能够接收足够多的外部请求而不会丢失,工作池将会暂存Job信息,等待进一步的处理。
将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函数中创建,即系统运行之处创建完毕,由所有协程共享;
所述提交模块负责将Job从工作池中批量读取出来,并将部分Job的请求内容以交易的形式提交到区块链进行进一步的处理,接收到区块链模块的处理结果后,根据Job当中的Context对http请求进行响应,通过Waitgroup唤醒Job对应的缓冲模块的协程,提交模块由调度人子模块、工人子模块构成,具体功能如下:
1)工人子模块:
此模块由在系统开始运行时创建的多个工人协程构成,每个协程中对应一个关于Job结构体的通道,称为工作池,工作池预设一定数量的缓冲空间,用于缓冲正在处理的Job,同时每个工人协程都持有区块链智能合约的地址,这使得每个工人协程能够调用区块链智能合约所提供的接口;
系统运行之初(系统Main方法里)会创建N+1个协程,协程根据Go语言提供的gofunc()接口来创建,func表示此协程需要执行的方法;
其中N个协程称为工人协程,负责根据Job的内容提供不同的服务,每一个工人协程都创建了一个通道作为缓冲空间,里面可以缓冲一定数量的Job,这样的缓冲空间称为工作池,工作池的创建方法与总工作池相似,workerQueue:=make(chan Job,QueueSize),其中workerQueue表示工作池实例,QueueSize表示一定数量的缓冲空间,用于缓冲Job,工作池与工人协程一一对应,工人协程处理对应工作池中的Job;
另一个协程称为调度人协程,负责读取总工作池中的Job,并将Job放入空闲的工人协程的工作池,为了方便调度人协程完成Job的调度,需要对一些信息进行记录;信息包括:总工作池的地址、工人协程的数量以及一个关于Job的双重通道,将这些信息一一赋值到一个结构体内部,称为调度人结构体,其中关于Job的双重通道用来缓冲当前空闲的工人协程对应的工作池,由于其缓冲的数据类型是一个通道(工作池是关于Job的通道),因需要采用双重通道的结构,称为工人池(工人池的详细作用见本节调度人子模块);工人池随着调度人协程一起创建,工人池的创建方法与工作池的创建类似,都需要调用Go语言通道创建的接口,具体创建方法如下:workerPool:=make(chan chan Job,maxWorkers)。workerPool表示工人池实例,chan chan Job表示工人池是关于Job的双重通道,maxWorkers规定了工人池的容量,其大小取决于工人协程总数量;
2)调度人子模块:
此模块由在系统开始运行时创建的一个调度人结构体构成,此结构体中包含着总工作池的地址、工人协程的数量以及一个关于结构体Job的双重通道(称为工人池),工人池的容量大小取决于工人协程总数量;
所述工人子模块中,一个工人协程当其工作池为空时,会进入阻塞状态,直到工作池加入新的Job,当其工作池不为空时,会读取工作池中全部的Job进行处理,具体处理过程分为两个部分进行;
第一部分,对于不需要调度区块链智能合约的一些Job请求,直接在服务器节点进行处理,并不需要与区块链节点进行交互,工人协程按照其Job的内容(包括服务类型、操作类型等),进行处理,并将处理结果进行记录;
第二部分,对于需要调度区块链智能合约,工人协程对每个需要与区块链节点进行交互的请求添加到一个Job数组当中,工人协程在依次处理完工作池中的其他Job之后,将Job数组转换为符合区块链智能合约接口的格式;
在全部Job都处理完成之后,工人协程首先会根据各个Job的http环境信息(Context)对各个http请求进行响应,接着通过各个Job的Waitgroup唤醒Job对应的缓冲模块的协程,最后清空工人协程工作池中的全部Job,并重新加入到调度人的工人池当中,进入阻塞状态,等待唤醒。
所述调度人子模块中,工人池的第一层通道用于缓冲当前空闲的工人协程对应的工作池,第二层通道用于缓冲Job,工人池作用是缓冲当前空闲的工人协程,并获得工人协程对应的工作池地址,当工人池不为空且总工作池中存在足量任务时,弹出一个工作池,将Job放入到对应的工作池当中,工人协程此时进入工作状态,按照工人子模块所述方式处理任务。并且由于其工作池已经被弹出,所以调度人也不会再将Job放入其中,直到工人协程完成任务后重新加入到调度人的工人池当中,准备执行下一次的任务。
系统开始时会创建一个调度人协程,该协程从创建开始就执行以下步骤:
若总工作池Job数量不足100(可根据系统要求进行调整)或工人池为空时,协程阻塞;
若总工作池Job数量不少于100并且工人池不为空时,调度人协程从总工作中取出100数量的Job,并从工人池弹出一个工人的工作池,将Job放入其中。
所述区块链模块包含多个区块链节点,以区块链的特性建立信任机制,保障数据安全。在区块链中包含了至少一个智能合约,该智能合约能够批量接收并处理提交到区块链中的请求,并将请求结果一次性全部返回,本模块由接收子模块、处理子模块构成。具体功能如下:
1)接收子模块:智能合约的接口能够一次性接收大量的任务请求,接口数据类型应该与提交模块中提交的请求相符,在接收完成后需要对任务请求进行解析;
2)处理子模块;此模块根据不同的任务内容,调用不同方法来完成任务,完成任务后将处理结果一次性全部返回给提交模块。
一种支持高并发的区块链请求处理系统的处理方法,包括以下步骤;
当系统接收到外部传来的http请求时,首先由接收与处理子模块解析请求当中的内容,请求内容包括:请求者的身份信息(Pid)、请求的服务类型(SvcType)、服务对象名称(SvcName)以及操作类型(Operate),将这些信息以及http的环境信息(Context)还有同步等待变量(Waitgroup)一起转换为Job结构体,将Job放入总工作池中,并通过Waitgroup将处理该请求的协程进行阻塞,当Job被成功处理完毕后,该协程将被唤醒,并将请求相关的缓冲信息清空,释放占有的计算机资源;
调度人等待总工作池中的Job数量达到100并且存在空闲的工人协程的条件,到达条件之后,调度人将任务交给工人协程完成,工人协程对任务进行处理,包括调度区块链智能合约。工人协程完成工作后,清空工作池缓冲,重新加入工人池,进入阻塞状态,等待唤醒,调度人继续等待条件;
区块链智能合约接收到提交模块传来的任务请求,首先对任务请求进行初步的解析得到一个任务数组,依次对数组中的任务进行处理,根据任务内容不同处理的方法也不一致,处理结束后,将结果进行打包返回给提交模块。
本发明的有益效果:
支持区块链系统。本发明对区块链系统的特性进行了分析,提出了支持高并发的区块链请求处理方法。该方法通过缓冲请求、减少应用程序与区块链智能合约之间的交互次数,有效提高区块链系统的并发处理能力。
部署方便,适用性强。系统部署不需要修改区块链的共识算法,只需要添加智能合约接口,使之满足一次性接收与返回传来的任务请求。对于绝大部分已有区块链系统来说,这并不困难,因此具有较强的适用性。
系统工作效率提高显著,并发能力强。实验结果表明,存在大量并发请求时,未使用此方法之前区块链网络可能会因大量任务同时到达而崩溃。使用此方法之后由于在缓冲模块、提交模块部分创建了的多级缓冲区,减轻了区块链模块的压力,使得区块链网络能够长期正常运行,提升了执行效率。此外,在并发请求数量较小时,相较未使用此方法,系统的吞吐量也显著提升。
附图说明
图1为本发明提出的支持高并发的区块链请求处理系统架构图。
图2为本发明提出的支持高并发的区块链请求处理系统缓冲模块流程图。
图3为本发明提出的支持高并发的区块链请求处理系统提交模块详细架构图。
图4为本发明提出的支持高并发的区块链请求处理系统提交模块流程图。
图5为本发明提出的支持高并发的区块链请求处理系统区块链模块流程图。
具体实施方式
下面结合附图对本发明作进一步详细说明。
考虑到Go语言在云计算与高并发方面的优越性,本发明系统使用Go语言设计实现。其中涉及到Go语言协程(goroutine)与通道(channel)等相关概念。
本发明设计了一种支持高并发的区块链请求处理系统与方法。图1所示,本发明的系统架构由缓冲模块、提交模块、区块链模块组成。其中缓冲模块负责接收、初步处理、缓存任务请求。提交模块负责进一步处理数据,并将部分任务提交到区块链当中。区块链模块负责保障数据安全,并能够一次性接收处理大量任务。具体的实施包括以下几个部分:
1.缓冲模块
1)缓冲模块用于接收系统外部的请求,对这些请求进行初步的解析与处理。并且将这些请求放入到缓冲池当中等待进一步的处理。缓冲模块由接收与处理子模块、工作池子模块,具体功能如下:
接收与处理子模块。
当系统中的服务器接收到外部传来的http请求时,首先由接收与处理子模块对请求进行初步处理。处理的结果将会被保存为一个特定的结构体(Job)。之后再将此结构体放入到工作池中等待进一步的处理。
2)工作池子模块。
在系统开始运行之初创建了的一个关于结构体Job通道,称为总工作池。总工作池中预设了大量的缓冲空间,使系统能够接收足够多的外部请求而不会丢失。工作池将会暂存Job信息,等待进一步的处理。
如图2所示,缓冲模块的整体工作流程如下:
当系统接收到外部传来的http请求时,首先由接收与处理子模块解析请求当中的内容。在本系统中,请求内容包括:请求者的身份信息(Pid)、请求的服务类型(SvcType)、服务对象名称(SvcName)以及操作类型(Operate)。将这些信息以及http的环境信息(Context)还有同步等待变量(Waitgroup)一起转换为Job结构体。将Job放入总工作池中,并通过Waitgroup将处理该请求的协程进行阻塞。当Job被成功处理完毕后,该协程将被唤醒,并将请求相关的缓冲信息清空,释放占有的计算机资源。
2.提交模块
提交模块负责将Job从工作池中批量读取出来,并将部分Job的请求内容以交易的形式提交到区块链当中进行进一步的处理。接收到区块链的处理结果后,会根据Job当中的Context对http请求进行响应,通过Waitgroup唤醒Job对应的缓冲模块的协程。提交模块由调度人子模块、工人子模块构成。具体功能如下:
1)工人子模块。
如图3所示,此模块由在系统开始运行时创建的多个工人协程构成。每个协程中对应一个关于Job结构体的通道,称为工作池。工作池预设一定数量的缓冲空间,用于缓冲正在处理的Job。同时每个工人协程都持有区块链智能合约的地址,这使得每个工人协程能够调用区块链智能合约所提供的接口。
一个工人协程当其工作池为空时,会进入阻塞状态,直到工作池加入新的Job。当其工作池不为空时,会读取工作池中全部的Job进行处理。具体处理过程分为两个部分进行。
第一部分,不需要调度区块链智能合约。一些Job请求,可以直接在服务器节点进行处理,并不需要与区块链节点进行交互。对于这些请求,工人协程按照其Job的内容(包括服务类型、操作类型等),进行处理,并将处理结果进行记录。
第二部分,需要调度区块链智能合约。工人协程对每个需要与区块链节点进行交互的请求添加到一个Job数组当中。工人协程在依次处理完工作池中的其他Job之后,将Job数组转换为符合区块链智能合约接口的格式。例如在本系统中,将Job数组的各项内容(Pid、SvcType、SvcName、Operate)转换为JSON格式的字符串。智能合约的接口需要保证所有Job的数据能够一次性全部传输完毕。智能合约处理完Job之后将处理结果返回到工人协程当中。
在全部Job都处理完成之后,工人协程首先会根据各个Job的http环境信息(Context)对各个http请求进行响应,接着通过各个Job的Waitgroup唤醒Job对应的缓冲模块的协程,最后清空工人协程工作池中的全部Job,并重新加入到调度人的工人池当中,进入阻塞状态,等待唤醒。
2)调度人子模块。
如图3所示,此模块由在系统开始运行时创建的一个调度人结构体构成。此结构体中包含着总工作池的地址、工人协程的数量以及一个关于结构体Job的双重通道(称为工人池),工人池的容量大小取决于工人协程总数量。
工人池的第一层通道用于缓冲当前空闲的工人协程对应的工作池,第二层通道用于缓冲Job。工人池作用是缓冲当前空闲的工人协程,并获得工人协程对应的工作池地址。当工人池不为空且总工作池中存在足量任务时,弹出一个工作池,将Job放入到对应的工作池当中。工人协程此时进入工作状态,按照工人子模块所述方式处理任务。并且由于其工作池已经被弹出,所以调度人也不会再将Job放入其中。直到工人协程完成任务后重新加入到调度人的工人池当中,准备执行下一次的任务。
此外系统开始时会创建一个调度人协程。该协程从创建开始就执行以下步骤:
若总工作池Job数量不足100(可根据系统要求进行调整)或工人池为空时,协程阻塞。
若总工作池Job数量不少于100并且工人池不为空时,调度人协程从总工作中取出100数量的Job,并从工人池弹出一个工人的工作池,将Job放入其中。
如图4所示,提交模块的整体工作流程如下:
调度人等待总工作池中的Job数量达到100并且存在空闲的工人协程的条件。到达条件之后,调度人将任务交给工人协程完成。工人协程对任务进行处理,包括调度区块链智能合约。工人协程完成工作后,清空工作池缓冲,重新加入工人池,进入阻塞状态,等待唤醒。调度人继续等待条件。
3.区块链模块
该模块包含多个区块链节点,以区块链的特性建立信任机制,保障数据安全。在区块链中包含了至少一个智能合约,该智能合约能够批量接收并处理提交到区块链中的请求,并将请求结果一次性全部返回。本模块由接收子模块、处理子模块构成。具体功能如下:
1)接收子模块。智能合约的接口能够一次性接收大量的任务请求,接口数据类型应该与提交模块中提交的请求相符。在接收完成后需要对任务请求进行解析。例如在本系统中,提交模块提交了JSON格式的字符串,智能合约接收到字符串后进行解析,可以得到一个任务数组(每个任务内容包括:Pid、SvcType、SvcName、Operate)。解析完成后将其交给处理子模块。
2)处理子模块。此模块根据不同的任务内容,调用不同方法来完成任务。完成任务后将处理结果一次性全部返回给提交模块。例如在本系统中,根据任务的Pid判断是否有操作权限。根据SvcType、SvcName读取不同数据库。根据Operate执行不同操作。在完成任务后,将得到的全部结果再次转换成JSON格式字符串,最后返回给提交模块。
如图5所示,区块链模块具体工作流程如下:
区块链智能合约接收到提交模块传来的任务请求。首先对任务请求进行初步的解析得到一个任务数组。依次对数组中的任务进行处理,根据任务内容不同处理的方法也不一致。处理结束后,将结果进行打包返回给提交模块。
本发明设计了一种支持高并发的区块链请求处理方法,系统架构由缓冲模块、提交模块、区块链模块组成。其中缓冲模块负责接收、初步处理、存储任务请求。提交模块负责进一步处理数据,将部分任务提交到区块链当中。区块链模块负责保障数据安全,并能够一次性接收处理大量任务。
本发明基于上述方法,设计实现了一个满足高并发需求的区块链请求处理系统。该系统能够并发处理大量的请求,根据请求者的身份信息(Pid)、请求的服务类型(SvcType)、服务对象名称(SvcName)以及操作类型(Operate),进行不同的操作。
Claims (4)
1.一种支持高并发的区块链请求处理系统,其特征在于,包括缓冲模块、提交模块和区块链模块;
所述缓冲模块负责接收、初步处理、缓存任务请求;提交模块负责进一步处理数据,并将部分任务提交到区块链模块当中,区块链模块负责保障数据安全,并能够一次性接收处理大量任务;
任务请求是系统对外提供微服务的接口,外部根据接口要求发送http请求以获取服务,一条http请求称为一个任务;
进一步处理数据是提交模块以多协程的方式调度任务,并根据不同的任务内容提供不同的服务;
部分任务指需要调度区块链智能合约的任务,不需要调度区块链智能合约,在提交模块处理完毕;
所述缓冲模块用于接收系统外部的请求,对请求进行初步的解析与处理,并且将请求放入缓冲池等待进一步的处理;缓冲模块由接收与处理子模块、工作池子模块,具体功能如下:
1)接收与处理子模块:
当系统中的服务器接收到外部传来的http请求时,首先由接收与处理子模块对请求进行初步处理,处理的结果被保存为一个特定的结构体,之后再将此结构体放入到工作池中等待进一步的处理;
2)工作池子模块:
在系统开始运行之初创建关于结构体Job通道,称为总工作池,总工作池中预设了大量的缓冲空间,使系统能够接收足够多的外部请求而不会丢失,工作池将会暂存Job信息,等待进一步的处理;
所述提交模块负责将Job从工作池中批量读取出来,并将部分Job的请求内容以交易的形式提交到区块链进行进一步的处理,接收到区块链模块的处理结果后,根据Job当中的Context对http请求进行响应,通过Waitgroup唤醒Job对应的缓冲模块的协程,提交模块由调度人子模块、工人子模块构成,具体功能如下:
1)工人子模块:
此模块由在系统开始运行时创建的多个工人协程构成,每个协程中对应一个关于Job结构体的通道,称为工作池,工作池预设一定数量的缓冲空间,用于缓冲正在处理的Job,同时每个工人协程都持有区块链智能合约的地址,这使得每个工人协程能够调用区块链智能合约所提供的接口;系统运行之初会创建N+1个协程,协程根据Go语言提供的go func()接口来创建,func表示此协程需要执行的方法;
其中N个协程称为工人协程,负责根据Job的内容提供不同的服务,每一个工人协程都创建了一个通道作为缓冲空间,里面可以缓冲一定数量的Job,这样的缓冲空间称为工作池,工作池的创建方法与总工作池相似,workerQueue:=make(chan Job,QueueSize),其中workerQueue表示工作池实例,QueueSize表示一定数量的缓冲空间,用于缓冲Job,工作池与工人协程一一对应,工人协程处理对应工作池中的Job;
另一个协程称为调度人协程,负责读取总工作池中的Job,并将Job放入空闲的工人协程的工作池,为了方便调度人协程完成Job的调度,需要对一些信息进行记录;信息包括:总工作池的地址、工人协程的数量以及一个关于Job的双重通道,将这些信息一一赋值到一个结构体内部,称为调度人结构体,其中关于Job的双重通道用来缓冲当前空闲的工人协程对应的工作池,由于其缓冲的数据类型是一个通道,因需要采用双重通道的结构,称为工人池;工人池随着调度人协程一起创建,工人池的创建方法与工作池的创建类似,都需要调用Go语言通道创建的接口,具体创建方法如下:workerPool:=make(chan chan Job,maxWorkers);workerPool表示工人池实例,chan chan Job表示工人池是关于Job的双重通道,maxWorkers规定了工人池的容量,其大小取决于工人协程总数量;
2)调度人子模块:
此模块由在系统开始运行时创建的一个调度人结构体构成,此结构体中包含着总工作池的地址、工人协程的数量以及一个关于结构体Job的双重通道,工人池的容量大小取决于工人协程总数量;
所述工人子模块中,一个工人协程当其工作池为空时,会进入阻塞状态,直到工作池加入新的Job,当其工作池不为空时,会读取工作池中全部的Job进行处理,具体处理过程分为两个部分进行;
第一部分,对于不需要调度区块链智能合约的一些Job请求,直接在服务器节点进行处理,并不需要与区块链节点进行交互,工人协程按照其Job的内容,进行处理,并将处理结果进行记录;
第二部分,对于需要调度区块链智能合约,工人协程对每个需要与区块链节点进行交互的请求添加到一个Job数组当中,工人协程在依次处理完工作池中的其他Job之后,将Job数组转换为符合区块链智能合约接口的格式;
在全部Job都处理完成之后,工人协程首先会根据各个Job的http环境信息对各个http请求进行响应,接着通过各个Job的Waitgroup唤醒Job对应的缓冲模块的协程,最后清空工人协程工作池中的全部Job,并重新加入到调度人的工人池当中,进入阻塞状态,等待唤醒;
所述调度人子模块中,工人池的第一层通道用于缓冲当前空闲的工人协程对应的工作池,第二层通道用于缓冲Job;工人池的作用是缓冲当前空闲的工人协程,并获得工人协程对应的工作池地址,当工人池不为空且总工作池中存在足量任务时,弹出一个工作池,将Job放入到对应的工作池当中,工人协程此时进入工作状态,按照工人子模块所述方式处理任务,并且由于其工作池已经被弹出,所以调度人也不会再将Job放入其中,直到工人协程完成任务后重新加入到调度人的工人池当中,准备执行下一次的任务;
系统开始时会创建一个调度人协程,该协程从创建开始就执行以下步骤:
若总工作池Job数量不足100或工人池为空时,协程阻塞;
若总工作池Job数量不少于100并且工人池不为空时,调度人协程从总工作中取出100数量的Job,并从工人池弹出一个工人的工作池,将Job放入其中。
2.根据权利要求1所述的一种支持高并发的区块链请求处理系统,其特征在于,将http请求保存为Job的方法:
http请求中包含请求者的身份信息、请求的服务类型、服务对象名称以及操作类型,工作池子模块将这些信息从http请求中解析出来后,将这些信息以及http的环境信息还有同步等待变量,一一赋值到Job结构体的成员变量;
所述结构体Job涉及到Go语言中的协程与通道的相关概念;
协程是一种轻量级的线程,协程切换的时候只需消耗很少的计算机资源,有利于高并发系统的实现;
通道是协程间通信的工具,当一个协程将变量放入通道后,另一个协程可以将通道中的变量取出;通道可以设置容量大小,并且占用内存较少,作为缓冲空间;
Go语言提供了创建通道的结构,通道实例:=make(chan数据类型,通道容量),在本系统中创建总工作池通道的方式如下:
jobQueue:=make(chan Job,maxQueueSize)
jobQueue表示总工作池实例,chan Job表示创建关于Job结构体的通道,maxQueueSize设置了通道容量大小,也是缓冲空间大小;本系统中maxQueueSize为足够大的整数,以确保总工作池的缓冲空间足够大;
总工作池在系统Main函数中创建,即系统运行之处创建完毕,由所有协程共享。
3.根据权利要求1所述的一种支持高并发的区块链请求处理系统,其特征在于,所述区块链模块包含多个区块链节点,以区块链的特性建立信任机制,保障数据安全;在区块链中包含了至少一个智能合约,该智能合约能够批量接收并处理提交到区块链中的请求,并将请求结果一次性全部返回,本模块由接收子模块、处理子模块构成;具体功能如下:
1)接收子模块:智能合约的接口能够一次性接收大量的任务请求,接口数据类型应该与提交模块中提交的请求相符,在接收完成后需要对任务请求进行解析;
2)处理子模块;此模块根据不同的任务内容,调用不同方法来完成任务,完成任务后将处理结果一次性全部返回给提交模块。
4.基于权利要求1-3任一项所述的一种支持高并发的区块链请求处理系统的处理方法,其特征在于,包括以下步骤;
当系统接收到外部传来的http请求时,首先由接收与处理子模块解析请求当中的内容,请求内容包括:请求者的身份信息、请求的服务类型、服务对象名称以及操作类型,将这些信息以及http的环境信息还有同步等待变量一起转换为Job结构体,将Job放入总工作池中,并通过Waitgroup将处理该请求的协程进行阻塞,当Job被成功处理完毕后,该协程将被唤醒,并将请求相关的缓冲信息清空,释放占有的计算机资源;
调度人等待总工作池中的Job数量达到100并且存在空闲的工人协程的条件,到达条件之后,调度人将任务交给工人协程完成,工人协程对任务进行处理,包括调度区块链智能合约,工人协程完成工作后,清空工作池缓冲,重新加入工人池,进入阻塞状态,等待唤醒,调度人继续等待条件;
区块链智能合约接收到提交模块传来的任务请求,首先对任务请求进行初步的解析得到一个任务数组,依次对数组中的任务进行处理,根据任务内容不同处理的方法也不一致,处理结束后,将结果进行打包返回给提交模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211065485.3A CN115720238B (zh) | 2022-09-01 | 2022-09-01 | 一种支持高并发的区块链请求处理系统与方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211065485.3A CN115720238B (zh) | 2022-09-01 | 2022-09-01 | 一种支持高并发的区块链请求处理系统与方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115720238A CN115720238A (zh) | 2023-02-28 |
CN115720238B true CN115720238B (zh) | 2024-04-02 |
Family
ID=85254010
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211065485.3A Active CN115720238B (zh) | 2022-09-01 | 2022-09-01 | 一种支持高并发的区块链请求处理系统与方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115720238B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107241279A (zh) * | 2017-06-22 | 2017-10-10 | 北京天德科技有限公司 | 一种基于多级缓冲队列的区块链交易限流方法 |
CN111046102A (zh) * | 2019-11-27 | 2020-04-21 | 复旦大学 | 基于以太坊的高性能区块链服务系统 |
CN111625593A (zh) * | 2020-04-21 | 2020-09-04 | 金蝶软件(中国)有限公司 | 基于区块链的数据处理方法、装置、计算机设备 |
CN111831674A (zh) * | 2020-06-29 | 2020-10-27 | 山大地纬软件股份有限公司 | 一种区块链节点、系统及数字资料副本分配方法 |
CN113419823A (zh) * | 2021-06-22 | 2021-09-21 | 东北大学 | 一种适用于高并发事务的联盟链系统及其设计方法 |
CN113485840A (zh) * | 2021-07-27 | 2021-10-08 | 中国银行股份有限公司 | 基于Go语言的多任务并行处理装置及方法 |
CN113691611A (zh) * | 2021-08-23 | 2021-11-23 | 湖南大学 | 一种区块链的分布式高并发事务处理方法及系统、设备、存储介质 |
CN113726828A (zh) * | 2020-05-25 | 2021-11-30 | 北京北信源软件股份有限公司 | 一种支持微服务的高并发的可信区块链系统及方法 |
-
2022
- 2022-09-01 CN CN202211065485.3A patent/CN115720238B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107241279A (zh) * | 2017-06-22 | 2017-10-10 | 北京天德科技有限公司 | 一种基于多级缓冲队列的区块链交易限流方法 |
CN111046102A (zh) * | 2019-11-27 | 2020-04-21 | 复旦大学 | 基于以太坊的高性能区块链服务系统 |
CN111625593A (zh) * | 2020-04-21 | 2020-09-04 | 金蝶软件(中国)有限公司 | 基于区块链的数据处理方法、装置、计算机设备 |
CN113726828A (zh) * | 2020-05-25 | 2021-11-30 | 北京北信源软件股份有限公司 | 一种支持微服务的高并发的可信区块链系统及方法 |
CN111831674A (zh) * | 2020-06-29 | 2020-10-27 | 山大地纬软件股份有限公司 | 一种区块链节点、系统及数字资料副本分配方法 |
CN113419823A (zh) * | 2021-06-22 | 2021-09-21 | 东北大学 | 一种适用于高并发事务的联盟链系统及其设计方法 |
CN113485840A (zh) * | 2021-07-27 | 2021-10-08 | 中国银行股份有限公司 | 基于Go语言的多任务并行处理装置及方法 |
CN113691611A (zh) * | 2021-08-23 | 2021-11-23 | 湖南大学 | 一种区块链的分布式高并发事务处理方法及系统、设备、存储介质 |
Non-Patent Citations (3)
Title |
---|
Performance Tuning and Scaling Enterprise Blockchain Applications;Grant Chung et al.;Computer Science;20191224;全文 * |
基于区块链的海量连接管理架构设计与实现;王子恒;《中国优秀硕士学位论文全文数据库》;20220315;全文 * |
移动边缘计算中元数据多方安全检索方法研究;刘奇;《中国优秀硕士学位论文全文数据库》;20220822;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN115720238A (zh) | 2023-02-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11782870B2 (en) | Configurable heterogeneous AI processor with distributed task queues allowing parallel task execution | |
CN106293919B (zh) | 一种时间触发的嵌入式任务调度装置与方法 | |
CN111736987B (zh) | 一种基于gpu空间资源共享的任务调度方法 | |
CN101894047B (zh) | 一种基于内核虚拟机调度策略的实现方法 | |
CN108710535A (zh) | 一种基于智能处理器的任务调度系统 | |
CN110377406A (zh) | 一种任务调度方法、装置、存储介质和服务器节点 | |
CN112465129A (zh) | 片内异构人工智能处理器 | |
Brandenburg | Multiprocessor real-time locking protocols | |
JP2003518286A (ja) | キューイングされた作業アイテムを実施するための再利用可能スレッドのプールを提供するためのシステムおよび方法 | |
CN107203560B (zh) | 数据库、多数据库操作事务一致性保证方法及系统 | |
CN103500119B (zh) | 一种基于预调度的任务分配方法 | |
CN102495722A (zh) | 多核分片xml并行解析方法 | |
CN115480904B (zh) | 微内核中系统服务并发调用方法 | |
CN110471777A (zh) | 一种Python-Web环境中多用户共享使用Spark集群的实现方法和系统 | |
CN110187956A (zh) | 一种多智能体平台的分层实时任务调度方法和系统 | |
Li et al. | Task scheduling algorithm for heterogeneous real-time systems based on deadline constraints | |
CN111158875B (zh) | 基于多模块的多任务处理方法、装置及系统 | |
CN116010064A (zh) | Dag作业调度和集群管理的方法、系统及装置 | |
CN111400015A (zh) | 一种任务调度方法及装置 | |
CN115720238B (zh) | 一种支持高并发的区块链请求处理系统与方法 | |
CN102214094B (zh) | 经由异步编程模型执行操作 | |
CN112181689A (zh) | 一种在云端下进行gpu内核程序高效率调度的运行时系统 | |
CN101349975B (zh) | 一种在嵌入式操作系统上实现中断底半部机制的方法及装置 | |
US20190317827A1 (en) | Method and apparatus for managing kernel services in multi-core system | |
JP2004517424A (ja) | サーバーアーキテクチャー |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |