服务调用方法及装置与流程

文档序号:12363369阅读:298来源:国知局
服务调用方法及装置与流程

本发明涉及计算机软件技术领域,尤其涉及一种服务调用方法及装置。



背景技术:

分布式应用(Distributed Application)指的是应用程序分布在不同计算机上,通过网络来共同完成一项任务的工作方式。在分布式应用系统中,为了降低耦合性和维护成本,同时为了方便不同部门之间的协同工作,通常拆分为多个具有单一功能的服务。例如,对于大型的互联网分布式应用,通常拆分为负载均衡、前端、后台、缓存、数据库和第三方服务等多个服务。不同的服务通常会部署在不同机房的多台服务器上,服务之间通过共享数据库和RPC(Remote Process Call,远程过程调用)等方式进行通信。当分布式应用系统依赖的服务出现异常时,例如服务无法正常响应时,会影响分布式应用系统的性能和稳定性,甚至导致整个分布式应用系统出现异常,从而造成较大损失。

综上,现有的分布式应用系统的稳定性和可靠性依赖于内部及外部服务的稳定性和可靠性,当分布式应用系统依赖的服务出现异常时,对分布式应用系统的服务质量影响较大,甚至会导致分布式应用系统不可用。



技术实现要素:

技术问题

有鉴于此,本发明要解决的技术问题是,现有的分布式应用系统的稳定性和可靠性较低。

解决方案

为了解决上述技术问题,根据本发明的一实施例,提供了一种服务调用方法,包括:

在接收到调用服务的请求的情况下,获取所述服务的可用性参数;

在所述可用性参数为可用的情况下,调用所述服务,并获取所述服务的响应结果;

在所述可用性参数为不可用的情况下,执行备选操作。

对于上述方法,在一种可能的实现方式中,在所述可用性参数为不可用的情况下,执行备选操作,包括:

在所述可用性参数为不可用的情况下,判断所述请求是否需要对所述服务进行探测;

若判定需要对所述服务进行探测,则调用所述服务,并获取所述服务的响应结果;

若判定不需要对所述服务进行探测,则调用所述服务的备选数据和/或备选逻辑。

对于上述方法,在一种可能的实现方式中,判断所述请求是否需要对所述服务进行探测,包括:

根据预先设定的探测流量比例设置第一区间,并根据所述探测流量比例在所述第一区间中设定第四预设值;

为所述请求在所述第一区间中生成随机数,若所述随机数与第四预设值相同,则判定需要对所述服务进行探测,否则判定不需要对所述服务进行探测。

对于上述方法,在一种可能的实现方式中,在获取所述服务的响应结果之后,所述方法还包括:

将所述服务对应的调用总次数加1;

若所述服务的响应结果为异常,则将所述服务对应的调用失败次数加1;

在当前系统时间与所述服务的检测时间戳之间的时间间隔大于或等于第一预设值,且所述调用总次数大于或等于第二预设值的情况下,根据所述调用失败次数更新所述可用性参数。

对于上述方法,在一种可能的实现方式中,根据所述调用失败次数更新所述可用性参数,包括:

在所述调用失败次数与所述调用总次数的比值大于或等于第三预设值的情况下,将所述可用性参数更新为不可用;

在所述调用失败次数与所述调用总次数的比值小于所述第三预设值的情况下,将所述可用性参数更新为可用。

对于上述方法,在一种可能的实现方式中,在根据所述调用失败次数更新所述可用性参数之后,所述方法还包括:

将所述检测时间戳更新为所述当前系统时间,并将所述调用总次数和所述调用失败次数清零。

对于上述方法,在一种可能的实现方式中,在获取所述服务的响应结果之后,所述方法还包括:

若所述服务的响应结果为正常,则将所述服务的最新调用状态更新为正常状态,否则将所述最新调用状态更新为异常状态。

为了解决上述技术问题,根据本发明的另一实施例,提供了一种服务调用装置,包括:

