CN115168022A - 对象处理方法 - Google Patents
对象处理方法 Download PDFInfo
- Publication number
- CN115168022A CN115168022A CN202210514839.1A CN202210514839A CN115168022A CN 115168022 A CN115168022 A CN 115168022A CN 202210514839 A CN202210514839 A CN 202210514839A CN 115168022 A CN115168022 A CN 115168022A
- Authority
- CN
- China
- Prior art keywords
- target
- object processing
- identification information
- data
- data storage
- 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
- 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/5083—Techniques for rebalancing the load in a distributed system
-
- 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
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5012—Processor sets
-
- 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/5015—Service provider selection
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例提供对象处理方法,其中所述对象处理方法应用于服务端的网络通信模块,包括:接收客户端针对目标对象发送的对象处理请求,并确定所述对象处理请求对应的请求类型;在确定所述请求类型为读请求类型的情况下,响应于所述对象处理请求从对象存储模块中确定目标对象;基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,并将所述目标数据发送至所述客户端。避免了服务端的CPU需要消耗计算资源对该请求进行处理,提高了CPU的运算效率降低,并且保证了快速的对目标对象进行处理,提高了目标对象的处理性能。
Description
技术领域
本说明书实施例涉及计算机技术领域,特别涉及一种对象处理方法。
背景技术
随着计算机技术的不断发展,由于跳表(一种数据结构)具有较好的可扩展性等特性,因此在数据存储领域受到广泛的应用,例如,应用于分布式存储系统。
现有技术的客户端服务器设计中,服务器主要负责针对跳表的处理操作,而客户端仅发送处理请求并从服务器接收传回的消息。特别是当针对跳表的处理操作的并发性很高时,服务端的CPU需要消耗大量的计算资源进行处理,导致CPU的运算效率降低,进一步降低了跳表的性能。
发明内容
有鉴于此,本说明书实施例提供了对象处理方法。本说明书一个或者多个实施例同时涉及一种对象处理装置,一种计算设备,一种计算机可读存储介质,一种计算机程序,以解决现有技术中存在的技术缺陷。
根据本说明书实施例的第一方面,提供了一种对象处理方法,应用于服务端的网络通信模块,包括:
接收客户端针对目标对象发送的对象处理请求,并确定所述对象处理请求对应的请求类型;
在确定所述请求类型为读请求类型的情况下,响应于所述对象处理请求从对象存储模块中确定目标对象;
基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,并将所述目标数据发送至所述客户端。
根据本说明书实施例的第二方面,提供了一种对象处理方法,应用于服务端,所述服务端包括网络通信模块以及运算控制模块,其中,
所述网络通信模块,接收客户端针对目标对象发送的对象处理请求,并在确定所述对象处理请求对应的请求类型为读请求类型的情况下,响应于所述对象处理请求从对象存储模块中确定目标对象,基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,并将所述目标数据发送至客户端;以及
在确定所述请求类型为写请求类型的情况下,将所述对象处理请求发送至所述运算控制模块;
所述运算控制模块,接收所述网络通信模块发送的所述对象处理请求,并响应于所述对象处理请求对所述目标对象进行处理。
根据本说明书实施例的第三方面,提供了一种对象处理装置,应用于服务端的网络通信模块,包括:
接收模块,被配置为接收客户端针对目标对象发送的对象处理请求,并确定所述对象处理请求对应的请求类型;
确定模块,被配置为在确定所述请求类型为读请求类型的情况下,响应于所述对象处理请求从对象存储模块中确定目标对象;
读取模块,被配置为基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,并将所述目标数据发送至所述客户端。
根据本说明书实施例的第四方面,提供了一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现所述对象处理方法的步骤。
根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现所述对象处理方法的步骤。
根据本说明书实施例的第五方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行所述对象处理方法的步骤。
本说明书提供的对象处理方法,应用于服务端的网络通信模块,包括:接收客户端针对目标对象发送的对象处理请求,并确定所述对象处理请求对应的请求类型;在确定所述请求类型为读请求类型的情况下,响应于所述对象处理请求从对象存储模块中确定目标对象;基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,并将所述目标数据发送至所述客户端。
具体地,该方法所应用于的网络通信模块,在确定接收到的对象处理请求的请求类型为读请求类型的情况下,直接响应于该对象处理请求从目标对象中读取目标数据,并将目标数据发送至客户端,避免了服务端的CPU需要消耗计算资源对该请求进行处理,提高了CPU的运算效率降低,并且保证了快速的对目标对象进行处理,提高了目标对象的性能。
附图说明
图1是本说明书一个实施例提供的一种对象处理方法的应用场景示意图;
图2是本说明书一个实施例提供的一种对象处理方法中跳表节点的示意图;
图3是本说明书一个实施例提供的一种对象处理方法的流程图;
图4是本说明书一个实施例提供的另一种对象处理方法的流程图;
图5是本说明书一个实施例提供的一种对象处理方法的应用效果的示意图;
图6是本说明书一个实施例提供的一种对象处理装置的结构示意图;
图7是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
RDMA:远程直接内存访问。
RNIC:能够支持RDMA的网卡。
SkipList:跳表。
HybridSkipList:采用单边/双边混合模式的跳表。
MOPS:CPU的运算速度。
crc64:循环冗余校验。
DRTM:动态测量根。
HTM:是Hyper Text Mark-up Language的缩写,即超文本标记语言。
R-tree:R树,是B-tree(B树)向多维空间发展的另一种形式。
Cell:元胞数组。
SkipListMap:以跳表为基础结构的map集合。
SkipList是一种排序数据结构,支持复杂度为O(1)的Insert、Contain和Remove等方法。这些对SkipList的操作可以在O(logN)内执行(假设SkipList中有N个节点)。从另一个角度来看,SkipList由链表的层次结构组成,其行为类似于概率数据结构。每个节点都是以随机层级创建的,并且存在于所有层级中,直到其最高层级。每个链表的长度可以将从底层到顶层以概率p(例如,0.5)减小。
SkipList有一个重要特性:较高级别的列表总是包含在较低级别的列表中。而另一个核心特点是SkipList中的每个节点在数据结构层面与前驱节点和后继节点相邻,但当前节点和前驱/后继节点通常不在同一个内存区域,所以遍历跳表中的节点总会造成代价高昂的随机内存访问。
在实际应用中,为了支持并发访问,SkipList可以进一步细分为易于理解的、基于锁的实现,和复杂的无锁实现。随着对大数据规模的需求日益增加,分布式数据结构已成为现代系统中必不可少的组成部分。分布式哈希表、分布式b-tree等由于其容量的扩展而被广泛应用于数据库和键值存储等系统。但在研究领域,很少有工作讨论分布式SkipList,以及SkipList和RDMA之间的性能差距。而在分布式SkipList中,主要开销分别来自网络(即RDMA)和服务器端CPU(即数据结构操作)。参见表1,表1比较了RDMA单侧读(Read)/写(Write)访问和两种SkipList方法之间的吞吐量:包含(Contain)和插入(Insert)。需要说明的是,这里使用SkipList的最先进的实现。
表1
Type | Read/Contain | Write/Insert |
RDMA(ConnextX-3,40Gbps) | 6.2MOPS | 6.5MOPS |
RDMA(ConnextX-5,100Gbps) | 14.7MOPS | 14.5MOPS |
SkipList(singlethread) | 0.39MOPS | 0.50MOPS |
SkipList(20threads) | 2.6MOPS | 2.4MOPS |
其中,该Type列中包括不同类型的方法,也即是RDMA单侧读/写访问和两种SkipList方法,ConnextX-3以及ConnextX-5为支持RDMA的、不同类型的网卡;Gbps是指交换带宽;该single thread是指单线程,该20threads是指20个线程,即多线程。
根据表1的结果表明,SkipList和RDMA之间存在显着的性能差距(2.4到34倍),这证明分布式SkipList的瓶颈是CPU,而不是网络。
基于此,许多研究抛弃了传统的RPC,试图利用RDMA提供的单向操作来完全绕过服务器CPU。例如,一种方案为:允许其客户端通过RDMA-read(基于RDMA的读操作)直接从服务器内存中读取数据以获取Get请求。客户端使用CRC64检查由服务器上的Put操作的潜在竞争,所导致的数据不一致。
一种方案为:提供一个分布式内存平台,它实现了采用单边操作的HopscotchHashing。DRTM通过利用HTM和RDMA构建了一个支持事务处理的事务哈希表,并且该方案还使用了带有集群哈希的单向操作。
一种方案为:基于单边和双边RDMA操作,提供一种R-tree索引数据结构(例如Catfish),它利用RDMA读操作进行R-tree遍历,而Cell实现了B-tree索引数据结构并预取一个B树节点一次。
一种方案为:提供一种并发SkipListMap的方案,该方案是当前广泛使用的SkipList实现,它是无锁的。
同时,还可以采用一种基于锁的算法,该算法采用乐观锁和惰性锁删除节点的方式进行删除操作。
但是上述方案均存在或多或少的缺陷,基于此,本说明提供的一种对象处理方法,该方法提供一种基于混合RDMA模式的分布式跳表,本说明提供的对象处理方法,提出了基于RDMA并且采用单边/双边混合通信策略的SkipList。在使用RDMA作为底层传输的同时,选择基于重试锁来提供更多的性能增益;本方案考虑到写操作的竞争很激烈,因此结合了单边的读操作和双边的写操作。并且,HybridSkipList(基于混合RDMA模式的分布式跳表)采用基于重试锁的并发控制,由服务器端负责处理并发,以减少昂贵的网络往返开销。因为使用单边操作可以避免服务器CPU的参与,数据结构操作只需要占用服务器CPU时间的很小一部分,从而降低了CPU的占用率,提高了CPU的处理效率。
具体地,在本说明书中,提供了两种对象处理方法,本说明书同时涉及一种对象处理,一种计算设备,一种计算机可读存储介质以及一种计算机程序,在下面的实施例中逐一进行详细说明。
图1示出了根据本说明书一个实施例提供的一种对象处理方法的应用场景示意图,参见图1,本说明书提供的HybridSkipList采用混合策略进行数据结构操作。客户端104将使用单边的方式执行读操作,使用双边的方式执行写操作。具体地,本说明书提供的对象处理方法将介绍如何实现五个基本方法:Find、Contain、Insert、Update和Remove。其中,该读操作可以包括Find(查询)、Contain(包含)等方法,写操作可以包括Insert(插入)、Update(更新)、Remove(消除)等方法。特别是,该Find和Contain方法被设计为单边和双边的混合模式,可以由客户端104或服务器执行。双边模式与一般的客户端104-服务器RPC方法相同,具体可参见任意一种客户端104-服务器RPC方法。
具体地,客户端104可以向服务端102的RNIC发送RDMA读请求,该RNIC响应于该RDMA读请求从服务端102的内存中确定对应的跳表,从而不需要服务端(也即是服务器)感知,即可对该跳表执行读操作。同时,客户端104可以向服务端102的RNIC发送写请求,通过客户端104与服务端102双边交互的方法,对内存中的跳表执行写操作。
其中,Find方法的执行方式为:
客户端104通过网卡向服务端102的网卡发送Find请求,该Find请求中携带有key,基于此,该服务端102的网卡从该请求中获取携带的key。之后,该网卡确定跳表所包括的多个节点,并获取每个中存储的key。将两者进行匹配,在匹配结果为一致的情况下,将与Find请求中携带有key相匹配的key所对应的节点,确定为目标节点。并将该目标节点的节点标识发送给客户端104,从而完成针对目标节点的查询工作,且全程无须服务端102CPU的参与。
其中,Contain方法的执行方式为:
客户端104通过网卡向服务端102的网卡发送Contain请求,该Contain请求中携带有key,基于此,该网卡从该请求中获取携带的key。之后,该网卡确定跳表所包括的多个节点,并获取每个中存储的key。将两者进行匹配。在匹配结果为一致的情况下,将与Contain请求中携带有key相匹配的key所对应的节点,确定为目标节点,并从该目标节点中获取key对应的数据,且将该key对应的数据发送给客户端104,全程无须服务端102CPU的参与。
也即是说,Contain方法从SkipList中读取目标键值对,如果没有找到,则返回空值。此方法无需等待。
并且,在网卡将数据发送至客户端104的过程中,为了避免发送至客户端104的数据不是最新的数据的问题。该网卡可以获取数据中携带的版本号,以及从该键值对所对应的节点中获取版本号。之后判断该两个版本号是否一致(即版本号为偶数并且与第一个观测值相同),若是,则确定该键值对为最新的数据,则将该键值对发送至客户端104。
若否,则确定该键值对不是最新的数据,则重新执行Contain操作,直到数据有效(该数据为最新的数据)。
其中,Insert方法的执行方式为:
客户端104向服务端102发送针对跳表的Insert请求,该服务端102网卡在接收到该Insert请求之后,将该Insert请求发送至服务端102CPU。
服务端102的CPU在执行Insert操作的过程中,首先调用Find方法来获取前置节点和后继节点。其次按升序锁定前任(即前继节点)并验证前继节点是否仍连接到后继节点。若否,则确定验证失败,在验证失败的情况下,服务端102将释放锁并从Find方法的开头重试。
若是,则确定验证成功,在验证成功的情况下,获取锁;在获取锁后,服务端102将启动一个新节点并完成指针追逐(PointerChasing),并将FullyLinked标志设置为true。也即是,在前置节点和后继节点中插入一个新的节点,并将该前置节点指向后继节点的指针,指向新的节点。将该后继节点指向前置节点的指针,指向新的节点;从而实现节点的插入。
其中,Update方法的执行方式为:
客户端104向服务端102发送针对跳表的Update请求,该服务端102网卡在接收到该Update请求之后,将该Update请求发送至服务端102CPU。
服务端102响应于Update请求,首先调用Find方法定位到目标节点并锁定该节点。然后它将版本号增加到奇数,执行更新(即执行针对该节点中的键值对的数据更新操作),并在执行更新完成之后,将版本号增加到偶数。
其中,Remove方法的执行方式为:
客户端104向服务端102发送针对跳表的Remove请求,该服务端102网卡在接收到该Remove请求之后,将该Remove请求发送至服务端102CPU。
服务端102首先调用Find方法来定位要更新的节点。如果找到该节点,则检查该节点是否准备好被移除,其中,要更新的节点的FullyLinked标志为true,要更新的节点的Removed标志为false。如果可以删除节点,则将通过将Removed标志从false设置为true来逻辑删除它。然后将进行物理删除。
此外,需要说明的是,在上述读请求和写请求执行完成后,均通过重试锁进行并发控制,使得在确定数据结构节点存在修改的情况下,则应重试该读/写操作,从而避免了由于并发操作,导致读请求没有读取到最新数据、或者写请求错误等问题,所造成的服务端102和客户端104之间网络往返开销过大的问题。
进一步地,在本说明书提供的实施例中,该基于单边的Find/Contain(读取)方法,即读操作,比基于双边的Insert/Update/Remove(写入)方法,即写操作,需要更多的RDMA操作。在某些情况下,Read(读取)方法占主导地位,因此RDMA的带宽已经饱和(即绑定在RDMA而不是CPU)。为了解决这个问题,本说明书提供的对象处理方法还提出了一种方法在两种通信范式之间动态切换的机制。服务端102监测入站网络流量,如果超过最大吞吐量阈值(使用profiling工具获取),服务端102通知几个随机选择的客户端104将读操作转为双向RPC模式。
在本说明书提供的实施例中,由于SkipList的天然特性,数据的一致性能够得到保证。因此,为了将SkipList分发到多个服务器,可以使用特定分区方法(例如key-hashing分区方法)来拆分SkipList并将分区分配给指定的服务器。具体来说,每台服务器可以占用多个分区,如果工作负载倾斜,每个分区可以动态迁移到另一台服务器。与需要复杂的节点拆分/合并和自旋的树状数据结构相比,SkipList适合划分为多个分区。每个分区将是一个单独的SkipList并存储其键在特定范围内的元素。分区和服务器之间的映射是服务器端和客户端104都知道的。如果每台服务器的分区较少,为了实现负载平衡,可以将一个分区的头部或尾部部分迁移到另一个分区,其中,该服务器可以理解为服务端102。
此外,需要说明的是,在本说明书提供的实施例中,本说明书提供的对象处理方法中提出的一种数据结构HybridSkipList,该HybridSkipList中包含多个节点,其中,该节点的格式如图2所示,图2是本说明书一个实施例提供的一种对象处理方法中跳表节点的示意图。
参见图2,图2展示了数据结构HybridSkipList中节点的格式。其中,Version为跳表中必要的版本号;Level为跳表的级别号;该跳表以键值对的方式对数据存储,基于此,该key(密钥)为键值对中的键,该Data为key对应的数据;Pointer[Level]为指向后继节点的指针。Flag用于存储对应的控制信息。
此外,每个节点还由节点尾部的四个辅助标志组成。分别为Lock、FullLinked、Removed、Polling。这些标志可以维护SkipList的属性。具体的,锁定(Lock)用于防止在插入或删除节点时靠近节点的结构更改,并阻止对节点的任何访问,直到它被插入或从列表的所有级别中删除。
在实际应用中,为了处理并发控制,本说明提供的对象处理方法中使用重试锁,重试锁对数据结构读取操作(例如,Find、Contain)采用了乐观的方式。其核心思想不是阻止数据结构节点的并发修改,而是乐观地假设数据结构节点没有被修改。读操作完成后,如果数据结构节点存在修改,则应重试该读操作。在HybridSkipList的格式中,版本号在节点的尾部,支持更新方式。这个数字可以帮助检查读取操作期间值的修改。执行更新方法时,它会立即锁定将要修改的节点。之后,它将版本号增加到奇数,执行更新,并将版本号增加到偶数,其中,该增量操作是原子的。并且,在该值修改之后是基于内存屏障将缓存刷新到主内存。如果RDMA读操作与本地修改交错,它将看到奇数值,表明必须重试此读取操作。只有版本号被观察为偶数并检查与第一个观察值相同,它才能成功读取该值,否则意味着尝试失败。
FullLinked用于显示一个节点是否在其所有级别中都已连接。若一个节点是否在其所有级别中都已连接,该FullLinked则为true,反之则为false。在完全连接之前,不允许对节点进行任何读取或写入操作。
Removed用于显示是否可以删除节点。当一个节点被标记时,它在逻辑上被删除。若一个节点被逻辑删除,该Removed则为true,反之则为false。
Polling为轮询标志。
其中,版本号、指针、级别号和辅助字段这四个属性都小于8字节(Byte),分别为:版本号为28Bits、指针为4Bytes、级别号为2Bytes和辅助字段为1Bit。因此客户端可以通过RDMA读取操作将它们取回。为了提高性能,本说明书提供的对象处理方法,将选择性信号应用于RDMA操作。即使没有信号,客户端也可以通过检测尾部轮询标志(Polling)更改为1来知道读取操作已完成(RDMA写入操作保证按顺序写入数据)。
基于此,本说明书提供的对象处理方,提出了基于RDMA并采用单边/双边混合通信策略的SkipList(即HybridSkipList)。在使用RDMA作为底层传输的同时,选择基于重试的锁来提供更多的性能增益。同时,本方案考虑到写操作的竞争很激烈,因此结合了单边的读操作和双边的写操作。
此外,HybridSkipList采用基于锁的并发控制,由服务器端负责处理并发,以减少昂贵的网络往返开销。因为使用单边操作可以避免服务器CPU的参与,数据结构操作只需要占用服务器CPU时间的很小一部分。
图3示出了根据本说明书一个实施例提供的一种对象处理方法的流程图,该对象处理方法应用于服务端的网络通信模块,具体包括以下步骤。
步骤302:接收客户端针对目标对象发送的对象处理请求,并确定所述对象处理请求对应的请求类型。
其中,网络通信模块可以理解为服务端中进行网络通信的模块,例如网卡。在本说明书提供的对象处理方法中,该网络为执行RDMA的网卡(即RNIC)。
该目标对象可以理解为能够存储数据的对象,例如,服务端内存中的跳表、服务端中的链表、服务端中的二维表格等等。该对象处理请求可以理解为能够对该目标对象进行处理的请求;在目标对象为跳表的情况下,该对象处理请求可以理解为针对该跳表进行读操作的读请求(例如Find、Contain等方法),或者,该对象处理请求可以理解为针对该跳表进行写操作的写请求(例如Insert、Update、Remove等方法)。相应地,该请求类型可以理解为该请求对应的类型,例如,该请求为读请求类型,获得或者写请求类型。
具体地,本说明书提供的对象处理方法应用于服务端的网络通信模块,基于此,该客户端能够通过自身配置的网络通信模块,向服务端中的网络通信模块发送对象处理请求,该网络通信模块接收到客户端发送的对象处理请求,并确定该对象处理请求的类型。
下面以本说明书提供的对象处理方法在基于混合RDMA模式的分布式跳表场景下的应用为例,对网络通信模块接收客户端针对目标对象发送的对象处理请求,并确定对应的请求类型做进一步说明。其中,该目标对象可以为跳表,该跳表可以参见上述对HybridSkipList的描述,在此不过多赘述。网络通信模块可以为支持RDMA的网卡,该对象处理请求为客户端针对该跳表的操作请求,服务端为服务器。
基于此,客户端中的应用程序可以通过客户端中部署的网卡,向服务器的网卡发送针对服务器内存中的跳表的操作请求,该网卡在接收到客户端发送的操作请求的情况下,确定该操作请求的类型,该类型包括写请求类型、读请求类型。
步骤304:在确定所述请求类型为读请求类型的情况下,响应于所述对象处理请求从对象存储模块中确定目标对象。
其中,该对象存储模块可以理解为存储该目标对象的模块,在实际应用中,该对象存储模块可以为服务端的内存、服务端中的缓存、服务端中的寄存器等等,本说明书对此不做具体限制。
具体地,该网络通信模块在确定对象处理请求对应的请求类型之后,在确定请求类型为读请求类型的情况下,响应于对象处理请求从对象存储模块中确定目标对象。其中,从对象存储模块中确定目标对象可以理解为,该网络通信模块从对象处理请求中获取其携带的目标对象的对象标识,并基于该对象标识从对象存储模块中确定与该对象标识对应的目标对象。其中,该对象标识可以理解为唯一标识一个对象的信息,例如,目标对象的名称、ID、编号等。在目标对象为跳表的情况下,该对象标识可以为跳表的名称。
沿用上例,服务器的网卡确定客户端发送的请求为针对跳表的读请求的情况下,能够从服务端内存中查询该读请求对应的跳表。在实际应用中,该网卡能够基于该读请求中携带的跳表名称,从服务端内存中查询与该跳表名称对应的跳表。
步骤306:基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,并将所述目标数据发送至所述客户端。
其中,在对象处理请求不同的情况下,该目标数据也不同,例如,该对象处理请求为针对目标对象中的数据的获取请求的情况下,即对象处理请求为Contain方法的情况下,目标对象可以理解为该目标对象中存储的用户数据,例如,在目标对象为跳表的情况下,该目标数据为跳表中存储的用户数据(例如,多媒体数据、数值等)。在实际应用中,该目标数据可以通过键值对的方式存储在跳表的节点中。
例如,该对象处理请求为针对目标对象中的节点的查询请求的情况下,即对象处理请求为Find方法的情况下,该目标数据可以为该节点对应的节点信息,其中,节点信息可以理解为该节点的节点标识。
在目标数据为存储在跳表的节点中的数据时,该数据标识信息可以理解为唯一表征该目标数据的标识,例如,目标数据为通过键值对的方式存储在跳表的节点中的数据时,该数据标识信息可以理解为数据对应的键(key)。
进一步的,在本说明书提供的实施例中,在对象处理请求为Contain的情况下,该网卡需要通过RDMA的方式从服务端的内存中,确定对应的跳表,并从该跳表中获取对应的数据,从而避免服务端CPU需要消耗计算资源执行Contain请求的问题,降低了CPU的计算压力,并且提高了跳表的利用效率;基于此,从跳表中获取目标数据的方式如下。
所述基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,包括:
确定所述对象处理请求中携带的数据标识信息;
确定所述目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;
将所述数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将所述本地数据标识信息对应的所述数据存储节点确定为目标数据存储节点;
从所述目标数据存储节点中获取所述数据标识信息对应的目标数据。
其中,该数据存储节点可以理解为目标对象中用于存储数据的节点,例如,在目标对象为跳表的情况下,该数据存储节点可以理解为跳表中的节点,具体可参见图2的描述。再例如,在目标对象为树状数据结构的情况下,该数据存储节点可以理解为该树状数据结构中用于存储数据的节点。
本地数据标识信息可以理解为数据存储节点中存储的key。参见图2,该本地数据标识信息为节点中的key,该目标数据为key对应的数据(data)。
具体地,该对象处理请求中携带有数据标识信息,基于此,该网络通信模块从该对象处理请求中获取数据标识信息。之后,该网络通信模块确定目标对象所包括的多个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息。
将数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将本地数据标识信息对应的数据存储节点确定为目标数据存储节点;并从该目标数据存储节点中获取数据标识信息对应的目标数据。
沿用上例,该Contain请求中携带有key,基于此,该网卡从该请求中获取携带的key。之后,该网卡确定跳表所包括的多个节点,并获取每个中存储的key。将两者进行匹配,
在匹配结果为一致的情况下,将与Contain请求中携带有key相匹配的key所对应的节点,确定为目标节点,并从该目标节点中获取key对应的数据。
也即是说,服务器CPU调用Find方法来验证密钥的存在,如果找到具有此密钥的节点,则从该节点中的目标键值对发送至客户端。
并且在本说明书提供的一实施例中,服务器CPU响应于Contain方法从SkipList中读取目标键值对,如果没有找到,则返回空值,此方法无需等待。
在本说明书提供的实施例中,网卡调用Find方法来验证密钥的存在,也即是确定节点中的密钥与Contain中携带密钥是否一致。如果一致,则确定找到具有此密钥的节点,则通过RDMA读取检查节点的完全链接和已删除标志。只有FullyLinked为true,Removed为false,节点才被认为已经存在,可以将该节点中的值返回给客户端。
或者,在本说明书提供的实施例中,在本说明书提供的实施例中,网卡调用Find方法来验证密钥的存在,也即是确定节点中的密钥与Contain中携带密钥是否一致。如果一致,则确定找到具有此密钥的节点,从该节点中的目标键值对、Removed、FullyLinked等数据发送至客户端。而该客户端检查节点的完全链接和已删除标志。只有FullyLinked为true,Removed为false,节点才被认为已经存在,可以将该节点中的值返回给客户端中的应用程序。其中,该应用程序为发起该Contain请求的程序。
进一步地,由于跳表中每个节点中的数据存在不停更新的可能性,且在读请求数量较多的情况下,网卡获取该数据并发送给客户端的过程中,可能由于读请求数量较多导致数据无法及时将该数据发送给客户端,因此会造成发送至客户端的数据不是最新的数据的问题,因此,本说明书提供的实施例中,网卡在返回值(数据)之前,需要检查该节点的版本号。如果版本号的值不能满足这两个条件:即版本号为偶数并且与第一个观测值相同,必须从Contain方法的开头重试,直到数据有效(该数据为最新的数据);具体实现如下。
所述将所述目标数据发送至所述客户端,包括:
获取所述目标数据中的版本信息,并获取所述目标数据存储节点中存储的本地版本信息;
判断所述版本信息与所述本地版本信息是否一致;
若是,则将所述目标数据发送至所述客户端;
若否,则继续执行所述基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据的步骤,直至所述版本信息与所述本地版本信息为一致。
其中,该版本信息可以理解为版本号。对应的,该本地版本信息为节点中的版本号,在实际应用中,该节点中的版本号会根据节点中数据的修改而产生变化。
沿用上例,网卡在将键值对、版本号等数据发送至客户端的情况下,该网卡从需要发送给客户端的数据中获取版本号,并从该键值对应的节点中获取版本号。之后判断该两个版本号是否一致,若是,则确定该键值对为最新的数据,则将该键值对发送至客户端。
若否,则确定该键值对不是最新的数据,则重新执行获取该目标数据的操作,直到数据有效(该数据为最新的数据)。
此外,本说明书提供的对象处理方法中,如果跳表中节点的数据量较小,一种策略可以是先获取整个节点,然后检查其状态。当更新操作很少时,这种优化可以显著减少网络往返次数。
进一步的,在本说明书提供的实施例中,在对象处理请求为Find的情况下,该网卡需要通过RDMA的方式从服务端的内存中,确定对应的跳表,并从该跳表中查询对应的节点,从而避免服务端CPU需要消耗计算资源执行Find请求的问题,降低了CPU的计算压力,并且提高了跳表的利用效率。基于此,从跳表中获取目标数据的方式如下。
所述基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,包括:
确定所述对象处理请求中携带的数据标识信息;
确定所述目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;
将所述数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将所述本地数据标识信息对应的所述数据存储节点确定为目标数据存储节点;
将所述目标数据存储节点对应的节点信息作为目标数据。
其中,该对象处理请求可以为从目标对象中查询对应的节点的请求,例如,Find方法。对应的,节点信息可以理解为该目标数据存储节点的节点标识。
需要说明的是,Find方法是所有操作的核心。具体Find方法执行过程可以为:设置header节点为root(根节点),client(客户端)通过RDMA遍历SkipList中的节点迭代读取,直到找到目标节点或循环结束。
沿用上例,该Find请求中携带有key,基于此,该网卡从该请求中获取携带的key。之后,该网卡确定跳表所包括的多个节点,并获取每个中存储的key。将两者进行匹配,在匹配结果为一致的情况下,将与Find请求中携带有key相匹配的key所对应的节点,确定为目标节点。并将该目标节点的节点标识发送给客户端。
在本说明书提供的实施例中,HybridSkipList为了避免并发的问题,可以将通过特定方法将MMIO(从本地内存获取数据到RNIC的操作)减少到只有一个。在实际应用中,该特定方法可以为任意一种将多个MMIO减少到只有一个的方法,例如,Doorbell技术(门铃技术)。基于此,该HybridSkipList是利用“Doorbell”处理多个RDMA读取操作。Doorbell可以将多个CPU生成的MMIO减少到只有一个。但是,同一批次中的这些RDMA读取操作不应相互依赖于彼此的值。使得客户端只需轮询一次批处理中最后一个CQE即可确定所有请求的状态。根据这个规则,通过使用Doorbell批处理,使得客户端可以在同一个批处理中取回密钥和后继指针,后续基于该密钥和后继指针继续进行针对节点的迭代查询。
进一步地,在本说明提供的实施例中,Insert、Update和Remove等方法被设计为双边模式之外,双边模式与一般的客户端-服务器RPC方法相同,具体地实现方式如下。
所述确定所述对象处理请求对应的请求类型之后,还包括:
在确定所述请求类型为写请求类型的情况下,将所述对象处理请求发送至所述服务端的运算控制模块,以使所述运算控制模块响应于所述对象处理请求对所述目标对象进行处理。
其中,该运算控制模块可以理解为服务端中能够执行写请求的模块,例如,服务端中的CPU。
沿用上例,网卡在确定该请求为写请求(包括但不限于Insert、Update和Remove等)的情况下,能够将该对象处理请求发送至服务器的CPU,以使的该CPU能够基于该写请求对内存中的跳表进行处理,从而实现通过双边模式对跳表进行处理。
需要说明的是,上述运算控制模块响应于对象处理请求对目标对象进行处理的步骤,可参见下述一种应用于包括网络通信模块以及运算控制模块的服务端的对象处理方法中,对应或相应的内容,本实施例在此不做过多赘述。
本说明提供的应用于服务端的网络通信模块的对象处理方法,在确定接收到的对象处理请求的请求类型为读请求类型的情况下,直接响应于该对象处理请求从目标对象中读取目标数据,并将目标数据发送至客户端,避免了服务端的CPU需要消耗计算资源对该请求进行处理,提高了CPU的运算效率降低,并且保证了快速的对目标对象进行处理,提高了目标对象的处理性能。
此外,上述为本实施例的一种对象处理方法的示意性方案。需要说明的是,该对象处理方法的技术方案与下述的另一种对象处理方法的技术方案属于同一构思,对象处理方法的技术方案未详细描述的细节内容,均可以参见下述另一种对象处理方法的技术方案的描述。
图4示出了根据本说明书一个实施例提供的另一种对象处理方法的流程图,该对象处理方法应用于服务端,所述服务端包括网络通信模块以及运算控制模块,该方法具体包括以下步骤。
步骤402:所述网络通信模块,接收客户端针对目标对象发送的对象处理请求,并在确定所述对象处理请求对应的请求类型为读请求类型的情况下,响应于所述对象处理请求从对象存储模块中确定目标对象,基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,并将所述目标数据发送至客户端;以及
在确定所述请求类型为写请求类型的情况下,将所述对象处理请求发送至所述运算控制模块。
需要说明的是,针对该步骤402的解释说明可参见上述一种对象处理方法中对应或相应地内容,本说明书对此不做过多赘述。
本说明书提供的一实施例中,所述基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,包括:
所述网络通信模块,确定所述对象处理请求中携带的数据标识信息;
确定所述目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;
将所述数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将所述本地数据标识信息对应的所述数据存储节点确定为目标数据存储节点;
从所述目标数据存储节点中获取所述数据标识信息对应的目标数据。
具体地,针对上述网络通信模块,确定对象处理请求中携带的数据标识信息;确定目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;将数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将本地数据标识信息对应的数据存储节点确定为目标数据存储节点;从目标数据存储节点中获取数据标识信息对应的目标数据的解释说明,可参见上述一种对象处理方法中对应或相应地内容,本说明书对此不做过多赘述。
本说明书提供的一实施例中,所述将所述目标数据发送至所述客户端,包括:
所述网络通信模块,获取所述目标数据中的版本信息,并获取所述目标数据存储节点中存储的本地版本信息;
判断所述版本信息与所述本地版本信息是否一致;
若是,则将所述目标数据发送至所述客户端;
若否,则继续执行所述基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据的步骤,直至所述版本信息与所述本地版本信息为一致。
具体地,针对上述实施例网络通信模块,获取目标数据中的版本信息,并获取目标数据存储节点中存储的本地版本信息;判断版本信息与本地版本信息是否一致;若是,则将目标数据发送至客户端;若否,则继续执行基于对象处理请求中携带的数据标识信息从目标对象中读取目标数据的步骤,直至版本信息与本地版本信息为一致的解释说明,可参见上述一种对象处理方法中对应或相应地内容,本说明书对此不做过多赘述。
本说明书提供的一实施例中,所述基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,包括:
所述网络通信模块,确定所述对象处理请求中携带的数据标识信息;
确定所述目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;
将所述数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将所述本地数据标识信息对应的所述数据存储节点确定为目标数据存储节点;
将所述目标数据存储节点对应的节点信息作为目标数据。
具体地,针对上述网络通信模块,确定对象处理请求中携带的数据标识信息;确定目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;将数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将本地数据标识信息对应的数据存储节点确定为目标数据存储节点;将目标数据存储节点对应的节点信息作为目标数据的解释说明,可参见上述一种对象处理方法中对应或相应地内容,本说明书对此不做过多赘述。
步骤404:所述运算控制模块,接收所述网络通信模块发送的所述对象处理请求,并响应于所述对象处理请求对所述目标对象进行处理。
在本说明书提供的实施例中,所述运算控制模块,响应于所述对象处理请求对所述目标对象进行处理,包括:
所述运算控制模块,响应于所述对象处理请求从对象存储模块中确定目标对象;
基于所述对象处理请求中携带的数据标识信息,从所述目标对象包括的至少两个数据存储节点中确定目标数据存储节点;
基于所述对象处理请求对所述目标数据存储节点进行处理。
具体地,该运算控制模块,在接收网络通信模块发送的对象处理请求之后,能够响应于对象处理请求从对象存储模块中确定目标对象,并基于该对象处理请求中携带的数据标识信息,从目标对象包括的至少两个数据存储节点中确定目标数据存储节点,之后基于该对象处理请求对该目标数据存储节点进行处理。
其中,从对象存储模块中确定目标对象可以理解为,该运算控制模块从对象处理请求中获取其携带的目标对象的对象标识,并基于该对象标识从对象存储模块中确定与该对象标识对应的目标对象。其中,该对象标识可以理解为唯一标识一个对象的信息,例如,目标对象的名称、ID、编号等。在目标对象为跳表的情况下,该对象标识可以为跳表的名称。
进一步地,本说明书提供的实施例中,所述基于所述对象处理请求中携带的数据标识信息,从所述目标对象包括的至少两个数据存储节点中确定目标数据存储节点,包括:
所述运算控制模块,确定所述对象处理请求中携带的数据标识信息;
确定所述目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;
将所述数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将所述本地数据标识信息对应的所述数据存储节点确定为目标数据存储节点。
沿用上例,该写请求中携带有key,基于此,该服务端CPU从该请求中获取携带的key。之后,该服务端CPU确定跳表所包括的多个节点,并获取每个中存储的key。将两者进行匹配,在匹配结果为一致的情况下,将与写请求中携带有key相匹配的key所对应的节点,确定为目标节点。
进一步的,Insert、Update、Remove等方法是双边实现。它们仅由服务器调用。服务器端使用gcc(GNU Compiler Collection,GNU编译器套件)内置原子库来保证关键数据访问是原子的。具体地,该对象处理请求为Insert请求的情况下,该服务器基于该Insert请求对跳表执行节点插入的方式如下。
所述对象处理请求为节点新增请求;
相应地,所述基于所述对象处理请求对所述目标数据存储节点进行处理,包括:
所述运算控制模块,确定所述目标数据存储节点对应的前置数据存储节点,并锁定所述前置数据存储节点;
在确定所述前置数据存储节点与所述目标数据存储节点相连接的情况下,创建待处理存储节点;
将所述前置数据存储节点中指向所述目标数据存储节点的指针,修改为指向所述待处理存储节点的指针;
将所述目标数据存储节点中指向所述前置数据存储节点的指针,修改为指向所述待处理存储节点的指针;
释放所述前置数据存储节点。
其中,该节点新增请求可以理解为向目标对象中增加一个用于存储数据的节点的请求,例如,该节点新增请求可以为Insert请求。
沿用上例,服务器的CPU在执行Insert操作的过程中,首先调用Find方法来获取前置节点和后继节点。需要说明的是,这里服务器端将处理Find方法的处理,而不是使用单向操作来查找节点的位置。这是因为在应用缓存后,在同一种方法中单面和双面操作的结合会产生一致性问题。因此,为避免在插入节点时更改前继节点,本说明书提供的对象处理方,按升序锁定前任(即前继节点)并验证前继节点仍连接到后继节点。如果验证失败,服务器将释放锁并从Find方法的开头重试。如果验证成功,在获取锁后,服务器将启动一个新节点并完成指针追逐(PointerChasing),并将FullyLinked标志设置为true。
也即是,在前置节点和后继节点中插入一个新的节点,并将该前置节点指向后继节点的指针,指向新的节点。并将该后继节点指向前置节点的指针,指向新的节点;从而实现节点的插入。
在本说明书实施例汇总,该对象处理请求为Update、Remove请求的情况下,该服务器基于该Update请求、Remove请求对跳表执行节点插入的方式如下。
所述对象处理请求为节点更新请求;
相应地,所述基于所述对象处理请求对所述目标数据存储节点进行处理,包括:
所述运算控制模块,确定所述对象处理请求中携带的、对初始数据进行更新的目标数据;
锁定所述目标数据存储节点,并基于所述目标数据对所述目标数据存储节点中的初始数据进行更新,且在更新完成后释放所述目标数据存储节点。
其中,该节点更新请求可以理解为对节点中的数据进行更新的请求;在实际应用中,该节点更新请求可以为Update请求或者Remove请求。例如,在节点更新请求为Update请求的情况下,该服务端定位到目标节点之后,首先锁定该节点。然后它将版本号增加到奇数,执行更新(即执行针对该节点中键值对的数据的更新操作),并在执行更新完成之后,将版本号增加到偶数。
例如,在节点更新请求为Remove请求的情况下,Remove请求与Insert方法类似,服务器首先调用Find方法来定位要更新的节点。如果找到该节点,则检查该节点是否准备好被移除,其中,要更新的节点的FullyLinked标志为true,要更新的节点的Removed标志为false。如果可以删除节点,则将通过将Removed标志从false设置为true来逻辑删除它。然后将进行物理删除。服务器锁定要更新的节点的前继节点,验证前继节点的Removed标志仍然为false并连接到要更新的节点。验证后,服务器端能够从上到下拼接出要更新的节点,保持SkipList的属性。
基于此,在节点更新请求为Update请求的情况下,该初始数据可以为节点中的键值对的数据;对应的,该目标数据为对该键值对中的数据进行更新的请求。在节点更新请求为Remove请求的情况下,该初始数据为节点的Removed标志,该目标数据为将Removed标志转换为false的数据。
需要说明的是,该Find和Contain方法可以由客户端或服务器执行,因此,服务器可以通过CPU执行该Find和Contain方法,具体服务器CPU执行该Find和Contain方法的过程,可以参考上述客户端执行该Find和Contain方法的步骤,本说明书对此不做过多赘述。例如,在客户端执行的过程中,可以通过服务器网卡执行Find和Contain方法,在服务器执行的过程中,可以通过服务器的CPU,替换服务端网卡执行Find和Contain方法。
本说明书提供的应用于包含网络通信模块以及运算控制模块的服务端的对象处理方法,在确定接收到的对象处理请求的请求类型为读请求类型的情况下,直接响应于该对象处理请求从目标对象中读取目标数据,并将目标数据发送至客户端,并且,在确定请求类型为写请求类型的情况下,将对象处理请求发送至运算控制模块,由该运算控制模块响应于对象处理请求对目标对象进行处理,从而使得服务端的CPU仅需要处理写请求,避免了服务端的CPU需要消耗计算资源对该读请求进行处理,提高了CPU的运算效率降低,并且保证了快速的对目标对象进行处理,提高了目标对象的处理性能。
本说明书提供的一实施例中,提供了对象处理方法在实际应用场景下应用效果,参见图5,图5是本说明书一个实施例提供的一种对象处理方法的应用效果的示意图,参见图5可知,在将负载设置为10%的写入操作,缓存比例为1/32,键值项中的数据大小为4096字节。并在评估结果是十次运行的平均值的情况下,可以分别比单边(One-Sided)SkipList/双边(Two-Sided)SkipList分别提升1.48到4.41倍/0.52到3.45倍高吞吐量(Throughput)。当客户端数量(ClientNumbor)为16时,HybridSkipList(图5中的Hybrid)可以达到237KOPS的峰值吞吐量(Throughput)。在相同的设置下,纯RDMA写入测试执行780KOPS(乒乓场景为390KOPS)。HybridSkipList的吞吐量仅比RDMA写入吞吐量上限低40%。综上所述,HybridSkipList可以充分利用RDMA带宽。其中,Throughput可以为吞吐量;图5中的No Cache可以为本地缓存,或者在代理服务器缓存。
因此,基于RDMA并且采用单边/双边混合通信策略的SkipList。在使用RDMA作为底层传输的同时,选择基于重试的锁来提供更多的性能增益。并且HybridSkipList采用基于锁的并发控制,由服务器端负责处理并发,以减少昂贵的网络往返开销。因为使用单边操作可以避免服务器CPU的参与,数据结构操作只需要占用服务器CPU时间的很小一部分。
与上述方法实施例相对应,本说明书还提供了对象处理装置实施例,图6示出了本说明书一个实施例提供的一种对象处理装置的结构示意图。如图6所示,该装置服务端的网络通信模块,包括:
接收模块602,被配置为接收客户端针对目标对象发送的对象处理请求,并确定所述对象处理请求对应的请求类型;
确定模块604,被配置为在确定所述请求类型为读请求类型的情况下,响应于所述对象处理请求从对象存储模块中确定目标对象;
读取模块606,被配置为基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,并将所述目标数据发送至所述客户端。
可选地,所述对象处理装置还包括发送模块,被配置为:
在确定所述请求类型为写请求类型的情况下,将所述对象处理请求发送至所述服务端的运算控制模块,以使所述运算控制模块响应于所述对象处理请求对所述目标对象进行处理。
可选地,所述读取模块606,还被配置为:
确定所述对象处理请求中携带的数据标识信息;
确定所述目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;
将所述数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将所述本地数据标识信息对应的所述数据存储节点确定为目标数据存储节点;
从所述目标数据存储节点中获取所述数据标识信息对应的目标数据。
可选地,所述读取模块606,还被配置为:
获取所述目标数据中的版本信息,并获取所述目标数据存储节点中存储的本地版本信息;
判断所述版本信息与所述本地版本信息是否一致;
若是,则将所述目标数据发送至所述客户端;
若否,则继续执行所述基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据的步骤,直至所述版本信息与所述本地版本信息为一致。
可选地,所述读取模块606,还被配置为:
确定所述对象处理请求中携带的数据标识信息;
确定所述目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;
将所述数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将所述本地数据标识信息对应的所述数据存储节点确定为目标数据存储节点;
将所述目标数据存储节点对应的节点信息作为目标数据。
本说明书提供的对象处理装置,在确定接收到的对象处理请求的请求类型为读请求类型的情况下,直接响应于该对象处理请求从目标对象中读取目标数据,并将目标数据发送至客户端,避免了服务端的CPU需要消耗计算资源对该请求进行处理,提高了CPU的运算效率降低,并且保证了快速的对目标对象进行处理,提高了目标对象的处理性能。
上述为本实施例的一种对象处理装置的示意性方案。需要说明的是,该对象处理装置的技术方案与上述的对象处理方法的技术方案属于同一构思,对象处理装置的技术方案未详细描述的细节内容,均可以参见上述对象处理方法的技术方案的描述。
图7示出了根据本说明书一个实施例提供的一种计算设备700的结构框图。该计算设备700的部件包括但不限于存储器710和处理器720。处理器720与存储器710通过总线730相连接,数据库750用于保存数据。
计算设备700还包括接入设备740,接入设备740使得计算设备700能够经由一个或多个网络760通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备740可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备700的上述部件以及图7中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图7所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备700可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备700还可以是移动式或静止式的服务器。
其中,处理器720用于执行如下计算机可执行指令,该计算机可执行指令被处理器720执行时实现上述对象处理方法的步骤。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的对象处理方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述对象处理方法的技术方案的描述。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述对象处理方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的对象处理方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述对象处理方法的技术方案的描述。
本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述对象处理方法的步骤。
上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的对象处理方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述对象处理方法的技术方案的描述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
Claims (14)
1.一种对象处理方法,应用于服务端的网络通信模块,包括:
接收客户端针对目标对象发送的对象处理请求,并确定所述对象处理请求对应的请求类型;
在确定所述请求类型为读请求类型的情况下,响应于所述对象处理请求从对象存储模块中确定目标对象;
基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,并将所述目标数据发送至所述客户端。
2.根据权利要求1所述的对象处理方法,所述确定所述对象处理请求对应的请求类型之后,还包括:
在确定所述请求类型为写请求类型的情况下,将所述对象处理请求发送至所述服务端的运算控制模块,以使所述运算控制模块响应于所述对象处理请求对所述目标对象进行处理。
3.根据权利要求1所述的对象处理方法,所述基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,包括:
确定所述对象处理请求中携带的数据标识信息;
确定所述目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;
将所述数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将所述本地数据标识信息对应的所述数据存储节点确定为目标数据存储节点;
从所述目标数据存储节点中获取所述数据标识信息对应的目标数据。
4.根据权利要求3所述的对象处理方法,所述将所述目标数据发送至所述客户端,包括:
获取所述目标数据中的版本信息,并获取所述目标数据存储节点中存储的本地版本信息;
判断所述版本信息与所述本地版本信息是否一致;
若是,则将所述目标数据发送至所述客户端;
若否,则继续执行所述基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据的步骤,直至所述版本信息与所述本地版本信息为一致。
5.根据权利要求1所述的对象处理方法,所述基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,包括:
确定所述对象处理请求中携带的数据标识信息;
确定所述目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;
将所述数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将所述本地数据标识信息对应的所述数据存储节点确定为目标数据存储节点;
将所述目标数据存储节点对应的节点信息作为目标数据。
6.一种对象处理方法,应用于服务端,所述服务端包括网络通信模块以及运算控制模块,其中,
所述网络通信模块,接收客户端针对目标对象发送的对象处理请求,并在确定所述对象处理请求对应的请求类型为读请求类型的情况下,响应于所述对象处理请求从对象存储模块中确定目标对象,基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,并将所述目标数据发送至客户端;以及
在确定所述请求类型为写请求类型的情况下,将所述对象处理请求发送至所述运算控制模块;
所述运算控制模块,接收所述网络通信模块发送的所述对象处理请求,并响应于所述对象处理请求对所述目标对象进行处理。
7.根据权利要求6所述的对象处理方法,所述基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,包括:
所述网络通信模块,确定所述对象处理请求中携带的数据标识信息;
确定所述目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;
将所述数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将所述本地数据标识信息对应的所述数据存储节点确定为目标数据存储节点;
从所述目标数据存储节点中获取所述数据标识信息对应的目标数据。
8.根据权利要求6所述的对象处理方法,所述基于所述对象处理请求中携带的数据标识信息从所述目标对象中读取目标数据,包括:
所述网络通信模块,确定所述对象处理请求中携带的数据标识信息;
确定所述目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;
将所述数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将所述本地数据标识信息对应的所述数据存储节点确定为目标数据存储节点;
将所述目标数据存储节点对应的节点信息作为目标数据。
9.根据权利要求6所述的对象处理方法,所述运算控制模块,响应于所述对象处理请求对所述目标对象进行处理,包括:
所述运算控制模块,响应于所述对象处理请求从对象存储模块中确定目标对象;
基于所述对象处理请求中携带的数据标识信息,从所述目标对象包括的至少两个数据存储节点中确定目标数据存储节点;
基于所述对象处理请求对所述目标数据存储节点进行处理。
10.根据权利要求9所述的对象处理方法,所述基于所述对象处理请求中携带的数据标识信息,从所述目标对象包括的至少两个数据存储节点中确定目标数据存储节点,包括:
所述运算控制模块,确定所述对象处理请求中携带的数据标识信息;
确定所述目标对象包括的至少两个数据存储节点,并获取每个数据存储节点中存储的本地数据标识信息;
将所述数据标识信息分别与每个本地数据标识信息进行匹配,在匹配结果为一致的情况下,将所述本地数据标识信息对应的所述数据存储节点确定为目标数据存储节点。
11.根据权利要求9所述的对象处理方法,所述对象处理请求为节点新增请求;
相应地,所述基于所述对象处理请求对所述目标数据存储节点进行处理,包括:
所述运算控制模块,确定所述目标数据存储节点对应的前置数据存储节点,并锁定所述前置数据存储节点;
在确定所述前置数据存储节点与所述目标数据存储节点相连接的情况下,创建待处理存储节点;
将所述前置数据存储节点中指向所述目标数据存储节点的指针,修改为指向所述待处理存储节点的指针;
将所述目标数据存储节点中指向所述前置数据存储节点的指针,修改为指向所述待处理存储节点的指针;
释放所述前置数据存储节点。
12.根据权利要求9所述的对象处理方法,所述对象处理请求为节点更新请求;
相应地,所述基于所述对象处理请求对所述目标数据存储节点进行处理,包括:
所述运算控制模块,确定所述对象处理请求中携带的、对初始数据进行更新的目标数据;
锁定所述目标数据存储节点,并基于所述目标数据对所述目标数据存储节点中的初始数据进行更新,且在更新完成后释放所述目标数据存储节点。
13.一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至5任意一项所述对象处理方法的步骤。
14.一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现权利要求1至5任意一项所述对象处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210514839.1A CN115168022A (zh) | 2022-05-12 | 2022-05-12 | 对象处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210514839.1A CN115168022A (zh) | 2022-05-12 | 2022-05-12 | 对象处理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115168022A true CN115168022A (zh) | 2022-10-11 |
Family
ID=83482691
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210514839.1A Pending CN115168022A (zh) | 2022-05-12 | 2022-05-12 | 对象处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115168022A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116069262A (zh) * | 2023-03-06 | 2023-05-05 | 苏州浪潮智能科技有限公司 | 一种分布式存储卸载方法、装置、电子设备及存储介质 |
-
2022
- 2022-05-12 CN CN202210514839.1A patent/CN115168022A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116069262A (zh) * | 2023-03-06 | 2023-05-05 | 苏州浪潮智能科技有限公司 | 一种分布式存储卸载方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6868414B2 (en) | Technique for serializing data structure updates and retrievals without requiring searchers to use locks | |
US8954391B2 (en) | System and method for supporting transient partition consistency in a distributed data grid | |
US7702640B1 (en) | Stratified unbalanced trees for indexing of data items within a computer system | |
US9367251B2 (en) | System and method of a shared memory hash table with notifications | |
US7730101B2 (en) | Implementing a tree data storage structure in a distributed environment | |
US20130019000A1 (en) | Multi-operational transactional access of in-memory data grids in a client-server environment | |
Cassell et al. | Nessie: A decoupled, client-driven key-value store using RDMA | |
CN113377868A (zh) | 一种基于分布式kv数据库的离线存储系统 | |
EP3347815B1 (en) | Action-based routing of a transaction in an online transaction processing system | |
US20140372396A1 (en) | Database System Lock Operation Method and Device | |
Luo et al. | {SMART}: A {High-Performance} Adaptive Radix Tree for Disaggregated Memory | |
CN115168022A (zh) | 对象处理方法 | |
Ma et al. | A Survey of Storage Systems in the RDMA era | |
CN112667636B (zh) | 索引建立方法、装置及存储介质 | |
WO2019098870A1 (en) | Data storage system and method of providing a data storage system | |
Wang et al. | A server bypass architecture for hopscotch hashing key–value store on DRAM-NVM memories | |
CN116775712A (zh) | 联表查询方法、装置、电子设备、分布式系统和存储介质 | |
Abughofa et al. | Towards online graph processing with spark streaming | |
CN107832121B (zh) | 一种应用于分布式串行长事务的并发控制方法 | |
Du et al. | Fast one-sided RDMA-based state machine replication for disaggregated memory | |
US11809414B2 (en) | Serialization of data in a concurrent transaction processing distributed database | |
EP3391217B1 (en) | Long-running storage manageability operation management | |
US11222003B1 (en) | Executing transactions for a hierarchy of data objects stored in a non-transactional data store | |
CN113360319B (zh) | 一种数据备份方法和装置 | |
CN115185961A (zh) | 分布式数据库的节点配置方法、事务日志同步方法和节点 |
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 |