一种远程服务调用方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种远程服务调用方法及装置。
背景技术
远程过程调用协议(Remote Procedure Call Protocol,RPC)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。互联网应用越来越多地渗透进人们的日常生活中,特别是移动互联网的发展形成了全民上网的大趋势,人们的日常习惯正在改变,开始习惯于通过网络方便地处理一些日常事务,诸如购物、缴费、浏览新闻资讯等等。不可避免地,用户需要通过智能终端、电脑终端等与服务器进行交互,调用位于服务器上的若干服务来完成事务的处理。
在远程服务调用过程中,无法杜绝远程服务器出现各种异常现象,如断电、网络断开、提供服务的组件卸载、Java虚拟机挂掉,服务器重启等。这些异常现象将导致远程服务调用失败,引起服务调用方业务异常,影响用户体验效果。
发明内容
本申请实施例提供一种远程服务服务调用方法及装置,用以解决现有技术在远程服务调用过程中远程服务器出现异常情况下,当前远程服务调用无法自行快速切换可以调用的远程服务器,造成执行效率低下、用户体验不佳的问题。
本申请实施例采用下述技术方案:
一种远程服务调用方法,包括:
服务调用者向远程服务器发送服务调用指令;
检测所述远程服务器的运行状态;
当检测到所述远程服务器出现异常时,向提供所述服务调用指令所要调用的服务的其他远程服务器发送所述服务调用指令。
一种远程服务调用方法,包括:
代理服务器接收服务调用者发出的服务调用请求;
向远程服务器发送服务调用指令;
检测所述远程服务器运行状态;
当检测到所述远程服务器出现异常时,向提供所述服务调用指令所要调用的服务的其他远程服务器发送所述服务调用指令。
一种远程服务调用装置,包括:
发送单元,用于向远程服务器发送服务调用指令;
检测单元,用于检测所述远程服务器的运行状态;
调用转换单元,用于在所述远程服务器出现异常时,向提供所述服务调用指令所要调用的服务的其他远程服务器发送所述服务调用指令。
一种远程服务调用装置,包括:
接收单元,用于接收服务调用者发出的服务调用请求;
发送单元,用于向远程服务器发送服务调用指令;
检测单元,用于检测所述远程服务器的运行状态;
调用转换单元,用于在所述远程服务器出现异常时,向提供所述服务调用指令所要调用的服务的其他远程服务器发送所述服务调用指令。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:
在服务集群应用场景下,在发起远程服务调用的同时,针对被调用的远程服务器进行实时检测,在当前远程服务器出现异常情况时,自动切换至拥有被调用服务的其他服务器直至返回远程调用结果,解决了现有技术在远程服务调用过程中远程服务器出现异常情况下,当前远程服务调用无法自行快速切换可以调用的远程服务器,造成执行效率低下、用户体验不佳的问题。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例一提供的远程服务调用方法流程图;
图2为本申请实施例二提供的远程服务调用方法流程图;
图3为本申请实施例三提供的远程服务调用装置结构示意图;
图4为本申请实施例四提供的远程服务调用装置结构示意图;
图5为本申请实施例二提供的远程服务调用方法示意图;
图6为本申请提供的服务调用者直接远程服务调用系统结构图;
图7为本申请提供的服务调用者通过代理服务器进行远程服务调用的系统结构图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
实施例1
图1为本申请实施例一提供的远程服务调用方法流程,是指从服务调用者向远程服务器发起RPC调用过程中,当所述远程服务器出现异常时,再由服务调用者向其他远程服务器发起调用的过程。包括如下步骤:
S101:服务调用者向远程服务器发送服务调用指令。
所述服务调用者包括PC终端、手机终端等,所述远程服务器是指存储或运行有具体服务的服务器集合。
所述服务调用者上存有服务器列表,所述服务器列表建立了服务调用者需要调用服务的服务标识与远程服务器之间的映射关系,一个远程服务器对应至少一个服务标识,一个服务标识也对应至少一个远程服务器。
当远程服务器上的服务出现修改时,如新增服务、服务更新、服务卸载等,则服务调用者上的服务器列表需要进行相应的修改,其修改的规则如下:首先,当远程服务器拥有的服务发生修改时,会自动触发修改指令给中心服务器;然后所述中心服务器依据所述修改指令修改中心服务器内的服务器列表;最后,由所述中心服务器向服务调用者推送修改后的服务器列表。所述中心服务器上的服务器列表建立了系统内所有远程服务器与各远程服务器拥有的服务之间的映射关系,具体表现为远程服务器地址与服务标识之间的映射关系。所述触发的修改指令包括服务器地址、服务标识、修改标识,所述修改标识可表示为删除、更新、新增等内容。
本步骤中,当所述服务调用者需要调用某服务时,则依据该服务的服务标识从本地的服务器列表中找到拥有该服务的所有远程服务器地址,然后,随机选择其中的一个远程服务器发出调用指令。
所述调用指令包括有服务调用者所要调用的服务的服务标识。
S102:检测所述远程服务器。
本步骤是指在服务调用者向选定的远程服务器发送调用指令时,同时向所述远程服务器发起心跳检查,所述远程服务器接收到该心跳检查信号时,以心跳定时的方式向服务调用者发送回复信号,当服务调用者接收到正常回复信号时,则认为所述远程服务器处于正常状态,并持续对所述远程服务器进行异常检测。
当所述远程服务器异常时,如出现远程服务器断电、断开网络、重启、提供服务的组件卸载中等情况中任一项或多项,则该远程服务器无法回复检测信号、或直接回复异常信号给所述服务调用者。而所述服务调用者在预定时间内没有接收到远程服务器回复的检测信号或者接收到来自远程服务器的异常检测信号,则终止心跳检查并进入步骤S103。
当所述服务调用者接收到来自所述远程服务器的服务调用结果时,则终止心跳检查并完成RPC调用。
S103:当服务调用者检测到所述远程服务器出现异常时,向其他远程服务器发送所述服务调用指令。
所述服务调用者检测到当前调用远程服务器出现异常时,首先终止本次RPC调用,并在本地的服务器列表中对所述远程服务器进行错误标识;随后根据所要调用的服务的服务标识,在保存的服务器列表中,重新查找到与所述服务标识对应、且不存在错误标记的其他远程服务器;最后随机选择一个查找到的所述其他远程服务器,并再次发送远程服务调用指令并同时检测该远程服务器的异常情况。
当在步骤S103的远程服务调用过程中再次出现远程服务器异常的情况时,则重复步骤S103直至该远程服务调用获得调用结果为止。
本实施例的远程服务调用方法在服务器集群的应用场景下,即同一服务位于若干不同的远程服务器上,通过心跳检查的方式确认当前调用的远程服务器是否出现异常,异常情况下通过重新调用的其他远程服务器来完成当前服务,提升了执行效率、使用户体验效果更佳。
实施例2
图2为本申请实施例二提供的远程服务调用方法流程,是指服务调用者向代理服务器发送服务调用请求,而代理服务器则向远程服务器发起RPC调用过程中,当所述远程服务器出现异常时,再由代理服务器向其他远程服务器发起调用的过程。包括如下步骤:
S201:代理服务器接收服务调用者发出的服务调用请求。
所述代理服务器可以是一种提供远程服务调用代理的服务器、或者存在于服务调用者内虚拟的服务代理,即服务使用者与所述代理服务器处于同一设备内。所述服务调用者包括PC终端、手机终端等,所述远程服务器是指存储或运行有具体服务的服务器集合。
当所述服务调用者需要调用某服务时,则向所述代理服务器发送服务调用请求,所述服务调用请求包括有需要调用的服务的服务标识。
S202:向远程服务器发送服务调用指令。
所述代理服务器上存有服务器列表,所述服务器列表建立了服务调用者需要调用服务的服务标识与远程服务器之间的映射关系,一个远程服务器对应至少一个服务标识,一个服务标识也对应至少一个远程服务器。
当远程服务器上的服务出现修改时,如新增服务、服务更新、服务卸载等,则代理服务器上的服务器列表需要进行相应的修改,其修改的规则如下:首先,当远程服务器拥有的服务发生修改时,会自动触发修改指令给中心服务器;然后所述中心服务器依据所述修改指令修改中心服务器内的服务器列表;最后,由所述中心服务器向代理服务器推送修改后的服务器列表。所述中心服务器上的服务器列表建立了系统内所有远程服务器与各远程服务器拥有的服务之间的映射关系,具体表现为远程服务器地址与服务标识之间的映射关系。所述触发的修改指令包括服务器地址、服务标识、修改标识,所述修改标识可表示为删除、更新、新增等内容。
本步骤中,当所述代理服务器接收到服务调用者发出的服务调用请求时,则依据服务调用请求内包含的服务标识从本地的服务器列表中找到拥有该服务的所有远程服务器地址,然后,随机选择其中的一个远程服务器发出调用指令。
所述调用指令包括有服务调用者所要调用的服务的服务标识。
S203:检测所述远程服务器。
本步骤是指在代理服务器向选定的远程服务器发送调用指令时,同时向所述远程服务器发起心跳检查,所述远程服务器接收到该心跳检查信号时,以心跳定时的方式向服务调用者发送回复信号,当服务调用者接收到正常回复信号时,则认为所述远程服务器处于正常状态,并持续对所述远程服务器进行异常检测。
当所述远程服务器异常时,如出现远程服务器断电、断开网络、重启、提供服务的组件卸载中等情况中任一项或多项,则该远程服务器无法回复检测信号、或直接回复异常信号给所述代理服务器。而所述代理服务器在预定时间内没有接收到远程服务器回复的检测信号或者接收到来自远程服务器的异常检测信号,则终止心跳检查并进入步骤S204。
当所述代理服务器接收到来自所述远程服务器的服务调用结果时,则终止心跳检查并完成RPC调用。
S204:代理服务器检测到所述远程服务器出现异常时,向其他远程服务器发送所述服务调用指令。
所述代理服务器检测到当前调用远程服务器出现异常时,首先终止本次RPC调用,并在本地的服务器列表中对所述远程服务器进行错误标识;随后根据所要调用的服务的服务标识,在保存的服务器列表中,重新查找到与所述服务标识对应、且不存在错误标记的其他远程服务器;最后随机选择一个查找到的所述其他远程服务器,并再次发送远程服务调用指令并同时检测该远程服务器的异常情况。
当在步骤S204的远程服务调用过程中如果再次出现远程服务器异常的情况时,则重复步骤S204直至该远程服务调用获得调用结果为止。
本实施例是在实施例一的基础上,增加了一种代理技术,使代理技术结合心跳检测技术提供远程服务调用过程中的动态快速切换能力,为服务调用者提供服务集群的高可用性和高可靠性,使服务调用者在无需获知远程服务器异常的情况下完成了远程服务的调用,用户体验效果更佳。
图5所示为实施例二在远程调用服务X的过程中,所述远程服务器A出现异常情况下的服务调用示意图。在远程服务器A出现异常的情况下,改由调用远程服务器B内的服务X来完成当前服务的调用过程。
实施例3
图3所示为实施例三提供的远程服务调用装置结构示意图,具体包括:
发送单元301,用于向远程服务器发送服务调用指令;
检测单元302,用于检测所述远程服务器;
调用转换单元303,用于在所述远程服务器出现异常时,向其他远程服务器发送所述服务调用指令。
所述远程服务器是指存储或运行有具体服务的服务器集合。
所述发送单元301依据当前需要调用的服务的服务标识查找服务器列表,从所述服务器列表中找到拥有该服务的所有远程服务器地址,然后,随机选择其中的一个远程服务器发出调用指令。所述调用指令包括有需要调用的服务的服务标识。
所述服务器列表保存于服务调用者内,所述服务器列表建立了需要调用服务的服务标识与远程服务器之间的映射关系,一个远程服务器对应至少一个服务标识,一个服务标识也对应至少一个远程服务器。
本实施例的远程服务调用装置还包括接收单元、及更新单元,当远程服务器上的服务出现修改时,如新增服务、服务更新、服务卸载等,则本地的服务器列表需要进行相应的修改,其修改的规则如下:首先,当远程服务器拥有的服务发生修改时,会自动触发修改指令给中心服务器;然后所述中心服务器依据所述修改指令修改中心服务器内的服务器列表;最后,由所述中心服务器向所述接收单元推送修改后的服务器列表,所述更新单元更新所述服务调用者本地的服务器列表。所述中心服务器上的服务器列表建立了系统内所有远程服务器与各远程服务器拥有的服务之间的映射关系,具体表现为远程服务器地址与服务标识之间的映射关系。所述触发的修改指令包括服务器地址、服务标识、修改标识,所述修改标识可表示为删除、更新、新增等内容。
所述检测单元302在所述发送单元301发出调用指令时,同时向所述远程服务器发起心跳检查,所述远程服务器接收到该心跳检查信号时,以心跳定时的方式向所述检测单元302发送回复信号,当所述检测单元302接收到正常回复信号时,则认为所述远程服务器处于正常状态,并持续对所述远程服务器进行异常检测。
当所述远程服务器异常时,如出现远程服务器断电、断开网络、重启、提供服务的组件卸载中等情况中任一项或多项,则该远程服务器无法回复检测信号、或直接回复异常信号给所述检测单元302。而所述检测单元302在预定时间内没有接收到远程服务器回复的检测信号或者接收到来自远程服务器的异常检测信号,则终止心跳检查。
当所述检测单元302检测到本地接收到来自所述远程服务器的服务调用结果时,则终止心跳检查并完成RPC调用。
所述调用转换单元303在所述检测单元302检测到所述远程服务器出现异常时,首先终止本次RPC调用,并在本地的服务器列表中对所述远程服务器进行错误标识;随后根据所要调用的服务的服务标识,在保存的服务器列表中,重新查找到与所述服务标识对应、且不存在错误标记的其他远程服务器;最后随机选择一个查找到的所述其他远程服务器,并再次发送远程服务调用指令并同时由所述检测单元302检测该远程服务器的异常情况。
实施例4
图4所示为实施例四提供的远程服务调用装置结构示意图,具体包括:
接收单元401,用于接收来自服务调用者的服务调用请求;
发送单元402,用于向远程服务器发送服务调用指令;
检测单元403,用于检测所述远程服务器;
调用转换单元404,用于在所述远程服务器出现异常时,向其他远程服务器发送所述服务调用指令。
所述远程服务器是指存储或运行有具体服务的服务器集合。当所述服务调用者需要调用某服务时,则向所述接收单元401发送服务调用请求,所述服务调用请求包括有需要调用的服务的服务标识。
所述发送单元402依据当前需要调用的服务的服务标识查找服务器列表,从所述服务器列表中找到拥有该服务的所有远程服务器地址,然后,随机选择其中的一个远程服务器发出调用指令。所述调用指令包括有需要调用的服务的服务标识。
所述服务器列表保存于所述代理服务器内,所述服务器列表建立了需要调用服务的服务标识与远程服务器之间的映射关系,一个远程服务器对应至少一个服务标识,一个服务标识也对应至少一个远程服务器。
本实施例的远程服务调用装置还包括更新单元,当远程服务器上的服务出现修改时,如新增服务、服务更新、服务卸载等,则本地的服务器列表需要进行相应的修改,其修改的规则如下:首先,当远程服务器拥有的服务发生修改时,会自动触发修改指令给中心服务器;然后所述中心服务器依据所述修改指令修改中心服务器内的服务器列表;最后,由所述中心服务器向所述接收单元推送修改后的服务器列表,同时,所述更新单元依据所述修改后的服务器列表更新所述代理服务器内的服务器列表。所述中心服务器上的服务器列表建立了系统内所有远程服务器与各远程服务器拥有的服务之间的映射关系,具体表现为远程服务器地址与服务标识之间的映射关系。所述触发的修改指令包括服务器地址、服务标识、修改标识,所述修改标识可表示为删除、更新、新增等内容。
所述检测单元403在所述发送单元402发出调用指令时,同时向所述远程服务器发起心跳检查,所述远程服务器接收到该心跳检查信号时,以心跳定时的方式向所述检测单元403发送回复信号,当所述检测单元403接收到正常回复信号时,则认为所述远程服务器处于正常状态,并持续对所述远程服务器进行异常检测。
当所述远程服务器异常时,如出现远程服务器断电、断开网络、重启、提供服务的组件卸载中等情况中任一项或多项,则该远程服务器无法回复检测信号、或直接回复异常信号给所述检测单元403。而所述检测单元403在预定时间内没有接收到远程服务器回复的检测信号或者接收到来自远程服务器的异常检测信号,则终止心跳检查。
当所述检测单元403检测到本地接收到来自所述远程服务器的服务调用结果时,则终止心跳检查并完成RPC调用。
所述调用转换单元404在所述检测单元403检测到所述远程服务器出现异常时,首先终止本次RPC调用,并在本地的服务器列表中对所述远程服务器进行错误标识;随后根据所要调用的服务的服务标识,在保存的服务器列表中,重新查找到与所述服务标识对应、且不存在错误标记的其他远程服务器;最后随机选择一个查找到的所述其他远程服务器,并再次发送远程服务调用指令并同时由所述检测单元403检测该远程服务器的异常情况。
图6、图7所示为本申请的远程服务调用系统结构图,其中,图6所示为服务调用者直接进行远程服务调用的系统结构图,图7所示为服务调用者通过代理服务器进行远程服务调用的系统结构图。
如图6所示,所述服务调用者包括PC终端、手机终端等,所述远程服务器是指存储或运行有具体服务的服务器集合。
所述服务调用者上存有服务器列表,所述服务器列表建立了服务调用者需要调用服务的服务标识与远程服务器之间的映射关系,一个远程服务器对应至少一个服务标识,一个服务标识也对应至少一个远程服务器。
当所述服务调用者需要调用位于远程服务器内的某一服务时,则从本地服务器列表中随机抽取存储有该服务的一个远程服务器,并向该远程服务器发送远程服务调用指令,同时,所述服务调用者向该远程服务器发起心跳检查,若在所述远程服务调用结果返回之前,服务调用者接收到所述远程服务器的异常回复信号,则再从本地服务器列表中抽取另一个存储有所述服务的远程服务器发送远程服务调用指令。
如图7所示,所述代理服务器是指存在于所述服务调用者内虚拟出来的一个代理,用于隔离服务调用者与远程服务器之间的交互,使用户在不知情的情况下,完成远程服务调用过程中的异常处理,提升用户体验。此时,所述代理服务器需要先接收来自服务调用者的服务调用请求,然后由所述代理服务器承担如图6所述的后续远程服务调用等责任。
需要说明的是,实施例一、实施例二所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。