远程调用方法及系统的制作方法

文档序号:6522241阅读:141来源:国知局
远程调用方法及系统的制作方法
【专利摘要】本发明提出一种远程调用方法,包括以下步骤:客户端向服务器端发送调用远程方法以及获取返回值的请求;服务器端接收请求,并创建多个线程以执行被调用的远程方法,其中,在被调用的远程方法的执行过程中,允许多个线程中的任意线程通过部分返回接口任意次地返回部分返回值;当返回值全部返回后,服务器端向客户端发送调用结束通知。本发明的方法,允许任意线程通过部分返回接口任意次地返回部分返回值,减少了数据平均返回时间,加快了分布式系统层间数据聚集,将数据的产生和传输交错运行,缩短了整个系统的响应时间。本发明还提出一种远程调用系统。
【专利说明】远程调用方法及系统【技术领域】
[0001]本发明涉及分布式技术与系统领域,尤其涉及一种远程调用方法及系统。
【背景技术】
[0002]目前,构建大型分布式系统通常通过“层”的抽象:“层”可能是多层架构中的“层”,也可能是组件系统中的一个组件,或者是面向服务架构(Service-OrientedArchitecture, SOA)中的一个服务。在这种架构中,系统被划分为多个“层”,而各个“层”之间需要定义接口来进行交互。在系统设计和实现中,远程调用(Remote Calling)这种层间交互方式愈发不可替代。通常采用的远程调用技术有:传统的远程过程调用(RemoteProcedure Call, RPC), Java语言的远程方法调用(Remote Method Invocation,RMI),.NET远程技术(.NET Remoting),以及Thrift技术。
[0003]与此同时,数据聚集(Data Aggregation)成为当前分布式系统中典型的数据流模式。例如,普遍应用的MapReduce的“shuffle”阶段,任意一个reducer会向所有mapper索要自己对应部分的中间数据。这种分割-聚集设计模式已经成为很多大型分布式应用的基础,诸如网页搜索、社交网络内容组合等。然而,当数据聚集遇到多层架构时,传统的远程调用的服务器只能在最慢的数据获得后才统一返回给客户端,这样会明显增加系统的平均响应时间。虽然一些数据流优化的机制涵盖了对数据流的优化,但是这些机制依赖于特定的编程框架,缺乏普遍适用性。而且,它们与传统的“层”抽象容易产生冲突。若采用此种系统设计,需要完全重构,带来诸多问题。异步远程调用可以缓解调用者对慢数据的等待,但有些不支持返回值,有些只允许客户端通过访问特定的对象来获取返回值。
[0004]现有工作对上述问题的处理无法满足分布式系统的需求,即不能良好地支持服务器端的多线程和分布式编程环境。

【发明内容】