可用性参数获取模块,用于在接收到调用服务的请求的情况下,获取所述服务的可用性参数;

服务调用模块,用于在所述可用性参数为可用的情况下,调用所述服务,并获取所述服务的响应结果;

备选操作执行模块,用于在所述可用性参数为不可用的情况下,执行备选操作。

对于上述装置,在一种可能的实现方式中,所述备选操作执行模块包括:

探测判断子模块,用于在所述可用性参数为不可用的情况下,判断所述请求是否需要对所述服务进行探测;

服务调用子模块,用于若判定需要对所述服务进行探测,则调用所述服务,并获取所述服务的响应结果;

备选调用子模块,用于若判定不需要对所述服务进行探测,则调用所述服务的备选数据和/或备选逻辑。

对于上述装置,在一种可能的实现方式中,所述探测判断子模块具体用于:

在所述可用性参数为不可用的情况下,根据预先设定的探测流量比例设置第一区间,并根据所述探测流量比例在所述第一区间中设定第四预设值;

为所述请求在所述第一区间中生成随机数,若所述随机数与第四预设值相同,则判定需要对所述服务进行探测,否则判定不需要对所述服务进行探测。

对于上述装置,在一种可能的实现方式中,所述装置还包括:

调用总次数累加模块,用于将所述服务对应的调用总次数加1;

调用失败次数累加模块,用于若所述服务的响应结果为异常,则将所述服务对应的调用失败次数加1;

可用性参数更新模块,用于在当前系统时间与所述服务的检测时间戳之间的时间间隔大于或等于第一预设值,且所述调用总次数大于或等于第二预设值的情况下,根据所述调用失败次数更新所述可用性参数。

对于上述装置,在一种可能的实现方式中,所述可用性参数更新模块包括:

第一可用性参数更新子模块,用于在所述调用失败次数与所述调用总次数的比值大于或等于第三预设值的情况下,将所述可用性参数更新为不可用;

第二可用性参数更新子模块,用于在所述调用失败次数与所述调用总次数的比值小于所述第三预设值的情况下,将所述可用性参数更新为可用。

对于上述装置,在一种可能的实现方式中,所述装置还包括:

清零模块,用于将所述检测时间戳更新为所述当前系统时间,并将所述调用总次数和所述调用失败次数清零。

对于上述装置,在一种可能的实现方式中,所述装置还包括:

最新调用状态更新模块,用于若所述服务的响应结果为正常,则将所述服务的最新调用状态更新为正常状态,否则将所述最新调用状态更新为异常状态。

有益效果

通过在接收到调用服务的请求的情况下,获取该服务的可用性参数,在可用性参数为可用的情况下,则调用该服务,并获取该服务的响应结果,在可用性参数为不可用的情况下,执行备选操作,根据本发明实施例的服务调用方法及装置能够在服务出现异常时,降低分布式应用系统对该服务的依赖性,从而能够提高分布式应用系统的稳定性和可靠性。

根据下面参考附图对示例性实施例的详细说明,本发明的其它特征及方面将变得清楚。

附图说明

包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本发明的示例性实施例、特征和方面,并且用于解释本发明的原理。

图1示出根据本发明一实施例的服务调用方法的实现流程图;

图2示出根据本发明一实施例的服务调用方法步骤S103的一示例性的具体实现流程图;

图3示出根据本发明一实施例的服务调用方法步骤S201中判断该请求是否需要对该服务进行探测的一示例性的具体实现流程图;

图4示出根据本发明一实施例的服务调用方法的一示例性的实现流程图;

图5示出根据本发明一实施例的服务调用方法的另一示例性的实现流程图;

图6示出根据本发明一实施例的服务调用方法的另一示例性的实现流程图;

图7示出根据本发明一实施例的服务调用方法的另一示例性的实现流程图;

图8示出根据本发明另一实施例的服务调用装置的结构框图;

图9示出根据本发明另一实施例的服务调用装置的一示例性的结构框图;

图10示出了本发明的另一个实施例的一种服务调用设备的结构框图。

