CN111385255B - 一种异步调用实现方法、装置、服务器及服务器集群 - Google Patents
一种异步调用实现方法、装置、服务器及服务器集群 Download PDFInfo
- Publication number
- CN111385255B CN111385255B CN201811625860.9A CN201811625860A CN111385255B CN 111385255 B CN111385255 B CN 111385255B CN 201811625860 A CN201811625860 A CN 201811625860A CN 111385255 B CN111385255 B CN 111385255B
- Authority
- CN
- China
- Prior art keywords
- request
- rpc
- resource
- identification field
- main process
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/133—Protocols for remote procedure calls [RPC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种异步调用实现方法、装置、服务器及服务器集群,其中异步调用实现方法,应用于服务器集群,服务器集群包括多个服务器,多个服务器均能访问预设的共享数据库;服务器中运行有主进程及子线程,方法包括:主进程基于资源操作请求判断共享数据库中是否存在目标标识字段;其中,资源操作请求用于请求针对指定资源进行指定操作;目标标识字段为与指定资源的指定操作相冲突的字段;若不存在目标标识字段,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中;子线程从本地内存队列中获取RPC请求并发送。本发明实施例提高了RPC调用的效率。
Description
技术领域
本发明涉及通信技术领域,特别是涉及一种异步调用实现方法、装置、服务器及服务器集群。
背景技术
在大型分布式系统中,往往有很多个节点,这些节点之间有各种各样的RPC(Remote Procedure Call Protocol,远程过程调用协议)调用。特别的,对于集中服务的节点,需要通过RPC调用大量远程服务,实现特定的功能。例如neutron-server(子服务器)与agent(代理)的关系:neutron-server暴露rest API(Application ProgrammingInterface,应用程序编程接口),使得第三方服务调用rest API,neutron-server发送RPC请求到相关联的neutron-agent中,由neutron-agent实现与第三方服务对应的功能。
具体如计算服务nova请求服务器neutron-server创建虚拟网卡的过程:nova调用neutron-server的rest API,该neutron-server发送RPC请求到相关联的agent中,通过agent实现虚拟网卡的创建。单个异步RPC请求的发送并不需要太长的时间,实际生产环境在0.01s左右。但若涉及到大量的RPC请求,这个时间会被拉长。
然而发明人发现,通过在server端使用for循环串行进行RPC调用,API的响应时间与集群的规模在一定程度上是线性相关的,对于规模庞大的分布式系统集群,这种串行RPC调用的方式严重影响API的响应时间,比如有100个RPC请求,每个RPC请求花费时间是0.01s,那么花在RPC请求的时间上则有1s。因此,如何提高RPC调用的效率仍然是亟待解决的问题。
发明内容
本发明实施例的目的在于提供一种异步调用实现方法、装置、服务器及服务器集群,以实现提高RPC调用的效率。具体技术方案如下:
第一方面,本发明实施例公开了一种异步调用实现方法,应用于服务器集群,所述服务器集群包括多个服务器,所述多个服务器均能访问预设的共享数据库;所述服务器中运行有主进程及子线程,所述方法包括:
所述主进程基于资源操作请求判断所述共享数据库中是否存在目标标识字段;其中,所述资源操作请求用于请求针对指定资源进行指定操作;所述目标标识字段为与所述指定资源的指定操作相冲突的字段;
若不存在所述目标标识字段,则所述主进程基于所述资源操作请求生成至少一个远程过程调用协议RPC请求,并将所述RPC请求加入到本地内存队列中;
所述子线程从所述本地内存队列中获取所述RPC请求并发送。
可选地,若不存在所述目标标识字段,所述方法还包括:
所述主进程基于所述资源操作请求生成请求描述信息;所述请求描述信息包括资源请求标识字段;所述资源请求标识字段包括:资源标识和操作类型;
所述主进程将所述资源标识字段存储至所述共享数据库。
可选地,所述请求描述信息还包括:请求发送状态字段;在所述生成所述请求描述信息之后,所述方法还包括:
所述主进程将所述请求描述信息存储至本地,并将所述请求发送状态字段中的值修改为正在写入;
在完成将所述至少一个RPC请求加入到所述本地内存队列之后,所述主进程将所述请求发送状态字段中的值修改为完成写入。
可选地,在所述子线程从所述本地内存队列中获取所述RPC请求并发送之后,所述方法还包括:
所述子线程判断所述请求发送状态字段的值是否为完成写入;
若是,则所述子线程删除所述共享数据库中的所述资源标识字段。
可选地,所述请求描述信息还包括请求发送目的字段;所述请求发送目的字段包括每个所述RPC请求的目的主机的名称;所述子线程从所述本地内存队列中获取所述RPC请求并发送,包括:
所述子线程从所述本地内存队列中获取所述RPC请求并基于所述每个所述RPC请求的目的主机的名称发送所述RPC请求。
可选地,所述方法还包括:
若存在所述目标标识字段,则所述主进程返回冲突异常信息。
可选地,在所述主进程基于资源操作请求判断所述共享数据库中是否存在目标标识字段之前,所述方法还包括:
服务器在接收到所述资源操作请求后,初始化所述主进程;
在所述本地内存队列存在所述RPC请求时,初始化所述子线程;其中,所述子线程与所述主进程的生命周期相同。
第二方面,本发明实施例公开了一种异步调用实现装置,应用于服务器集群,所述服务器集群包括多个服务器,所述多个服务器均能访问预设的共享数据库;所述服务器中运行有主进程及子线程,所述装置包括:
目标标识字段判断模块,用于利用所述主进程基于资源操作请求判断所述共享数据库中是否存在目标标识字段;其中,所述资源操作请求用于请求针对指定资源进行指定操作;所述目标标识字段为与所述指定资源的指定操作相冲突的字段;
RPC请求添加模块,用于若不存所述目标标识字段,则利用所述主进程基于所述资源操作请求生成至少一个远程过程调用协议RPC请求,并将所述RPC请求加入到本地内存队列中;
RPC请求发送模块,用于利用所述子线程从所述本地内存队列中获取所述RPC请求并发送。
可选地,若不存在所述目标标识字段,所述装置还包括:
请求描述信息生成模块,用于利用所述主进程基于所述资源操作请求生成请求描述信息;所述请求描述信息包括资源请求标识字段;所述资源请求标识字段包括:资源标识和操作类型;
资源标识字段存储模块,用于利用所述主进程将所述资源标识字段存储至所述共享数据库。
可选地,所述装置还包括:
请求描述信息存储模块,用于利用所述主进程将所述请求描述信息存储至本地,并将所述请求发送状态字段中的值修改为正在写入;
完成写入状态修改模块,用于在完成将所述至少一个RPC请求加入到所述本地内存队列之后,利用所述主进程将所述请求发送状态字段中的值修改为完成写入。
可选地,所述装置还包括:
完成写入状态判断模块,用于利用所述子线程判断所述请求发送状态字段的值是否为完成写入;
资源标识字段删除模块,用于若是,则利用所述子线程删除所述共享数据库中的所述资源标识字段。
可选地,所述请求描述信息还包括请求发送目的字段;所述请求发送目的字段包括每个所述RPC请求的目的主机的名称;所述RPC请求发送模块,具体用于所述子线程从所述本地内存队列中获取所述RPC请求并基于所述每个所述RPC请求的目的主机的名称发送所述RPC请求。
可选地,所述装置还包括:
冲突异常信息返回模块,用于若存在所述目标标识字段,则所述主进程返回冲突异常信息。
可选地,所述装置还包括:
主进程初始化模块,用于服务器在接收到所述资源操作请求后,初始化所述主进程;
子线程初始化模块,用于在所述本地内存队列存在所述RPC请求时,初始化所述子线程;其中,所述子线程与所述主进程的生命周期相同。
第三方面,本发明实施例公开了一种服务器,所述服务器能访问预设的共享数据库;所述服务器中运行有主进程及子线程;
所述主进程基于资源操作请求判断共享数据库中是否存在目标标识字段;其中,所述资源操作请求用于请求针对指定资源进行指定操作;所述目标标识字段为与所述指定资源的指定操作相冲突的字段;
若不存所述目标标识字段,则所述主进程基于所述资源操作请求生成至少一个远程过程调用协议RPC请求,并将所述RPC请求加入到本地内存队列中;
所述子线程从所述本地内存队列中获取所述RPC请求并发送。
第四方面,本发明实施例公开了一种服务器集群,所述服务器集群包括多个服务器,所述多个服务器均能访问预设的共享数据库;所述服务器中运行有主进程及子线程;
所述主进程基于资源操作请求判断所述共享数据库中是否存在目标标识字段;其中,所述资源操作请求用于请求针对指定资源进行指定操作;所述目标标识字段为与所述指定资源的指定操作相冲突的字段;
若不存所述目标标识字段,则所述主进程基于所述资源操作请求生成至少一个远程过程调用协议RPC请求,并将所述RPC请求加入到本地内存队列中;
所述子线程从所述本地内存队列中获取所述RPC请求并发送。
又一方面,本发明实施例公开了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口、所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的程序时,实现上述异步调用实现方法中任一所述的方法步骤。
又一方面,本发明实施例公开了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现上述异步调用实现方法中任一所述的方法步骤。
又一方面,本发明实施例公开了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的异步调用实现方法。
本发明实施例提供了一种异步调用实现方法、装置、服务器及服务器集群,在本发明实施例提供的一种异步调用实现方法中,在服务器中设置本地内存队列,通过主进程基于资源操作请求判断共享数据库中是否存在与资源操作请求指定资源的指定操作相冲突的字段,若不存,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中,通过冲突判断保证了处理的资源操作请求是有序的,避免了后续RPC请求处理过程中的出现的冲突。最后通过子线程在本地内存队列中获取RPC请求并发送,主进程在将RPC请求放入到内存中就直接返回,进而API的响应时间中减少了RPC请求的发送时间。综上,本发明实施例中,RPC请求的发送时间不再占用API的响应时间,无论需要发送多少个RPC请求,API的响应时间都保持一致。另外,在异步调用的情况下,通过判断共享数据库中是否存在冲突的目标标识字段,确保了处理每个资源操作请求对应的RPC请求是有序性。因此,本发明实施例提高了RPC调用的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中分布式系统RPC调用系统架构图;
图2为本发明实施例的一种异步调用实现方法的系统模型图;
图3为本发明实施例的一种异步调用实现方法流程图;
图4为本发明实施例的一种异步调用实现方法中对标识字段的删除处理方法流程图;
图5为本发明实施例的一种异步调用实现方法实施方法流程图;
图6为本发明实施例的一种异步调用实现方法中子线程处理方法流程图;
图7为本发明实施例的一种服务器集群中异步调用实现方法的逻辑框架图;
图8为本发明实施例的一种异步调用实现方法测试对比图;
图9为本发明实施例的一种异步调用实现装置结构示意图;
图10为本发明实施例的一种电子设备结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在大型分布式系统中,往往有很多个节点,这些节点之间有各种各样的RPC调用。特别的,对于集中服务的节点,需要通过RPC调用大量远程服务,实现特定的功能。
图1为现有技术中分布式系统RPC调用系统架构图。
如图1所示,负载均衡load balance接收到来自API接口的资源操作请求后,通过预设的负载均衡策略将接收的请求发送给对应的服务器server_a…erver_c。服务器接收到请求后,初始化一个用于执行该资源操作请求的主进程,该主进程将资源操作请求转换为RPC请求,并通过网络将RPC请求发送到消息中间件Message Queue后,向API接口返回结果。与各服务器对应的处理器client_1…client_n可通过自身的agent从该Message Queue中获取RPC请求进行处理。
现有技术有在服务器端使用for循环串行的异步调用实现方法。比如有100个RPC请求,每个RPC请求花费时间是0.01s,那么花在RPC请求的时间上则有1s。这种方式确保了RPC请求能够以有序的方式发送出去,因此处理器client中的agent收到的RPC请求也是有序的。然而这种方式中API的响应时间与集群的规模在一定程度上是线性相关的,对于规模庞大的分布式系统集群,这种串行RPC调用的方式严重影响API的响应时间。
另外,还有将现有的服务进行拆分,将RPC请求发送的逻辑拆分到一个独立的微服务。服务器与这个独立的微服务只需要发生一次RPC调用就返回了。之前的通知agent的RPC调用再由这个独立的微服务实现。这种方法中,将RPC调用的时间从之前的服务器移动到一个独立的微服务,因此API的响应时间与RPC调用次数无关。在一定的程度上,变成了常量时间。然而,需要实现一个单独的微服务,维护变得更加复杂。同时由于服务器与微服务之间也是异步RPC调用,因此agent端接收到的RPC请求如果不做特殊的处理,则接收到的RPC调用有可能是乱序的。比如服务器端先通过API调用创建了一个port,由于服务器与微服务只需要发生一次异步调用就返回了。因此若用户再通过API删除这个port时,则有些agent上可能会先收到delete,再收到create,进而导致agent异常。因此,如何提高RPC调用的效率仍然是亟待解决的问题。
为解决上述技术问题,本发明实施例公开了一种异步调用实现方法、装置、服务器及服务器集群。在本发明实施例中,对服务器端进行了改造。一方面,为了缩短API的响应时间,本发明实施例相对于现有技术在用于执行资源操作请求的主进程中增设一个子线程,主进程将RPC请求放在服务器的本地内存队列中即可返回消息给API接口,由子线程负责将RPC请求发送到消息中间件Message Queue。参见图2所示的本发明实施例的一种异步调用实现方法的系统模型图。其中,主进程main process获取资源操作请求后,在确定共享数据库中不存在与待请求的资源的指定操作相冲突的目标标识字段后,基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求的调用参数发送到本地内存队列queue中即可返回消息给API接口。子线程child threading从queue中获取RPC请求并发送。由于将RPC请求放在服务器的本地内存队列中的速度要远远超过通过网络发送到消息中间件Message Queue的速度,从而大大缩短了请求时间。另一方面,为了确保了RPC请求能够以有序的方式发送出去,在本发明实施例中,设置了多个服务器均能访问的共享数据库,每个主进程在将RPC请求放在本地内存队列之前,先判断共享数据库中是否存在与待请求的资源相冲突的标识字段,确保互斥的调用会在上一个调用完成之后才能进行,从而确保了消息的有序性。
以下对本发明实施例进行详细介绍。
第一方面,本发明实施例公开了一种异步调用实现方法,如图3所示。图3为本发明实施例的一种异步调用实现方法流程图,应用于服务器集群,服务器集群包括多个服务器,多个服务器均能访问预设的共享数据库;服务器中运行有主进程及子线程,方法包括:
S301,主进程基于资源操作请求判断共享数据库中是否存在目标标识字段;其中,资源操作请求用于请求针对指定资源进行指定操作;目标标识字段为与指定资源的指定操作相冲突的字段。
本发明实施例中的资源操作请求为用户端或者其他请求端发送的用于请求针对指定资源进行指定操作的请求。该资源操作请求可包括:资源ID和操作类型。操作类型例如创建create、删除delete或更新update。本发明实施例的服务器可以是物理服务器,或虚拟服务器;共享数据库可为在一台共享的服务器(即数据库服务器)设置的数据库,该服务器可与每个服务器的主进程及子线程建立数据通信,实现多个服务器均能访问该共享数据库。
本步骤中,服务器主进程(main process)接收到资源操作请求后,主进程对该资源操作请求做处理(例如,解封装操作),获取该资源操作请求针对的指定资源以及针对该指定资源的操作。例如,该资源操作请求为创建虚拟网卡1的请求;或者删除虚拟网卡1的请求。
主进程可直接访问共享数据库,并基于资源操作请求针对指定资源进行指定操作,判断共享数据库中是否存在为与指定资源的指定操作相冲突的目标标识字段。
由于每个服务器处理速度不一样(可能是性能不一样,也可能是繁忙程度不一样),虽然服务器server_1先获取了创建虚拟网卡的资源操作请求,但是服务器server_2中的删除该虚拟网卡的资源操作请求先放到消息队列Message Queue中,进而先将删除该虚拟网卡的RPC请求发送给对应的agent处理。因此agent先接到了删除的操作,导致了删除操作快于创建操作到达agent,造成agent异常。
本发明实施例中为了避免后续服务器将RPC请求随机发送到消息队列MessageQueue中造成agent的异常,在服务器获取到资源操作请求后,访问共享数据库,通过判断共享数据库存储的资源标识字段,判断是否存在与该资源操作请求所指定资源的指定操作冲突的目标标识字段。
例如,本发明实施例中,在共享数据库Redis中存储资源标识字段,该资源请求标识字段包括:资源标识和操作类型,具体为Redis中资源请求标识字段的键值key是:‘资源id’+‘_’+‘操作类型’。资源id是系统中资源的uuid,比如虚拟网卡的uuid。操作类型是对这个虚拟网卡需要执行的操作,包括创建create、删除delete和更新update。
本步骤为判断共享数据库Redis中是否存在与资源操作请求冲突的字段。
具体为,主进程访问Redis数据表,查找该Redis数据表中是否存在针对指定目标的与指定操作冲突的目标标识字段。
例如,资源操作请求为删除虚拟网卡1的资源操作请求,则该资源操作请求的指定资源为虚拟网卡1,指定操作为创建,则冲突的目标标识字段为虚拟网卡1_create字段。即为判断Redis中是否存在创建虚拟网卡1的字段。
S302,若不在目标标识字段,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中。
上述S301中判断不存在与资源操作请求冲突的目标标识字段,该主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求。
例如,资源操作请求为删除虚拟网卡1的请求,冲突的目标标识字段为虚拟网卡1_create字段。主进程判断Redis中不存在创建的虚拟网卡1_create字段,则说明当前不存在对虚拟网卡1的创建操作,说明此时可以对执行删除虚拟网卡1的资源操作请求。
主进程将删除虚拟网卡1的请求转换为的至少一个删除虚拟网卡1的RPC请求,并将该至少一个删除虚拟网卡1的RPC请求存储在本地内存队列中。
上述S302若不存在目标标识字段,方法还包括:
步骤一,主进程基于资源操作请求生成请求描述信息;请求描述信息包括资源请求标识字段;资源请求标识字段包括:资源标识和操作类型。
本发明实施例的请求描述信息可为对处理资源操作请求的主进程和子线程之间交互进行记录,以及资源操作请求处理过程的状态标识信息。该请求描述信息可包括资源请求标识字段,资源请求标识字段包括:资源标识和操作类型。
在基于python语言的开发环境中,可利用字典实现请求描述信息,在其他语言的开发环境中,可利用hashmap实现请求描述信息。
以下是在python中的字典中创建的两条请求描述信息'req_id_1'和'req_id_2':
'req_id_1':{'notify_hosts':[],'push_done':'false or true'},
'req_id_2':{'notify_hosts':[],'push_done':'false or true'}
其中,req_id的生成算法是:‘资源id’+‘_’+‘操作类型’。资源id是系统中资源的uuid,比如虚拟网卡的uuid。操作类型是对这个虚拟网卡需要执行的操作,包括创建create、删除delete和更新update。
步骤二,主进程将资源标识字段存储至共享数据库。
例如,资源操作请求为删除虚拟网卡1的请求,则主进程将资源标识字段虚拟网卡1_字段存储在共享数据库中。
可选地,请求描述信息还包括:请求发送状态字段;在生成请求描述信息之后,方法还包括:
步骤三,主进程将请求描述信息存储至本地,并将请求发送状态字段中的值修改为正在写入。
例如,请求描述信息的字典中还包括:请求发送状态字段push_done:该字段标识这个API所涉及的资源操作请求所有的RPC请求是否已经发送完成了。
具体为,将请求描述信息的字典存储在本地,该请求描述信息至少包含与共享数据库相同的资源标识字段。例如,资源操作请求为删除虚拟网卡1,则本地请求描述信息的字典中至少包括虚拟网卡1_delete字段。并添加请求发送状态字段push_done,例如在虚拟网卡1_delete的字段后添加请求发送状态字段push_done,并设置请求发送状态字段为正在写入false。说明本地内存队列可添加虚拟网卡1_delete的RPC请求。
步骤四,在完成将至少一个RPC请求加入到本地内存队列之后,主进程将请求发送状态字段中的值修改为完成写入。
例如,在主进程将该虚拟网卡1_delete的所有RPC请求全部添加到本地内存队列后,主进程可将请求描述信息的字典中虚拟网卡1_delete字段的发送状态字段push_done,修改为完成写入ture。
可选地,服务器集群还包括:负载均衡控件;利用负载均衡控件按照预设负载均衡策略,将各资源操作请求发送到相应的服务器中。
本发明实施例中可在服务器集群中设置负载均衡控件,通过该负载均衡控件接收外部发送的资源操作请求。然后该负载均衡控件可按照预设负载均衡策略,将当前接收的各操作请求发送到对应的服务器中。例如,该负载均衡策略为轮询策略,则负载均衡控件将接收的资源操作请求,按照轮序顺序发送对应的服务器。或者负载均衡策略为将当前接收的资源操作请求发送给当前负载最小的服务器,则本步骤中负载均衡控件接收到资源操作请求后,可计算每个服务器的负载,将资源操作请求发送给负载最小的服务器。
可选地,在上述S302中主进程基于资源操作请求判断共享数据库中是否存目标标识字段之后,方法还包括:
若存在目标标识字段,利用主进程返回冲突异常信息。
若共享数据库中存在目标标识字段,则说明目前有存在冲突的资源操作请求的RPC请求正在处理,则可给信息发送方返回冲突异常信息。
例如,资源操作请求为删除虚拟网卡1,则该资源操作请求的指定资源为虚拟网卡1,指定操作为创建,则冲突的目标标识字段为虚拟网卡1_create字段。主进程判断Redis中存在创建的虚拟网卡1_create字段,则说明当前存在对虚拟网卡1的创建操作,说明此时不能执行删除虚拟网卡1的RPC请求,则可返回冲突异常信息。
S303,利用子线程从本地内存中获取RPC请求并发送。
本步骤中,可在主进程将第一个RPC请求放入到该本地内存中时,即触发子线程获取该RPC请求并发送。另外,本发明实施例中可在主进程将该资源操作请求所有的RPC放入到该本地内存中后,触发子线程按照该本地内存中各RPC请求的顺序,获取各RPC请求并发送,直至将所有RPC请求全部发送出去。
可选地,请求描述信息还包括请求发送目的字段;请求发送目的字段包括每个RPC请求的目的主机的名称;子线程从本地内存队列中获取RPC请求并发送,包括:
子线程从本地内存队列中获取RPC请求并基于每个RPC请求的目的主机的名称发送RPC请求。
例如,请求描述信息的字典中还包括:请求发送目的字段notify_host:此字段是保存关于该API的资源操作请求的所有RPC请求对应的目的主机。
本步骤中,子线程可在请求描述信息的字典包含的notify_host字段中,获得关于该资源操作请求的各RPC请求对应的各目的主机的名称,按照各目的主机的名称发送本地内存队列中各RPC请求。
需要说明的是,本发明实施例的RPC请求不特指发送给MQ(message queue,消息队列)的RPC,也可以是通过redis、socket(套接字)、JMS(JAVA Message Service,java消息服务)等其他的方式传递RPC调用的RPC请求。RPC的交互不特指openstack中的server与agent之间的交互,包括所有需要通过RPC请求进行交互的模式。
在本发明实施例提供的一种异步调用实现方法中,在服务器中设置本地内存队列,通过主进程基于资源操作请求判断共享数据库中是否存在与资源操作请求指定资源的指定操作相冲突的字段,若不存,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中,通过冲突判断保证了处理的资源操作请求是有序的,避免了后续RPC请求处理过程中的出现的冲突。最后通过子线程在本地内存队列中获取RPC请求并发送,主进程在将RPC请求放入到内存中就直接返回,进而API的响应时间中减少了RPC请求的发送时间。综上,本发明实施例中,RPC请求的发送时间不再占用API的响应时间,无论需要发送多少个RPC请求,API的响应时间都保持一致。另外,在异步调用的情况下,通过判断共享数据库中是否存在冲突的目标标识字段,确保了处理每个资源操作请求对应的RPC请求是有序性。因此,本发明实施例提高了RPC调用的效率。
可选地,在子线程从本地内存队列中获取RPC请求并发送之后,可包括对资源标识字段的删除处理。参见图4,图4为本发明实施例的一种异步调用实现方法中对资源标识字段的删除处理方法流程图,方法包括:
S401,子线程判断请求发送状态字段的值是否为完成写入。
例如,本地存储的请求描述信息的字典中,记录的对应于资源操作请求为虚拟网卡1_delete,请求发送状态字段为push_done,则本步骤中判断请求发送状态字段push_done是否为true。
S402,若是,则子线程删除共享数据库中的资源标识字段。
若上述S401中判断虚拟网卡1_delete的请求发送状态字段push_done为true,说明删除虚拟网卡1的RPC请求已经加入到本地内存队列中。则本步骤中可将共享数据库中存储的资源标识字段为虚拟网卡1_delete删除,表明这个资源操作请求对应的RPC请求已经完成发送。
其中,当服务器出现宕机的情况时,为了避免主进程的退出,共享数据库中没有删除该资源操作请求的资源标识字段时,可每次在新创建这个字段时,加上自动的生命周期,比如60s。
可见,通过本发明实施例可将服务器处理完成的资源操作请求的资源标识字段删除,减轻共享数据库的存储压力。
可选地,在S301主进程基于资源操作请求判断共享数据库中是否存在目标标识字段之前,方法还包括:
服务器在接收到资源操作请求后,初始化主进程。
在本地内存队列存在RPC请求时,初始化子线程;其中,子线程与主进程的生命周期相同。
本实施例中,服务器在每次接收到资源操作请求,可对主进程进行初始化,确保主进程可顺利加载本次资源操作请求,以及保证主进程对本次资源操作请求的整个处理过程所占用的资源空间是充足的。在本地内存队列存在RPC请求时,初始化子线程,确保子线程可顺利加载RPC请求,以及保证子线程对本次资源操作请求的所有RPC请求处理过程所占用的资源空间是充足的。其中子线程与主进程的生命周期相同,即为该主进程和子线程的启动时间点、关闭时间点和更新时间设置为相同的。
通过本实施例,可实现每次将主进程以及子线程初始化,保证主进程能够完成对当前资源操作请求的处理,以及保证子线程能够对当前资源操作请求的RPC请求的处理。
为了更好地说明本发明提供的一种异步调用实现方法,可有图5所示的本发明实施例的一种异步调用实现方法实施方法流程图。
S501,主进程获取创建port的资源操作请求;
S502,判断共享数据库Redis中是否存在冲突的目标标识字段;
S503,存在,返回冲突异常信息;
S504,不存在,在Redis中写入创建port的资源标识字段;
S505,在本地存储中写入与创建port的资源操作请求对应的请求描述信息,并设置请求发送状态字段push_done为false;
S506,将创建port的资源操作请求转化为至少一个RPC请求,并将该至少一个RPC请求加入本地内存队列queue中;
S507,更新本地存储的请求描述信息中请求发送状态字段push_done为true;
S508,返回正常的API结果。
另外,子线程是一个dead loop(死循环),通过从queue中取RPC请求,发送RPC请求。同时检查push_done字段是否为true,若为true,则删除共享数据库的资源标识字段,表明这个资源操作请求的RPC请求已经全部发送。子线程的处理方法可如图6所示:
S601,从queue中获取RPC请求;
S602,发送RPC请求到对应的agent;
S603,判断本地存储中创建port的请求的资源标识字段push_done是否为true,是,执行S804,否,返回S801。
S604,删除共享数据库中创建port的资源标识字段,并返回S601。
为了更好地说明本发明提供的一种异步调用实现方法,可以图7所示的服务器集群中异步调用实现方法的逻辑框架图,说明实现过程。该服务器集群架构至少包括服务器server1、服务器server2、共享数据库redis,以及主机代理服务agent。其中,每个服务器中包括主进程、子线程以及本地内存队列queue。以下具体以服务器server1为了说明实施方法:
步骤一:服务器server1的主进程接收到资源操作请求,基于该资源操作请求判断共享数据库中是否存目标标识字段;
步骤二:若不存在目标标识字段,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列queue中;与此同时,主进程基于资源操作请求生成请求描述信息,将请求描述信息存储至本地,并且将该资源操作请求的请求描述信息中的资源标识字段存储在共享数据库;该请求描述信息可包括资源请求标识字段、请求发送状态字段以及请求发送目的字段;
其中,若存在目标标识字段,主进程返回冲突异常信息。
步骤三:子线程基于请求描述信息的请求发送状态字段以及请求发送目的字段,获取本地内存队列queue中各RPC请求,并按照各RPC请求对应的目的主机的名称,发送RPC请求到对应的目标主机,通过该目标主机的代理服务agent处理RPC请求。
并且,在子线程从本地内存队列中获取RPC请求并发送之后,子线程还可判断请求发送状态字段的值是否为完成写入;若是,则子线程删除共享数据库中的资源标识字段。
本发明的一种异步调用实现方法经过测试发现,API的响应时间基本不受RPC请求发送的数量的影响。具体效果如图8所示。图8为本发明实施例的一种异步调用实现方法测试对比图。
其中,cerate_vif:表示创建虚拟网络接口;delete_vif:表示删除虚拟网络接口;create_route:表示创建路由;delete_route:表示删除路由;update_vnet:表示更新虚拟子网信息;update_sg:表示更新安全组信息。
可见,本发明实施例的一种异步调用实现方法中,通过使用queue和子线程异步处理RPC请求,使得无论需要发送多少个RPC请求,API的响应时间都保持一致。另外,结合了Redis和内存变量来维护RPC请求的顺序性,使得在异步的情况下,确保RPC请求的有序性。综上,本发明实施例的一种异步调用实现方法提高了RPC调用的效率。
第二方面,本发明实施例公开了一种异步调用实现装置,如图9所示。图10为本发明实施例的一种异步调用实现装置结构示意图,应用于服务器集群,服务器集群包括多个服务器,多个服务器均能访问预设的共享数据库;服务器中运行有主进程及子线程,装置包括:
目标标识字段判断模块901,用于利用主进程基于资源操作请求判断共享数据库中是否存在目标标识字段;其中,资源操作请求用于请求针对指定资源进行指定操作;目标标识字段为与指定资源的指定操作相冲突的字段;
RPC请求添加模块902,用于若不存目标标识字段,则利用主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中;
RPC请求发送模块903,用于利用子线程从本地内存队列中获取RPC请求并发送。
在本发明实施例提供的一种异步调用实现装置中,在本发明实施例提供的一种异步调用实现方法中,在服务器中设置本地内存队列,通过主进程基于资源操作请求判断共享数据库中是否存在与资源操作请求指定资源的指定操作相冲突的字段,若不存,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中,通过冲突判断保证了处理的资源操作请求是有序的,避免了后续RPC请求处理过程中的出现的冲突。最后通过子线程在本地内存队列中获取RPC请求并发送,主进程在将RPC请求放入到内存中就直接返回,进而API的响应时间中减少了RPC请求的发送时间。综上,本发明实施例中,RPC请求的发送时间不再占用API的响应时间,无论需要发送多少个RPC请求,API的响应时间都保持一致。另外,在异步调用的情况下,通过判断共享数据库中是否存在冲突的目标标识字段,确保了处理每个资源操作请求对应的RPC请求是有序性。因此,本发明实施例提高了RPC调用的效率。
可选地,在本发明的异步调用实现装置的一种实施例中,若不存在目标标识字段,装置还包括:
请求描述信息生成模块,用于利用主进程基于资源操作请求生成请求描述信息;请求描述信息包括资源请求标识字段;资源请求标识字段包括:资源标识和操作类型;
资源标识字段存储模块,用于利用主进程将资源标识字段存储至共享数据库。
可选地,在本发明的异步调用实现装置的一种实施例中,装置还包括:
请求描述信息存储模块,用于利用主进程将请求描述信息存储至本地,并将请求发送状态字段中的值修改为正在写入;
完成写入状态修改模块,用于在完成将至少一个RPC请求加入到本地内存队列之后,利用主进程将请求发送状态字段中的值修改为完成写入。
可选地,在本发明的异步调用实现装置的一种实施例中,装置还包括:
完成写入状态判断模块,用于利用子线程判断请求发送状态字段的值是否为完成写入;
资源标识字段删除模块,用于若是,则利用子线程删除共享数据库中的资源标识字段。
可选地,在本发明的异步调用实现装置的一种实施例中,请求描述信息还包括请求发送目的字段;请求发送目的字段包括每个RPC请求的目的主机的名称;RPC请求发送模块,具体用于子线程从本地内存队列中获取RPC请求并基于每个RPC请求的目的主机的名称发送RPC请求。
可选地,在本发明的异步调用实现装置的一种实施例中,装置还包括:
冲突异常信息返回模块,用于若存在目标标识字段,则主进程返回冲突异常信息。
可选地,在本发明的异步调用实现装置的一种实施例中,装置还包括:
主进程初始化模块,用于服务器在接收到资源操作请求后,初始化主进程;
子线程初始化模块,用于在本地内存队列存在RPC请求时,初始化子线程;其中,子线程与主进程的生命周期相同。
第三方面,本发明实施例公开了一种服务器,本发明实施例公开了一种服务器,服务器能访问预设的共享数据库;服务器中运行有主进程及子线程;
主进程基于资源操作请求判断共享数据库中是否存在目标标识字段;其中,资源操作请求用于请求针对指定资源进行指定操作;目标标识字段为与指定资源的指定操作相冲突的字段;
若不存目标标识字段,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中;
子线程从本地内存队列中获取RPC请求并发送。
在本发明实施例提供的一种服务器中,在服务器中设置本地内存队列,通过主进程基于资源操作请求判断共享数据库中是否存在与资源操作请求指定资源的指定操作相冲突的字段,若不存,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中,通过冲突判断保证了处理的资源操作请求是有序的,避免了后续RPC请求处理过程中的出现的冲突。最后通过子线程在本地内存队列中获取RPC请求并发送,主进程在将RPC请求放入到内存中就直接返回,进而API的响应时间中减少了RPC请求的发送时间。综上,本发明实施例中,RPC请求的发送时间不再占用API的响应时间,无论需要发送多少个RPC请求,API的响应时间都保持一致。另外,在异步调用的情况下,通过判断共享数据库中是否存在冲突的目标标识字段,确保了处理每个资源操作请求对应的RPC请求是有序性。因此,本发明实施例提高了RPC调用的效率。
第四方面,本发明实施例公开了一种服务器集群,服务器集群包括多个服务器,多个服务器均能访问预设的共享数据库;服务器中运行有主进程及子线程;
主进程基于资源操作请求判断共享数据库中是否存在目标标识字段;其中,资源操作请求用于请求针对指定资源进行指定操作;目标标识字段为与指定资源的指定操作相冲突的字段;
若不存目标标识字段,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中;
子线程从本地内存队列中获取RPC请求并发送。
在本发明实施例提供的一种服务器集群中,在服务器中设置本地内存队列,通过主进程基于资源操作请求判断共享数据库中是否存在与资源操作请求指定资源的指定操作相冲突的字段,若不存,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中,通过冲突判断保证了处理的资源操作请求是有序的,避免了后续RPC请求处理过程中的出现的冲突。最后通过子线程在本地内存队列中获取RPC请求并发送,主进程在将RPC请求放入到内存中就直接返回,进而API的响应时间中减少了RPC请求的发送时间。综上,本发明实施例中,RPC请求的发送时间不再占用API的响应时间,无论需要发送多少个RPC请求,API的响应时间都保持一致。另外,在异步调用的情况下,通过判断共享数据库中是否存在冲突的目标标识字段,确保了处理每个资源操作请求对应的RPC请求是有序性。因此,本发明实施例提高了RPC调用的效率。
又一方面,本发明实施例还公开了一种电子设备,如图10所示。图10为本发明实施例的一种电子设备结构示意图,包括处理器1001、通信接口1002、存储器1003和通信总线1004,其中,处理器1001、通信接口1002、存储器1003通过通信总线1004完成相互间的通信;
存储器1003,用于存放计算机程序;
处理器1001,用于执行存储器1003上所存放的程序时,实现以下方法步骤:
主进程基于资源操作请求判断共享数据库中是否存在目标标识字段;其中,资源操作请求用于请求针对指定资源进行指定操作;目标标识字段为与指定资源的指定操作相冲突的字段;
若不存在目标标识字段,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中;
子线程从本地内存队列中获取RPC请求并发送。
上述电子设备提到的通信总线1004可以是外设部件互连标准(PeripheralComponent Interconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线1004可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口1002用于上述电子设备与其他设备之间的通信。
存储器1003可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器1003还可以是至少一个位于远离前述处理器1001的存储装置。
上述的处理器1001可以是通用处理器,包括中央处理器(Central ProcessingUnit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DigitalSignal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明实施例提供的一种电子设备中,在服务器中设置本地内存队列,通过主进程基于资源操作请求判断共享数据库中是否存在与资源操作请求指定资源的指定操作相冲突的字段,若不存,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中,通过冲突判断保证了处理的资源操作请求是有序的,避免了后续RPC请求处理过程中的出现的冲突。最后通过子线程在本地内存队列中获取RPC请求并发送,主进程在将RPC请求放入到内存中就直接返回,进而API的响应时间中减少了RPC请求的发送时间。综上,本发明实施例中,RPC请求的发送时间不再占用API的响应时间,无论需要发送多少个RPC请求,API的响应时间都保持一致。另外,在异步调用的情况下,通过判断共享数据库中是否存在冲突的目标标识字段,确保了处理每个资源操作请求对应的RPC请求是有序性。因此,本发明实施例提高了RPC调用的效率。
又一方面,本发明实施例公开了一种计算机可读存储介质,计算机可读存储介质内存储有计算机程序,计算机程序被处理器执行时,实现上述异步调用实现方法中任一所述的方法步骤。
在本发明实施例提供的一种计算机可读存储介质中,在服务器中设置本地内存队列,通过主进程基于资源操作请求判断共享数据库中是否存在与资源操作请求指定资源的指定操作相冲突的字段,若不存,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中,通过冲突判断保证了处理的资源操作请求是有序的,避免了后续RPC请求处理过程中的出现的冲突。最后通过子线程在本地内存队列中获取RPC请求并发送,主进程在将RPC请求放入到内存中就直接返回,进而API的响应时间中减少了RPC请求的发送时间。综上,本发明实施例中,RPC请求的发送时间不再占用API的响应时间,无论需要发送多少个RPC请求,API的响应时间都保持一致。另外,在异步调用的情况下,通过判断共享数据库中是否存在冲突的目标标识字段,确保了处理每个资源操作请求对应的RPC请求是有序性。因此,本发明实施例提高了RPC调用的效率。
又一方面,本发明实施例公开了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述异步调用实现方法中任一所述的方法步骤。
在本发明实施例提供的一种包含指令的计算机程序产品中,在服务器中设置本地内存队列,通过主进程基于资源操作请求判断共享数据库中是否存在与资源操作请求指定资源的指定操作相冲突的字段,若不存,则主进程基于资源操作请求生成至少一个远程过程调用协议RPC请求,并将RPC请求加入到本地内存队列中,通过冲突判断保证了处理的资源操作请求是有序的,避免了后续RPC请求处理过程中的出现的冲突。最后通过子线程在本地内存队列中获取RPC请求并发送,主进程在将RPC请求放入到内存中就直接返回,进而API的响应时间中减少了RPC请求的发送时间。综上,本发明实施例中,RPC请求的发送时间不再占用API的响应时间,无论需要发送多少个RPC请求,API的响应时间都保持一致。另外,在异步调用的情况下,通过判断共享数据库中是否存在冲突的目标标识字段,确保了处理每个资源操作请求对应的RPC请求是有序性。因此,本发明实施例提高了RPC调用的效率。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本发明实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、服务器及服务器集群介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (18)
1.一种异步调用实现方法,其特征在于,应用于服务器集群,所述服务器集群包括多个服务器,所述多个服务器均能访问预设的共享数据库;所述服务器中运行有主进程及子线程,所述方法包括:
所述主进程基于资源操作请求判断所述共享数据库中是否存在目标标识字段;其中,所述资源操作请求用于请求针对指定资源进行指定操作;所述目标标识字段为与所述指定资源的指定操作相冲突的字段,所述共享数据库中存储有资源标识字段,所述资源标识字段包括:资源标识和操作类型;
若不存在所述目标标识字段,则所述主进程基于所述资源操作请求生成至少一个远程过程调用协议RPC请求,并在将所述RPC请求加入到本地内存队列中后直接返回;
所述子线程从所述本地内存队列中获取所述RPC请求并发送。
2.根据权利要求1所述的方法,其特征在于,若不存在所述目标标识字段,所述方法还包括:
所述主进程基于所述资源操作请求生成请求描述信息;所述请求描述信息包括资源请求标识字段;所述资源请求标识字段包括:资源标识和操作类型;
所述主进程将所述资源请求标识字段存储至所述共享数据库。
3.根据权利要求2所述的方法,其特征在于,所述请求描述信息还包括:请求发送状态字段;在所述生成所述请求描述信息之后,所述方法还包括:
所述主进程将所述请求描述信息存储至本地,并将所述请求发送状态字段中的值修改为正在写入;
在完成将所述至少一个RPC请求加入到所述本地内存队列之后,所述主进程将所述请求发送状态字段中的值修改为完成写入。
4.根据权利要求3所述的方法,其特征在于,在所述子线程从所述本地内存队列中获取所述RPC请求并发送之后,所述方法还包括:
所述子线程判断所述请求发送状态字段的值是否为完成写入;
若是,则所述子线程删除所述共享数据库中的所述资源标识字段。
5.根据权利要求2所述的方法,其特征在于,所述请求描述信息还包括请求发送目的字段;所述请求发送目的字段包括每个所述RPC请求的目的主机的名称;所述子线程从所述本地内存队列中获取所述RPC请求并发送,包括:
所述子线程从所述本地内存队列中获取所述RPC请求并基于所述每个所述RPC请求的目的主机的名称发送所述RPC请求。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若存在所述目标标识字段,则所述主进程返回冲突异常信息。
7.根据权利要求1-6任一项所述的方法,其特征在于,在所述主进程基于资源操作请求判断所述共享数据库中是否存在目标标识字段之前,所述方法还包括:
服务器在接收到所述资源操作请求后,初始化所述主进程;
在所述本地内存队列存在所述RPC请求时,初始化所述子线程;其中,所述子线程与所述主进程的生命周期相同。
8.一种异步调用实现装置,其特征在于,应用于服务器集群,所述服务器集群包括多个服务器,所述多个服务器均能访问预设的共享数据库;所述服务器中运行有主进程及子线程,所述装置包括:
目标标识字段判断模块,用于利用所述主进程基于资源操作请求判断所述共享数据库中是否存在目标标识字段;其中,所述资源操作请求用于请求针对指定资源进行指定操作;所述目标标识字段为与所述指定资源的指定操作相冲突的字段,所述共享数据库中存储有资源标识字段,所述资源标识字段包括:资源标识和操作类型;
RPC请求添加模块,用于若不存所述目标标识字段,则利用所述主进程基于所述资源操作请求生成至少一个远程过程调用协议RPC请求,并在将所述RPC请求加入到本地内存队列中后直接返回;
RPC请求发送模块,用于利用所述子线程从所述本地内存队列中获取所述RPC请求并发送。
9.根据权利要求8所述的装置,其特征在于,若不存在所述目标标识字段,所述装置还包括:
请求描述信息生成模块,用于利用所述主进程基于所述资源操作请求生成请求描述信息;所述请求描述信息包括资源请求标识字段;所述资源请求标识字段包括:资源标识和操作类型;
资源标识字段存储模块,用于利用所述主进程将所述资源请求标识字段存储至所述共享数据库。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
请求描述信息存储模块,用于利用所述主进程将所述请求描述信息存储至本地,并将所述请求发送状态字段中的值修改为正在写入;
完成写入状态修改模块,用于在完成将所述至少一个RPC请求加入到所述本地内存队列之后,利用所述主进程将所述请求发送状态字段中的值修改为完成写入。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括:
完成写入状态判断模块,用于利用所述子线程判断所述请求发送状态字段的值是否为完成写入;
资源标识字段删除模块,用于若是,则利用所述子线程删除所述共享数据库中的所述资源标识字段。
12.根据权利要求8所述的装置,其特征在于,所述请求描述信息还包括请求发送目的字段;所述请求发送目的字段包括每个所述RPC请求的目的主机的名称;所述RPC请求发送模块,具体用于所述子线程从所述本地内存队列中获取所述RPC请求并基于所述每个所述RPC请求的目的主机的名称发送所述RPC请求。
13.根据权利要求8所述的装置,其特征在于,所述装置还包括:
冲突异常信息返回模块,用于若存在所述目标标识字段,则所述主进程返回冲突异常信息。
14.根据权利要求8-13任一所述的装置,其特征在于,所述装置还包括:
主进程初始化模块,用于服务器在接收到所述资源操作请求后,初始化所述主进程;
子线程初始化模块,用于在所述本地内存队列存在所述RPC请求时,初始化所述子线程;其中,所述子线程与所述主进程的生命周期相同。
15.一种服务器,其特征在于,所述服务器能访问预设的共享数据库;所述服务器中运行有主进程及子线程;
所述主进程基于资源操作请求判断共享数据库中是否存在目标标识字段;其中,所述资源操作请求用于请求针对指定资源进行指定操作;所述目标标识字段为与所述指定资源的指定操作相冲突的字段,所述共享数据库中存储有资源标识字段,所述资源标识字段包括:资源标识和操作类型;
若不存所述目标标识字段,则所述主进程基于所述资源操作请求生成至少一个远程过程调用协议RPC请求,并在将所述RPC请求加入到本地内存队列中后直接返回;
所述子线程从所述本地内存队列中获取所述RPC请求并发送。
16.一种服务器集群,其特征在于,所述服务器集群包括多个服务器,所述多个服务器均能访问预设的共享数据库;所述服务器中运行有主进程及子线程;
所述主进程基于资源操作请求判断所述共享数据库中是否存在目标标识字段;其中,所述资源操作请求用于请求针对指定资源进行指定操作;所述目标标识字段为与所述指定资源的指定操作相冲突的字段,所述共享数据库中存储有资源标识字段,所述资源标识字段包括:资源标识和操作类型;
若不存所述目标标识字段,则所述主进程基于所述资源操作请求生成至少一个远程过程调用协议RPC请求,并在将所述RPC请求加入到本地内存队列中后直接返回;
所述子线程从所述本地内存队列中获取所述RPC请求并发送。
17.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口、所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述存储器上所存放的程序时,实现权利要求1-7中任一所述的方法步骤。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-7任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811625860.9A CN111385255B (zh) | 2018-12-28 | 2018-12-28 | 一种异步调用实现方法、装置、服务器及服务器集群 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811625860.9A CN111385255B (zh) | 2018-12-28 | 2018-12-28 | 一种异步调用实现方法、装置、服务器及服务器集群 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111385255A CN111385255A (zh) | 2020-07-07 |
CN111385255B true CN111385255B (zh) | 2022-05-06 |
Family
ID=71220563
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811625860.9A Active CN111385255B (zh) | 2018-12-28 | 2018-12-28 | 一种异步调用实现方法、装置、服务器及服务器集群 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111385255B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113742078A (zh) * | 2021-09-08 | 2021-12-03 | 上海哔哩哔哩科技有限公司 | 资源处理方法及装置 |
CN114760312B (zh) * | 2022-04-27 | 2024-06-18 | 泽拓科技(深圳)有限责任公司 | 分布式任务协调方法、装置、设备和介质 |
CN115037731A (zh) * | 2022-06-13 | 2022-09-09 | 金蝶软件(中国)有限公司 | 一种数据共享方法、装置、设备及计算机可读存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1619522A (zh) * | 2003-11-17 | 2005-05-25 | 联想(北京)有限公司 | 机群文件服务系统及其输入输出处理方法 |
CN1670705A (zh) * | 2004-03-16 | 2005-09-21 | 联想(北京)有限公司 | 一种对机群实现集中并发管理的方法 |
CN101807073A (zh) * | 2010-04-20 | 2010-08-18 | 杭州和利时自动化有限公司 | 一种分布式控制系统的历史数据处理方法和装置 |
CN103345482A (zh) * | 2013-06-20 | 2013-10-09 | 上海爱数软件有限公司 | 一种网络存储系统及其文件访问冲突处理方法 |
CN104601562A (zh) * | 2015-01-04 | 2015-05-06 | 福建天晴数码有限公司 | 游戏服务器与数据库的交互方法和系统 |
CN106294472A (zh) * | 2015-06-03 | 2017-01-04 | 中国移动通信集团广东有限公司 | 一种Hadoop数据库HBase的查询方法及装置 |
CN106998343A (zh) * | 2016-01-26 | 2017-08-01 | 阿里巴巴集团控股有限公司 | 一种远程过程调用处理方法、装置及系统 |
CN107277029A (zh) * | 2017-06-30 | 2017-10-20 | 武汉斗鱼网络科技有限公司 | 一种远程过程调用的方法、装置及计算机设备 |
CN108399120A (zh) * | 2017-02-06 | 2018-08-14 | 腾讯科技(深圳)有限公司 | 异步消息监控方法和装置 |
-
2018
- 2018-12-28 CN CN201811625860.9A patent/CN111385255B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1619522A (zh) * | 2003-11-17 | 2005-05-25 | 联想(北京)有限公司 | 机群文件服务系统及其输入输出处理方法 |
CN1670705A (zh) * | 2004-03-16 | 2005-09-21 | 联想(北京)有限公司 | 一种对机群实现集中并发管理的方法 |
CN101807073A (zh) * | 2010-04-20 | 2010-08-18 | 杭州和利时自动化有限公司 | 一种分布式控制系统的历史数据处理方法和装置 |
CN103345482A (zh) * | 2013-06-20 | 2013-10-09 | 上海爱数软件有限公司 | 一种网络存储系统及其文件访问冲突处理方法 |
CN104601562A (zh) * | 2015-01-04 | 2015-05-06 | 福建天晴数码有限公司 | 游戏服务器与数据库的交互方法和系统 |
CN106294472A (zh) * | 2015-06-03 | 2017-01-04 | 中国移动通信集团广东有限公司 | 一种Hadoop数据库HBase的查询方法及装置 |
CN106998343A (zh) * | 2016-01-26 | 2017-08-01 | 阿里巴巴集团控股有限公司 | 一种远程过程调用处理方法、装置及系统 |
CN108399120A (zh) * | 2017-02-06 | 2018-08-14 | 腾讯科技(深圳)有限公司 | 异步消息监控方法和装置 |
CN107277029A (zh) * | 2017-06-30 | 2017-10-20 | 武汉斗鱼网络科技有限公司 | 一种远程过程调用的方法、装置及计算机设备 |
Non-Patent Citations (1)
Title |
---|
"一种企业社交网络系统的设计与实现";黄舒泉;《中国优秀傅硕士学位论文全文数据库(硕士)信息科技辑》;20141115;第5章 * |
Also Published As
Publication number | Publication date |
---|---|
CN111385255A (zh) | 2020-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021180025A1 (zh) | 一种消息处理方法、装置、电子设备及介质 | |
CN111385255B (zh) | 一种异步调用实现方法、装置、服务器及服务器集群 | |
US10019408B2 (en) | Remote direct memory access (RDMA) high performance producer-consumer message processing | |
CN111045782A (zh) | 日志处理方法、装置、电子设备和计算机可读存储介质 | |
JP7412594B2 (ja) | データ処理方法、データ処理装置、コンピュータ機器、及びコンピュータプログラム | |
CN115004673A (zh) | 消息推送方法、装置、电子设备及计算机可读介质 | |
CN110022259B (zh) | 消息到达率确定方法、装置、数据统计服务器及存储介质 | |
CN113760536A (zh) | 数据缓存方法、装置、电子设备和计算机可读介质 | |
CN112416632A (zh) | 事件通信方法、装置、电子设备和计算机可读介质 | |
CN114090623A (zh) | 一种缓存资源的创建方法、装置、电子设备及存储介质 | |
CN112653736B (zh) | 一种并行回源方法、装置及电子设备 | |
CN109032693B (zh) | 一种加载展示信息方法、装置、电子设备及可读存储介质 | |
CN114328097A (zh) | 一种文件监控方法、装置、电子设备和存储介质 | |
CN112148206A (zh) | 一种数据读写方法、装置、电子设备及介质 | |
JP2014123182A (ja) | プログラム、情報処理装置およびオブジェクト送信方法 | |
CN112468585A (zh) | 数据传输方法、装置、电子设备及存储介质 | |
CN109995863B (zh) | 一种动态资源下载方法、装置、电子设备及存储介质 | |
CN113360815A (zh) | 一种请求重试方法和装置 | |
CN113541987A (zh) | 一种更新配置数据的方法和装置 | |
CN111309693A (zh) | 一种数据同步方法、装置、系统、电子设备及存储介质 | |
CN111629054B (zh) | 消息处理方法、装置、系统、电子设备及可读存储介质 | |
JP2019536173A (ja) | アプリケーションのリソース使用量の削減 | |
CN110162415B (zh) | 用于处理数据请求的方法、服务器、装置及存储介质 | |
CN115220640A (zh) | 用于处理数据的方法、电子设备和计算机程序产品 | |
CN108874560B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |