CN113454597A - 区块链交易处理系统和方法 - Google Patents
区块链交易处理系统和方法 Download PDFInfo
- Publication number
- CN113454597A CN113454597A CN202080014813.XA CN202080014813A CN113454597A CN 113454597 A CN113454597 A CN 113454597A CN 202080014813 A CN202080014813 A CN 202080014813A CN 113454597 A CN113454597 A CN 113454597A
- Authority
- CN
- China
- Prior art keywords
- blockchain
- transactions
- transaction
- bound
- blockchain transactions
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
-
- 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/466—Transaction processing
-
- 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/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
-
- 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/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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
-
- 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
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
- H04L9/3239—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3263—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving certificates, e.g. public key certificate [PKC] or attribute certificate [AC]; Public key infrastructure [PKI] arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本文公开了用于处理区块链交易的方法、系统和装置,包括编码在计算机存储介质上的计算机程序。用于处理区块链交易的方法包括接收要由区块链节点执行的多个区块链交易。基于多个区块链交易是CPU绑定的还是I/O绑定的,区块链节点分配一个或多个线程和一个或多个协程,以处理多个块链交易。区块链节点使用一个或多个线程和一个或多个协程来执行多个区块链交易,生成包括多个区块链交易的区块链区块,并且将区块链区块添加到区块链中。
Description
技术领域
本文涉及处理区块链交易。
背景技术
随着区块链技术的快速发展,区块链技术的应用或服务场景不断扩展,例如,在司法认证、可追溯性、发票、供应链金融等方面。各种区块链服务生成的数据量也在快速增长。大规模区块链数据(例如,针对大规模账户生成的数据、针对单个账户的大量状态数据、以及针对单个区块链的大量区块数据)的处理和存储需要大量的计算机资源,例如运算/计算资源、存储资源和网络资源。此外,数据规模的增长,尤其是在区块链系统已长期运行之后,进一步增加了对计算资源的需求。
这样,需要一种更有效的处理区块链数据和处理区块链交易的方式,以满足各种区块链应用不断增长的需求。
发明内容
主题所描述的实施例可以单独地或组合地包括一个或多个特征。
例如,在一个实施例中,一种用于处理区块链交易的方法包括接收要由区块链节点执行的多个区块链交易。所述区块链节点确定所述多个区块链交易是CPU绑定的还是I/O绑定的。基于所述多个区块链交易是CPU绑定的或I/O绑定的,所述区块链节点进一步分配一个或多个线程以用于并行处理所述多个区块链交易以及分配一个或多个协程以用于异步地处理所述多个区块链交易。所述区块链节点使用所分配的一个或多个线程和一个或多个协程来执行所述多个区块链交易,生成包括所述多个区块链交易的区块链区块,以及将所述区块链区块添加到区块链中。
在一些实施例中,这些一般和具体方面可以使用系统、方法或计算机程序或系统、方法和计算机程序的任何组合来实现。前述和其他描述的实施例可各自可选地包括以下方面中的一个或多个。
在一些实施例中,分配所述区块链节点的一个或多个线程和所述区块链节点的一个或多个协程,以处理所述多个区块链交易,包括:响应于确定所述多个区块链交易是I/O绑定的,确定用于并行处理所述多个区块链交易的第一数量的线程;或响应于确定所述多个区块链交易是CPU绑定的,确定用于并行处理所述多个区块链交易的第二数量的线程,其中,所述第一数量的线程等于或少于所述第二数量的线程,并且所述第一数量的线程在接收所述多个区块链交易之前被预先配置。
在一些实施例中,分配所述区块链节点的一个或多个线程和所述区块链节点的一个或多个协程,以处理所述多个区块链交易,包括:响应于确定所述多个区块链交易是I/O绑定的,确定用于异步地处理所述多个区块链交易的第三数量的协程;或响应于确定所述多个区块链交易是CPU绑定的,确定用于异步地处理所述多个区块链交易的第四数量的协程,其中,所述第四数量的协程少于所述第三数量的协程。
在一些实施例中,确定所述多个区块链交易是CPU绑定的还是I/O绑定的包括:基于所述多个区块链交易中的至少一个的交易类型来确定所述多个区块链交易是CPU绑定的还是I/O绑定的。
在一些实施例中,所述交易类型包括资产转移交易、账户查询交易、验证和提交交易、证书存储交易、原生智能合约交易、加密交易、TEE可信执行环境交易、WASM网络组装交易或EVM以太虚拟机交易。
在一些实施例中,基于所述多个区块链交易中的至少一个的交易类型来确定所述多个区块链交易是CPU绑定的还是I/O绑定的,包括:基于所述交易类型的先前区块链交易的统计计算资源利用记录,确定所述多个区块链交易中的所述至少一个是CPU绑定的还是I/O绑定的。
在一些实施例中,基于所述多个区块链交易中的一个的交易类型来确定所述多个区块链交易是CPU绑定的还是I/O绑定的,包括:响应于确定所述多个区块链交易中I/O绑定的交易的总数超过第一阈值,由所述区块链节点确定所述多个区块链交易是I/O绑定的。
在一些实施例中,由所述区块链节点基于所述多个区块链交易中的一个的交易类型来确定所述多个区块链交易是CPU绑定的还是I/O绑定的,包括:响应于确定所述多个区块链交易中CPU绑定的交易的总数超过第二阈值,由所述区块链节点确定所述多个区块链交易是CPU绑定的。
在一些实施例中,所述区块链节点包括总数量的线程,所述总数量的线程的子集专用于所述存储系统,并且,所述第一数量的线程不来自所述总数量的线程的所述子集。
在一些实施例中,所述方法还包括:获得所述区块链节点的、用于执行所述多个区块链交易的计算资源的利用数据;分析所述利用数据;以及基于所述分析来更新用于确定接下来的多个区块链交易是CPU绑定的还是I/O绑定的标准。
在一些实施例中,更新用于确定接下来的多个区块链交易是CPU绑定的还是I/O绑定的标准包括以下中的一个或多个:将新类型的区块链交易指定为CPU绑定的或I/O绑定的;将现有类型的区块链交易的分类从CPU绑定的改变为I/O绑定的或者从I/O绑定的改变为CPU绑定的;或更新确定所述接下来的多个区块链交易是CPU绑定的还是I/O绑定的阈值。
应当理解的是,根据本文所述的方法可以包括本文描述的各个方面和特征的任何组合。即,根据本文所述的方法不限于本文具体描述的各个方面和特征的组合,而是还包括所提供的各个方面和特征的任何组合。
本文的一个或多个实施例的细节将在说明书附图和以下描述中阐述。本文的其它特征和优点通过说明书和附图以及权利要求书将显现。
附图说明
图1是示出可用于执行本文实施例的环境的示例的图。
图2是示出根据本文实施例的架构的示例的图。
图3是示出根据本文实施例的用于处理区块链交易的系统的示例的图。
图4是示出根据本文实施例的存储内核的示例的图。
图5是示出可以根据本文实施例执行的用于处理区块链交易的过程的示例的图。
图6是示出可以根据本文实施例执行的用于访问存储在存储系统中的区块链数据的过程的示例的图。
图7是示出可以根据本文实施例执行的处理区块链交易的过程的示例的流程图。
图8是示出可以根据本文实施例执行的处理区块链交易的过程的示例的流程图。
图9是示出根据本文实施例的装置的模块的示例的图。
在各个附图中相同的附图标记和名称表示相同的元件。
具体实施方式
本文描述了用于处理区块链交易的技术。区块链交易(也简称为交易)可以包括要由区块链网络中的区块链节点执行的数据、指令或操作。区块链交易可以例如由客户端设备或区块链网络的参与系统生成。区块链节点可以接收区块链交易,对区块链交易执行共识处理,并在达成共识后,通过将区块链交易保存到区块链区块中以进行持久存储来发布区块链交易。处理区块链交易可能需要大量的运算资源,包括计算资源(例如,中央处理单元(CPU)资源)和输入/输出(I/O)资源(例如,存储资源和网络资源),尤其是随着区块链系统的规模增加、区块链系统的运行时间延长和/或区块链系统中维护的区块链的长度增加。本文中描述的技术可以例如通过利用多个区块链交易的并行和并发处理来提高多个维度上的多个区块链交易的处理效率。例如,可以将多个区块链交易中的每一个或者多个区块链交易中的每个子集分配为由多个线程中相应的一个线程并行地执行,从而实现多个区块链交易的并行处理。作为另一示例,区块链交易或区块链交易的操作可以在接收到先前区块链交易或区块链交易的先前操作的执行结果之前执行,以实现异步或并发处理,而不会损害或以其他方式改变区块链交易和/或区块链交易的操作的执行结果。
本文中描述的技术产生了几种技术效果。在一些实施例中,通过适当地配置区块链系统并战略性地调度多个区块链交易,以实现多个区块链交易的并行和并发处理,所描述的技术可以在不增加可用计算资源的情况下显著提高多个区块链交易的处理效率(例如,以每秒交易(TPS)量来衡量)。在区块链交易的处理中,尽管区块链区块是同步生成或串行生成的,但是某些区块链交易和/或一个或多个区块链交易的某些I/O操作可以异步和/或并行地处理或执行,例如,取决于区块链交易和/或区块链交易的I/O操作之间是否存在冲突。在一些实施例中,所描述的技术可以使用多个线程来并行地处理区块链交易,并且使用协程(coroutine)来并发地或异步地处理区块链交易,从而提高了计算资源和存储资源的利用率。
在一些实施例中,所描述的技术可以通过更有效地利用计算机系统的运算资源来处理区块链交易,以改进计算机技术。在一些实施例中,例如,基于区块链交易的应用或用例和/或区块链交易中包括的操作,可以将区块链交易分类为CPU绑定(CPU-bound)的区块链交易或I/O绑定(I/O-bound)的区块链交易。CPU绑定的区块链交易可通常指受CPU瓶颈限制的区块链交易(例如,完成区块链交易的时间主要由CPU的速度/能力确定,或者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,区块链网络节点将区块链区块添加或附加到与该区块链网络节点相关联的存储系统的区块链。
如上所述,区块链交易可以包括用于完成一个或多个任务或功能的一个或多个操作,例如验证区块链交易(例如,验证区块链交易是否可以在区块链网络中达成共识)、响应于区块链交易的成功验证而提交区块链交易、将区块链交易的数据或其他信息写入区块链区块或另一数据库中、声明功能序言和结语、和/或编译或其他管理(例如,为变量保留空间,在功能完成之前清理堆栈并返回给功能的调用者)。
在一些实施例中,区块链交易可以与交易类型相关联。在一些实施例中,交易类型可以基于区块链交易要实现或执行的一个或多个功能、或者区块链交易涉及的计算环境或系统来分类。例如,交易类型可以包括验证交易、提交交易、加密交易、TEE交易(例如,在TEE环境中执行的交易)、基于虚拟机的交易(例如,WASM交易或EVM交易)、资产转移交易、账户查询交易、证书存储交易(例如,用于将数据作为证书或证据存储在区块链中)、或者原生智能合约交易(例如,不需要虚拟机来执行的智能合约交易)等。区块链网络或系统可以包括附加的或不同的交易。
在一些实施例中,不同交易类型的区块链交易的执行可能需要不同数量的计算资源(例如,CPU资源、I/O资源和网络资源)。在一个示例中,资产转移交易可以包括访问存储系统(例如磁盘)的大量读/写操作,但包括相对较小量的逻辑计算,因此与用于处理逻辑计算的CPU资源相比,需要相对较大量的用于处理读/写操作的I/O资源。在另一个示例中,基于虚拟机的交易,例如,WASM智能合约交易,可以包括大量智能合约逻辑计算,但包括小量的访问存储系统的读/写操作,因此与用于访问存储的I/O资源相比,需要相对较大量的用于处理逻辑计算的CPU资源。在一些实施例中,具有不同交易类型的区块链交易可以用不同的绑定类型(例如,CPU绑定的或I/O绑定的)来分类,例如,基于用于执行区块链交易所需的不同计算资源量。
在一些实施例中,区块链交易(例如,一个以上的区块链交易)可以进一步分类为CPU绑定的区块链交易或I/O绑定的区块链交易。例如,当CPU的处理速度不足够快以处理所有等待处理的多个区块链交易时(例如,在区块链区块的生成期间),多个区块链交易可以被分类为CPU绑定的区块链交易(换句话说,多个区块链交易受CPU瓶颈限制)。类似地,当系统的I/O能力不足够快以处理所有等待处理的多个区块链交易时(例如,在区块链区块的生成期间),多个区块链交易可以被分类为I/O绑定的区块链交易(换句话说,多个区块链交易受I/O瓶颈限制)。在一些实施例中,可以基于处理区块链交易的计算机系统的处理能力(例如,CPU处理能力和I/O处理能力)来确定一个或多个区块链交易是CPU绑定的还是I/O绑定的。在一些实施例中,确定一个或多个区块链交易是CPU绑定的还是I/O绑定的可以取决于计算机系统的当前CPU和/或I/O的负载。
在一些实施例中,可以基于一个或多个区块链交易的交易类型来确定一个或多个区块链交易的绑定类型(例如,CPU绑定的或I/O绑定的)。在一些实施例中,一些类型的区块链交易可以被分类、预定或配置为CPU绑定的或I/O绑定的。例如,一种不包括I/O操作的区块链交易(例如,加密交易、原生智能合约交易)可以被认为是CPU绑定的。在一些实施例中,一种包括多个I/O操作(例如,资产交换交易)的区块链交易可以被认为是I/O绑定的。
在一些实施例中,可以基于监控-反馈或机器学习处理来确定一个或多个区块链交易相对于处理装置(例如,接收和处理区块链交易的区块链节点)是CPU绑定的还是I/O绑定的。例如,可以对区块链交易执行训练处理,以学习如何确定区块链交易相对于处理装置是CPU绑定的还是I/O绑定的。在一些实施例中,可以基于具有特定交易类型的区块链交易来执行训练处理。在一个示例中,机器学习算法可用于基于样本数据或训练数据来构建区块链交易模型。在一些实施例中,训练数据可以包括处理装置的历史交易数据(例如,经处理的区块链交易的交易类型)和处理装置的度量数据(例如,处理装置的CPU处理能力和I/O处理能力)。在一些实施例中,区块链交易模型可以基于处理装置的历史交易数据和度量数据来预测特定交易类型的区块链交易是I/O绑定的还是CPU绑定的。
在一些实施例中,处理装置的历史交易数据可以包括关于在特定时段(例如,一天、一周或一个月)内由处理装置处理的一定数量的区块链交易的信息。历史交易数据可以包括指示每个区块链交易的交易类型的信息。历史交易数据可以包括一个或多个区块链交易中的I/O操作和/或非I/O操作(例如,不需要访问存储系统(例如存储盘)的CPU-only操作)的数量。历史交易数据可以包括在所述特定时段内由所述处理装置处理的所述一定数量的区块链交易中的I/O操作和/或非I/O操作的总数。历史交易数据可以包括区块链交易的附加或不同信息。
在一些实施例中,处理装置的度量数据可以包括指示处理装置的CPU处理能力和I/O处理能力的数据。处理能力可以指示处理装置在特定时段内能够处理的非I/O操作的数量。处理装置的度量数据可以包括处理装置的核或处理器的数量。
在一些实施例中,I/O处理能力可以指示I/O速度(例如,处理装置在特定时段(例如,一秒、一分钟、五分钟或十分钟)内能够处理的I/O操作的数量或处理装置的I/O吞吐量(例如,处理装置在特定时段内可以读取和/或写入的数据量)。处理装置的度量数据可以包括指示处理装置的存储器的大小以及存储器的读/写速度的数据。在一些实施例中,处理装置的度量数据可以进一步包括处理装置的网络度量,例如,用于访问网络的处理装置的带宽和/或时延(例如,远程存储设备、云盘或互联网)。
训练数据,包括处理装置的历史交易数据和度量数据,可以被馈送到区块链交易模型并用于训练区块链交易模型。在一些实施例中,当处理一定数量的区块链交易时,可以基于训练数据来确定处理装置的CPU负载和I/O负载。在一些实施例中,可以基于处理装置的计算资源利用数据来确定CPU负载和I/O负载。在一些实施例中,计算资源利用数据可以包括用于处理区块链交易的计算资源消耗相对于处理装置的整体计算资源容量的实时或统计利用率(例如,以百分比的形式)和计算资源的利用时间。在一个示例中,可以基于在特定时段(例如,一秒、一分钟、五分钟或十分钟)内要由CPU处理的区块链交易中的任务/操作的数量与CPU能够处理的任务/操作的数量的比率来确定CPU负载。可以基于在特定时段内要由处理装置处理的区块链交易中的I/O任务/操作的数量与处理装置能够处理的I/O任务/操作的数量的比率来确定I/O负载。
在一些实施例中,可以针对特定类型的区块链交易来确定处理装置的CPU负载和I/O负载。例如,可以针对特定时段内的第一交易类型的区块链交易确定第一CPU负载和第一I/O负载(例如,包括大量(例如100个)账户转账交易的大规模账户转账任务)。在该示例中,大规模账户转账任务可以包括存储系统的大量读/写操作(例如,I/O操作),从而给处理装置的I/O组件带来了很大的负担。如果处理装置的I/O能力不够快以处理大规模账户转账任务的所有读/写操作,则在处理账户转账任务期间可能出现I/O瓶颈。作为另一示例,可以针对特定时段内的第二交易类型的区块链交易(例如,加密交易)确定第二CPU负载和第二I/O负载。在该示例中,包括一定数量的加密交易的任务可能包括大量的逻辑计算,从而给处理装置的CPU带来了很大的负担。如果处理装置的CPU能力不够快以处理加密交易的所有逻辑计算,则在处理加密交易期间可能会出现CPU瓶颈。
在一些实施例中,区块链交易的绑定类型(例如,CPU绑定的或I/O绑定的)可以基于用于特定交易类型的区块链交易的CPU负载和I/O负载来确定。在一些实施例中,如果CPU负载等于或高于第一阈值,和/或I/O负载等于或低于第二阈值,则具有特定交易类型的区块链交易可以被确定为CPU绑定的交易。例如,当处理一定数量的加密交易时,处理装置的CPU负载可能高于第一阈值(例如,90%),而当处理该一定数量的加密交易时,I/O负载可能低于第二阈值(例如,50%),其小于第一阈值。在该示例中,加密交易可以被确定为CPU绑定的交易。作为另一示例,当处理一定数量的账户转账交易时,处理装置的I/O负载可能高于第一阈值(例如,95%),而当处理该一定数量的账户转账交易时,CPU负载可能低于第二阈值(例如,40%),其小于第一阈值。在该示例中,账户转账交易可以被确定为I/O绑定的交易。
在一些实施例中,取决于处理装置的CPU处理能力和I/O处理能力,特定交易类型对于不同的处理装置可具有相同或不同的绑定类型。在一些实施例中,每个区块链交易可以包括一个或多个I/O操作和/或一个或多个非I/O操作(例如,CPU-only操作)。在一个示例中,第一处理装置(例如,第一区块链节点)的CPU处理能力(例如,CPU可以在指定时间段内处理的较大数量的CPU-only操作)可以相对高于第二处理装置(例如,第二区块链节点)的CPU处理能力,而第一处理装置的I/O处理能力(例如,处理装置可以在指定时间段内处理的较少数量的I/O操作)可以相对低于第二处理装置的I/O处理能力。在该示例中,当处理相同的区块链交易时,第一处理装置的CPU负载(例如,在指定时间段内要由CPU处理的CPU-only操作的数量与CPU能够处理的CPU-only操作的数量的比率)可以低于第二处理装置的CPU负载。另一方面,当处理相同的区块链交易时,第一处理装置的I/O负载(例如,在预定时间段内要由处理装置处理的I/O操作的数量与处理装置能够处理的I/O操作的数量的比率)可以高于第二处理装置的I/O负载。此外,在该示例中,I/O负载可以高于第一处理装置中的CPU负载,而CPU负载可以高于第二处理装置中的I/O负载。这样,相同的区块链交易可以在第一处理装置中被确定为I/O绑定的,但是在第二处理装置中被确定为CPU绑定的。
在一些实施例中,当处理包括具有多于一种交易类型的区块链交易的任务(例如,执行在生成区块链的新区块之前接收的一定数量的区块链交易)时,处理装置可以基于其各自的交易类型来确定每个区块链交易的绑定类型。例如,处理装置可以确定交易处理任务包括第一数量的账户转账交易、第二数量的加密交易以及第三数量的验证和提交交易。在该示例中,处理装置可以确定账户转账交易是I/O绑定的交易,加密交易是CPU绑定的交易,验证和提交交易是CPU绑定的交易。在一些实施例中,如果包括多种交易类型的交易的交易处理任务的I/O绑定的交易的总数超过预定阈值,则处理装置可以确定该交易处理任务是I/O绑定的。在一些实施例中,如果交易处理任务中的CPU绑定的交易的总数超过预定阈值,则处理装置可以确定该交易处理任务中的交易是CPU绑定的。在确定包括多个不同交易类型的多个区块链交易的绑定类型时,可以使用附加的或不同的标准。
在一些实施例中,区块链交易可以被调度为由第一数量的线程和第二数量的协程执行。在一些实施例中,第一数量的线程可以被分配用于并行处理区块链交易,第二数量的协程可以被配置为用于并发处理区块链交易。在一些实施例中,AxB计算架构可以用于提高二维上的处理效率。在本文中,A是用于并行处理的线程数,B是每个线程可执行的并发I/O操作数。
在一些实施例中,用于并行执行区块链交易的线程数可以基于区块链交易的绑定类型来确定。如果确定一组区块链交易是I/O绑定的交易,则可以确定用于处理区块链交易的第一数量的线程(例如,1或2)。如果确定区块链交易是CPU绑定的,则可以确定用于处理区块链交易的第二数量的线程,其中第二数量大于第一数量。例如,第二数量可以达到处理装置中可用处理器核的最大数量(例如,256或1024)。在上述AxB计算架构的示例中,第二数量可以达到A。
在一些实施例中,可以基于区块链交易的绑定类型来确定用于并发执行区块链交易的协程数。如果确定一组区块链交易是I/O绑定的交易,则可以确定用于处理区块链交易的第一数量的协程。如果确定区块链交易是CPU绑定的,则可以确定用于处理区块链交易的第二数量(例如,1或2)的协程,其中第二数量小于第一数量。例如,第一数量的协程可以达到线程可执行的最大并发协程数。在上述AxB计算架构的示例中,第二数量可以达到B。
在一些实施例中,可以基于预配置来确定用于并行执行区块链交易的线程数。例如,对于CPU绑定和I/O绑定的区块链交易,用于处理区块链交易的线程数可以相同且可以例如基于系统配置或设计被预先配置。
在一些实施例中,可以基于系统度量动态地或实时地确定线程数和协程数。在一些实施例中,可以例如基于使用分类和训练的机器学习模型对接收的区块链交易的负载分析来确定线程数和协程数。
在一个示例中,处理装置可以接收处理1024个区块链交易的任务(例如,执行它们并将它们存储在新的区块链区块中)。作为示例,处理装置可以包括总共64个处理器核。处理装置可以将1024个交易中的每16个交易分配给64个处理器核中的每一个。对于分配给每个处理器核的16个交易,处理装置可以分别配置或创建16个协程,用于并发地处理16个交易。
在另一示例中,处理装置可以接收处理一组区块链交易的任务,其中每个区块链交易可以包括一个或多个I/O操作以及一个或多个CPU-only操作。在该示例中,处理装置可以包括256个处理器核,并且该组区块链交易可以包括1024个CPU-only操作和2048个I/O操作。处理装置可以配置对应于256个处理器核的256个线程,并且将4个CPU-only操作分别分配给256个线程中的每一个,以用于并行执行。处理装置还可以为256个线程中的每一个配置8个协程,并为每个线程分配8个I/O操作,以由该线程上的8个协程并行执行。
不同交易类型的区块链交易可能需要不同的CPU资源和I/O资源。区块链交易可以被分配给处理装置的线程,使得分配给每个线程的区块链交易可能需要基本上相同数量的计算资源。在一些实施例中,处理装置可以基于轮询将区块链交易分配给线程。例如,处理装置可以记录先前交易当前被分配到的线程,并且选择另一个线程来处理下一个交易。在一些实施例中,处理装置可以基于随机选择方法将区块链交易分配给线程。在一个示例中,处理装置可以计算区块链交易的哈希值,计算该哈希值的模值,并且选择对应于所计算的模值的线程来处理区块链交易。在一些实施例中,处理装置可以基于当前分配给每个线程的交易量,将区块链交易分配给线程。例如,处理装置可以将下一个交易分配给具有最少交易数的线程。
在一些实施例中,处理装置可以使用利用本文所述的技术确定的线程数和协程数来执行区块链交易,并且生成包括区块链交易的区块链区块。在一些实施例中,处理装置可以将生成的区块链区块添加到存储系统内所存储的现有区块链中。在一些实施例中,处理装置可以生成新的区块链,将区块链区块添加到新的区块链中,并将新的区块链存储在存储系统中。
在一些实施例中,处理装置可以获得用于处理区块链交易的计算资源(例如,CPU、存储器、磁盘和网络)的利用数据。例如,计算资源利用数据可以包括用于处理区块链交易的计算资源消耗相对于处理装置的整体计算资源容量的实时或统计利用率(例如,以百分比的形式)和计算资源的利用时间。在一些实施例中,处理装置可以监视、记录或收集表示在一段时间内处理区块链交易的计算资源利用。在一个示例中,处理装置可以生成计算资源利用记录或报告,以包括计算资源利用数据的概要。
在一些实施例中,处理装置可以进一步分析所述利用数据。在一个示例中,处理装置可以基于所述利用数据,确定已经执行的区块链交易相对于处理装置消耗的计算资源确实是I/O绑定的还是CPU绑定的。在该示例中,处理装置可以基于所述利用数据确定特定交易类型的区块链交易相对于处理装置消耗的计算资源是CPU绑定的还是I/O绑定的。处理装置还可以基于所述利用数据,确定相对于所述处理装置消耗的计算资源将区块链交易分类为CPU绑定的或I/O绑定的阈值。
在一些实施例中,处理装置可以分析处理装置的利用数据,以在一段时间(例如,一个或多个区块链区块的生成期间,几分钟、几小时、几天、几周等)内处理不同批次的区块链交易。
在一些实施例中,处理装置可以基于对利用数据的分析来更新用于确定下一批区块链交易是CPU绑定还是I/O绑定的标准。在一个示例中,处理装置可以将新类型的区块链交易指定为CPU绑定的或I/O绑定的。处理装置可以将现有类型的区块链交易的分类从CPU绑定的改变为I/O绑定的,反之亦然。处理装置可以更新用于确定下一批区块链交易是CPU绑定的还是I/O绑定的一个或多个阈值。
本文所述的技术可以通过例如基于区块链交易的绑定类型更有效地利用计算机系统的计算资源来处理区块链交易,以改进计算机技术。与现有的交易处理方案相比,所公开的方案可以基于接收的区块链交易定制或以其他方式配置计算机系统的计算资源(例如,处理核和线程的数量),来更好地分配和分发计算资源(例如,根据线程和协程)以处理区块链交易。所公开的方案可以利用磁盘I/O处理能力(例如,由每秒输入/输出操作(IOPS)数衡量)和区块链系统的CPU功率(例如,以每秒交易(TPS)数或区块链系统的区块生成时间/速度来衡量),而不需要增加或升级硬件计算资源。在一个示例中,如果区块链系统接收包括大量I/O操作的多个资产转移交易,并且因此需要的I/O资源比CPU资源更多,则区块链系统可以确定资产转移交易是I/O绑定的并因此配置更多的协程来处理资产转移交易,以减轻区块链系统的I/O瓶颈。结果,可以减少执行资产转移交易的时间,并可以提高区块链系统的TPS和处理效率。此外,可以缩短区块生成时间(例如,用于生成存储所执行的资产转移交易的新区块链区块的时间),从而提高区块链系统的处理能力或吞吐量。在另一个示例中,如果区块链系统接收包括大量逻辑计算的多个加密交易,并且因此需要的CPU资源比I/O资源更多,则区块链系统可以配置更多的线程来减轻处理装置的CPU瓶颈。结果,可以减少执行加密交易的时间,并可以提高区块链系统的TPS和处理效率。此外,可以缩短区块生成时间(例如,用于生成存储所执行的加密交易的新区块链区块的时间),从而提高区块链系统的处理能力或吞吐量。
在一些实施例中,本文描述的技术可以配置与区块链存储系统相关联的单独的线程池,以在I/O操作已经被执行到它们需要访问存储系统的地方时处理区块链交易中的I/O操作。在一些实施例中,单独的线程池专用于与区块链存储系统中的I/O设备接口并在区块链存储系统中读/写区块链数据的I/O操作。在一个示例中,处理装置可以具有64个处理器核。在该示例中,处理装置可以为存储系统保留64个处理器核中的16个,使得可以使用保留的16个处理器核并行执行16个I/O访问协程。其余48个处理器核可用于并行处理区块链交易,与串行处理区块链交易相比,效率提高了48*16倍。
图8是示出可以根据本文实施例执行的过程800的示例的流程图。该流程图表示用于处理区块链交易的过程800。为了方便起见,该过程将被描述为由位于一个或多个位置且根据本文被适当地编程的一个或多个计算机的系统执行。例如,被适当地编程的基于区块链的系统(例如,图3的区块链系统300)可以执行该过程。在一些实施例中,被适当地编程的区块链网络节点(例如,图2的区块链网络节点214)可以执行该过程。
在步骤802,区块链网络的区块链节点(例如,图2的区块链网络节点214)接收要由该区块链节点执行的多个区块链交易。在一些实施例中,区块链节点包括在区块链中存储区块链数据的存储系统(例如,图3的存储内核308或图4的存储系统内核)或以其他方式与其相关联。在一个示例中,区块链交易可以包括用于执行一个或多个任务或功能的一个或多个操作,例如验证区块链交易、响应于区块链交易的成功验证而提交区块链交易、将区块链交易的数据或其他信息写入数据库、声明功能序言和结语、编译或者在区块链交易中的其他操作/功能。在一些实施例中,区块链交易可以具有如上所述的交易类型和绑定类型(例如,CPU绑定的或I/O绑定的)。
在步骤804,区块链节点确定多个区块链交易是CPU绑定的还是I/O绑定的。在一些实施例中,CPU绑定的区块链交易通常可以指受CPU瓶颈限制的区块链交易。CPU绑定的区块链交易可以主要包括CPU绑定的操作,使得完成CPU绑定的区块链交易的时间主要由中央处理器的速度确定。I/O绑定的区块链交易是指受I/O瓶颈限制的区块链交易。I/O绑定的区块链交易可以包括一个或多个I/O操作(例如,读取或写入磁盘、网络等),使得完成I/O绑定的区块链交易的时间主要由等待完成I/O操作所花费的时间段来确定。
在一些实施例中,区块链节点可以基于多个区块链交易中的至少一个的交易类型来确定多个区块链交易是CPU绑定的还是I/O绑定的。
在一些实施例中,交易类型可以包括资产转移交易、账户查询交易、验证和提交交易、证书存储交易、原生智能合约交易、加密交易、TEE(可信执行环境)交易、WASM(网络组装,WebAssembly)交易、EVM(以太虚拟机)交易或其他类型的交易。
在一些实施例中,区块链节点可以基于相同交易类型的先前区块链交易的统计计算资源利用记录来确定多个区块链交易中的至少一个是CPU绑定的还是I/O绑定的。在一个示例中,例如,根据上述技术,可以对区块链交易执行训练处理,以学习如何基于样本数据或训练数据来确定区块链交易是CPU绑定还是I/O绑定的。在一些实施例中,统计计算资源利用记录可以是区块链节点专用的(即,由区块链节点执行的交易类型的先前区块链交易的统计计算资源利用记录)。在一些实施例中,统计计算资源利用记录可以用作训练数据,并且包括区块链节点的历史交易数据和区块链节点的度量数据。在一些实施例中,统计计算资源利用记录可以包括具有与区块链节点相似规范的其他计算机系统的一个或多个计算资源利用记录。
在一些实施例中,统计计算资源利用数据还可以包括特定时间段内系统的CPU负载和I/O负载数据。例如,统计计算资源利用数据可以包括用于处理区块链交易的计算资源消耗相对于处理装置的整体计算资源容量的统计利用率(例如,以百分比的形式)和计算资源的利用时间。在一些实施例中,可以基于特定时间段内CPU要处理的任务/操作数与CPU可以处理的任务/操作数的比率来确定CPU负载。可以基于特定时间段内系统要处理的I/O任务/操作数与系统可以处理的I/O任务/操作数的比率来确定I/O负载。
在一些实施例中,具有特定交易类型的区块链交易的绑定类型(例如,CPU绑定的或I/O绑定的)可以基于处理具有相同交易类型的先前区块链交易的CPU负载和I/O负载来确定。在一个示例中,如果CPU负载等于或高于第一预定阈值,和/或I/O负载等于或低于第二预定阈值,则具有特定交易类型的区块链交易可以被确定为CPU绑定的。
在一些实施例中,要由区块链节点执行的区块链交易可以包括具有多种交易类型的区块链交易。例如,区块链节点可以确定交易处理任务包括第一数量的账户转账交易、第二数量的加密交易以及第三数量的验证和提交交易。在该示例中,系统可以进一步确定账户转账交易是I/O绑定的交易,加密交易是CPU绑定的交易,验证和提交交易是CPU绑定的交易。
在一些实施例中,响应于确定多个区块链交易中I/O绑定的交易的总数超过第一阈值,区块链节点可以确定多个区块链交易是I/O绑定的。
在一些实施例中,响应于确定多个区块链交易中CPU绑定的交易的总数超过第二阈值,区块链节点可以确定多个区块链交易是CPU绑定的。
在步骤806,基于多个区块链交易是CPU绑定的或I/O绑定的,区块链节点分配区块链节点的一个或多个线程和区块链节点的一个或多个协程,以处理多个区块链交易。
在一些实施例中,用于处理区块链交易的线程数可以基于区块链交易的绑定类型来确定。在一些实施例中,响应于确定多个区块链交易是I/O绑定的,区块链节点确定用于并行处理多个区块链交易的第一数量的线程。在一些实施例中,响应于确定多个区块链交易是CPU绑定的,区块链节点确定用于并行处理多个区块链交易的第二数量的线程。在一些实施例中,第一数量的线程等于或少于第二数量的线程。在一些实施例中,第一数量的线程可以在接收多个区块链交易之前被预先配置。
在一个示例中,如果确定一组区块链交易是I/O绑定的交易,则可以确定少量线程(例如,1或2)以用于处理区块链交易。如果确定区块链交易是CPU绑定的,则可以确定相对较大数量的线程,其可以是可用处理器核的最大数量(例如,256或1024),以用于并行处理区块链交易。
在一些实施例中,区块链节点包括总数量的线程,总数量的线程的子集专用于存储系统,并且第一数量的线程不来自总数量的线程的子集。例如,如果区块链节点的线程总数为256,并且256个线程中有16个专用于存储系统,则可分配用于并行处理区块链交易的最大可用线程数为256-16=240。在该示例中,对于每个处理线程,使用专用于存储系统的16个线程,可以针对I/O操作同时执行多达16个协程。
在一些实施例中,用于处理区块链交易的协程数可以基于区块链交易的绑定类型来确定。在一些实施例中,响应于确定多个区块链交易是I/O绑定的,区块链节点可以确定用于异步地处理多个区块链交易的第三数量的协程。在一些实施例中,响应于确定多个区块链交易是CPU绑定的,区块链节点可以确定用于异步地处理多个区块链交易的第四数量的协程。在一些实施例中,第四数量的协程少于第三数量的协程。
在一个示例中,如果确定一组区块链交易是I/O绑定的交易,则可以确定大量协程(其可以是线程可执行的最大并发协程数)来处理区块链交易。如果确定区块链交易是CPU绑定的,则可以确定少量协程(例如,1或2)来处理区块链交易。
在一些实施例中,被配置用于处理区块链交易的第一数量的线程对于不同批次的接收交易可以保持相同。在一些实施例中,每当接收新的一批交易时,可以更新或动态确定第二数量的协程。在一些实施例中,第一数量的线程更新或改变的频率可以低于第二数量的协程。
在步骤808,区块链节点使用所分配的一个或多个线程和一个或多个协程来执行多个区块链交易。可以基于特定的调度算法(例如,轮询、随机选择)或如上所述的另一个标准,将多个区块链交易分发给所分配的一个或多个线程。
在步骤810,在执行多个区块链交易之后,区块链节点生成包括多个区块链交易的区块链区块。在一些实施例中,区块链区块可以包括相同交易类型或不同交易类型的区块链交易。在一些实施例中,区块链节点可以生成一个以上的区块链区块,以包括具有不同交易类型的交易,其中每个区块链区块包括具有相同交易类型的交易。
在步骤812,区块链节点将区块链区块添加到与区块链节点关联的存储系统内的区块链中。在一些实施例中,区块链节点可以将区块链区块添加到区块链中,使得所执行的多个区块链交易可以被上传或发布到区块链网络。
在步骤814,区块链节点获得区块链节点的、用于执行多个区块链交易的计算资源的利用数据。在一些实施例中,当执行区块链交易时,区块链节点可以监视、记录或收集表示区块链节点的计算资源利用的数据。在一些实施例中,例如如上所述,当区块链节点执行区块链交易时,所述利用数据可以包括计算资源利用的数据。在一个示例中,区块链节点可以生成计算资源利用记录或报告,以包括计算资源利用数据的概要。
在步骤816,区块链节点分析所述利用数据。在一些实施例中,区块链节点可以基于所述利用数据,确定多个区块链交易相对于区块链节点的计算资源确实是I/O绑定的还是CPU绑定的。在一些实施例中,区块链节点可以基于所述利用数据,确定区块链交易的类型相对于区块链节点的计算资源是I/O绑定的还是CPU绑定的。在一些实施例中,区块链节点可以基于所述利用数据,确定相对于区块链节点的计算资源将多个区块链交易分类为I/O绑定的或CPU绑定的阈值。区块链节点可以对所述利用数据执行附加的或不同的分析。
在一些实施例中,区块链节点可以分析区块链节点的利用数据,以在一段时间(例如,多个区块链区块的生成期间,几分钟、几小时、几天、几周等)内执行不同批次的交易。累积的利用数据可以被分析以进一步提高区块链交易的绑定类型的分类精度,并且可以被用来更好地定制(tailor/customize)用于处理区块链交易的线程和协程的分配。
在步骤818,区块链节点基于所述分析来更新用于确定接下来的多个区块链交易是CPU绑定的还是I/O绑定的标准。在一些实施例中,更新标准可以包括将新类型的区块链交易指定为CPU绑定的或I/O绑定的,将现有类型的区块链交易的分类从CPU绑定的改变为I/O绑定的或者从I/O绑定的改变为CPU绑定的,更新确定接下来的多个区块链交易是CPU绑定的还是I/O绑定的阈值,或进行其他改变。例如,当确定多个区块链交易中I/O绑定的交易的总数超过与用于确定最后一批交易是否为I/O绑定的阈值不同的更新阈值时,区块链节点可以确定接下来的多个交易是I/O绑定的。作为另一示例,当确定多个区块链交易中CPU绑定的交易的总数超过与用于确定最后一批交易是否为CPU绑定的阈值不同的更新阈值时,区块链节点可以确定接下来的多个交易是CPU绑定的。
图9是根据本文实施例的装置900的模块的示例的示意图。装置900可以是配置为处理区块链交易的区块链节点的实施例的示例。装置900可以对应于上述实施例,并且装置900包括:接收模块902,接收要由区块链节点执行的多个区块链交易,其中区块链节点与在区块链中存储区块链数据的存储系统相关联;确定模块904,确定多个区块链交易是CPU绑定的还是I/O绑定的;分配模块906,基于多个区块链交易是CPU绑定的或I/O绑定的,分配区块链节点的一个或多个线程和区块链节点的一个或多个协程,以处理多个区块链交易;执行模块908,使用所分配的一个或多个线程和一个或多个协程来执行多个区块链交易;生成模块910,在执行多个区块链交易之后,生成包括多个区块链交易的区块链区块;以及添加模块912,将区块链区块添加到与区块链节点相关联的存储系统内的区块链中。
在一些实施例中,装置900还包括:第一确定子模块,响应于确定多个区块链交易是I/O绑定的,确定用于并行处理多个区块链交易的第一数量的线程;第二确定子模块,响应于确定多个区块链交易是CPU绑定的,确定用于并行处理多个区块链交易的第二数量的线程。第一数量的线程等于或少于第二数量的线程,并且第一数量的线程在接收多个区块链交易之前被预先配置。
在一些实施例中,装置900还包括:第三确定子模块,响应于确定多个区块链交易是I/O绑定的,确定用于异步地处理多个区块链交易的第三数量的协程;第四确定子模块,响应于确定多个区块链交易是CPU绑定的,确定用于异步地处理多个区块链交易的第四数量的协程。第四数量的协程少于第三数量的协程。
在一些实施例中,装置900还包括:第五确定子模块,基于多个区块链交易中的至少一个的交易类型来确定多个区块链交易是CPU绑定的还是I/O绑定的。
在一些实施例中,交易类型包括资产转移交易、账户查询交易、验证和提交交易、证书存储交易、原生智能合约交易、加密交易、TEE可信执行环境交易、WASM网络组装交易或EVM以太虚拟机交易。
在一些实施例中,装置900还包括:第六确定子模块,基于交易类型的先前区块链交易的统计计算资源利用记录,确定多个区块链交易中的至少一个是CPU绑定的还是I/O绑定的。
在一些实施例中,装置900还包括:第七确定子模块,响应于确定多个区块链交易中I/O绑定的交易的总数超过第一阈值,确定多个区块链交易是I/O绑定的。
在一些实施例中,装置900还包括:第八确定子模块,响应于确定多个区块链交易中CPU绑定的交易的总数超过第二阈值,确定多个区块链交易是CPU绑定的。
在一些实施例中,区块链节点包括总数量的线程,总数量的线程的子集专用于存储系统,并且第一数量的线程不来自总数量的线程的子集。
在一些实施例中,装置900还包括:获得模块,获得区块链节点的、用于执行多个区块链交易的计算资源的利用数据;分析模块,分析所述利用数据;以及更新模块,基于所述分析来更新用于确定接下来的多个区块链交易是CPU绑定的还是I/O绑定的标准。
在一些实施例中,装置900还包括:指定子模块,将新类型的区块链交易指定为CPU绑定的或I/O绑定的;变更子模块,将现有类型的区块链交易的分类从CPU绑定的改变为I/O绑定的或者从I/O绑定的改变为CPU绑定的;以及更新子模块,更新确定接下来的多个区块链交易是CPU绑定的还是I/O绑定的阈值。
前述实施例中示出的系统、装置、模块或单元可以通过使用计算机芯片或实体来实现,或者可以通过使用具有特定功能的产品来实现。典型的实施例设备是计算机(计算机可以是个人计算机)、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件接收和发送设备、游戏控制台、平板电脑、可穿戴设备或这些设备的任意组合。
对于装置中每个模块的功能和作用的实施过程,可以参考前述方法中相应步骤的实施过程。为简单起见,这里省略了细节。
由于装置实施例基本上与方法实施例相对应,因此对于相关部件,可以参照方法实施例中的相关描述。前一描述的装置实施仅是示例。作为单独部件描述的模块可以是或可以不是物理上分离的,并且作为模块显示的部件可以是或可以不是物理模块,可以位于一个位置,或可以分布在多个网络模块上。可以基于实际需求来选择一些或所有模块,以实现本文方案的目标。本领域普通技术人员在无需付出创造性努力的情况下就能理解和实现本申请的实施例。
再次参考图9,它可以被解释为示出了区块链交易处理装置的内部功能模块和结构。区块链交易处理装置可以是与区块链网络节点相关联的计算机服务器的示例。本质上,执行主体可以是电子设备,该电子设备包括:一个或多个处理器;被配置为存储一个或多个处理器的可执行指令的一个或多个计算机可读存储器。在一些实施例中,所述一个或多个计算机可读存储器耦接至所述一个或多个处理器且其上存储有编程指令,所述编程指令可以由所述一个或多个处理器执行以执行本文所描述的算法、方法、函数、处理、流程和程序。本文还提供了耦接至一个或多个处理器并且其上存储有指令的一个或多个非暂时性计算机可读存储介质,当所述指令由所述一个或多个处理器执行时,所述指令将促使所述一个或多个处理器按照本文提供的方法的实施例执行操作。
本文还提供了实现本文提供的方法的系统。该系统包括一个或多个处理器,以及耦接到一个或多个处理器并在其上存储有指令的计算机可读存储介质,该指令在由一个或多个处理器执行时,使一个或多个处理器执行根据本文提供的方法实施例所述的操作。
本文中描述的主题、动作以及操作的实施例可以在数字电子电路、有形体现的计算机软件或固件、计算机硬件,或者其中的一个或多个的组合中实现,包括本文中公开的结构及其结构等同物。本文描述的主题的实施例可以被实现为一个或多个计算机程序,例如,一个或多个计算机程序指令模块,编码在计算机程序载体上用于由数据处理装置执行,或者以控制数据处理装置的操作。例如,计算机程序载体可以包括一个或多个计算机可读存储介质,在其上编码或存储有指令。载体可以是有形的非暂态计算机可读介质,例如,磁盘、磁光盘或者光盘、固态驱动器、随机存取存储器(RAM)、只读存储器(ROM)或者其它媒体类型。可选地或附加地,载体可以是人工生成的传播信号,例如,机器生成的电信号、光信号或电磁信号,其生成为对信息进行编码以传输到合适的接收器装置以由数据处理装置执行。计算机存储介质可以是或部分是机器可读存储设备、机器可读存储基板、随机或串行访问存储器设备或其中的一个或多个的组合。计算机存储介质不是传播信号。
计算机程序也可以称为或描述为程序、软件、软件应用程序、app、模块、软件模块、引擎、脚本或代码,可以以任何形式的编程语言编写,包括编译或解释性语言、或声明或程序性语言;其可以以任何形式部署,包括作为独立程序或者作为模块、组件、引擎、次例程或适合在计算环境中执行的其它单元,该环境可包括在一个或多个位置中由数据通信网络互联的一台或多台计算机。
计算机程序可以但是没有必需对应于文件系统中的文件。计算机程序可以存储在:保存其他程序或数据的文件的一部分中,例如,存储在标记语言文档中的一个或多个脚本;专用于所讨论的程序的单个文件中;或者多个协调文件中,例如,存储一个或多个模块、子程序或代码部分的多个文件。
用于执行计算机程序的处理器例如既包括通用和专用微处理器,又包括任何种类的数字计算机的任何一个或多个处理器。通常,处理器将从耦接到处理器的非暂时性计算机可读介质接收数据以及用于执行的计算机程序的指令。
术语“数据处理装置”涵盖了用于处理数据的所有类型的装置、设备和机器,例如包括可编程处理器、计算机,或多个处理器或计算机。数据处理装置可包括例如FPGA(现场可编程门阵列),ASIC(专用集成电路)或GPU(图形处理单元)的专用逻辑电路。该装置除了包括硬件之外,也可以包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或其中的一个或多个的组合的代码。
本文中描述的过程和逻辑流程可以由一个或多个计算机或执行一个或多个计算机程序的处理器执行,以通过对输入数据进行操作并生成输出来执行操作。该过程和逻辑流程还可通过专用逻辑电路,例如,FPGA、ASIC或GPU,或通过专用逻辑电路和一个或多个编程计算机的组合来执行。
适合于执行计算机程序的计算机可以基于通用和/或专用微处理器,或任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的元件可以包括用于执行指令的中央处理单元和用于存储指令和数据的一个或多个存储设备。中央处理单元和存储器可以补充有专用逻辑电路或集成在专用逻辑电路中。
通常,计算机也会包括或可操作地耦接以从一个或多个存储设备接收数据或将数据传输到一个或多个存储设备。存储设备可以是例如磁盘、磁光盘或光盘、固态驱动器或任何其它类型的非暂时性计算机可读介质。但是,计算机也不必具有此类设备。因而,计算机可以耦接到一个或多个存储设备,例如位于本地和/或远程的一个或多个存储器。例如,一台计算机可以包括作为计算机集成组件的一个或多个本地存储器,或者计算机可以耦接到位于云网络中的一个或多个远程存储器。此外,计算机也可以嵌入到另一个设备中,例如,移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收器、或诸如通用串行总线(USB)闪存驱动器等便携式存储设备,这只是列举几项。
组件可以通过直接或经由一个或多个中间组件例如电连接或光连接地彼此连接通信而彼此“耦接”。如果其中一个组件集成到另一个组件中,则这些组件也可以相互“耦接”。例如,将集成到处理器中的存储组件,例如,L2高速缓存组件,“耦接到”处理器。
为了与用户进行交互,本文中描述的主题的实施例可以在具有显示设备和输入设备的计算机上实现,或配置为与该计算机进行通信,显示设备例如为LCD(液晶显示器)监视器,用于向用户显示信息,输入设备例如为键盘和定位设备,用户可以通过输入设备向计算机提供输入,定位设备例如为鼠标、轨迹球或触摸板。其他类型的设备也可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以接收来自用户的任何形式的输入,包括声音、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过向用户设备上的web浏览器发送web页面以响应从web浏览器收到的请求,或者通过与例如智能电话或电子平板电脑等的用户设备上运行的应用程序(app)进行交互。计算机也可以通过将文本消息或其它形式的消息发送到诸如运行消息收发程序的智能手机等个人设备,并从用户接收响应消息,来与用户进行交互。
本文使用与系统,装置和计算机程序组件有关的术语“被配置为”。对于被配置为执行特定操作或动作的一个或多个计算机的系统,意味着系统已经在其上安装了在运行中促使该系统执行所述操作或动作的软件、固件、硬件或它们的组合。对于被配置为执行特定操作或动作的一个或多个计算机程序,意味着一个或多个程序包括当被数据处理装置执行时促使该装置执行所述操作或动作的指令。对于被配置为执行特定操作或动作的专用逻辑电路,意味着该电路具有执行所述操作或动作的电子逻辑。
尽管本文包含许多特定的实施细节,但是不应将这些理解为对所要求保护的范围的限制,而是作为对特定实施例特定的特征的描述,所要求保护的范围由权利要求本身限定。本文中在单独的实施例的上下文中描述的某些特征也可以在单个实施例中组合地实现。相反,在单个实施例的上下文中描述的各种特征也可以单独或者以任何适合的子组合方式实现在多个实施例中。而且,尽管以上描述的特征可以以某些组合起作用并且甚至最初是这样主张的,但是在某些情况下,可以从要求保护的组合中删除该组合中的一个或多个特征,并且权利要求书也可以针对子组合或子组合的变型。
类似地,虽然以特定顺序在附图中描绘了操作并且在权利要求中叙述了操作,但是这不应该被理解为:为了达到期望的结果,要求以所示的特定顺序或依次执行这些操作,或者要求执行所有示出的操作。在某些情况下,多任务和并行处理会是有利的。此外,不应将上述实施例中的各种系统模块和组件的分离理解为在所有实施例中都要求这种分离,并且应当理解的是,所描述的程序组件和系统通常可以在单个软件产品中集成在一起或打包成多个软件产品。
已经对本主题的特定实施例进行了描述。其它实施例也落在以下权利要求书的范围内。例如,权利要求书中记载的动作可以以不同的顺序执行并且仍然能实现期望的结果。作为一个示例,附图中描绘的过程无需要求所示的特定顺序或次序来实现期望的结果。在一些情况下,多任务并行处理可能是有利的。
Claims (12)
1.一种计算机实现的用于由区块链网络的区块链节点处理区块链交易的方法,所述方法包括:
接收要由所述区块链节点执行的多个区块链交易,其中,所述区块链节点与在区块链中存储区块链数据的存储系统关联;
由所述区块链节点确定所述多个区块链交易是CPU绑定的还是I/O绑定的;
基于所述多个区块链交易是CPU绑定的或I/O绑定的,分配所述区块链节点的一个或多个线程和所述区块链节点的一个或多个协程,以处理所述多个块链交易;
由所述区块链节点使用所分配的一个或多个线程和一个或多个协程来执行所述多个区块链交易;
在执行所述多个区块链交易之后,生成包括所述多个区块链交易的区块链区块;以及
将所述区块链区块添加到与所述区块链节点关联的所述存储系统内的区块链中。
2.根据权利要求1所述的计算机实现的方法,其中,基于所述多个区块链交易是CPU绑定的或I/O绑定的,分配所述区块链节点的一个或多个线程和所述区块链节点的一个或多个协程,以处理所述多个块链交易,包括:
响应于确定所述多个区块链交易是I/O绑定的,确定用于并行处理所述多个区块链交易的第一数量的线程;或
响应于确定所述多个区块链交易是CPU绑定的,确定用于并行处理所述多个区块链交易的第二数量的线程,
其中,所述第一数量的线程等于或少于所述第二数量的线程,并且所述第一数量的线程在接收所述多个区块链交易之前被预先配置。
3.根据前述任一项权利要求所述的计算机实现的方法,其中,基于所述多个区块链交易是CPU绑定的或I/O绑定的,分配所述区块链节点的一个或多个线程和所述区块链节点的一个或多个协程,以处理所述多个区块链交易,包括:
响应于确定所述多个区块链交易是I/O绑定的,确定用于异步地处理所述多个区块链交易的第三数量的协程;或
响应于确定所述多个区块链交易是CPU绑定的,确定用于异步地处理所述多个区块链交易的第四数量的协程,
其中,所述第四数量的协程少于所述第三数量的协程。
4.根据前述任一项权利要求所述的计算机实现的方法,其中,确定所述多个区块链交易是CPU绑定的还是I/O绑定的,包括:
基于所述多个区块链交易中的至少一个的交易类型来确定所述多个区块链交易是CPU绑定的还是I/O绑定的。
5.根据权利要求4所述的计算机实现的方法,其中,所述交易类型包括资产转移交易、账户查询交易、验证和提交交易、证书存储交易、原生智能合约交易、加密交易、TEE可信执行环境交易、WASM网络组装交易或EVM以太虚拟机交易。
6.根据权利要求4所述的计算机实现的方法,其中,基于所述多个区块链交易中的至少一个的交易类型来确定所述多个区块链交易是CPU绑定的还是I/O绑定的,包括:
基于所述交易类型的先前区块链交易的统计计算资源利用记录,确定所述多个区块链交易中的所述至少一个是CPU绑定的还是I/O绑定的。
7.根据权利要求6所述的计算机实现的方法,其中,基于所述多个区块链交易中的一个的交易类型来确定所述多个区块链交易是CPU绑定的还是I/O绑定的,包括:
响应于确定所述多个区块链交易中I/O绑定的交易的总数超过第一阈值,由所述区块链节点确定所述多个区块链交易是I/O绑定的。
8.根据权利要求6所述的计算机实现的方法,其中,由所述区块链节点基于所述多个区块链交易中的一个的交易类型来确定所述多个区块链交易是CPU绑定的还是I/O绑定的,包括:
响应于确定所述多个区块链交易中CPU绑定的交易的总数超过第二阈值,由所述区块链节点确定所述多个区块链交易是CPU绑定的。
9.根据前述任一项权利要求所述的计算机实现的方法,其中,
所述区块链节点包括总数量的线程,所述总数量的线程的子集专用于所述存储系统,并且,
所述第一数量的线程不来自所述总数量的线程的所述子集。
10.根据前述任一项权利要求所述的计算机实现的方法,还包括:
获得所述区块链节点的、用于执行所述多个区块链交易的计算资源的利用数据;
分析所述利用数据;以及
基于所述分析来更新用于确定接下来的多个区块链交易是CPU绑定的还是I/O绑定的标准。
11.一种用于数据处理的系统,包括:
一个或多个处理器;和
一个或多个计算机可读存储器,耦接至所述一个或多个处理器并且其上存储有指令,所述指令能够由所述一个或多个处理器执行以执行权利要求1至10中任一项所述的计算机实现的方法。
12.一种用于处理区块链交易的装置,所述装置包括用于执行权利要求1至10中任一项所述的计算机实现的方法的多个模块。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2020/118377 WO2022061878A1 (en) | 2020-09-28 | 2020-09-28 | Blockchain transaction processing systems and methods |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113454597A true CN113454597A (zh) | 2021-09-28 |
Family
ID=77808752
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080014813.XA Pending CN113454597A (zh) | 2020-09-28 | 2020-09-28 | 区块链交易处理系统和方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11487736B2 (zh) |
EP (1) | EP3997572A4 (zh) |
CN (1) | CN113454597A (zh) |
WO (1) | WO2022061878A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117032999A (zh) * | 2023-10-09 | 2023-11-10 | 之江实验室 | 一种基于异步运行时的cpu-gpu协同调度方法及装置 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113821426B (zh) * | 2021-11-23 | 2022-02-15 | 南京金宁汇科技有限公司 | 一种区块链性能测试方法及装置 |
WO2024094297A1 (en) * | 2022-11-02 | 2024-05-10 | Proxima Beta Europe B.V. | System for loading an entity or an asset on a computer system, corresponding method and computer program |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8209702B1 (en) * | 2007-09-27 | 2012-06-26 | Emc Corporation | Task execution using multiple pools of processing threads, each pool dedicated to execute different types of sub-tasks |
CN104142858B (zh) * | 2013-11-29 | 2016-09-28 | 腾讯科技(深圳)有限公司 | 阻塞任务调度方法及装置 |
CN109636592B (zh) * | 2017-10-20 | 2023-02-28 | 北京航空航天大学 | 高性能智能合约设计 |
GB201720767D0 (en) * | 2017-12-13 | 2018-01-24 | Barker Trevor | Computer-implemented system and method |
US11620152B2 (en) * | 2018-07-20 | 2023-04-04 | Ezblock Ltd. | Blockchain sharding with parallel threads |
CA3061603A1 (en) * | 2018-11-14 | 2020-05-14 | Royal Bank Of Canada | System and method for storing contract data structures on permissioned distributed ledgers |
RU2731417C1 (ru) * | 2018-12-28 | 2020-09-02 | Алибаба Груп Холдинг Лимитед | Параллельное выполнение транзакций в сети цепочек блоков на основе белых списков смарт-контрактов |
SG11201909757RA (en) * | 2019-04-12 | 2019-11-28 | Alibaba Group Holding Ltd | Performing parallel execution of transactions in a distributed ledger system |
JP2020204898A (ja) * | 2019-06-17 | 2020-12-24 | 株式会社日立製作所 | 分散台帳システムの運用管理方法、分散台帳システムの運用管理システム、および分散台帳システムの運用管理プログラム |
WO2020035095A2 (en) * | 2019-11-27 | 2020-02-20 | Alipay (Hangzhou) Information Technology Co., Ltd. | Asynchronous processing of blockchain blocks |
CN111625593B (zh) * | 2020-04-21 | 2023-09-08 | 金蝶软件(中国)有限公司 | 基于区块链的数据处理方法、装置、计算机设备 |
-
2020
- 2020-09-28 CN CN202080014813.XA patent/CN113454597A/zh active Pending
- 2020-09-28 EP EP20897646.4A patent/EP3997572A4/en not_active Ceased
- 2020-09-28 WO PCT/CN2020/118377 patent/WO2022061878A1/en unknown
-
2021
- 2021-06-21 US US17/353,399 patent/US11487736B2/en active Active
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117032999A (zh) * | 2023-10-09 | 2023-11-10 | 之江实验室 | 一种基于异步运行时的cpu-gpu协同调度方法及装置 |
CN117032999B (zh) * | 2023-10-09 | 2024-01-30 | 之江实验室 | 一种基于异步运行时的cpu-gpu协同调度方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
EP3997572A1 (en) | 2022-05-18 |
US11487736B2 (en) | 2022-11-01 |
US20210311925A1 (en) | 2021-10-07 |
WO2022061878A1 (en) | 2022-03-31 |
EP3997572A4 (en) | 2022-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113168652B (zh) | 区块链交易处理系统和方法 | |
US11057217B2 (en) | Performing parallel execution of transactions in a distributed ledger system | |
US20190034465A1 (en) | Blockchain logging of data from multiple systems | |
US20200327545A1 (en) | Performing parallel execution of transactions in a distributed ledger system | |
US11487736B2 (en) | Blockchain transaction processing systems and methods | |
CN111295650A (zh) | 在基于区块链的系统中执行映射迭代 | |
EP3769233B1 (en) | Performing map iterations in a blockchain-based system | |
CN113994324B (zh) | 具有高效世界状态数据结构的区块链系统 | |
WO2022087834A1 (en) | Blockchain system having efficient world state data structures | |
Anjos et al. | BIGhybrid: a simulator for MapReduce applications in hybrid distributed infrastructures validated with the Grid5000 experimental platform | |
US11500845B2 (en) | Blockchain transaction processing systems and methods | |
Shrivastava et al. | Secure Storage and Data Sharing Scheme Using Private Blockchain-Based HDFS Data Storage for Cloud Computing | |
Choi et al. | LMPT: A Novel Authenticated Data Structure to Eliminate Storage Bottlenecks for High Performance Blockchains | |
Hu | Privacy and Optimization for Distributed Machine Learning and Storage | |
Seilfaldet | Performance analysis of job-scheduling in multi-user hadoop clusters | |
Arivudainambi et al. | Improving MapReduce Performance in Cloud Using Genetic Algorithm |
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 |