具体实施方式

以下将参考附图详细说明本发明的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。

在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。

另外,为了更好的说明本发明,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本发明同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本发明的主旨。

实施例1

图1示出根据本发明一实施例的服务调用方法的实现流程图。如图1所示,该方法主要包括:

在步骤S101中,在接收到调用服务(Service)的请求的情况下,获取该服务的可用性参数(Available)。

需要说明的是,本发明实施例提供的服务调用方法可以应用于分布式应用系统,在此不作限定。分布式应用系统可以为其依赖的各个服务分别创建ID(Identification,标识号)。

在本发明实施例中,在接收到调用服务的请求的情况下,获取该服务的可用性参数。其中,该服务可以为分布式应用系统所依赖的服务。服务的可用性参数可以包括可用和不可用两种取值情况。

在步骤S102中,在可用性参数为可用的情况下,调用该服务,并获取该服务的响应结果。

在步骤S103中,在可用性参数为不可用的情况下,执行备选操作。

在本发明实施例中,在服务的可用性参数为不可用的情况下,可以对该服务进行降级,并执行备选操作,由此能够降低分布式应用系统对该服务的依赖性,提高分布式应用系统的稳定性和可靠性。

图2示出根据本发明一实施例的服务调用方法步骤S103的一示例性的具体实现流程图。如图2所示,在可用性参数为不可用的情况下,执行备选操作,包括:

在步骤S201中,在可用性参数为不可用的情况下,判断该请求是否需要对该服务进行探测,若是,则执行步骤S202,否则执行步骤S203。

在步骤S202中,调用该服务,并获取该服务的响应结果。

作为本发明实施例的一个示例,在判定该请求需要对该服务进行探测的情况下,调用该服务,并获取该服务的响应结果。由此在分布式应用系统依赖的服务异常时,对该服务保留一小部分的调用请求进行探测,若该服务由异常转为正常,则可以及时将该服务的可用性参数由不可用更新为可用,从而能够及时恢复该服务,无需人为的修复和干预,降低了人力维护成本,并将服务异常造成的应用质量下降时间降至最低。

在步骤S203中,调用该服务的备选数据和/或备选逻辑。

作为本发明实施例的一个示例,在判定该请求不需要对该服务进行探测的情况下,调用该服务的备选数据和/或备选逻辑,由此对于大多数的调用请求,可以直接调用该服务的备选数据和/或备选逻辑,从而降低了分布式应用系统依赖的服务异常时对分布式应用系统造成的影响和损失。

作为本发明实施例的一个示例,在步骤S202之后,该方法还包括:若该服务的响应结果为异常,则调用该服务的备选数据和/或备选逻辑。

在另一种可能的实现方式中,在可用性参数为不可用的情况下,执行备选操作,可以为:在可用性参数为不可用的情况下,调用该服务的备选数据和/或备选逻辑。在该实现方式中,在服务的可用性参数为不可用的情况下,对于各个调用该服务的请求,均调用该服务的备选数据和/或备选逻辑,从而降低该服务异常对分布式应用系统造成的影响和损失。在该实现方式中,在服务的可用性参数为不可用的情况下,还可以另外使用一个线程,该线程以预先设定的调用频率和内容,对该服务进行探测,若探测到该服务恢复正常,则可以将该服务的可用性参数由不可用更新为可用。

图3示出根据本发明一实施例的服务调用方法步骤S201中判断该请求是否需要对该服务进行探测的一示例性的具体实现流程图。如图3所示,判断该请求是否需要对该服务进行探测,包括:

在步骤S301中,根据预先设定的探测流量比例(Flow)设置第一区间,并根据探测流量比例在第一区间中设定第四预设值。

例如,预先设定的探测流量比例可以为1%或者0.1%,在此不作限定。

例如,预先设定的探测流量比例为2%,则可以根据该预先设定的探测流量比例设置第一区间为[0,99],第四预设值可选取[0,99]中的任意数值,使其数值占比与探测流量比例相同,例如23与84。