[0005]本发明旨在至少解决上述技术问题之一。
[0006]为此,本发明的第一个目的在于提出一种远程调用方法。该方法能够加快分布式系统的层间数据聚集,将数据的产生和传输交错运行,缩短了整个系统的响应时间。
[0007]本发明的第二个目的在于提出一种远程调用系统。
[0008]为了实现上述目的,本发明第一方面实施例的远程调用方法包括以下步骤:客户端向服务器端发送调用远程方法以及获取返回值的请求;所述服务器端接收所述请求,并创建多个线程以执行被 调用的所述远程方法,其中,在所述被调用的远程方法的执行过程中,允许所述多个线程中的任意线程通过部分返回接口任意次地返回部分目标数据;以及当所述目标数据全部返回后,所述服务器端向所述客户端发送调用结束通知。
[0009]根据本发明实施例的远程调用方法,允许多个线程中的任意线程通过部分返回接口任意次地返回部分返回值,减少了数据平均返回时间,加快了分布式系统层间数据聚集,防止慢数据拖累其他数据,增强了后续处理的流水线,将数据的产生和传输交错运行,缩短了整个系统的响应时间。
[0010]在一些示例中,为每个所述被调用的远程方法赋予一个初始值为0的整型引用计数,其支持如下两个原子操作:p操作对所述引用计数减一 ;v操作对所述引用计数加一。
[0011]进一步地,在一些示例中,每一个点绑定一个所述P操作,每一条边绑定一个所述V操作,其中,点为执行所述被调用的远程方法所涉及的线程,边为一个线程创建另一个线程的派生关系。
[0012]在一些示例中,所述执行所述被调用的远程方法和所述发送调用结束通知通过偏序协议完成,所述偏序协议具体包括:当一个线程创建另一个线程时,与相应的所述边绑定的所述V操作被执行;当一个线程结束时,与所述点绑定的所述P操作被执行;调用结束通知在根绑定的所有所述V操作之后发生,其中,根为所述被调用的远程方法所在的线程;调用结束通知在所述引用计数变为0后发生。
[0013]在一些示例中,还包括:所述客户端在所述远程服务调用后获取部分或全部所述返回值。
[0014]本发明第二方面实施例的远程调用系统,包括:客户端,用于向服务器端发送调用远程方法的请求,以及查询所述服务器端返回的返回值;服务器端,用于接收所述客户端发送的调用请求,执行被调用的远程方法,并向所述客户端发送返回值和调用结束通知。
[0015]根据本发明实施例的远程调用系统,允许多个线程中的任意线程通过部分返回接口任意次地返回部分返回值,减少了数据平均返回时间,加快了分布式系统层间数据聚集,防止慢数据拖累其他数据,增强了后续处理的流水线,将数据的产生和传输交错运行,缩短了整个系统的响应时间。
[0016]在一些示例中,为每个所述被调用的远程方法赋予一个初始值为0的整型引用计数,其支持如下两个原子操作:p操作对所述引用计数减一 ;v操作对所述引用计数加一。
[0017]进一步地,在一些示例中,每一个点绑定一个所述P操作,每一条边绑定一个所述V操作,其中,点为执行所述被调用的远程方法所涉及的线程,边为一个线程创建另一个线程的派生关系。
[0018]在一些示例中,所述服务器端通过部分返回接口向客户端发送所述返回值和调用结束通知。所述执行所述被调用的远程方法和所述发送调用结束通知通过偏序协议完成,所述偏序协议具体包括:当一个线程创建另一个线程时,与相应的所述边绑定的所述V操作被执行;当一个线程结束时,与所述点绑定的所述P操作被执行;调用结束通知在根绑定的所有所述V操作之后发生,其中,根为所述被调用的远程方法所在的线程;调用结束通知在所述引用计数变为0后发生。
[0019]在一些示例中,还包括:所述客户端在所述远程服务调用后获取部分或全部所述返回值。
[0020]本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
【专利附图】

