CN113168652B - 区块链交易处理系统和方法 - Google Patents
区块链交易处理系统和方法 Download PDFInfo
- Publication number
- CN113168652B CN113168652B CN202080006241.0A CN202080006241A CN113168652B CN 113168652 B CN113168652 B CN 113168652B CN 202080006241 A CN202080006241 A CN 202080006241A CN 113168652 B CN113168652 B CN 113168652B
- Authority
- CN
- China
- Prior art keywords
- blockchain
- transactions
- data
- blockchain transactions
- computer
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/062—Securing storage systems
- G06F3/0623—Securing storage systems in relation to content
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q2220/00—Business processing using cryptography
Abstract
本文公开了用于处理区块链交易的方法、系统和装置,包括编码在计算机存储介质上的计算机程序。所述方法之一包括:接收M个区块链交易,并且使用第一线程池的K个线程并行执行所述M个区块链交易中的N个区块链交易。第二线程池专用于访问存储在存储系统中的区块链数据。对于分配给K个线程中的每个线程的区块链交易,每个区块链交易使用一个或多个协程,使得区块链交易通过使用协程被异步地执行。生成区块链区块以包含M个区块链交易,并将该区块链区块添加到存储系统所存储的区块链中。
Description
技术领域
本文涉及处理区块链交易。
背景技术
随着区块链技术的快速发展,区块链技术的应用或服务场景不断扩展,例如,在司法认证、可追溯性、发票、供应链金融等方面。各种区块链服务生成的数据量也在快速增长。大规模区块链数据(例如,针对大规模账户生成的数据、针对单个账户的大量状态数据、以及针对单个区块链的大量区块数据)的处理和存储需要大量的计算机资源,例如运算/计算资源、存储资源和网络资源。此外,数据规模的增长,尤其是在区块链系统已长期运行之后,进一步增加了对计算资源的需求。
这样,需要一种更有效的处理区块链数据和处理区块链交易的方式,以满足各种区块链应用不断增长的需求。
发明内容
主题所描述的实施例可以单独地或组合地包括一个或多个特征。
例如,在一个实施例中,一种用于处理区块链交易的方法包括:接收要由区块链网络节点执行的M个区块链交易,其中,M是大于1的整数。当执行所述M个区块链交易时,所述区块链网络节点从所述M个区块链交易中识别出N个区块链交易,其中N小于或等于M。将所述N个区块链交易分配为由第一线程池的K个线程并行执行,其中,将所述N个区块链交易中的相应NK个区块链交易分配给相应的第K线程。然后,通过所述K个线程并行执行所述N个区块链交易。通过所述K个线程并行执行所述N个区块链交易包括:对于N个区块链交易中的分配给第一线程池中的第一线程的N1个区块链交易,识别P1个协程,其中P1大于或等于N1。通过异步地执行P1个协程来执行所述N1个区块链交易。异步地执行所述P1个协程包括使用第二线程池访问存储在存储子系统中的区块链数据。在执行所述M个区块链交易后,生成包含M个区块链交易的区块链区块,并将所述区块链区块添加到存储子系统内的区块链中。
在一些实施例中,这些一般和具体方面可以使用系统、方法或计算机程序或系统、方法和计算机程序的任何组合来实现。前述和其他描述的实施例可各自可选地包括以下方面中的一个或多个。
在一些实施例中,异步地执行所述P1个协程包括使用第二线程池访问存储在所述存储系统中的区块链数据,其中,所述第二线程池不同于所述第一线程池。
在一些实施例中,所述第二线程池专用于所述存储系统。
在一些实施例中,访问存储在所述存储系统中的区块链数据包括以下一项或多项:读取存储在所述存储系统所存储的所述区块链中的数据;以及将新数据写入所述区块链。所述区块链数据包括区块数据、状态数据、索引数据或流数据中的一个或多个。
在一些实施例中,所述M个区块链交易中的一个或多个与所述N个区块链交易同步地执行。
在一些实施例中,基于所述N1个区块链交易识别要异步执行的P1个协程包括:针对所述N1个区块链交易中的每个区块链交易,识别要异步执行的一个或多个协程。
在一些实施例中,所述N1个区块链交易包括一系列操作。所述一系列操作包括第一操作和在所述第一操作之后的第二操作。所述第一操作包括访问所述存储子系统的输入/输出(I/O)操作。
在一些实施例中,所述I/O操作包括异步GET请求或异步PUT请求中的至少一个。
在一些实施例中,所述P1个协程包括第一协程和第二协程。通过异步地执行所述P1个协程来执行所述N1个区块链交易包括:使用所述第一协程执行所述第一操作;且与所述第一操作异步地执行所述第二操作。与所述第一操作异步地执行所述第二操作包括在接收到所述第一操作的执行结果之前使用所述第二协程执行所述第二操作。
在一些实施例中,在接收到所述第一操作的执行结果之前使用所述第二协程执行所述第二操作包括:保存所述第一操作的第一操作上下文,所述第一操作上下文包括所述第一操作的寄存器数据、堆栈指针或程序计数器中的至少一个;及执行从所述第一操作的第一操作上下文到所述第二操作的第二操作上下文的上下文切换。
在一些实施例中,所述第一协程包括与所述第一操作的回调函数相对应的回调标识。与所述第一操作异步地执行所述第二操作还包括:接收由所述第一操作的所述回调函数返回的值;保存所述第二操作的第二操作上下文;恢复所述第一操作的第一操作上下文;以及基于由所述第一操作的所述回调函数返回的所述值,恢复所述第一操作的执行。
应当理解的是,根据本文所述的方法可以包括本文描述的各个方面和特征的任何组合。即,根据本文所述的方法不限于本文具体描述的各个方面和特征的组合,而是还包括所提供的各个方面和特征的任何组合。
本文的一个或多个实施例的细节将在说明书附图和以下描述中阐述。本文的其它特征和优点通过说明书和附图以及权利要求书将显现。
附图说明
图1是示出可用于执行本文实施例的环境的示例的图。
图2是示出根据本文实施例的架构的示例的图。
图3是示出根据本文实施例的用于处理区块链交易的系统的示例的图。
图4是示出根据本文实施例的存储内核的示例的图。
图5是示出可以根据本文实施例执行的用于处理区块链交易的过程的示例的图。
图6是示出可以根据本文实施例执行的用于访问存储在存储系统中的区块链数据的过程的示例的图。
图7是示出可以根据本文实施例执行的处理区块链交易的过程的示例的流程图。
图8是示出根据本文实施例的设备的模块的示例的图。
在各个附图中相同的附图标记和名称表示相同的元件。
具体实施方式
本文描述了用于处理区块链交易的技术。区块链交易(也简称为交易)可包括要由区块链网络中的区块链节点执行的数据、指令或操作。区块链交易可以例如由客户端设备或区块链网络的参与系统生成。区块链节点可以接收区块链交易,对区块链交易执行共识处理,并在达成共识后,通过将区块链交易保存到区块链的区块中以进行持久存储来发布区块链交易。处理区块链交易可能需要大量的运算资源,包括计算资源(例如,中央处理单元(CPU)资源)和输入/输出(I/O)资源(例如,存储资源和网络资源),尤其是随着区块链系统的规模增加、区块链系统的运行时间延长和/或区块链系统中维护的区块链的长度增加。本文中描述的技术可以例如通过利用多个区块链交易的并行和并发处理来提高多个维度上的多个区块链交易的处理效率。例如,可以将多个区块链交易中的每一个或者多个区块链交易中的每个子集分配为由多个线程中相应的一个线程并行地执行,从而实现多个区块链交易的并行处理。作为另一示例,区块链交易或区块链交易的操作可以在接收到先前区块链交易或区块链交易的先前操作的执行结果之前执行,以实现异步或并发处理,而不会损害或以其他方式改变区块链交易和/或区块链交易的操作的执行结果。
本文中描述的技术产生了几种技术效果。在一些实施例中,通过适当地配置区块链系统并战略性地调度多个区块链交易,以实现多个区块链交易的并行和并发处理,所描述的技术可以在不增加可用计算资源的情况下显著提高多个区块链交易的处理效率(例如,以每秒交易(TPS)量来衡量)。在区块链交易的处理中,尽管区块链的区块是同步生成或串行生成的,但是某些区块链交易和/或一个或多个区块链交易的某些I/O操作可以异步和/或并行地处理或执行,例如,取决于区块链交易和/或区块链交易的I/O操作之间是否存在冲突。在一些实施例中,所描述的技术可以使用多个线程来并行地处理区块链交易,并且使用协程(coroutine)来并发地或异步地处理区块链交易,从而提高了计算资源和存储资源的利用率。
在一些实施例中,所描述的技术可以通过更有效地利用计算机系统的运算资源来处理区块链交易,以改进计算机技术。在一些实施例中,例如,基于区块链交易的应用或用例和/或区块链交易中包括的操作,可以将区块链交易分类为CPU绑定(CPU-bound)的区块链交易或I/O绑定(I/O-bound)的区块链交易。CPU绑定的区块链交易是指受CPU瓶颈限制的区块链交易。CPU绑定的区块链交易可以主要包括CPU绑定的操作,使得完成CPU绑定的区块链交易的时间主要由中央处理器的速度决定。I/O绑定的区块链交易是指受I/O瓶颈限制的区块链交易。I/O绑定的区块链交易可以包括一个或多个I/O操作(例如,读取或写入磁盘、网络等),使得完成I/O绑定的区块链交易的时间主要由等待I/O操作完成所花费的时间决定。例如,大规模区块链账户的区块链交易通常需要大量的随机磁盘访问操作,这些操作是I/O密集型的,因此可以被视为I/O绑定的交易。与现有的交易处理方案相比,本文所公开的异步方案可以更好地利用磁盘I/O处理能力(例如,以每秒输入/输出操作(IOPS)数来衡量),以及提高区块链交易的TPS。在一些实施例中,所描述的技术可以基于区块链交易的类型来调度区块链交易,以更有效地利用计算机系统的CPU资源和I/O资源,并提高区块链交易的执行效率。在一些实施例中,所描述的技术可以实现AxB计算架构,以提高二维上的处理效率。此处,A是用于并行处理以解决CPU绑定的区块链操作的规模的线程数,B是每个线程可执行以解决I/O绑定操作的规模的并发I/O操作的数量。这样,在某些情况下,区块链交易的处理效率可以提高AxB倍。
在一些实施例中,所描述的技术可以在第一线程池中的多个线程之间分配一定数量的区块链交易,使得每个线程被调度以处理区块链交易的子集。这样,区块链交易的不同子集可以使用它们各自的线程并行处理,从而提高了处理区块链交易的效率。
此外,对于被调度给同一线程的区块链交易,可以对区块链交易中的每个区块链交易采用一个或多个协程。然后,可以通过异步地或并发地执行协程来处理区块链交易。操作和先前操作的异步或并发执行可以指的是,例如,在接收到先前操作的执行结果之前开始执行操作。在一些实施例中,可以通过使用协程并执行协程切换来实现两个或更多个操作的异步或并发执行。在一些实施例中,协程可以是脚本、逻辑、代码或包括一个或多个操作的任何其他计算机可读程序。协程内部的操作是同步执行或顺序执行的。多个协程可以异步执行或以与计算机可读程序中写入的顺序(例如,脚本、逻辑、代码)不同的顺序执行,从而减少了计算资源的空闲时间并提高了系统的整体吞吐量。在一些实施例中,协程具有其自己的堆栈、局部变量和指令指针,但是与其他协程共享全局变量。在一些实施例中,协程可以用于非抢先式多任务处理,从而允许执行被暂停和继续,并实现了异步并发处理区块链交易和/或操作。现有的基于区块链的系统的计算机可读程序是用同步逻辑编写的,并且在计算机可读程序中编写的操作或功能是同步执行的。通过在执行区块链交易中使用协程,所描述的技术不需要革命性地或实质性地改变计算机可读程序的编程逻辑,同时仍然实现了异步并发处理区块链交易。在一些实施例中,程序员(例如,区块链系统的开发人员、客户或管理用户)仍然可以使用同步逻辑来编写用于区块链交易的计算机可读程序,而所描述的系统可以基于计算机可读程序来生成协程,并实现区块链交易的异步处理。这可以降低开发和实现用于异步处理区块链交易的基于区块链的系统的复杂性和工作量,并提供向后兼容性。
作为两个区块链交易的异步或并发执行的示例,当先前区块链交易已执行到先前区块链交易变为I/O绑定的点时,等待从区块链存储系统检索数据,而不是让计算资源闲置,所描述的技术可以使用计算资源来处理后续的区块链交易。这可以减少计算资源的空闲时间,提高计算资源的利用率,并减少已接收到的所有区块链交易的总处理时间,且减少用于生成新区块的区块生成等待时间,该新区块包括区块链系统中所有已执行的区块链交易。因此,可以提高计算机的效率和整个区块链系统的性能。
在一些实施例中,所描述的技术可以配置具有单独的第二线程池的区块链存储系统,以处理区块链交易中的I/O操作。在一些实施例中,第二线程池专用于与区块链存储系统中的I/O设备接口以及读取/写入区块链存储系统中的区块链数据的I/O操作。例如,对于区块链交易的多个I/O操作,可以将I/O操作调度为由第二线程池中的不同线程执行,以便可以并行处理I/O操作。在一些实施例中,所描述的技术可以极大地增加每秒I/O操作(IOPS)的数量,并且可以更有效地利用I/O资源,尤其是对于I/O绑定的区块链交易。
为本文的实施例提供进一步的背景,如上所述,分布式账本系统(DLS),也可以称为共识网络(例如,由点对点(Peer-to-Peer)节点组成)和区块链网络,使参与实体能够安全且不可变地进行交易并存储数据。尽管术语区块链通常与特定网络和/或用例相关联,但是在不参考任何特定用例的情况下,本文中使用的区块链通常是指DLS。
区块链是以交易不可变的方式存储交易的数据结构。因此,区块链上记录的交易是可靠且可信的。区块链包括一个或多个区块。链中的每个区块通过包含在链中紧邻其之前的前一区块的哈希值而链接到该前一区块。每个区块还包括(例如,由生成区块的计算设备或管理区块链的计算系统提供的)本地时间戳、自身的哈希值以及一个或多个交易。例如,区块可以包括区块头和区块体。区块头可以包括本地时间戳、自身的哈希值以及前一区块的哈希值。区块体可以包括有效载荷信息,例如一个或多个交易(或交易数据)。已经被区块链网络中的节点验证的交易经哈希处理并编入默克尔(Merkle)树中。默克尔树是一种数据结构,其中树的叶子节点处的数据被哈希处理,并且在树的每个分支中的所有哈希值在分支的根部级联(concatenate)。此过程沿着树持续一直到整个树的根,在整个树的根处存储了代表树中所有数据的哈希值。通过确定声称是存储在树中的交易的哈希值是否与树的结构一致,可以快速验证该哈希值。
区块链是用于存储交易的去中心化或至少部分去中心化的数据结构,而区块链网络是通过广播、验证和确认交易等来管理、更新和维护一个或多个区块链的计算节点的网络。如上所述,区块链网络可作为公有区块链网络、私有区块链网络或联盟区块链网络被提供。
通常,联盟区块链网络在参与的实体之间是私有的。在联盟区块链网络中,共识处理可被称为共识节点的授权的节点集控制,一个或多个共识节点由相应的实体(例如,金融机构、保险公司)操作。例如,十(10)个实体(例如,金融机构、保险公司)构成的联盟可以操作联盟区块链网络,每个实体操作联盟区块链网络中的至少一个节点。
在一些示例中,在联盟区块链网络中,提供全局区块链作为跨所有节点复制的区块链。也就是说,所有的共识节点相对于全局区块链而言处于完全共识状态。为了达成共识(例如,同意向区块链添加一个区块),在联盟区块链网络内实施共识协议。例如,联盟区块链网络可以实现实用拜占庭容错(PBFT)共识,这将在下面进一步详细描述。
在一些实施例中,中心化账本系统还可采用区块链的数据结构,以利用存储在区块链上的数据的不可变性、可靠性和可信赖性。在一些实施例中,这样的中心化账本系统可以被称为基于区块链的中心化账本系统或通用的可审计账本服务系统。在一些实施例中,基于区块链的中心化账本系统可以包括中央可信机构,该中央可信机构提供存储在区块链数据结构的区块中的透明、不可变和可密码验证的数据。存储的数据可以是日志格式,例如不仅包括交易日志,还包括其他交易数据和区块数据。由于中央可信机构的存在,基于区块链的中心化账本系统无需执行共识处理来建立信任。在一些实施例中,与典型的基于区块链的分布式或去中心化账本系统相比,基于区块链的中心化账本系统可以更高效。在一些实施例中,基于区块链的中心化账本系统可以提供具有增强的信任、效率和存储性能的基于云的存储服务。
在一些实施例中,中心化账本系统可以是区块链网络的节点。例如,中心化账本系统可以是区块链网络中的非共识节点,并且可以为区块链网络中的共识节点或其他非共识节点或者区块链网络外的实体提供高度可靠且高性能的可审计流的账本服务。
在一些实施例中,分布式账本系统(DLS)和基于区块链的中心化账本系统可以被统称为基于区块链的系统。换句话说,基于区块链的系统用于指代并足够广泛以涵盖分布式账本系统(DLS),基于区块链的中心化账本系统,或采用区块链的数据结构以利用存储在区块链上的数据的不可变性、可靠性和可信赖性的其他系统。
图1是示出了可用于执行本文实施例的环境100的示例的图。在一些示例中,环境100使实体能够参与至联盟区块链网络102中。环境100包括计算系统106、108和网络110。在一些示例中,网络110包括局域网(LAN)、广域网(WAN)、因特网或其组合,并且连接网站、用户设备(例如,计算设备)和后端系统。在一些示例中,可以通过有线和/或无线通信链路来访问网络110。在一些示例中,网络110使得与联盟区块链网络102通信以及在联盟区块链网络102之内通信成为可能。通常,网络110代表一个或多个通信网络。在一些情况下,计算系统106、108可以是云计算系统(未示出)的节点,或者计算系统106、108中的每个可以是单独的云计算系统,其包括通过网络互连并且用作分布式处理系统的多个计算机。
在所描绘的示例中,计算系统106、108可各自包括能够作为节点参与至联盟区块链网络102中的任何适当的计算系统。计算系统的示例包括但不限于服务器、台式计算机、膝上型计算机、平板计算设备及智能电话。在一些示例中,计算系统106、108承载用于与联盟区块链网络102交互的一个或多个由计算机实现的服务。例如,计算系统106可以承载第一实体(例如用户A)的由计算机实现的服务,例如第一实体用来管理其与一个或多个其他实体(例如其他用户)的交易的交易管理系统。计算系统108可以承载第二实体(例如用户B)的由计算机实现的服务,例如第二实体用来管理其与一个或多个其他实体(例如其他用户)的交易的交易管理系统。在图1的示例中,联盟区块链网络102被表示为节点的点对点网络,并且计算系统106、108分别提供参与联盟区块链网络102的第一实体和第二实体的节点。
图2是示出根据本文实施例的架构200的示例的图。示例性概念架构200包括分别对应于参与者A、参与者B和参与者C的参与者系统202、204、206。每个参与者(例如,用户、企业)参与到作为点对点网络提供的区块链网络212中,该点对点网络包括多个节点214,至少一些节点将信息不可变地记录在区块链216中。如本文进一步详述的,尽管在区块链网络212中示意性地描述了单个区块链216,但是在区块链网络212上提供并维护了区块链216的多个副本。
在所描绘的示例中,每个参与者系统202、204、206分别由参与者A、参与者B和参与者C提供或代表参与者A、参与者B和参与者C,并且在区块链网络中作为各自的节点214发挥作用。如这里所使用的,节点通常是指连接到区块链网络212且使相应的参与者能够参与到区块链网络中的个体系统(例如,计算机、服务器)。在图2的示例中,参与者与每一个节点214相对应。然而,可以预期,一个参与者可以操作区块链网络212内的多个节点214,和/或多个参与者可以共享一个节点214。在一些示例中,参与者系统202、204、206使用协议(例如,超文本传输安全协议(HTTPS))和/或使用远程过程调用(RPC)与区块链网络212通信,或通过区块链网络212通信。
节点214可以在区块链网络212内具有不同的参与程度。例如,一些节点214可以参与共识处理(例如,作为将区块添加到区块链216的挖矿节点),而其他节点214不参与此共识处理。作为另一示例,一些节点214存储区块链216的完整的副本,而其他节点214仅存储区块链216的一部分的副本。例如,数据访问特权可以限制相应的参与者在其相应系统内存储的区块链数据。在图2的示例中,参与者系统202、204和206分别存储区块链216的完整副本216',216”和216”'。
区块链(例如,图2的区块链216)由一系列区块组成,每个区块都存储有数据。数据的示例包括代表两个或更多参与者之间的交易的交易数据。交易数据被用作存储在区块链中的数据记录的示例。交易的示例可以包括但不限于有价物(例如资产、产品、服务、货币)的交换。交易数据不可变地存储在区块链中。也就是说,交易数据不能改变。在一些实施例中,在账本系统中执行的一个或多个操作可以作为交易数据存储在区块链中。例如,交易数据可以包括存储在区块链中的数据的一个或多个操作或操纵、从外部资源获得的信息(例如,时间戳信息),或者任何适当的数据可以存储在区块链中(例如,文档、图像、视频、音频)。交易数据不可变地存储在区块链中。也就是说,交易数据不能改变。
在将交易数据存储在区块中之前,对交易数据进行哈希处理。哈希处理是将交易数据(作为字符串数据提供)转换为固定长度的哈希值(也作为字符串数据提供)的处理。不可能对哈希值进行去哈希处理(un-hash)以获取交易数据。哈希处理可确保即使交易数据轻微改变也会导致完全不同的哈希值。此外,如上所述,哈希值具有固定长度。也就是说,无论交易数据的大小如何,哈希值的长度都是固定的。哈希处理包括通过哈希函数处理交易数据以生成哈希值。哈希函数的示例包括但不限于输出256位哈希值的安全哈希算法(SHA)-256。
多个交易的交易数据被哈希处理并存储在区块中。例如,提供两个交易的哈希值,并对它们本身进行哈希处理以提供另一个哈希值。重复此过程,直到针对所有要存储在区块中的交易提供单个哈希值为止。该哈希值被称为Merkle根哈希值,并存储在区块头中。任何交易的更改都会导致其哈希值发生变化,并最终导致Merkle根哈希值发生变化。
通过共识协议将区块添加到区块链。区块链网络中的多个节点参与共识协议,并执行工作以将区块添加到区块链。此类节点称为共识节点。上面介绍的PBFT用作共识协议的非限制性示例。共识节点执行共识协议以向区块链添加交易,并且更新区块链网络的整体状态。
更详细而言,共识节点生成区块头,对区块中的所有交易进行哈希处理,并将哈希值成对地组合以生成进一步的哈希值,直到为区块中的所有交易提供单个哈希值(Merkle根哈希值)为止。将此哈希值添加到区块头中。共识节点还确定区块链中最新区块(即添加到区块链中的最后一个区块)的哈希值。共识节点还向区块头添加随机数值(nonce value)和时间戳。
通常,PBFT提供容忍拜占庭错误(例如,故障节点、恶意节点)的实用拜占庭状态机复制。这通过在PBFT中假设将发生故障(例如,假设存在独立节点故障和/或由共识节点发送的被操纵的消息)来实现。在PBFT中,以包括主共识节点和备共识节点的序列提供共识节点。主共识节点被周期性地改变,通过区块链网络内的所有共识节点对区块链网络的全局状态达成一致,将交易添加到区块链中。在该处理中,消息在共识节点之间传输,并且每个共识节点证明消息是从指定的对等节点接收的,并验证消息在交易期间未被篡改。
在PBFT中,共识协议是在所有共识节点始于相同状态的情况下分多个阶段提供的。首先,客户端向主共识节点发送用以调用服务操作(例如,在区块链网络内执行交易)的请求。响应于接收该请求,主共识节点将该请求组播到备共识节点。备共识节点执行该请求,并且每个节点都向客户端发送回复。客户端等待直到接收到阈值数量的回复。在一些示例中,客户端等待直到接收到f+1个回复,其中f是区块链网络内可以容忍的最大故障共识节点数。最终结果是,足够数量的共识节点就要添加到区块链的记录的顺序达成一致,并且该记录或者被接受或者被拒绝。
在一些区块链网络中,用密码学来维护交易的隐私。例如,如果两个节点想要保持交易隐私,以使得区块链网络中的其他节点不能看出交易的细节,则这两个节点可以对交易数据进行加密处理。加密的示例包括但不限于对称加密和非对称加密。对称加密是指使用单个密钥既加密(从明文生成密文)又解密(从密文生成明文)的加密处理。在对称加密中,同一密钥可用于多个节点,因此每个节点都可以对交易数据进行加密/解密。
非对称加密使用密钥对,每个密钥对包括私钥和公钥,私钥仅对相应的节点已知,并且公钥对于区块链网络中的任何或者所有其它节点已知。节点可以使用另一个节点的公钥来加密数据,并且该加密的数据可以使用其他节点的私钥来解密。例如,再次参考图2,参与者A可以使用参与者B的公钥来对数据进行加密,并将加密数据发送给参与者B。参与者B可以使用其私钥来对该加密数据(密文)进行解密并提取原始数据(明文)。使用节点的公钥加密的消息只能使用该节点的私钥解密。
非对称加密用于提供数字签名,这使得交易中的参与者能够确认交易中的其他参与者以及交易的有效性。例如,节点可以对消息进行数字签名,而另一个节点可以根据参与者A的该数字签名来确认该消息是由该节点发送的。数字签名也可以用于确保消息在传输过程中不被篡改。例如,再次参考图2,参与者A向参与者B发送消息。参与者A生成该消息的哈希值,然后使用其私钥对该哈希值进行加密,以提供作为加密哈希值的数字签名。参与者A将该数字签名附加到该消息上,并将该具有数字签名的消息发送给参与者B。参与者B使用参与者A的公钥解密该数字签名,并提取哈希值。参与者B对该消息进行哈希处理并比较哈希值。如果哈希值相同,参与者B可以确认该消息确实来自参与者A,且未被篡改。
图3是示出根据本文实施例的区块链系统300的示例的图。在一些实施例中,区块链系统300可以在区块链网络(例如,图1的区块链网络102或图2的区块链网络212)的网络节点(例如,图2的节点214)上实现,以用于处理区块链交易。例如,区块链系统300可以在区块链网络的每个参与者(例如,图2的参与者系统202、204或206)上实现。在一些实施例中,区块链系统300可以被配置为并行和/或异步地处理多个区块链交易,以实现并发处理。
如图所示,区块链系统300包括执行插件302、执行器304、存储插件306、存储内核308、第一线程池310和第二线程池312。执行插件302包括调度器(scheduler)316和智能合约运行器/平台运行器/TEE运行器317。在一些实施例中,调度器316被配置为基于各种计算机资源(例如,CPU资源、存储资源、网络资源)来调度多个区块链交易的处理。在一些实施例中,智能合约运行器/平台运行器/TEE运行器317被配置为支持智能合约、各种平台以及用于执行区块链交易的可信执行环境(TEE)的测试和运行。在一些实施例中,执行器304可以被配置为支持各种区块链服务环境,诸如原生智能合约、虚拟机和TEE。在一些实施例中,存储插件306可以被配置为执行多个区块链交易、世界状态管理和键值(KV)对管理之间的冲突检测。
在一些实施例中,存储内核308可以被配置为存储区块链数据,诸如区块数据、状态数据、索引数据和/或流数据。作为区块数据的示例,区块链的区块可以包括区块头和区块体。区块头可以包括特定区块的身份信息,并且区块体可以包括用该区块确认的交易。在一些实施例中,状态数据可以被组装为全局共享状态(也称为世界状态)。世界状态可以包括账户地址和账户状态之间的映射。世界状态可以存储在诸如Merkle Patricia树(MPT)之类的数据结构中。在一些实施例中,状态数据可以进一步分类为当前状态和历史状态。在一些实施例中,当前状态是与最新区块相对应的状态数据,并且是在执行区块链网络上的最新交易时的数据源。在一些实施例中,历史状态是存储从创世区块到最新区块的所有状态数据的内容寻址数据集。在一些实施例中,历史状态数据被存储在历史状态树中。在一些实施例中,索引数据可以指示数据(例如,交易数据、区块数据和状态数据)与存储该数据的数据日志文件之间的映射对应关系,以便寻址或检索该数据。在一些实施例中,索引数据可以指示存储在存储系统中的对应数据的物理位置。在一些实施例中,流数据可以是与用于处理某种类型的区块链数据的流、构造或处理引擎有关的数据(例如,配置或元数据)。
在一些实施例中,可以将区块链数据存储在存储设备321上的数据库320中。在一些实施例中,存储内核308可以经由存储内核应用编程接口(API)318接收用于访问区块链数据的输入/输出(I/O)操作。在一些实施例中,I/O操作可以包括同步PUT/GET请求和异步PUT/GET请求。在一个示例中,I/O操作可以包括基于关键字来检索键值对的值的请求。在该示例中,存储内核308可以获得该关键字的哈希值,从存储的默克尔树319中找到对应的节点,根据节点的信息确定数据库320可识别的新关键字,并使用该新关键字从数据库320读取所请求的值。
在一些实施例中,区块链系统300可以接收要执行或要处理的多个区块链交易。区块链交易可以包括一个或多个任务、功能或操作305,例如验证区块链交易(例如,验证区块链交易是否可以在区块链网络中达成共识)、响应于区块链交易的成功验证而提交区块链交易、将区块链交易的数据或其他信息写入数据库(例如,数据库320)中、和/或声明功能序言和结语、编译或其他管理(例如,为变量保留空间,在功能完成并返回给功能的调用者之前清理堆栈),以执行区块链交易中的不同操作/功能。区块链交易中的某些任务或功能可能是CPU绑定的,例如验证或提交操作。区块链交易中的某些任务或功能可能是I/O绑定的,例如,将区块链数据写入数据库或从数据库读取区块链数据。
在一些实施例中,区块链系统300可以使用第一线程池310来例如顺序地和/或并行地处理多个区块链交易。在一些实施例中,第一线程池310可以包括多个线程(例如,K个线程,其中K是大于1的整数),每个线程可以用于执行一个或多个区块链交易,使得多个区块链交易可以由多个线程并行执行。在一个示例中,区块链系统300可以接收要执行的例如M个区块链交易,其中M是大于1的整数。在该示例中,可以从M个区块链交易中选择例如N个区块链交易,使得N个区块链交易是M个区块链交易的子集。在一些实施例中,可以将N个区块链交易识别为用于并行处理的候选区块链交易,并从M个区块链交易中进行选择。用于并行处理的候选区块链交易包括可以独立执行而不会相互依赖或改变彼此的执行效果的区块链交易。可以例如基于一种或多种冲突检测算法来识别用于并行处理的候选区块链交易,所述冲突检测算法检测在多个区块链交易的执行之间或之中是否存在冲突。如果更改两个或更多个区块链交易的执行顺序可能会导致执行错误(例如,无法执行区块链交易的一个操作)或者可能会更改所述两个或更多个区块链交易的执行效果或结果,则所述两个或更多个区块链交易的执行之间或之中可能存在冲突。在一些实施例中,冲突检测算法可以识别不受冲突影响的区块链交易。因此,可以在不受冲突影响的一个或多个区块链交易中识别用于并行处理的候选区块链交易。
在将N个区块链交易识别为有资格进行并行处理的候选区块链交易之后,区块链系统300可以将所述N个区块链交易分配为由第一线程池310中的K个线程执行,其中,将所述N个区块链交易中的相应数量的(例如,NK个)区块链交易分配给相应的第K线程。例如,可将N个交易中的N1个区块链交易分配给第一线程池310中的第一线程,可将N个交易中的N2个区块链交易分配给第一线程池310中的第二线程,可将N个交易中的N3个区块链交易分配给第一线程池310中的第三线程,依此类推。这样,使用第一线程执行N1个区块链交易可与使用第二线程执行N2个区块链交易以及使用其他线程执行其他区块链交易(例如,使用第一线程池310中的第三线程执行N个交易中的N3个区块链交易)并行执行。
在一些实施例中,除了使用第一线程池310中的多个线程的并行处理之外,分配给第一线程池中的相同线程的区块链交易可以被异步地执行。异步执行允许在接收到先前区块链交易的执行结果之前执行区块链交易。换句话说,在先前区块链交易完全执行之后,区块链交易无需等待即可开始执行。在一些实施例中,例如通过在调用协程来执行先前区块链交易(或先前区块链交易的一些操作)之后开始执行区块链交易,生成协程以允许区块链交易被异步地执行。
在图3所示的示例中,第一线程池310的K个线程中的每一个可以执行一个或多个协程311。协程可以允许异步执行区块链交易,以实现区块链交易的并发处理。在一些实施例中,可以为每个区块链交易生成一个或多个协程。在一个示例中,可以将N个交易中的N1个区块链交易分配给第一线程池310中的第一线程。在该示例中,可以基于N1个区块链交易来识别并生成要异步执行的P1个协程,其中P1大于或等于N1。然后,可以通过异步地执行P1个协程来执行N1个区块链交易。在一些实施例中,可以为一个区块链交易生成一个协程。在一些实施例中,可以为多个区块链交易生成一个协程。在一些实施例中,可以为一个区块链交易生成一个以上的协程。例如,区块链交易可以包括不依赖于彼此的执行的两个任务或操作(例如,从一个或多个区块链存储设备的两个数据检索)。在该示例中,可以分别为这两个操作生成两个协程,使得同一区块链交易的两个操作可以使用该两个协程被异步执行。在一些实施例中,可以基于区块链交易的类型或者区块链交易的任务或操作(例如,它们是I/O绑定的还是CPU绑定的)来为区块链交易生成协程。在一些实施例中,可以为I/O绑定的区块链交易或I/O绑定的区块链交易的任务(例如,包括访问区块链存储系统的一个或多个I/O操作的区块链交易)生成协程。在一些实施例中,可以为一个或多个任务或操作生成协程,所述任务或操作可使处理器等待或空闲以等待同一区块链交易中的先前任务或操作的结果。例如,可以为等待中断或用户输入的操作生成协程,使得一旦调用协程并执行协程切换就可以执行该操作之后的操作。当接收到等待的操作信息时,区块链交易可以返回并完成操作。
在一些实施例中,调度器(例如,调度器316)可以被配置为调度多个协程(例如,协程311)的处理,以更好地利用计算机资源(例如,CPU资源、存储资源、网络资源)并进一步提高区块链交易的处理效率。例如,多个协程可以再次使用第一线程池310中的一个或多个线程,或者使用诸如第二线程池312的附加线程来实现协程和基础区块链交易的并发处理。
在以上示例中,执行P1个协程可以包括使用第二线程池312访问存储在存储内核308中的区块链数据。在一些实施例中,第二线程池312可以专用于存储内核308,并且响应于确定一个或多个协程包括访问存储在存储内核308中的区块链数据的I/O操作,调度器316可以使用第二线程池312中的线程。
图4是示出根据本文实施例的区块链存储系统的存储内核400的示例的图。在一些实施例中,存储内核400可以被实现为图3的存储内核308。如图所示,存储内核400包括支持同步GET/PUT请求和异步GET/PUT请求的I/O API 402,例如,类似于图3的存储内核API318。
存储内核400还包括存储区块链数据的一个或多个存储设备422。在一些实施例中,可以将不同类型的区块链数据分别存储在各自的存储设备中,或者混合存储在一个或多个公共存储设备中。在一个示例中,一个或多个存储设备422可以包括用于存储区块数据404的第一存储设备、用于存储状态数据406的第二存储设备、用于存储索引数据408的第三存储设备、以及用于存储流数据410的第四存储设备。区块数据404、状态数据406、索引数据408和流数据410可以存储在存储设备422上它们各自的数据库420中。
在一些实施例中,线程池,例如包括多个线程的线程池414,专用于存储内核400。线程池414可以是图3的第二线程池312的示例。在一些实施例中,线程池414中的线程可以被配置为并行访问一个或多个存储设备422。作为示例,线程池414中的第一线程可以被配置为访问用于存储区块数据的第一存储设备,线程池414中的第二线程可以被配置为访问用于存储状态数据的第二存储设备,线程池414中的第三线程可以被配置为访问用于存储索引数据的第三存储设备,线程池414中的第四线程可以被配置为访问用于存储流数据的第四存储设备。作为另一示例,可以使用多个线程来访问相同或单个存储设备,以利用存储设备所支持的多访问功能来增加存储内核400的吞吐量以及存储内核400上的I/O操作的效率。
存储内核400还包括调度器或分派器(dispatcher)412,该调度器或分派器412例如根据一种或多种调度算法基于I/O操作的特征和计算机资源来调度I/O操作。在一些实施例中,分派器412可以基于轮询调度算法、随机哈希调度算法或其他算法来调度线程池414中的两个或更多个线程。
在一些实施例中,存储内核400可以经由I/O API 402接收多个I/O操作。在一些实施例中,多个I/O操作来自一个或多个区块链交易或者一个或多个区块链交易的协程。在一个示例中,每个I/O操作可以包括基于与键值对中的值相关联的关键字来检索与区块链数据(例如,区块数据404、状态数据406、索引数据408或流数据410)相对应的值的请求。在该示例中,分派器412可以确定I/O操作的请求的值的数据类型,并为线程池414中的线程调度I/O操作。在一些实施例中,可以分别为多个线程调度多个I/O操作,使得可以使用多个线程并行地执行多个I/O操作。对于I/O操作中的每一个,存储内核400可以获取包括在请求中的关键字的哈希值,从存储的默克尔树418中找到相应节点,根据节点的信息确定可由相应数据库420识别的新关键字,并使用该新关键字从数据库420读取请求的值。
在一些实施例中,多个I/O操作的并行执行使得多个协程和区块链交易能够并发执行,特别是考虑到被分离的存储内核400的线程池414以及被分发以执行区块链交易的一个或多个线程(例如,图3的第一线程池310中的线程)。
图5示出了可以根据本文实施例执行的用于处理区块链交易的过程500的示例。为了方便起见,该过程将被描述为由位于一个或多个位置并且根据本文被适当地编程的一个或多个计算机的系统执行。例如,被适当地编程的基于区块链的系统(例如,图3的区块链系统300)可以执行过程500。在一些实施例中,被适当地编程的区块链网络的每个网络节点(例如,图2的节点214)可以执行过程500。网络节点可以是例如共识节点或非共识节点。网络节点可以是例如区块链网络的参与者系统,例如图2的参与者系统202、204或206。
在所描绘的示例中,客户端502可以发送用以处理多个区块链交易的一个或多个请求。客户端502可以包括一个或多个用户接口或者用于与用户和/或区块链网络的更多其他网络节点接口的其他通信接口。例如,客户端502可以从与客户端502相关联的用户和/或区块链网络的更多其他网络节点接收多个区块链交易。在一些实施例中,多个区块链交易可以是在区块链网络的区块生成期间接收的区块链交易,使得可以将包括多个区块链交易的新区块添加到由区块链网络维护的区块链中。
在该示例中,客户端502接收5个区块链交易a-e,并且将其发送给基于区块链的系统的共识模块504以进行处理。在一些实施例中,共识模块504可以对区块链交易执行共识过程。在确定已经达成共识之后,可以将5个区块链交易a-e发送给调度器506以供执行。
在一些实施例中,调度器506可以将多个区块链交易指派或以其他方式分配给线程池(例如,图3的第一线程池310)中的可用线程。可用线程可以被分发一个或多个区块链交易。在这个例子中,5个区块链交易a-e被调度给线程508-1~508-N。如图所示,区块链交易a和b被调度给线程508-1,区块链交易c被调度给线程508-2,以及区块链交易d和e被调度给线程508-N。在一些实施例中,可以使用多个线程并行地执行多个区块链交易。在该示例中,使用线程508-1执行区块链交易a和b、使用线程508-2执行区块链交易c、以及使用线程508-N执行区块链交易d和e可以并行执行。
在一些实施例中,可以针对每个区块链交易创建或生成一个或多个协程。图5中的示例示出了针对区块链交易d和e创建协程以促进区块链交易d和e的异步处理,即使它们被指派为由相同的线程508-N来处理。
在一些实施例中,每个区块链交易可以包括一个或多个I/O绑定操作,例如访问存储在系统中的区块链数据的I/O操作、CPU绑定操作或其他操作。在一些实施例中,可以为区块链交易中需要等待时间或可能导致计算资源(例如,处理区块链交易的线程)暂停或空闲的一个或多个操作(例如,I/O操作)创建一个或多个协程。在一些实施例中,可以根据冲突检测算法为一个或多个操作创建一个或多个协程,使得可以异步执行一个或多个操作,而不会改变所述一个或多个操作的执行结果,就好像所述一个或多个操作是同步执行或顺序执行的一样。例如,区块链交易可以被构建为包含两个或更多个操作的计算机代码或程序。计算机程序可以以同步方式写入,以使得两个或更多个操作将根据编入计算机程序的顺序一个接一个地执行。如果更改两个或更多个操作的执行顺序(例如,在完成先前操作之前开始执行后续操作)可能导致执行错误(例如,无法执行后续操作)或者可能更改所述两个或更多个操作的执行效果或结果,则所述两个或更多个操作的执行之间或之中可能存在冲突。在一些实施例中,冲突检测算法可以识别不受冲突影响的操作。因此,可以为不受冲突影响的一个或多个操作创建一个或多个协程。
在图5所示的例子中,区块链交易d包括两个I/O操作d1和d2,区块链交易e包括I/O操作e1。注意,仅出于说明性目的,图5被示为包括I/O操作d1、d2和e1。区块链交易a-e中的每一个交易可以包括任何合适数量的I/O操作和/或非I/O操作。在一些实施例中,可以为I/O操作d1、d2和e1创建各自的协程。在一些实施例中,可以基于区块链交易和包括在区块链交易中的操作来创建更少、附加或不同的协程。
在一些实施例中,可以基于冲突检测算法将区块链交易和区块链交易的协程(例如,基于I/O操作)调度为并行和异步地执行。例如,可以基于冲突检测算法来确定I/O操作d2的执行取决于I/O操作d1的执行,使得可以在完成I/O操作d1的执行之后执行I/O操作d2。另一方面,可以基于冲突检测算法确定I/O操作e1不依赖于I/O操作d1和d2。这样,I/O操作e1可以与I/O操作d1和d2异步地执行。在一些实施例中,可以首先执行操作d1以访问存储在数据库514中的区块链数据。在一些实施例中,为每个区块链交易创建协程。在这种情况下,可以使用为交易d创建的协程来执行交易d的I/O操作d1和d2,并且可以使用为交易e创建的另一个协程来执行I/O操作e1。在一些实施例中,当I/O操作已经被执行到I/O操作需要访问磁盘存储的点时,可以为该I/O操作执行协程切换。在一些实施例中,协程切换可以包括保存用于执行第一操作的第一协程的操作上下文(context)、以及切换到用于执行第二操作的第二协程。
继续以上示例,当I/O操作d1访问数据库514以检索区块链数据时,可以保存用于交易d的协程的操作上下文。在一些实施例中,保存用于执行操作的协程的操作上下文可以包括保存寄存器数据、堆栈指针和/或程序计数器或与协程相关联的环境。在保存用于I/O操作d1的协程的操作上下文之后,然后可以释放计算资源(例如,线程508-N)以例如执行I/O操作e1。这样,可以实现I/O操作d1和e1的异步执行,使得I/O操作e1的执行不用等待I/O操作d1的执行完成。在一些实施例中,I/O操作d1和e1可以使用与线程508-N不同的一个或多个线程(例如,专用于存储内核512的线程)来进一步提高处理效率,例如,根据参考图6描述的技术。在一些实施例中,I/O操作d1和e1可以使用两个相应的线程来实现并行处理。
在以上示例中,I/O操作d1可以在完成I/O操作e1之前返回执行结果。在一些实施例中,可以执行协程切换以从用于执行I/O操作e1的协程切换回用于执行I/O操作d1的协程。然后可以继续执行I/O操作d1。在接收到执行结果之后紧接着完成I/O操作d1的执行后,可以执行I/O操作d2(例如,使用与用于执行I/O操作d1相同的协程)。
在图5所示的示例中,在I/O操作d2返回执行结果之后,可以返回I/O操作d1和d2的执行结果以执行区块链交易d。在一些实施例中,在完成I/O操作d2的执行之后,可以执行协程切换以从用于执行I/O操作d2的协程切换到用于执行I/O操作e1的协程。然后可以继续执行I/O操作e1。在I/O操作e1返回执行结果之后,可以返回I/O操作e1的执行结果以执行区块链交易e。在该示例中,尽管区块链交易d和e被调度为由相同的线程508-N处理,但是它们通过使用协程被异步地处理。区块链交易e的执行不需要等到区块链交易d完成后才开始,从而减少了区块链交易d和e的总执行时间,并更有效地利用了线程508-N。
图6示出了可以根据本文实施例执行的用于访问存储在存储系统中的区块链数据的过程600的示例。为了方便起见,该过程将被描述为由位于一个或多个位置并根据本文被适当地编程的一个或多个计算机的系统执行。例如,被适当地编程的基于区块链的存储系统(例如,图4的存储内核400)可以执行过程600。过程600可以是用于访问存储在图5的数据库514中的区块链数据的示例性过程。
在所描绘的示例中,存储内核604从存储插件602接收I/O操作d1、d2和e1。I/O操作d1、d2和e1可以是一个或多个区块链交易中包含的I/O操作。注意,仅出于说明性目的,图6被示为包括I/O操作d1、d2和e1。图6中的I/O操作d1、d2和e1可以被认为与图5中的I/O操作d1、d2和e1相同或不同。
在该示例中,I/O操作d1、d2和e1中的每一个可以包括基于与值相关联的关键字从数据库614检索与区块链数据(例如,区块数据404、状态数据406、索引数据408或流数据410)相对应的值的请求。分派器610可以确定I/O操作中所请求的值的数据类型,并针对线程612-1~612-N调度I/O操作d1、d2和e1。线程612-1~612-N可以与被调度为处理包括I/O操作d1、d2和e1的区块链交易的一个或多个线程(例如,线程508-1~508-N)相同或不同。在该示例中,线程612-1~612-N可以是专用于存储内核604的线程池,与被调度为处理区块链交易的线程(例如,线程508-1~508-N)不同。如图所示,I/O操作d1、d2和e1分别被分配给线程612-1、612-N和612-2。在一些实施例中,可以分别针对多个线程调度多个I/O操作,使得可以使用多个线程并行地执行多个I/O请求。在该示例中,可以分别使用线程612-1、612-N和612-2并行地执行I/O操作d1、d2和e1。
图7是示出了可以根据本文实施例执行的过程700的示例的流程图。该流程图表示用于处理区块链交易的过程700。为了方便起见,该过程将被描述为由位于一个或多个位置并根据本文被适当地编程的一个或多个计算机的系统执行。例如,被适当地编程的基于区块链的系统(例如,图3的区块链系统300)可以执行该过程。在一些实施例中,基于区块链的系统可以在区块链网络节点(例如,图2的区块链网络节点214)上实现。
在步骤702,区块链网络的区块链网络节点接收要由区块链网络节点执行的M个区块链交易。在一些实施例中,区块链网络节点与将区块链数据存储在区块链中的存储系统(例如,图3的存储内核308或图4的存储内核400)相关联,并且M是大于1的整数。区块链网络节点可以维护包括用于存储区块链数据的一系列区块的区块链。区块链网络节点可以接收多个区块链交易,对多个区块链交易执行共识,并且如果对多个区块链交易达成共识,则可以生成包含多个区块链交易的区块。可以将生成的区块附加到由区块链节点维护的区块链上。在一些实施例中,M个区块链交易可以是由区块链节点在区块生成间隔期间接收的、由区块链网络节点执行的、以及被包括在区块链的区块中以进行存储或发布的区块链交易。
在步骤704,区块链网络节点执行M个区块链交易。在一些实施例中,响应于确定区块链网络的所有共识节点之间已经针对多个区块链交易达成共识,区块链网络节点执行M个区块链交易。在一些实施例中,M个区块链交易中的一些或全部可以并发执行,以提高执行效率并减少网络节点的区块生成的处理延迟。在一些实施例中,步骤704包括子步骤706-710。
在步骤706,区块链网络节点从M个区块链交易中识别出N个区块链交易,其中N小于或等于M。在一些实施例中,可以基于对M个区块链交易的冲突检测来选择N个区块链交易,例如,根据关于图3至图5描述的示例性技术。例如,N个区块链交易是用于并行处理的候选区块链交易,其可以独立执行而无需依赖或改变彼此的执行效果。
在步骤708,区块链网络节点将N个区块链交易分配为由K个线程的第一线程池(例如,图3的第一线程池310)并行执行。在一些实施例中,在将N个区块链交易识别为有资格进行并行处理的候选区块链交易之后,区块链网络节点将N个区块链交易分配为由第一线程池执行。在一些实施例中,将N个区块链交易中的相应NK个区块链交易分配给相应的第K线程。例如,可以将N个交易中的N1个区块链交易分配给第一线程,可以将N个交易中的N2个区块链交易分配给第二线程,可以将N个交易中的N3个区块链交易分配给第三线程,依此类推。这样,使用第一线程执行N1个区块链交易可与使用第二线程执行N2个区块链交易以及使用其他线程执行其他区块链交易(例如,使用第一线程池中的第三线程执行N3个区块链交易)并行执行。
在步骤710,通过K个线程并行执行N个区块链交易。在一些实施例中,除了使用第一线程池中的多个线程的并行处理之外,分配给第一线程池中的相同线程的区块链交易可以被异步地执行。异步执行允许在接收到先前区块链交易的执行结果之前执行区块链交易。换句话说,在先前区块链交易完全执行之后,区块链交易无需等待即可开始执行。在一些实施例中,例如通过在调用协程来执行先前区块链交易(或先前区块链交易的一些操作)之后开始执行区块链交易,生成协程以允许区块链交易被异步地执行。
继续上面的示例,N1个区块链交易的执行可与N2个区块链交易的执行并行进行。在一些实施例中,对于N个区块链交易中的分配给第一线程池中的第一线程的N1个区块链交易,在步骤721,可以基于N1个区块链交易来识别要异步执行的P1个协程,其中P1大于或等于N1。例如,可以针对N1个区块链交易中的每一个生成一个或多个协程。在步骤731,然后可以通过异步地执行P1个协程来执行N1个区块链交易。类似地,对于N个区块链交易中的分配给第一线程池中的第二线程的N2个区块链交易,在步骤722,可以基于N2个区块链交易来识别要异步执行的P2个协程。在步骤732,然后可以通过异步地执行P2个协程来执行N2个区块链交易。
在一些实施例中,可以基于区块链交易的类型或者区块链交易的任务或操作(例如,它们是I/O绑定的还是CPU绑定的)来为区块链交易生成协程。在一些实施例中,可以为I/O绑定的区块链交易或I/O绑定的区块链交易的任务(例如,包括访问区块链存储系统的一个或多个I/O操作的区块链交易)生成协程。在一些实施例中,可以为一个或多个任务或操作生成协程,所述任务或操作可使处理器等待或空闲以等待同一区块链交易中的先前任务或操作的结果。例如,可以为等待中断或用户输入的操作生成协程,使得一旦调用协程并执行协程切换就可以执行该操作之后的操作。当接收到等待的操作信息时,区块链交易可以返回并完成操作。
在一些实施例中,基于N1个区块链交易来识别要异步执行的P1个协程包括针对N1个区块链交易中的每个区块链交易,识别要异步执行的一个或多个协程。在一些实施例中,异步地执行P1个协程包括使用第二线程池(例如,图3的线程池312或图4的线程池414)访问存储在存储系统中的区块链数据,其中第二线程池不同于第一线程池。在一些实施例中,第二线程池专用于存储系统。在一些实施例中,访问存储在存储系统中的区块链数据包括以下一项或多项:读取存储在存储系统所存储的区块链中的数据,以及将新数据写入区块链。在一些实施例中,区块链数据包括区块数据、状态数据、索引数据或流数据中的一个或多个。
在一些实施例中,可以将不同类型的区块链数据分别存储在各自的存储设备中,或者混合存储在一个或多个公共存储设备中。在一个示例中,存储系统可以包括用于存储区块数据的第一存储设备、用于存储状态数据的第二存储设备、用于存储索引数据的第三存储设备和用于存储流数据的第四存储设备。区块数据、状态数据、索引数据和流数据可以存储在存储系统的存储设备上它们各自的数据库中。
在一些实施例中,第二线程池中的线程可以被配置为并行访问存储系统的一个或多个存储设备。作为示例,第二线程池中的第一线程可以被配置为访问用于存储区块数据的第一存储设备,第二线程池中的第二线程可以被配置为访问用于存储状态数据的第二存储设备,第二线程池中的第三线程可以被配置为访问用于存储索引数据的第三存储设备,第二线程池中的第四线程可以被配置为访问用于存储流数据的第四存储设备。作为另一示例,可以使用多个线程来访问相同或单个存储设备,以利用存储设备支持的多访问功能来增加存储系统的吞吐量和存储系统上的I/O操作的效率。
在一些实施例中,N1个区块链交易包括一系列操作,其中该一系列操作可以包括第一操作和在第一操作之后的第二操作。在一些实施例中,第一操作可以是访问存储系统的I/O操作。在一些实施例中,I/O操作包括异步GET请求或异步PUT请求中的至少一个。
在一些实施例中,P1个协程包括第一协程和第二协程。在一些实施例中,通过异步地执行P1个协程来执行N1个区块链交易包括:使用第一协程执行第一操作,以及与第一操作异步地执行第二操作。在一些实施例中,与第一操作异步地执行第二操作包括在接收到第一操作的执行结果之前使用第二协程执行第二操作。例如,使用第二协程执行第二操作不需要等到第一操作完成就开始,从而减少了第一操作和第二操作的总执行时间,并更有效地利用了线程508-N。
在一些实施例中,在接收到第一操作的执行结果之前使用第二协程执行第二操作包括:保存第一操作的第一操作上下文;执行从第一操作的第一操作上下文到第二操作的第二操作上下文的上下文切换。在一些实施例中,第一操作上下文包括第一操作的寄存器数据、堆栈指针或程序计数器中的至少一个。
在一些实施例中,第一协程包括与第一操作的回调函数相对应的回调标识。在一些实施例中,与第一操作异步地执行第二操作还包括:接收由第一操作的回调函数返回的值;以及保存第二操作的第二操作上下文;恢复第一操作的第一操作上下文;基于由所述第一操作的回调函数返回的值,恢复所述第一操作的执行。
在步骤712,区块链网络节点在执行M个区块链交易后,生成包括M个区块链交易的区块链区块。在一些实施例中,M个区块链交易中的一个或多个在执行N个区块链交易之后执行。例如,M个区块链交易中的一个或多个可以与N个区块链交易串联执行或同步执行。
在步骤714,区块链网络节点将区块链区块添加或附加到与该区块链网络节点相关联的存储系统的区块链。
图8是根据本文实施例的装置800的模块的示例的图。装置800可以是被配置为处理区块链交易的区块链节点的实施例的示例。装置800可以对应于上述实施例,装置800包括:接收模块802,接收要执行的M个区块链交易,其中M为大于1的整数;执行模块804,执行M个区块链交易;生成模块806,生成包括所述M个区块链交易的区块链区块;以及添加模块808,将所述区块链区块添加至与所述区块链节点相关联的存储系统中的区块链。
在一些实施例中,装置800还包括:识别子模块,从M个区块链交易中识别出N个区块链交易,其中N小于或等于M;分配子模块,将N个区块链交易分配为由所述第一线程池的K个线程并行执行,其中,将所述N个区块链交易中的相应NK个区块链交易分配给相应的第K线程;以及执行子模块,通过K个线程并行执行N个区块链交易。
在一些实施例中,通过K个线程并行执行N个区块链交易包括:对于N个区块链交易中的分配给第一线程池中的第一线程的N1个区块链交易,基于N1个区块链交易来识别要异步执行的P1个协程,其中P1大于或等于N1;通过异步地执行P1个协程来执行N1个区块链交易。
在一些实施例中,异步地执行P1个协程包括使用第二线程池访问存储在存储系统中的区块链数据。第二线程池不同于第一线程池。
在一些实施例中,第二线程池专用于存储系统。
在一些实施例中,访问存储在存储系统中的区块链数据包括以下一项或多项:读取存储在存储系统所存储的区块链中的数据;以及将新数据写入区块链。区块链数据包括区块数据、状态数据、索引数据或流数据中的一个或多个。
在一些实施例中,M个区块链交易中的一个或多个在执行N个区块链交易之后执行。
在一些实施例中,基于N1个区块链交易来识别要异步执行的P1个协程包括:针对N1个区块链交易中的每个区块链交易,识别要异步执行的一个或多个协程。
在一些实施例中,N1个区块链交易包括一系列操作。该一系列操作包括第一操作和在第一操作之后的第二操作。第一操作包括访问存储系统的输入/输出(I/O)操作。
在一些实施例中,I/O操作包括异步GET请求或异步PUT请求中的至少一个。
在一些实施例中,P1个协程包括第一协程和第二协程。通过异步地执行P1个协程来执行N1个区块链交易包括:使用第一协程执行第一操作;以及与第一操作异步地执行第二操作。与第一操作异步地执行第二操作包括在接收到第一操作的执行结果之前使用第二协程执行第二操作。
在一些实施例中,在接收到第一操作的执行结果之前使用第二协程执行第二操作包括:保存第一操作的第一操作上下文,其中,第一操作上下文包括第一操作的寄存器数据、堆栈指针或程序计数器中的至少一个;执行从第一操作的第一操作上下文到第二操作的第二操作上下文的上下文切换。
在一些实施例中,第一协程包括与第一操作的回调函数相对应的回调标识。与第一操作异步地执行第二操作还包括:接收由第一操作的回调函数返回的值;以及保存第二操作的第二操作上下文;恢复第一操作的第一操作上下文;以及,基于由所述第一操作的回调函数返回的值,恢复所述第一操作的执行。
前述实施例中示出的系统、装置、模块或单元可以通过使用计算机芯片或实体来实现,或者可以通过使用具有特定功能的产品来实现。典型的实施例设备是计算机(计算机可以是个人计算机)、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件接收和发送设备、游戏控制台、平板电脑、可穿戴设备或这些设备的任意组合。
对于装置中每个模块的功能和作用的实施过程,可以参考前述方法中相应步骤的实施过程。为简单起见,这里省略了细节。
由于装置实施例基本上与方法实施例相对应,因此对于相关部件,可以参照方法实施例中的相关描述。前一描述的装置实施仅是示例。作为单独部件描述的模块可以是或可以不是物理上分离的,并且作为模块显示的部件可以是或可以不是物理模块,可以位于一个位置,或可以分布在多个网络模块上。可以基于实际需求来选择一些或所有模块,以实现本文方案的目标。本领域普通技术人员在无需付出创造性努力的情况下就能理解和实现本申请的实施例。
再次参考图8,它可以被解释为示出了区块链交易处理装置的内部功能模块和结构。区块链交易处理装置可以是与区块链网络节点相关联的计算机服务器的示例。本质上,执行主体可以是电子设备,该电子设备包括:一个或多个处理器;被配置为存储一个或多个处理器的可执行指令的一个或多个计算机可读存储器。在一些实施例中,所述一个或多个计算机可读存储器耦接至所述一个或多个处理器且其上存储有编程指令,所述编程指令可以由所述一个或多个处理器执行以执行本文所描述的算法、方法、函数、处理、流程和程序。本文还提供了耦接至一个或多个处理器并且其上存储有指令的一个或多个非暂时性计算机可读存储介质,当所述指令由所述一个或多个处理器执行时,所述指令将促使所述一个或多个处理器按照本文提供的方法的实施例执行操作。
本文还提供了实现本文提供的方法的系统。该系统包括一个或多个处理器,以及耦接到一个或多个处理器并在其上存储有指令的计算机可读存储介质,该指令在由一个或多个处理器执行时,使一个或多个处理器执行根据本文提供的方法实施例所述的操作。
本文中描述的主题、动作以及操作的实施例可以在数字电子电路、有形体现的计算机软件或固件、计算机硬件,或者其中的一个或多个的组合中实现,包括本文中公开的结构及其结构等同物。本文描述的主题的实施例可以被实现为一个或多个计算机程序,例如,一个或多个计算机程序指令模块,编码在计算机程序载体上用于由数据处理装置执行,或者以控制数据处理装置的操作。例如,计算机程序载体可以包括一个或多个计算机可读存储介质,在其上编码或存储有指令。载体可以是有形的非暂态计算机可读介质,例如,磁盘、磁光盘或者光盘、固态驱动器、随机存取存储器(RAM)、只读存储器(ROM)或者其它媒体类型。可选地或附加地,载体可以是人工生成的传播信号,例如,机器生成的电信号、光信号或电磁信号,其生成为对信息进行编码以传输到合适的接收器装置以由数据处理装置执行。计算机存储介质可以是或部分是机器可读存储设备、机器可读存储基板、随机或串行访问存储器设备或其中的一个或多个的组合。计算机存储介质不是传播信号。
计算机程序也可以称为或描述为程序、软件、软件应用程序、app、模块、软件模块、引擎、脚本或代码,可以以任何形式的编程语言编写,包括编译或解释性语言、或声明或程序性语言;其可以以任何形式部署,包括作为独立程序或者作为模块、组件、引擎、次例程或适合在计算环境中执行的其它单元,该环境可包括在一个或多个位置中由数据通信网络互联的一台或多台计算机。
计算机程序可以但是没有必需对应于文件系统中的文件。计算机程序可以存储在:保存其他程序或数据的文件的一部分中,例如,存储在标记语言文档中的一个或多个脚本;专用于所讨论的程序的单个文件中;或者多个协调文件中,例如,存储一个或多个模块、子程序或代码部分的多个文件。
用于执行计算机程序的处理器例如既包括通用和专用微处理器,又包括任何种类的数字计算机的任何一个或多个处理器。通常,处理器将从耦接到处理器的非暂时性计算机可读介质接收数据以及用于执行的计算机程序的指令。
术语“数据处理装置”涵盖了用于处理数据的所有类型的装置、设备和机器,例如包括可编程处理器、计算机,或多个处理器或计算机。数据处理装置可包括例如FPGA(现场可编程门阵列),ASIC(专用集成电路)或GPU(图形处理单元)的专用逻辑电路。该装置除了包括硬件之外,也可以包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或其中的一个或多个的组合的代码。
本文中描述的过程和逻辑流程可以由一个或多个计算机或执行一个或多个计算机程序的处理器执行,以通过对输入数据进行操作并生成输出来执行操作。该过程和逻辑流程还可通过专用逻辑电路,例如,FPGA、ASIC或GPU,或通过专用逻辑电路和一个或多个编程计算机的组合来执行。
适合于执行计算机程序的计算机可以基于通用和/或专用微处理器,或任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的元件可以包括用于执行指令的中央处理单元和用于存储指令和数据的一个或多个存储设备。中央处理单元和存储器可以补充有专用逻辑电路或集成在专用逻辑电路中。
通常,计算机也会包括或可操作地耦接以从一个或多个存储设备接收数据或将数据传输到一个或多个存储设备。存储设备可以是例如磁盘、磁光盘或光盘、固态驱动器或任何其它类型的非暂时性计算机可读介质。但是,计算机也不必具有此类设备。因而,计算机可以耦接到一个或多个存储设备,例如位于本地和/或远程的一个或多个存储器。例如,一台计算机可以包括作为计算机集成组件的一个或多个本地存储器,或者计算机可以耦接到位于云网络中的一个或多个远程存储器。此外,计算机也可以嵌入到另一个设备中,例如,移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收器、或诸如通用串行总线(USB)闪存驱动器等便携式存储设备,这只是列举几项。
组件可以通过直接或经由一个或多个中间组件例如电连接或光连接地彼此连接通信而彼此“耦接”。如果其中一个组件集成到另一个组件中,则这些组件也可以相互“耦接”。例如,将集成到处理器中的存储组件,例如,L2高速缓存组件,“耦接到”处理器。
为了与用户进行交互,本文中描述的主题的实施例可以在具有显示设备和输入设备的计算机上实现,或配置为与该计算机进行通信,显示设备例如为LCD(液晶显示器)监视器,用于向用户显示信息,输入设备例如为键盘和定位设备,用户可以通过输入设备向计算机提供输入,定位设备例如为鼠标、轨迹球或触摸板。其他类型的设备也可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以接收来自用户的任何形式的输入,包括声音、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过向用户设备上的web浏览器发送web页面以响应从web浏览器收到的请求,或者通过与例如智能电话或电子平板电脑等的用户设备上运行的应用程序(app)进行交互。计算机也可以通过将文本消息或其它形式的消息发送到诸如运行消息收发程序的智能手机等个人设备,并从用户接收响应消息,来与用户进行交互。
本文使用与系统,装置和计算机程序组件有关的术语“被配置为”。对于被配置为执行特定操作或动作的一个或多个计算机的系统,意味着系统已经在其上安装了在运行中促使该系统执行所述操作或动作的软件、固件、硬件或它们的组合。对于被配置为执行特定操作或动作的一个或多个计算机程序,意味着一个或多个程序包括当被数据处理装置执行时促使该装置执行所述操作或动作的指令。对于被配置为执行特定操作或动作的专用逻辑电路,意味着该电路具有执行所述操作或动作的电子逻辑。
尽管本文包含许多特定的实施细节,但是不应将这些理解为对所要求保护的范围的限制,而是作为对特定实施例特定的特征的描述,所要求保护的范围由权利要求本身限定。本文中在单独的实施例的上下文中描述的某些特征也可以在单个实施例中组合地实现。相反,在单个实施例的上下文中描述的各种特征也可以单独或者以任何适合的子组合方式实现在多个实施例中。而且,尽管以上描述的特征可以以某些组合起作用并且甚至最初是这样主张的,但是在某些情况下,可以从要求保护的组合中删除该组合中的一个或多个特征,并且权利要求书也可以针对子组合或子组合的变型。
类似地,虽然以特定顺序在附图中描绘了操作并且在权利要求中叙述了操作,但是这不应该被理解为:为了达到期望的结果,要求以所示的特定顺序或依次执行这些操作,或者要求执行所有示出的操作。在某些情况下,多任务和并行处理会是有利的。此外,不应将上述实施例中的各种系统模块和组件的分离理解为在所有实施例中都要求这种分离,并且应当理解的是,所描述的程序组件和系统通常可以在单个软件产品中集成在一起或打包成多个软件产品。
已经对本主题的特定实施例进行了描述。其它实施例也落在以下权利要求书的范围内。例如,权利要求书中记载的动作可以以不同的顺序执行并且仍然能实现期望的结果。作为一个示例,附图中描绘的过程无需要求所示的特定顺序或次序来实现期望的结果。在一些情况下,多任务并行处理可能是有利的。
Claims (14)
1.一种计算机实现的用于区块链网络的区块链网络节点处理区块链交易的方法,所述方法包括:
接收要由所述区块链网络节点执行的M个区块链交易,其中,所述区块链网络节点与在区块链中存储区块链数据的存储系统关联;
所述区块链网络节点执行所述M个区块链交易,其中执行所述M个区块链交易包括:
从所述M个区块链交易中识别出要异步执行的N个区块链交易,其中N小于或等于M;
将所述N个区块链交易分配为由K个线程的第一线程池并行执行,其中,将所述N个区块链交易中的相应NK个区块链交易分配给相应的第K线程;
通过所述K个线程并行执行所述N个区块链交易,其中:
对于N个区块链交易中的分配给所述第一线程池中第一线程的N1个区块链交易,
基于所述N1个区块链交易识别要异步执行的P1个协程,其中P1大于或等于N1;和
通过异步地执行所述P1个协程来执行所述N1个区块链交易;
在执行所述M个区块链交易后,生成包含所述M个区块链交易的区块链区块;以及
将所述区块链区块添加到与所述区块链网络节点关联的所述存储系统内的所述区块链中。
2.根据权利要求1所述的计算机实现的方法,其中,异步地执行所述P1个协程包括:
使用第二线程池访问存储在所述存储系统中的区块链数据,其中,所述第二线程池不同于所述第一线程池。
3.根据权利要求2所述的计算机实现的方法,其中,所述第二线程池专用于所述存储系统。
4.根据权利要求2所述的计算机实现的方法,其中,
访问存储在所述存储系统中的区块链数据包括以下一项或多项:
读取存储在所述存储系统所存储的所述区块链中的数据;以及
将新数据写入所述区块链。
5.根据权利要求2所述的计算机实现的方法,所述区块链数据包括区块数据、状态数据、索引数据或流数据中的一个或多个。
6.根据权利要求1-5中任一项权利要求所述的计算机实现的方法,其中,所述M个区块链交易中的一个或多个与所述N个区块链交易同步地执行。
7.根据权利要求1-5中任一项权利要求所述的计算机实现的方法,其中,基于所述N1个区块链交易识别要异步执行的P1个协程包括:
针对所述N1个区块链交易中的每个交易,识别要异步执行的一个或多个协程。
8.根据权利要求1-5中任一项权利要求所述的计算机实现的方法,其中,
所述N1个区块链交易包括一系列操作,
所述一系列操作包括第一操作和在所述第一操作之后的第二操作,
所述第一操作包括访问所述存储系统的输入/输出I/O操作。
9.根据权利要求8所述的计算机实现的方法,其中,所述I/O操作包括异步GET请求或异步PUT请求中的至少一个。
10.根据权利要求8所述的计算机实现的方法,其中,所述P1个协程包括第一协程和第二协程,并且通过异步地执行所述P1个协程来执行所述N1个区块链交易包括:
使用所述第一协程执行所述第一操作;以及
与所述第一操作异步地执行所述第二操作,其中,与所述第一操作异步地执行所述第二操作包括在接收到所述第一操作的执行结果之前使用所述第二协程执行所述第二操作。
11.根据权利要求10所述的计算机实现的方法,其中,在接收到所述第一操作的执行结果之前使用所述第二协程执行所述第二操作包括:
保存所述第一操作的第一操作上下文,所述第一操作上下文包括所述第一操作的寄存器数据、堆栈指针或程序计数器中的至少一个;以及
执行从所述第一操作的第一操作上下文到所述第二操作的第二操作上下文的上下文切换。
12.根据权利要求10所述的计算机实现的方法,其中,所述第一协程包括与所述第一操作的回调函数相对应的回调标识,并且所述方法还包括:
接收由所述第一操作的所述回调函数返回的值;
保存所述第二操作的第二操作上下文;
恢复所述第一操作的第一操作上下文;以及
基于由所述第一操作的所述回调函数返回的所述值,恢复所述第一操作的执行。
13.一种用于数据处理的系统,包括:
一个或多个处理器;和
耦接至所述一个或多个处理器并且其上存储有指令的一个或多个计算机可读存储器,所述指令能够由所述一个或多个处理器执行以执行权利要求1至12中的任一项所述的计算机实现的方法。
14.一种用于处理区块链交易的装置,所述装置包括用于执行权利要求1至12中任一项所述的计算机实现的方法的多个模块。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2020/106564 WO2022027175A1 (en) | 2020-08-03 | 2020-08-03 | Blockchain transaction processing systems and methods |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113168652A CN113168652A (zh) | 2021-07-23 |
CN113168652B true CN113168652B (zh) | 2022-04-15 |
Family
ID=76879258
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080006241.0A Active CN113168652B (zh) | 2020-08-03 | 2020-08-03 | 区块链交易处理系统和方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11604608B2 (zh) |
EP (1) | EP3977390B1 (zh) |
CN (1) | CN113168652B (zh) |
WO (1) | WO2022027175A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11372724B2 (en) * | 2019-07-05 | 2022-06-28 | Samsung Electronics Co., Ltd | Method and system for handling blockchain network based file storage system |
CN115398397A (zh) * | 2020-08-03 | 2022-11-25 | 支付宝(杭州)信息技术有限公司 | 区块链交易处理系统和方法 |
CN113743951A (zh) * | 2021-11-04 | 2021-12-03 | 北京微芯感知科技有限公司 | 区块链的智能合约交易处理方法、装置 |
CN115277108A (zh) * | 2022-07-05 | 2022-11-01 | 成都安恒信息技术有限公司 | 一种对去中心化应用抢跑攻击进行防御的方法及系统 |
CN115208900B (zh) * | 2022-07-15 | 2024-03-15 | 柏域信息科技(上海)有限公司 | 基于区块链与博弈模型的多云架构云服务资源调度方法 |
CN117032999B (zh) * | 2023-10-09 | 2024-01-30 | 之江实验室 | 一种基于异步运行时的cpu-gpu协同调度方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110728578A (zh) * | 2019-09-29 | 2020-01-24 | 南京金宁汇科技有限公司 | 区块链交易的并行执行方法、系统及存储介质 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050262180A1 (en) * | 2004-05-19 | 2005-11-24 | Palecek Lowell D | Using a common key to manage separate, independent I/O and worker theread queues |
CN104142858B (zh) | 2013-11-29 | 2016-09-28 | 腾讯科技(深圳)有限公司 | 阻塞任务调度方法及装置 |
CN106980546B (zh) * | 2016-01-18 | 2021-08-27 | 阿里巴巴集团控股有限公司 | 一种任务异步执行方法、装置及系统 |
US10255108B2 (en) * | 2016-01-26 | 2019-04-09 | International Business Machines Corporation | Parallel execution of blockchain transactions |
US10102265B1 (en) * | 2017-04-12 | 2018-10-16 | Vijay K. Madisetti | Method and system for tuning blockchain scalability for fast and low-cost payment and transaction processing |
CN107704269A (zh) | 2017-10-16 | 2018-02-16 | 中国银行股份有限公司 | 一种基于区块链生成区块的方法以及系统 |
CN109636592B (zh) | 2017-10-20 | 2023-02-28 | 北京航空航天大学 | 高性能智能合约设计 |
US20210256016A1 (en) * | 2018-06-25 | 2021-08-19 | Commonwealth Scientific And Industrial Research Organisation | Blockchain system and method |
US11620152B2 (en) * | 2018-07-20 | 2023-04-04 | Ezblock Ltd. | Blockchain sharding with parallel threads |
US11182379B2 (en) * | 2018-08-24 | 2021-11-23 | Oracle International Corporation | DAG based methods and systems of transaction processing in a distributed ledger |
WO2020077579A1 (zh) * | 2018-10-18 | 2020-04-23 | 北京兆信通能科技有限公司 | 区块链能源交易平台中的交易任务并行处理的方法与系统 |
CN111095326B (zh) * | 2019-04-12 | 2023-08-22 | 创新先进技术有限公司 | 用于在区块链网络中执行多个交易的方法、系统和装置 |
CN110224808B (zh) | 2019-05-07 | 2022-10-04 | 深圳壹账通智能科技有限公司 | 基于区块链的银行数据共享方法、装置、计算机设备和存储介质 |
CN113570460A (zh) * | 2019-08-30 | 2021-10-29 | 创新先进技术有限公司 | 在区块链中并发执行交易的方法和装置 |
CN110675255B (zh) * | 2019-08-30 | 2021-04-02 | 创新先进技术有限公司 | 在区块链中并发执行交易的方法和装置 |
CN110704112B (zh) * | 2019-08-30 | 2021-04-02 | 创新先进技术有限公司 | 在区块链中并发执行交易的方法和装置 |
EP3777030B1 (en) * | 2019-11-27 | 2022-08-24 | Alipay (Hangzhou) Information Technology Co., Ltd. | Asynchronous processing of blockchain blocks |
CN111295650B (zh) * | 2019-12-05 | 2023-05-16 | 支付宝(杭州)信息技术有限公司 | 在基于区块链的系统中执行映射迭代 |
CN111625593B (zh) | 2020-04-21 | 2023-09-08 | 金蝶软件(中国)有限公司 | 基于区块链的数据处理方法、装置、计算机设备 |
CN111444192B (zh) * | 2020-06-12 | 2020-10-16 | 支付宝(杭州)信息技术有限公司 | 块链式账本中全局状态的哈希的生成方法、装置及设备 |
-
2020
- 2020-08-03 WO PCT/CN2020/106564 patent/WO2022027175A1/en unknown
- 2020-08-03 CN CN202080006241.0A patent/CN113168652B/zh active Active
- 2020-08-03 EP EP20897632.4A patent/EP3977390B1/en active Active
-
2021
- 2021-06-25 US US17/359,459 patent/US11604608B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110728578A (zh) * | 2019-09-29 | 2020-01-24 | 南京金宁汇科技有限公司 | 区块链交易的并行执行方法、系统及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
EP3977390A4 (en) | 2022-04-06 |
US11604608B2 (en) | 2023-03-14 |
WO2022027175A1 (en) | 2022-02-10 |
EP3977390A1 (en) | 2022-04-06 |
CN113168652A (zh) | 2021-07-23 |
US20210326074A1 (en) | 2021-10-21 |
EP3977390B1 (en) | 2023-12-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113168652B (zh) | 区块链交易处理系统和方法 | |
CN110945550B (zh) | 在可信执行环境下处理和存储区块链数据 | |
EP3669280B1 (en) | Shared blockchain data storage | |
JP6827564B2 (ja) | 分散型台帳システムにおけるトランザクションのパラレル実行の実施 | |
US11108555B2 (en) | Performing map iterations in a blockchain-based system | |
EP3769233B1 (en) | Performing map iterations in a blockchain-based system | |
TW202121226A (zh) | 區塊鏈區塊的非同步處理 | |
US11487736B2 (en) | Blockchain transaction processing systems and methods | |
CN113994324B (zh) | 具有高效世界状态数据结构的区块链系统 | |
US11500845B2 (en) | Blockchain transaction processing systems and methods | |
WO2022087834A1 (en) | Blockchain system having efficient world state data structures | |
Shrivastava et al. | Secure Storage and Data Sharing Scheme Using Private Blockchain-Based HDFS Data Storage for Cloud Computing |
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 |