在步骤S302中,为该请求在第一区间中生成随机数,若该随机数与第四预设值相同,则判定需要对该服务进行探测,否则判定不需要对该服务进行探测。例如,第四预设值为23与84,若为该请求在第一区间[0,99]中生成的随机数为23或84,则判定需要对该服务进行探测,否则判定不需要对该服务进行探测。随机数可以根据该请求对应的时间戳来生成。例如,若该请求对应的时间戳为1469414684,第一区间范围为[0,99],则可以选取该请求对应的时间戳的后两位84作为随机数。

图4示出根据本发明一实施例的服务调用方法的一示例性的实现流程图。如图4所示,该方法包括:

在步骤S401中,在接收到调用服务的请求的情况下,判断该服务的可用性参数是否为可用,若是,则执行步骤S402,否则执行步骤S403。

在步骤S402中,调用该服务,并获取该服务的响应结果。

在步骤S403中,判断该请求是否需要对该服务进行探测,若是,则执行步骤S402,否则执行步骤S404。

在步骤S404中,调用该服务的备选数据和/或备选逻辑。

在步骤S405中,将该服务对应的调用总次数(例如InvokeTimes)加1。

其中,该服务的调用总次数可以为从该服务的检测时间戳记录的时间到当前系统时间调用该服务的总次数。

在步骤S406中,若该服务的响应结果为异常,则将该服务对应的调用失败次数(例如FailedTimes)加1。

该服务的调用失败次数可以为从该服务的检测时间戳记录的时间到当前系统时间调用该服务失败的次数。

其中,服务的响应结果为异常的原因可能包括请求超时、未响应、连接中断或者服务不可用等,在此不作限定。

在步骤S407中,在当前系统时间(CurrentTime)与该服务的检测时间戳之间的时间间隔(例如Duration)大于或等于第一预设值,且调用总次数大于或等于第二预设值(例如CheckTimes)的情况下,根据调用失败次数更新可用性参数。

其中,该服务的检测时间戳可以为上一次更新该服务的可用性参数的时间戳。

作为本发明实施例的一个示例,在当前系统时间与该服务的检测时间戳之间的时间间隔大于或等于第一预设值,且调用总次数大于或等于第二预设值的情况下,即满足(CurrentTime-TimeStamp>=Duration)&&(InvokeTimes>=CheckTimes)的情况下,触发可用性参数的更新步骤。

在一种可能的实现方式中,根据调用失败次数更新可用性参数,包括:在调用失败次数与调用总次数的比值大于或等于第三预设值(例如FailRate)的情况下,即满足FailedTimes/InvokeTimes>=FailRate的情况下,将可用性参数更新为不可用;在调用失败次数与调用总次数的比值小于第三预设值的情况下,即满足FailedTimes/InvokeTimes<FailRate的情况下,将可用性参数更新为可用。

图5示出根据本发明一实施例的服务调用方法的另一示例性的实现流程图。如图5所示,该方法包括:

在步骤S501中,在接收到调用服务的请求的情况下,判断该服务的可用性参数是否为可用,若是,则执行步骤S502,否则执行步骤S503。

在步骤S502中,调用该服务,并获取该服务的响应结果。

在步骤S503中,判断该请求是否需要对该服务进行探测,若是,则执行步骤S502,否则执行步骤S504。

在步骤S504中,调用该服务的备选数据和/或备选逻辑(例如Backup)。

在步骤S505中,将该服务对应的调用总次数加1。

在步骤S506中,若该服务的响应结果为异常,则将该服务对应的调用失败次数加1。

在步骤S507中,在当前系统时间与该服务的检测时间戳(例如TimeStamp)之间的时间间隔大于或等于第一预设值,且调用总次数大于或等于第二预设值的情况下,根据调用失败次数更新可用性参数。

在步骤S508中,将检测时间戳更新为当前系统时间,并将调用总次数和调用失败次数清零。