【附图说明】
[0021]本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中,[0022]图1是根据本发明一个实施例的远程调用方法的流程图;
[0023]图2是本发明一个实施例的服务器端运行的Java代码示例图;
[0024]图3是本发明一个实施例与传统的远程调用的客户端与服务器的交互对比示意图;
[0025]图4是根据本发明实施例的偏序协议示意图;
[0026]图5是本发明一个实施例的客户端运行的Java代码示例图;
[0027]图6是本发明一个实施例的远程调用方法应用于云存储系统Corsair的仿真结果图;和
[0028]图7是根据本发明一个实施例的远程调用系统的结构框图。
【具体实施方式】
[0029]下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
[0030]在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
[0031]流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,这应被本发明的实施例所属【技术领域】的技术人员所理解。
[0032]下面参考附图描述根据本发明实施例的远程调用方法及系统。
[0033]在本发明第一方面的实施例中提出了一种远程调用方法,包括以下步骤:客户端向服务器端发送调用远程方法以及获取返回值的请求;服务器端接收请求,并创建多个线程以执行被调用的远程方法,其中,在被调用的远程方法的执行过程中,允许多个线程中的任意线程通过远程接口任意次地返回部分返回值;当返回值全部返回后,服务器端向客户端发送调用结束通知。
[0034]图1是根据本发明一个实施例的远程调用方法的流程图。结合图1,详述本发明的远程调用方法的实现过程:
[0035]步骤SlOl:客户端向服务器端发送调用远程方法以及获取返回值的请求。
[0036]步骤S102:服务器端接收请求,并创建多个线程以执行被调用的远程方法,其中,在被调用的远程方法的执行过程中,允许多个线程中的任意线程通过部分返回接口任意次地返回部分返回值。[0037]具体地,结合图2的本发明一个实施例的服务器端运行的Java代码示例说明实现过程:
[0038]服务器端在接收请求后,创建了若干工作线程(示例代码的第3行),执行被调用的远程方法。每个线程通过preturn (partial return)将部分结果返回给客户端的调用者。示例代码中,三个不同位置的preturn展示了其灵活性,可用于任意线程任意多次地返回部分返回值。图3是本发明一个实施例与传统的远程调用的客户端与服务器的交互对比示意图,结合图3可以直观地说明本发明实施例的调用过程。其中,(a)和(c )是传统的远程调用示意图,只能一次性返回结果;(b)和(d)是本发明的远程调用方法示意图,服务器端不需要等待各个工作线程全部结束,即可将部分结果分批返回给客户端。
[0039]另外,函数preturn是一个服务器端预定义的部分返回接口,preturn除接收返回值外不需要配置其他参数。在preturn内部会创建一个responder线程,来进行传输实际数据。被调用的方法所在的线程及responder线程都会记录一个唯一的调用ID,并将调用ID及目标数据一起序列化,作为返回值返回给客户端。
[0040]进一步地,本发明的一个实施例对程序员透明地为每个被调用的远程方法赋予一个初始值为0的整型引用计数,其支持如下两个原子操作:P操作对引用计数减一 ;v操作对引用计数加一。
[0041]在实际的运行中,执行被调用的远程方法和发送调用结束通知通过偏序协议完成。偏序协议具体包括:
[0042]当一个线程创建另一个线程时,与相应的边绑定的V操作被执行,其中,边为一个线程创建另外一个线程的派生关系;
[0043]当一个线程结束时,与点绑定的P操作被执行,其中,点为被调用的远程方法所涉及的线程,特别地,调用结束通知也作为一个特殊的线程,从而也对应一个点;
[0044]调用结束通知在根绑定的所有V操作之后发生,其中,根为被调用的远程方法所在的线程;
[0045]调用结束通知在引用计数变为0后发生。
[0046]例如,在本发明的一个实施例中,偏序协议抽象地应用一个静态有向图来表不,如图4所示,P和V操作分别与点和边绑定,括号中的数字区分了不同的操作。“s”点是被调用方法所在的线程,也称作根;“v”点表示调用结束通知。在实际工作中,服务器端保证工作线程按照如图4所示的有向图对应的操作,执行如上偏序协议。
[0047]步骤S103:当返回值全部返回后,服务器端向客户端发送调用结束通知。
[0048]特别地,在本发明的实施例中,客户端可以在远程方法被调用后获取部分或全部返回值。图5是本发明一个实施例的客户端运行的Java代码示例,结合图5中示例的代码,客户端通过invokeO调用服务器端的远程方法(代码第I行),获取的返回值的集合被存储在ReplySet对象中,ReplySet对象的hasMore ()方法可能会挂起以等待下一个部分返回值(代码第3行),直到调用结束通知到达,ReplySet对象的isPartialO方法表明当前结果是否已经包含了所有预期的返回值。最后,客户端的调用者可以根据需要通过枚举接口获得部分或全部返回值(代码第5行)。
[0049]下面通过两个本发明的远程调用方法的应用实例来验证本发明的方法的优越性。
[0050]图6是本发明一个实施例的远程调用方法应用于云存储系统Corsair的仿真结果图。将本发明的方法应用于云存储系统Corsair,部署在Amazon EC2、GoGricU Rackspace等分布全球的10个点(美国维吉尼亚州、美国北加州、日本、新加坡、爱尔兰、英国等),在其上运行获得用户组通讯录的数据聚集操作。基于本发明的数据平均返回时间比传统远程调用平均减少55.7% (最高值61.0%,最低值49.5%)。我们除了测试正常执行(Normal)外,还人为地加入了失败的点(Failure),在Failure测试中,A4点被关停。此时本发明实施例的数据平均到达时间平均只有传统远程调用方法的6.6%(最高值9.4%,最低值5.1%)。图中:AAT表示数据平均到达时间,Normal std是指正常标准的远程调用,Normal mr是指正常情况下多次返回的远程调用,Failure std是指有失败点的标准的远程调用,Failure mr表示有失败点的多次返回的远程调用。
[0051]根据本发明实施例的远程调用方法,允许多个线程中的任意线程通过部分返回接口任意次地返回部分返回值,减少了数据平均返回时间,加快了分布式系统层间数据聚集,防止慢数据拖累其他数据,增强了后续处理的流水线,将数据的产生和传输交错运行,缩短了整个系统的响应时间。
[0052]本发明第二方面的实施例中提出了一种远程调用系统,结合图7,包括:客户端100和服务器端200。
[0053]其中,客户端100用于向服务器端发送调用远程方法的请求,以及获取服务器端返回的返回值。服务器端200用于接收客户端发送的调用请求,执行被调用的远程方法,并向客户端发送返回值和调用结束通知。
[0054]具体地,客户端100向服务器端发送调用远程方法以及获取返回值的请求后,月艮务器端200接收请求,并创建多个线程以执行被调用的远程方法,其中,在被调用的远程方法的执行过程中,允许多个线程中的任意线程通过部分返回接口任意次地返回部分返回值。具体的实现过程如下:
[0055]结合图2的本发明一个实施例的服务器端200运行的Java代码示例图,服务器端200在接收请求后,创建了若干工作线程(示例代码的第3行),执行被调用的远程方法。每个线程通过preturn (partial return)将部分结果返回给客户端100的调用者。示例代码中,三个不同位置的preturn展示了其灵活性,可用于任意线程任意多次地返回部分返回值。图3是本发明一个实施例与传统的远程调用的客户端与服务器的交互对比示意图,结合图3可以直观地说明本发明实施例的调用过程。其中,(a)和(c)是传统的远程调用示意图,只能一次性地返回结果。(b)和(d)是本发明的远程调用方法示意图,服务器端不需要等待各个工作线程全部结束,即可将部分结果分批返回给客户端。
[0056]另外,函数preturn是一个服务器端200预定义的部分返回接口,preturn除接收返回值外不需要配置其他参数。在preturn内部会创建一个responder线程,来进行传输实际数据。被调用的方法所在的线程及responder线程都会记录一个唯一的调用ID,并将调用ID及目标数据一起序列化,作为返回值返回给客户端100。
[0057]进一步地,本发明的一个实施例对程序员透明地为每个被调用的远程方法赋予一个初始值为0的整型引用计数,其支持如下两个原子操作:P操作对引用计数减一 ;v操作对引用计数加一。
[0058]在实际的运行中,执行被调用的远程方法和发送调用结束通知通过偏序协议完成。偏序协议具体包括:[0059]当一个线程创建另一个线程时,与相应的边绑定的V操作被执行,其中,边为一个线程创建另外一个线程的派生关系;
[0060]当一个线程结束时,与点绑定的P操作被执行,其中,点为被调用的远程方法所涉及的线程,特别地,调用结束通知也作为一个特殊的线程,从而也对应一个点;
[0061]调用结束通知在根绑定的所有V操作之后发生,其中,根为被调用的远程方法所在的线程;
[0062]调用结束通知在引用计数变为0后发生。
[0063]例如,在本发明的一个实施例中,偏序协议抽象地应用一个静态有向图来表不,如图4所示,P和V操作分别与点和边绑定,括号中的数字区分了不同的操作。“s”点是被调用方法所在的线程,也称作根。“v”点表示调用结束通知。在实际工作中,服务器端保证工作线程按照如图4所示的有向图对应的操作,执行如上偏序协议。
[0064]当返回值全部返回后,服务器端200向客户端100发送调用结束通知。
[0065]特别地,在本发明的实施例中,客户端100可以在远程方法被调用后获取部分或全部返回值。图5是本发明一个实施例的客户端运行的Java代码示例,结合图5中示例的代码,客户端100通过invokeO调用服务器端200的远程方法(代码第I行),获取的返回值的集合被存储在ReplySet对象中,ReplySet对象的hasMore ()方法可能会挂起以等待下一个部分返回值(代码第3行),直到调用结束通知到达,ReplySet对象的isPartial ()方法表明当前结果是否已经包含了所有预期的返回值。最后,客户端100的调用者可以根据需要通过枚举接口获得部分或全部返回值(代码第5行)。
[0066]根据本发明实施例的远程调用系统,允许多个线程中的任意线程通过部分返回接口任意次地返回部分返回值,减少了数据平均返回时间,加快了分布式系统层间数据聚集,防止慢数据拖累其他数据,增强了后续处理的流水线,将数据的产生和传输交错运行,缩短了整个系统的响应时间。
[0067]在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
[0068]尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
【权利要求】
1.一种远程调用方法,其特征在于,包括以下步骤: 客户端向服务器端发送调用远程方法以及获取返回值的请求; 所述服务器端接收所述请求,并创建多个线程以执行被调用的所述远程方法,其中,在所述被调用的远程方法的执行过程中,允许所述多个线程中的任意线程通过部分返回接口任意次地返回部分返回值;以及 当所述返回值全部返回后,所述服务器端向所述客户端发送调用结束通知。
2.如权利要求1所述的方法,其特征在于,还包括: 为每个所述被调用的远程方法赋予一个初始值为O的整型引用计数,其支持如下两个原子操作: P操作对所述引用计数减一; V操作对所述引用计数加一。
3.如权利要求2所述的方法,其特征在于,每一个点绑定一个所述P操作,每一条边绑定一个所述V操作,其中,点为执行所述被调用的远程方法所涉及的线程,边为一个线程创建另一个线程的派生关系。
4.如权利要求1任一项所述的方法,其特征在于,所述执行所述被调用的远程方法和所述发送调用结束通知通过 偏序协议完成,所述偏序协议具体包括: 当一个线程创建另一个线程时,与相应的所述边绑定的所述V操作被执行; 当一个线程结束时,与所述点绑定的所述P操作被执行; 调用结束通知在根绑定的所有所述V操作之后发生,其中,根为所述被调用的远程方法所在的线程; 调用结束通知在所述引用计数变为O后发生。
5.如权利要求1所述的方法,其特征在于,还包括:所述客户端在所述远程方法被调用后可以获取部分或全部所述返回值。
6.一种远程调用系统,其特征在于,包括: 客户端,用于向服务器端发送调用远程方法的请求,以及获取所述服务器端返回的返回值; 服务器端,用于接收所述客户端发送的调用请求,执行被调用的远程方法,并向所述客户端发送返回值和调用结束通知。
7.如权利要求6所述的系统,其特征在于,为每个所述被调用的远程方法赋予一个初始值为O的整型引用计数,其支持如下两个原子操作: P操作对所述引用计数减一; V操作对所述引用计数加一。
8.如权利要求7所述的系统,其特征在于,每一个点绑定一个所述P操作,每一条边绑定一个所述V操作,其中,点为执行所述被调用的远程方法所涉及的线程,边为一个线程创建另一个线程的派生关系。
9.如权利要求6所述的系统,其特征在于,所述服务器端通过部分返回接口向客户端发送所述返回值和调用结束通知,所述执行所述被调用的远程方法和所述发送调用结束通知通过偏序协议完成,所述偏序协议具体包括: 当一个线程创建另一个线程时,与相应的所述边绑定的所述V操作被执行;当一个线程结束时,与所述点绑定的所述P操作被执行; 调用结束通知在根绑定的所有所述V操作之后发生,其中,根为所述被调用的远程方法所在的线程; 调用结束通知在所述引用计数变为O后发生。
10.如权利要求6所述的系统,其特征在于,还包括:所述客户端在所述远程方法被调用后可以获取部分或全部所述返回值。
【文档编号】G06F9/46GK103645940SQ201310646738
【公开日】2014年3月19日 申请日期:2013年12月4日 优先权日:2013年12月4日
【发明者】武永卫, 郑纬民, 陈康, 任晶磊 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1