作为本发明实施例的一个示例,在根据调用失败次数更新可用性参数之后,将该服务的检测时间戳更新为当前系统时间,并将调用总次数和调用失败次数清零。

图6示出根据本发明一实施例的服务调用方法的另一示例性的实现流程图。如图6所示,该方法包括:

在步骤S601中,在接收到调用服务的请求的情况下,判断该服务的可用性参数是否为可用,若是,则执行步骤S602,否则执行步骤S603。

在步骤S602中,调用该服务,并获取该服务的响应结果。

在步骤S603中,在可用性参数为不可用的情况下,判断该请求是否需要对该服务进行探测,若是,则执行步骤S602,否则执行步骤S604。

在步骤S604中,调用该服务的备选数据和/或备选逻辑。

在步骤S605中,若该服务的响应结果为正常,则将该服务的最新调用状态(例如Status)更新为正常状态,否则将最新调用状态更新为异常状态。

作为本发明实施例的一个示例,根据服务的响应结果更新该服务的最新调用状态。若该服务的最新调用状态为异常状态,则该服务的最新调用状态还可以包括异常原因的标识。

图7示出根据本发明一实施例的服务调用方法的另一示例性的实现流程图。如图7所示,该方法包括:

在步骤S701中,在接收到调用服务的请求的情况下,判断该服务的可用性参数是否为可用,若是,则执行步骤S702,否则执行步骤S703。

在步骤S702中,调用该服务,并获取该服务的响应结果。

在步骤S703中,判断该请求是否需要对该服务进行探测,若是,则执行步骤S702,否则执行步骤S704。

在步骤S704中,调用所述服务的备选数据和/或备选逻辑。

在步骤S705中,在当前系统时间与该服务的检测时间戳之间的时间间隔大于或等于第一预设值,且调用总次数大于或等于第二预设值的情况下,根据调用失败次数更新可用性参数。

在步骤S706中,若该服务的响应结果为正常,则将该服务的最新调用状态更新为正常状态,否则将最新调用状态更新为异常状态。

在步骤S707中,将该服务的最新调用状态反馈给用户。

作为本发明实施例的一个示例,可以统计各个服务的最新调用状态,并通过合适的数据结构进行包装,在最后的响应中返回给用户,以使用户以及开发、测试和运维人员都能直观清楚地了解到出现异常的服务以及异常原因,由此能够直观了解到应用质量下降的原因,从而能快速定位分布式应用系统中的异常服务和环节,并能够评估该异常所造成的影响。

这样,通过在接收到调用服务的请求的情况下,获取该服务的可用性参数,在可用性参数为可用的情况下,则调用该服务,并获取该服务的响应结果,在可用性参数为不可用的情况下,执行备选操作,根据本发明实施例的服务调用方法能够在服务出现异常时,降低分布式应用系统对该服务的依赖性,从而能够提高分布式应用系统的稳定性和可靠性。

实施例2

图8示出根据本发明另一实施例的服务调用装置的结构框图。该装置可以用于运行图1所示的服务调用方法。为了便于说明,在图8中仅示出了与本发明实施例相关的部分。

如图8所示,该服务调用装置包括:可用性参数获取模块81,用于在接收到调用服务的请求的情况下,获取所述服务的可用性参数;服务调用模块82,用于在所述可用性参数为可用的情况下,调用所述服务,并获取所述服务的响应结果;备选操作执行模块83,用于在所述可用性参数为不可用的情况下,执行备选操作。

图9示出根据本发明另一实施例的服务调用装置的一示例性的结构框图,该装置可以用于运行图1至图8所示的服务调用方法。为了便于说明,在图9中仅示出了与本发明实施例相关的部分。图9中标号与图8相同的组件具有相同的功能,为简明起见,省略对这些组件的详细说明。如图9所示:

在一种可能的实现方式中,所述备选操作执行模块83包括:探测判断子模块831,用于在所述可用性参数为不可用的情况下,判断所述请求是否需要对所述服务进行探测;服务调用子模块832,用于若判定需要对所述服务进行探测,则调用所述服务,并获取所述服务的响应结果;备选调用子模块833,用于若判定不需要对所述服务进行探测,则调用所述服务的备选数据和/或备选逻辑。

在一种可能的实现方式中,所述探测判断子模块831具体用于:在所述可用性参数为不可用的情况下根据预先设定的探测流量比例设置第一区间,并根据所述探测流量比例在所述第一区间中设定第四预设值;为所述请求在所述第一区间中生成随机数,若所述随机数与第四预设值相同,则判定需要对所述服务进行探测,否则判定不需要对所述服务进行探测。

在一种可能的实现方式中,所述装置还包括:调用总次数累加模块84,用于将所述服务对应的调用总次数加1;调用失败次数累加模块85,用于若所述服务的响应结果为异常,则将所述服务对应的调用失败次数加1;可用性参数更新模块86,用于在当前系统时间与所述服务的检测时间戳之间的时间间隔大于或等于第一预设值,且所述调用总次数大于或等于第二预设值的情况下,根据所述调用失败次数更新所述可用性参数。

在一种可能的实现方式中,所述可用性参数更新模块86包括:第一可用性参数更新子模块861,用于在所述调用失败次数与所述调用总次数的比值大于或等于第三预设值的情况下,将所述可用性参数更新为不可用;第二可用性参数更新子模块862,用于在所述调用失败次数与所述调用总次数的比值小于所述第三预设值的情况下,将所述可用性参数更新为可用。

在一种可能的实现方式中,所述装置还包括:清零模块87,用于将所述检测时间戳更新为所述当前系统时间,并将所述调用总次数和所述调用失败次数清零。

在一种可能的实现方式中,所述装置还包括:最新调用状态更新模块98,用于若所述服务的响应结果为正常,则将所述服务的最新调用状态更新为正常状态,否则将所述最新调用状态更新为异常状态。

需要说明的是,这样,通过在接收到调用服务的请求的情况下,获取该服务的可用性参数,在可用性参数为可用的情况下,则调用该服务,并获取该服务的响应结果,在可用性参数为不可用的情况下,执行备选操作,根据本发明实施例的服务调用装置能够在服务出现异常时,降低分布式应用系统对该服务的依赖性,从而能够提高分布式应用系统的稳定性和可靠性。

实施例3

图10示出了本发明的另一个实施例的一种服务调用设备的结构框图。所述服务调用设备1100可以是具备计算能力的主机服务器、个人计算机PC、或者可携带的便携式计算机或终端等。本发明具体实施例并不对计算节点的具体实现做限定。

所述服务调用设备1100包括处理器(processor)1110、通信接口(Communications Interface)1120、存储器(memory)1130和总线1140。其中,处理器1110、通信接口1120、以及存储器1130通过总线1140完成相互间的通信。

通信接口1120用于与网络设备通信,其中网络设备包括例如虚拟机管理中心、共享存储等。

处理器1110用于执行程序。处理器1110可能是一个中央处理器CPU,或者是专用集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。

存储器1130用于存放文件。存储器1130可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1130也可以是存储器阵列。存储器1130还可能被分块,并且所述块可按一定的规则组合成虚拟卷。

在一种可能的实施方式中,上述程序可为包括计算机操作指令的程序代码。该程序具体可用于:实现实施例1中各步骤的操作。

本领域普通技术人员可以意识到,本文所描述的实施例中的各示例性单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件形式来实现,取决于技术方案的特定应用和设计约束条件。专业技术人员可以针对特定的应用选择不同的方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

如果以计算机软件的形式来实现所述功能并作为独立的产品销售或使用时,则在一定程度上可认为本发明的技术方案的全部或部分(例如对现有技术做出贡献的部分)是以计算机软件产品的形式体现的。该计算机软件产品通常存储在计算机可读取的非易失性存储介质中,包括若干指令用以使得计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各实施例方法的全部或部分步骤。而前述的存储介质包括U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1