CN103731312A - 对远程方法调用的服务进行故障检查的方法和装置 - Google Patents
对远程方法调用的服务进行故障检查的方法和装置 Download PDFInfo
- Publication number
- CN103731312A CN103731312A CN201410037532.2A CN201410037532A CN103731312A CN 103731312 A CN103731312 A CN 103731312A CN 201410037532 A CN201410037532 A CN 201410037532A CN 103731312 A CN103731312 A CN 103731312A
- Authority
- CN
- China
- Prior art keywords
- service
- client
- request
- zookeeper
- interim node
- 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
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明实施例公开了一种对远程方法调用的服务进行故障诊断的方法和装置。所述方法包括:客户端与Zookeeper服务集群进行连接,服务端提供的服务在Zookeeper服务集群上创建了归属于自己的临时节点;客户端向Zookeeper服务集群发起监听该服务的临时节点的请求,该请求用于触发Zookeeper服务集群在删除该服务的临时节点时,将删除事件通知给客户端;当客户端获得删除事件时,确定该服务在当前出现故障,当客户端没有获得删除事件时,确定该服务在当前没有出现故障。根据本发明实施例,使客户端感知到其请求的服务是否出现了故障,进一步的,当客户端感知到其请求的服务出现故障时,针对请求失败的情况采取一系列的容灾处理措施,还可以提高了服务的稳定性和可靠性。
Description
技术领域
本发明涉及分布式***领域,特别是涉及对远程方法调用的服务进行故障检查的方法和装置。
背景技术
Java远程方法调用(Java RMI,Java Remote Method Invocation)是Java编程语言里,一种用于实现远程方法调用的应用程序编程接口,它使客户端上运行的程序可以调用远程服务端上的对象(或者称为“服务”)。远程方法调用特性使Java编程人员能够在网络环境中分布操作。
当客户端通过Java RMI请求服务端的服务时,由于各种不确定因素,如,网络发生中断、服务端的机器发生故障、服务端的进程发生意外崩溃或服务端的负载压力过大等因素,将会导致服务端无法向客户端提供服务。而对于客户端而言,当由于各种不确定因素而使其无法从服务端得到某一个服务时,该服务相当于“出现故障”。
目前,在客户端与服务端之间,常采用企业服务总线(ESB,EnterpriseService Bus)技术,企业服务总线技术是传统的中间件技术与XML、Web服务等技术结合的产物,提供了网络中最基本的连接中枢,隔离客户端与服务端的技术差异,实现两者之间的无缝透明调用。但是,当客户端请求的服务因故障而无法调用时,服务端仅向客户端返回服务异常的响应。
因此,而对于客户端而言,并不会感知到其请求的某个服务已经出现了故障,也不会在某个服务出现故障时采取任何容灾处理措施。
发明内容
为了解决上述技术问题,本发明实施例提供了一种对远程方法调用的服务进行故障诊断的方法和装置,以使客户端感知到其请求的服务是否出现了故障,进一步的,在客户端感知到其请求的服务出现故障时,采取容灾处理措施,提高了服务的稳定性和可靠性。
本发明实施例公开了如下技术方案:
一种对远程方法调用的服务进行故障诊断的方法,包括:
客户端与Zookeeper服务集群进行连接,其中,服务端提供的服务在所述Zookeeper服务集群上创建了归属于自己的临时节点;
客户端向所述Zookeeper服务集群发起监听所述服务的临时节点的请求,所述请求用于触发所述Zookeeper服务集群在删除所述服务的临时节点时,将删除所述服务的临时节点的事件通知给所述客户端;
当客户端获得删除所述服务的临时节点的事件时,确定所述服务在当前出现故障,当客户端没有获得删除所述服务的临时节点的事件时,确定所述服务在当前没有出现故障。
优选的,所述请求还用于触发所述Zookeeper服务集群在重新创建已被删除的所述服务的临时节点时,将重新创建所述服务的临时节点的事件通知给所述客户端,所述方法还包括:
在客户端获得所述Zookeeper服务集群通知的删除所述服务的临时节点的事件之后,当客户端获得所述Zookeeper服务集群通知的重新创建所述服务的临时节点的事件之后,确定所述服务在当前没有出现故障。
优选的,还包括:
当确定所述服务在当前没有出现故障时,如果客户端向服务端请求所述服务,并且对所述服务的请求失败,客户端重新向服务端请求所述服务,直到对所述服务的请求成功为止。
进一步优选的,还包括:
在每次重新请求所述服务之前,客户端统计请求所述服务的连续失败的次数,并判断连续失败的次数是否大于或等于第一预设阈值;
如果连续失败的次数大于或等于第一预设阈值,客户端停止向服务端请求所述服务,而是从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务,并向服务端请求所选择的服务;
则所述客户端重新向服务端请求所述服务具体为:
如果连续失败的次数小于第一预设阈值,客户端重新向服务端请求所述服务。
优选的,还包括:
当确定所述服务在当前出现故障时,客户端不向服务端请求所述服务,而是从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务,并向服务端请求所选择的服务。
进一步优选的,所述从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务包括:
根据服务的预置权重,从与所述服务具有相同功能且在当前没有出现故障的其它服务中选择预置权重最大的服务。
进一步优选的,还包括:
每当请求所述服务的连续失败的次数大于或等于第一预设阈值时,记为一轮请求失败,客户端统计连续请求失败的轮数,并判断连续请求失败的轮数是否大于或等于第二预设阈值,或者,客户端统计请求失败的总轮数,并判断请求失败的总轮数是否大于或等于第三预设阈值;
如果连续请求失败的轮数大于或等于第二预设阈值,或者,请求失败的总轮数大于或等于第三预设阈值,客户端在预设时间段内停止向服务端请求所述服务。
一种对远程方法调用的服务进行故障诊断的装置,位于客户端,包括:
连接单元,用于与Zookeeper服务集群进行连接,其中,服务端提供的服务在所述Zookeeper服务集群上创建了归属于自己的临时节点;
监听请求单元,用于向所述Zookeeper服务集群发起监听所述服务的临时节点的请求,所述请求用于触发所述Zookeeper服务集群在删除所述服务的临时节点时,将删除所述服务的临时节点的事件通知给所述客户端;
故障诊断单元,用于当获得删除所述服务的临时节点的事件时,确定所述服务在当前出现故障,当没有获得删除所述服务的临时节点的事件时,确定所述服务在当前没有出现故障。
优选的,所述请求还用于触发所述Zookeeper服务集群在重新创建已被删除的所述服务的临时节点时,将重新创建所述服务的临时节点的事件通知给所述客户端,
所述故障诊断单元还用于,在客户端获得所述Zookeeper服务集群通知的删除所述服务的临时节点的事件之后,当获得所述Zookeeper服务集群通知的重新创建所述服务的临时节点的事件之后,确定所述服务在当前没有出现故障。
优选的,还包括:
重试单元,用于当确定所述服务在当前没有出现故障时,如果向所述服务端请求所述服务,并且所述服务的请求失败,重新向服务端请求所述服务,直到对所述服务的请求成功为止。
优选的,还包括:
第一分析单元,用于在每次重新请求所述服务之前,统计请求所述服务的连续失败的次数,并判断连续失败的次数是否大于或等于第一预设阈值;
跳转单元,用于如果连续失败的次数大于或等于第一预设阈值,停止向服务端请求所述服务,而是从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务,并向服务端请求所选择的服务;
则所述重试单元具体用于,如果连续失败的次数小于第一预设阈值,重新向服务端请求所述服务。
优选的,还包括:
第二分析单元,用于每当请求一个服务的连续失败的次数大于或等于第一预设阈值时,记为一轮请求失败,客户端统计连续请求失败的轮数,并判断连续请求失败的轮数是否大于或等于第二预设阈值,或者,客户端统计请求失败的总轮数,并判断请求失败的总轮数是否大于或等于第三预设阈值;
屏蔽单元,用于如果连续请求失败的轮数大于或等于第二预设阈值,或者,请求失败的总轮数大于或等于第三预设阈值,客户端在预设时间段内停止向服务端请求所述服务。
由上述实施例可以看出,与现有技术相比,本发明的优点在于:
利用Zookeeper服务集群的上述工作机制,让Zookeeper服务集群帮助客户端监听临时节点,当临时节点被删除时,Zookeeper服务集群将删除该临时节点的事件通知给客户端。客户端就可以根据是否接收到删除某一个服务的临时节点的事件来确定该服务是否出现故障。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种对远程方法调用的服务进行故障诊断的方法的流程图;
图2为本发明实施例提供的一种对远程方法调用的服务进行容灾处理的方法的流程图;
图3为本发明实施例提供的另一种对远程方法调用的服务进行容灾处理的方法的流程图;
图4为本发明实施例提供的一种对远程调用的服务进行故障诊断的装置的结构图;
图5为本发明实施例提供的一种对远程调用的服务进行容灾处理的装置的结构图;
图6为本发明实施例提供的另一种对远程调用的服务进行容灾处理的装置的结构图;
图7为本发明实施例提供的另一种对远程调用的服务进行容灾处理的装置的结构图。
具体实施方式
本发明实施例提供了对远程方法调用的服务进行故障诊断的方法和装置。Zookeeper服务集群是一个针对大型分布式***的可靠性进行协调的***,它能封装关键服务,并性能高效、功能稳定的***提供给用户。对应Zookeeper服务集群而言,其本身具有如下工作机制:Zookeeper服务集群上存在一种节点为临时节点,临时节点仅在创建该临时节点的服务运行时存在,一旦发现创建该临时节点的服务不运行,Zookeeper服务集群就会删除该临时节点。也就是说,一个服务的临时节点存在与否,可以表明该服务是否运行,即,表明该服务是否出现故障。本发明技术方案的核心在于,利用Zookeeper服务集群的上述工作机制,让Zookeeper服务集群帮助客户端监听临时节点,当临时节点被删除时,Zookeeper服务集群将删除该临时节点的事件通知给客户端,当删除的临时节点被重新创建时,Zookeeper服务集群还会将重新创建该临时节点的事件通知给客户端。客户端就可以根据获得的事件来确定该服务在当前是否出现故障。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例进行详细描述。
实施例一
请参阅图1,其为本发明实施例提供的一种对远程方法调用的服务进行故障诊断的方法的流程图,该方法包括以下步骤:
步骤101:客户端与Zookeeper服务集群进行连接,其中,服务端提供的服务在所述Zookeeper服务集群上创建了归属于自己的临时节点;
服务端提供给客户端的每个服务在运行的初始化阶段,会在Zookeeper服务集群上建立一个归属于自己的临时节点,并用该服务的标识名为该临时节点进行命名。每个服务的标识名即为提供该服务的服务端的IP地址+该服务的端口号。
步骤102:客户端向所述Zookeeper服务集群发起监听所述服务的临时节点的请求,所述请求用于触发所述Zookeeper服务集群在删除所述服务的临时节点时,将删除所述服务的临时节点的事件通知给所述客户端;
用户在服务管理中心上配置服务列表,将具有相同功能的所有服务维护在同一个服务列表中,即,在同一个服务列表中记录具有相同功能的所有服务的标识名。例如,在一个服务列表中记录所有A功能服务的标识名。服务管理中心将配置好的服务列表主动推送给Zookeeper服务集群,Zookeeper服务集群建立持久节点,并利用持久节点保存各服务列表中的数据(即,具有相同功能的所有服务的标识名)。例如,可以利用一个持久节点保存一个服务列表中的数据。
使用持久节点保存数据的优势在于,一旦客户端与Zookeeper服务集群之间中断了连接,数据仍然保存在Zookeeper服务集群上,而并不会消失。
当客户端向Zookeeper服务集群请求具有某一功能的所有服务的标识名时,作为响应,Zookeeper服务集群就会将某一个持久节点中保存的具有该功能的所有服务的标识名发送给客户端。因此,在客户端上,也缓存有与服务管理中心相同的服务列表。通过该服务列表,客户端还可以进行容灾处理。而客户端根据该服务列表进行容灾处理的过程将在后续进行说明。例如,如果所有服务端可以提供100个具有A功能的服务,在客户端的一个服务列表中就会相应地记录有这100个服务的标识名。当然,如果这100个服务都在运行,在Zookeeper服务集群上也会设有这100个服务的临时节点。
另外,服务管理中心还可以通过Zookeeper服务集群将更新的内容推送给客户端。
当客户端请求Zookeeper服务集群监听具有某一功能的所有服务的对应临时节点时,就将获得的所有服务的标识名发送给Zookeeper服务集群,Zookeeper服务集群根据所有服务的标识就可以确定需要监听的临时节点为哪些临时节点,进而对这些临时节点进行监听。
作为Zookeeper服务集群的一个工作机制,临时节点仅在创建该临时节点的服务运行时存在,一旦发现创建该临时节点的服务不运行,Zookeeper服务集群就会删除该临时节点。其中,Zookeeper服务集群会定期检查是否接收到了创建该临时节点的服务的心跳,如果Zookeeper服务集群接收不到该服务的心跳,即认为该服务不运行,然后自动删除该服务的临时节点。之后,如果Zookeeper服务集群又接收到了该服务的心跳,即认为该服务运行,然后再自动重新创建该服务的临时节点。
在本发明中,Zookeeper服务集群除了可以在删除某一个服务的临时节点时通知客户端之外,还可以在重新创建某一个服务的临时节点(该临时节点之前被删除了)时通知客户端。
步骤103:当客户端获得删除所述服务的临时节点的事件时,确定所述服务在当前出现故障,当客户端没有获得删除所述服务的临时节点的事件时,确定所述服务在当前没有出现故障。
当Zookeeper服务集群通知客户端某一个临时节点的删除事件时,就会将该临时节点的名字(即,创建该临时节点的服务的标识名)发送给客户端,客户端会将服务列表中相应的标识名删除。这样,在该服务列表中记录的就是所有存活的服务的标识名,即,记录的是所有没有出现故障的服务的标识名。根据该服务列表的内容,客户端即可确定哪些服务已经出现故障,哪些服务没有出现故障。当然,Zookeeper服务集群还可以在重新创建已被删除的服务的临时节点时,将重新创建该服务的临时节点的事件通知给客户端,客户端还会在服务列表中重新创建该服务的标识名。
而针对在当前出现故障的服务,客户端就可以不向服务端请求该服务,从与该服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务,并向服务端请求所选择的服务。由上述实施例可以看出,与现有技术相比,本发明的优点在于:
利用Zookeeper服务集群的上述工作机制,让Zookeeper服务集群帮助客户端监听临时节点,当临时节点被删除时,Zookeeper服务集群将删除该临时节点的事件通知给客户端。客户端就可以根据是否接收到删除某一个服务的临时节点的事件来确定该服务是否出现故障。
实施例二
本实施例二与实施例一的区别在于,在客户端根据是否接收到删除某一个服务的临时节点的事件可以确定该服务在当前是否出现故障后,针对在当前没有出现故障的服务,如果向服务端请求该服务,且对该服务的请求失败,客户端可以进一步重新向服务端请求该服务,直到对该服务的请求成功为止,以通过不断重试的方式实现服务的容灾处理。请参阅图2,其为本发明实施例提供的一种对远程方法调用的服务进行容灾处理的方法的流程图,该方法包括以下步骤:
步骤201:客户端与Zookeeper服务集群进行连接,其中,服务端提供的服务在所述Zookeeper服务集群上创建了归属于自己的临时节点;
步骤202:客户端向所述Zookeeper服务集群发起监听所述服务的临时节点的请求,所述请求用于触发所述Zookeeper服务集群在删除所述服务的临时节点时,将删除所述服务的临时节点的事件通知给所述客户端;
步骤203:当客户端获得删除所述服务的临时节点的事件时,确定所述服务在当前出现故障,当客户端没有获得的删除所述服务的临时节点的事件时,确定所述服务在当前没有出现故障;
上述步骤201-203的具体执行过程可以参见实施例一中的步骤101-103,此处不再赘述。
当确定所述服务在当前没有出现故障时,如果向服务端请求所述服务,并且对所述服务的请求失败,客户端继续执行以下步骤:
步骤204:客户端统计请求所述服务的连续失败的次数。
步骤205:客户端判断连续失败的次数是否大于或等于第一预设阈值,如果否,进入步骤206,如果是,进入步骤207;
步骤206:客户端重新向服务端请求所述服务,如果请求失败,返回步骤204,如果请求成功,结束流程;
步骤207:客户端停止向服务端请求所述服务,从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务,并向服务端请求所选择的服务,结束流程。
在客户端上维护有最新的服务列表,在每个最新的服务列表中记录有具有相同功能的所有在当前没有出现故障的服务的标识名。根据最近的服务列表中的记录,客户端就可以知道在与请求失败的服务具有相同功能的其它服务中,哪些服务是在当前没有出现故障的,并从中任意选择一个向服务端发起请求。
一种更优选的方式是,为每个服务预先设置一个权重,在服务管理中心维护的每个服务列表中记录有服务的预设权重。相应的,在Zookeeper服务集群的每个持久节点中也记录有服务的预设权重。这样,在客户端维护的每个服务列表中也就记录有服务的预设权重,客户端可以根据每个服务的预设权重,从与请求失败的服务具有相同功能且在当前没有出现故障的其它服务中,选择权重最大的服务。
需要说明的是,本发明的技术方案对权重的设置方式不做具体限定。但是,考虑到服务端的负载均衡问题,可以根据服务端运行的服务的数量或服务端的处理能力等因素为服务设置权重。服务端运行的服务的数量越多,服务的权重越小,反之,服务的权重越大。服务端的处理能力越快,服务的权重越大,反之,服务的权重越小。
如果选择的第二个服务的请求也失败,客户端还可以重新请求第二个服务,当第二个服务的请求的总次数大于或等于预设阈值时,如果第二个服务的请求仍然没有成功,再选择第三个服务,并重新请求第三个服务…..依次类推,直到有一个服务的请求成功为止。
由上述实施例可以看出,与现有技术相比,本发明的优点在于:
当客户端可以感知哪些服务没有出现故障,哪些服务出现故障之后,针对没有出现故障的服务,一旦该服务的请求失败,客户端就可以通过重新向服务端请求该服务的方式,对该服务进行容灾处理。如果请求的次数达到一定阈值,还可以向服务端请求功能相同的其它服务。从而提高了该服务的稳定性和可靠性。
实施例三
在实施例二所示的技术方案的基础上,除了通过重试和跳转到其它服务实现容灾处理之外,本实施例三将可以进一步通过屏蔽服务的方式实现容灾处理。请参阅图3,其为本发明实施例提供的另一种对远程方法调用的服务进行容灾处理的方法的流程图,该方法包括以下步骤:
步骤301:客户端与Zookeeper服务集群进行连接,其中,服务端提供的服务在所述Zookeeper服务集群上创建了归属于自己的临时节点;
步骤302:客户端向所述Zookeeper服务集群发起监听所述服务的临时节点的请求,所述请求用户触发所述Zookeeper服务集群在删除所述服务的临时节点时,将删除所述服务的临时节点的事件通知给所述客户端;
步骤303:当客户端获得删除所述服务的临时节点的事件时,确定所述服务在当前出现故障,当客户端没有获得删除所述服务的临时节点的事件时,确定所述服务在当前没有出现故障;
上述步骤301-303的具体执行过程可以参见实施例一中的步骤101-103,此处不再赘述。
当确定所述服务在当前没有出现故障时,如果向服务端请求所述服务,并且所述服务的请求失败,客户端继续执行以下步骤:
步骤304:客户端统计请求所述服务的连续失败的次数;
步骤305:客户端判断连续失败的次数是否大于或等于第一预设阈值,如果否,进入步骤306,如果是,进入步骤307;
步骤306:客户端重新向服务端请求所述服务,如果请求失败,返回步骤304,如果请求成功,结束流程;
步骤307:记为一轮请求失败,同时,客户端停止向服务端请求所述服务,而是从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务,并向服务端请求所选择的服务;
步骤308:客户端统计连续请求失败的轮数;
在本步骤中,除了可以统计连续请求失败的轮数之外,作为替换方式,客户端也可以统计请求失败的总轮数。
当第一预设阈值为m时,第二预设阈值可以为n。
步骤309:客户端判断连续请求失败的轮数是否大于或等于第二预设阈值,如果是,进入步骤310,否则,返回步骤304;
或者,客户端判断请求失败的总轮数是否大于或等于第三预设阈值,如果是,进入步骤310,否则,返回步骤304。
步骤310:客户端在预设时间段内停止向客户端请求所述服务(相当于将所述服务进行屏蔽),并将统计的连续失败的次数清零。
例如,客户端可以先将该服务的标识名从相应的服务列表中删除出去,在预设时间段过后,在将该服务的标识名恢复到相应的服务列表中。
另外,在预设时间段内,客户端还可以从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务,并向选择的该服务发起请求。
在预设时间段过后,客户端还可以继续向该服务发起请求,并执行步骤304-310。
一种极端的情况是,如果与所述服务具有相同功能的其它服务全部都被屏蔽,即,服务列表中的所有服务都被屏蔽,此时,客户端可以重复向服务端请求该服务列表中的第一服务,待维护人员恢复第一服务后,对第一服务的请求就可以成功。
在一种优选的实施方式中,可以将服务列表中的所有服务划分为备用服务和非备用服务,优先请求非备用服务,当非备用服务在当前出现故障时,和/或,当非备用服务都被屏蔽时,再请求备用服务。
由上述实施例可以看出,与现有技术相比,本发明的优点在于:
当客户端可以感知哪些服务没有出现故障,哪些服务出现故障之后,针对没有出现故障的服务,一旦该服务的请求失败,客户端就可以通过重新向服务端请求该服务的方式,对该服务进行容灾处理。如果请求的次数达到一定阈值,还可以先屏蔽该服务一段时间,在屏蔽的时间段内可以进一步请求功能相同的其它服务。从而提高了该服务的稳定性和可靠性。
实施例四
与上述一种对远程调用的服务进行故障诊断的方法相对应,本发明实施例还提供了一种对远程调用的服务进行故障诊断的装置。请参阅图4,其为本发明实施例提供的一种对远程调用的服务进行故障诊断的装置的结构图,该故障诊断装置位于客户端,包括:连接单元401、监听请求单元402和故障诊断单元403。下面结合该装置的工作原理进一步介绍其内部结构以及连接关系。
连接单元401,用于与Zookeeper服务集群进行连接,其中,服务端提供的服务在所述Zookeeper服务集群上创建了归属于自己的临时节点;
监听请求单元402,用于向所述Zookeeper服务集群发起监听所述服务的临时节点的请求,所述请求用于触发所述Zookeeper服务集群在删除所述服务的临时节点时,将删除所述服务的临时节点的事件通知给所述客户端;
故障诊断单元403,用于当获得删除所述服务的临时节点的事件时,确定所述服务在当前出现故障,当没有获得删除所述服务的临时节点的事件时,确定所述服务在当前没有出现故障。
优选的,所述请求还用于触发所述Zookeeper服务集群在重新创建已被删除的所述服务的临时节点时,将重新创建所述服务的临时节点的事件通知给所述客户端,故障诊断单元403还用于,在客户端获得所述Zookeeper服务集群通知的删除所述服务的临时节点的事件之后,当获得所述Zookeeper服务集群通知的重新创建所述服务的临时节点的事件之后,确定所述服务在当前没有出现故障。
优选的,如图5所示,其为本发明实施例提供的一种对远程调用的服务进行容灾处理的装置的结构图,该装置在图4所示的结构基础上,还包括:
重试单元404,用于当确定所述服务在当前没有出现故障时,如果向所述服务端请求所述服务,并且所述服务的请求失败,重新向服务端请求所述服务,直到对所述服务的请求成功为止。
进一步优选的,如图6所示,该容灾处理装置还包括:
第一分析单元405a,用于在每次重新请求所述服务之前,统计请求所述服务的连续失败的次数,并判断连续失败的次数是否大于或等于第一预设阈值;
跳转单元406a,用于如果连续失败的次数大于或等于第一预设阈值,停止向服务端请求所述服务,而是从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务,并向服务端请求所选择的服务;
则所述重试单元404a具体用于,如果连续失败的次数小于第一预设阈值,重新向服务端请求所述服务。
或者,进一步优选的,如图7所示,该容灾处理装置还包括:
第二分析单元405b,用于每当请求一个服务的连续失败的次数大于或等于第一预设阈值时,记为一轮请求失败,客户端统计连续请求失败的轮数,并判断连续请求失败的轮数是否大于或等于第二预设阈值,或者,客户端统计请求失败的总轮数,并判断请求失败的总轮数是否大于或等于第三预设阈值;
屏蔽单元406b,用于如果连续请求失败的轮数大于或等于第二预设阈值,或者,请求失败的总轮数大于或等于第三预设阈值,客户端在预设时间段内停止向服务端请求所述服务。
优选的,当确定所述服务在当前出现故障时,客户端不向服务端请求所述服务,从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务,并向服务端请求所选择的服务。
进一步优选的,所述从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务包括:
根据服务的预置权重,从与所述服务具有相同功能且在当前没有出现故障的其它服务中选择预置权重最大的服务。
由上述实施例可以看出,
利用Zookeeper服务集群的上述工作机制,让Zookeeper服务集群帮助客户端监听临时节点,当临时节点被删除时,Zookeeper服务集群将删除该临时节点的事件通知给客户端。客户端就可以根据是否接收到删除某一个服务的临时节点的事件来确定该服务是否出现故障。
当客户端可以感知哪些服务没有出现故障,哪些服务出现故障之后,针对没有出现故障的服务,一旦该服务的请求失败,客户端就可以通过重新向服务端请求该服务的方式,对该服务进行容灾处理。如果请求的次数达到一定阈值,还可以向服务端请求功能相同的其它服务。或者,如果请求的次数达到一定阈值,还可以先屏蔽该服务一段时间,在屏蔽的时间段内可以进一步请求功能相同的其它服务。从而提高了该服务的稳定性和可靠性。
所述领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的***、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本发明所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。例如,以上所描述到的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,可以采用软件功能单元的形式实现。
需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上对本发明所提供的对远程方法调用的服务进行故障诊断的方法和装置进行了详细介绍,本文中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1.一种对远程方法调用的服务进行故障诊断的方法,其特征在于,包括:
客户端与Zookeeper服务集群进行连接,其中,服务端提供的服务在所述Zookeeper服务集群上创建了归属于自己的临时节点;
客户端向所述Zookeeper服务集群发起监听所述服务的临时节点的请求,所述请求用于触发所述Zookeeper服务集群在删除所述服务的临时节点时,将删除所述服务的临时节点的事件通知给所述客户端;
当客户端获得删除所述服务的临时节点的事件时,确定所述服务在当前出现故障,当客户端没有获得删除所述服务的临时节点的事件时,确定所述服务在当前没有出现故障。
2.根据权利要求1所述的方法,其特征在于,所述请求还用于触发所述Zookeeper服务集群在重新创建已被删除的所述服务的临时节点时,将重新创建所述服务的临时节点的事件通知给所述客户端,所述方法还包括:
在客户端获得所述Zookeeper服务集群通知的删除所述服务的临时节点的事件之后,当客户端获得所述Zookeeper服务集群通知的重新创建所述服务的临时节点的事件之后,确定所述服务在当前没有出现故障。
3.根据权利要求1所述的方法,其特征在于,还包括:
当确定所述服务在当前没有出现故障时,如果客户端向服务端请求所述服务,并且对所述服务的请求失败,客户端重新向服务端请求所述服务,直到对所述服务的请求成功为止。
4.根据权利要求3所述的方法,其特征在于,还包括:
在每次重新请求所述服务之前,客户端统计请求所述服务的连续失败的次数,并判断连续失败的次数是否大于或等于第一预设阈值;
如果连续失败的次数大于或等于第一预设阈值,客户端停止向服务端请求所述服务,而是从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务,并向服务端请求所选择的服务;
则所述客户端重新向服务端请求所述服务具体为:
如果连续失败的次数小于第一预设阈值,客户端重新向服务端请求所述服务。
5.根据权利要求1所述的方法,其特征在于,还包括:
当确定所述服务在当前出现故障时,客户端不向服务端请求所述服务,而是从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务,并向服务端请求所选择的服务。
6.根据权利要求4或5所述的方法,其特征在于,所述从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务包括:
根据服务的预置权重,从与所述服务具有相同功能且在当前没有出现故障的其它服务中选择预置权重最大的服务。
7.根据权利要求4所述的方法,其特征在于,还包括:
每当请求所述服务的连续失败的次数大于或等于第一预设阈值时,记为一轮请求失败,客户端统计连续请求失败的轮数,并判断连续请求失败的轮数是否大于或等于第二预设阈值,或者,客户端统计请求失败的总轮数,并判断请求失败的总轮数是否大于或等于第三预设阈值;
如果连续请求失败的轮数大于或等于第二预设阈值,或者,请求失败的总轮数大于或等于第三预设阈值,客户端在预设时间段内停止向服务端请求所述服务。
8.一种对远程方法调用的服务进行故障诊断的装置,其特征在于,位于客户端,包括:
连接单元,用于与Zookeeper服务集群进行连接,其中,服务端提供的服务在所述Zookeeper服务集群上创建了归属于自己的临时节点;
监听请求单元,用于向所述Zookeeper服务集群发起监听所述服务的临时节点的请求,所述请求用于触发所述Zookeeper服务集群在删除所述服务的临时节点时,将删除所述服务的临时节点的事件通知给所述客户端;
故障诊断单元,用于当获得删除所述服务的临时节点的事件时,确定所述服务在当前出现故障,当没有获得删除所述服务的临时节点的事件时,确定所述服务在当前没有出现故障。
9.根据权利要求8所述的装置,其特征在于,所述请求还用于触发所述Zookeeper服务集群在重新创建已被删除的所述服务的临时节点时,将重新创建所述服务的临时节点的事件通知给所述客户端,
所述故障诊断单元还用于,在客户端获得所述Zookeeper服务集群通知的删除所述服务的临时节点的事件之后,当获得所述Zookeeper服务集群通知的重新创建所述服务的临时节点的事件之后,确定所述服务在当前没有出现故障。
10.根据权利要求8所述的装置,其特征在于,还包括:
重试单元,用于当确定所述服务在当前没有出现故障时,如果向所述服务端请求所述服务,并且所述服务的请求失败,重新向服务端请求所述服务,直到对所述服务的请求成功为止。
11.根据权利要求10所述的装置,其特征在于,还包括:
第一分析单元,用于在每次重新请求所述服务之前,统计请求所述服务的连续失败的次数,并判断连续失败的次数是否大于或等于第一预设阈值;
跳转单元,用于如果连续失败的次数大于或等于第一预设阈值,停止向服务端请求所述服务,而是从与所述服务具有相同功能的其它服务中选择一个在当前没有出现故障的服务,并向服务端请求所选择的服务;
则所述重试单元具体用于,如果连续失败的次数小于第一预设阈值,重新向服务端请求所述服务。
12.根据权利要求11所述的装置,其特征在于,还包括:
第二分析单元,用于每当请求一个服务的连续失败的次数大于或等于第一预设阈值时,记为一轮请求失败,客户端统计连续请求失败的轮数,并判断连续请求失败的轮数是否大于或等于第二预设阈值,或者,客户端统计请求失败的总轮数,并判断请求失败的总轮数是否大于或等于第三预设阈值;
屏蔽单元,用于如果连续请求失败的轮数大于或等于第二预设阈值,或者,请求失败的总轮数大于或等于第三预设阈值,客户端在预设时间段内停止向服务端请求所述服务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410037532.2A CN103731312A (zh) | 2014-01-26 | 2014-01-26 | 对远程方法调用的服务进行故障检查的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410037532.2A CN103731312A (zh) | 2014-01-26 | 2014-01-26 | 对远程方法调用的服务进行故障检查的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103731312A true CN103731312A (zh) | 2014-04-16 |
Family
ID=50455247
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410037532.2A Pending CN103731312A (zh) | 2014-01-26 | 2014-01-26 | 对远程方法调用的服务进行故障检查的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103731312A (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104092591A (zh) * | 2014-08-04 | 2014-10-08 | 飞狐信息技术(天津)有限公司 | 一种任务监控方法及*** |
CN105005469A (zh) * | 2015-06-03 | 2015-10-28 | 浙江大学 | 一种基于Zookeeper和RabbitMQ的非阻塞调用方法 |
CN105391683A (zh) * | 2015-09-30 | 2016-03-09 | 小米科技有限责任公司 | 远程方法调用的方法、装置及*** |
CN106059843A (zh) * | 2016-08-16 | 2016-10-26 | 深圳市华成峰数据技术有限公司 | 一种基于Zookeeper 的节点配置***及方法 |
CN106250247A (zh) * | 2016-07-26 | 2016-12-21 | 浪潮电子信息产业股份有限公司 | 一种基于RMI和ZooKeeper实现远程调用框架的方法 |
CN107465756A (zh) * | 2017-08-24 | 2017-12-12 | 北京奇艺世纪科技有限公司 | 一种服务请求处理的方法和装置 |
CN107592229A (zh) * | 2017-09-22 | 2018-01-16 | 银联商务股份有限公司 | 一种服务调用方法、装置及*** |
CN107645476A (zh) * | 2016-07-22 | 2018-01-30 | 百度在线网络技术(北京)有限公司 | 请求处理方法和装置 |
CN104092591B (zh) * | 2014-08-04 | 2018-02-09 | 飞狐信息技术(天津)有限公司 | 一种任务监控方法及*** |
CN108108266A (zh) * | 2016-11-24 | 2018-06-01 | 腾讯科技(深圳)有限公司 | 容灾方法、装置及服务器 |
CN108366086A (zh) * | 2017-12-25 | 2018-08-03 | 聚好看科技股份有限公司 | 一种控制业务处理的方法及装置 |
CN109936613A (zh) * | 2017-12-19 | 2019-06-25 | 北京京东尚科信息技术有限公司 | 应用于服务器的容灾方法和装置 |
CN110278227A (zh) * | 2018-03-15 | 2019-09-24 | 阿里巴巴集团控股有限公司 | 服务处理方法、装置以及电子设备 |
CN110309016A (zh) * | 2019-06-13 | 2019-10-08 | 北京奇艺世纪科技有限公司 | 一种熔断恢复方法、装置及服务器 |
CN110858168A (zh) * | 2018-08-24 | 2020-03-03 | 浙江宇视科技有限公司 | 集群节点故障处理方法、装置及集群节点 |
CN111039115A (zh) * | 2018-10-15 | 2020-04-21 | 奥的斯电梯公司 | 用于监控电梯通信模块故障的方法、***以及电梯 |
CN113347263A (zh) * | 2021-06-11 | 2021-09-03 | 上海中通吉网络技术有限公司 | 消息集群管理方法和*** |
CN114116128A (zh) * | 2021-11-23 | 2022-03-01 | 北京字节跳动网络技术有限公司 | 容器实例的故障诊断方法、装置、设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080192626A1 (en) * | 2006-01-10 | 2008-08-14 | Huawei Technologies Co., Ltd. | Service failure recovery method and system |
CN102075380A (zh) * | 2010-12-16 | 2011-05-25 | 中兴通讯股份有限公司 | 一种服务器状态检测方法及装置 |
CN102710554A (zh) * | 2012-06-25 | 2012-10-03 | 深圳中兴网信科技有限公司 | 分布式消息***和分布式消息***的服务状态检测方法 |
CN102739775A (zh) * | 2012-05-29 | 2012-10-17 | 宁波东冠科技有限公司 | 物联网数据采集服务器集群的监控和管理方法 |
CN102932210A (zh) * | 2012-11-23 | 2013-02-13 | 北京搜狐新媒体信息技术有限公司 | 一种PaaS云平台的节点监控方法和*** |
CN103259688A (zh) * | 2013-06-04 | 2013-08-21 | 北京搜狐新媒体信息技术有限公司 | 一种分布式存储***的故障诊断方法与装置 |
-
2014
- 2014-01-26 CN CN201410037532.2A patent/CN103731312A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080192626A1 (en) * | 2006-01-10 | 2008-08-14 | Huawei Technologies Co., Ltd. | Service failure recovery method and system |
CN102075380A (zh) * | 2010-12-16 | 2011-05-25 | 中兴通讯股份有限公司 | 一种服务器状态检测方法及装置 |
CN102739775A (zh) * | 2012-05-29 | 2012-10-17 | 宁波东冠科技有限公司 | 物联网数据采集服务器集群的监控和管理方法 |
CN102710554A (zh) * | 2012-06-25 | 2012-10-03 | 深圳中兴网信科技有限公司 | 分布式消息***和分布式消息***的服务状态检测方法 |
CN102932210A (zh) * | 2012-11-23 | 2013-02-13 | 北京搜狐新媒体信息技术有限公司 | 一种PaaS云平台的节点监控方法和*** |
CN103259688A (zh) * | 2013-06-04 | 2013-08-21 | 北京搜狐新媒体信息技术有限公司 | 一种分布式存储***的故障诊断方法与装置 |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104092591A (zh) * | 2014-08-04 | 2014-10-08 | 飞狐信息技术(天津)有限公司 | 一种任务监控方法及*** |
CN104092591B (zh) * | 2014-08-04 | 2018-02-09 | 飞狐信息技术(天津)有限公司 | 一种任务监控方法及*** |
CN105005469A (zh) * | 2015-06-03 | 2015-10-28 | 浙江大学 | 一种基于Zookeeper和RabbitMQ的非阻塞调用方法 |
CN105005469B (zh) * | 2015-06-03 | 2018-04-13 | 浙江大学 | 一种基于Zookeeper和RabbitMQ的非阻塞调用方法 |
CN105391683A (zh) * | 2015-09-30 | 2016-03-09 | 小米科技有限责任公司 | 远程方法调用的方法、装置及*** |
CN107645476B (zh) * | 2016-07-22 | 2021-06-11 | 上海优扬新媒信息技术有限公司 | 请求处理方法和装置 |
CN107645476A (zh) * | 2016-07-22 | 2018-01-30 | 百度在线网络技术(北京)有限公司 | 请求处理方法和装置 |
CN106250247A (zh) * | 2016-07-26 | 2016-12-21 | 浪潮电子信息产业股份有限公司 | 一种基于RMI和ZooKeeper实现远程调用框架的方法 |
CN106059843A (zh) * | 2016-08-16 | 2016-10-26 | 深圳市华成峰数据技术有限公司 | 一种基于Zookeeper 的节点配置***及方法 |
CN108108266A (zh) * | 2016-11-24 | 2018-06-01 | 腾讯科技(深圳)有限公司 | 容灾方法、装置及服务器 |
CN107465756A (zh) * | 2017-08-24 | 2017-12-12 | 北京奇艺世纪科技有限公司 | 一种服务请求处理的方法和装置 |
CN107592229B (zh) * | 2017-09-22 | 2021-07-27 | 银联商务股份有限公司 | 一种服务调用方法、装置及*** |
CN107592229A (zh) * | 2017-09-22 | 2018-01-16 | 银联商务股份有限公司 | 一种服务调用方法、装置及*** |
CN109936613A (zh) * | 2017-12-19 | 2019-06-25 | 北京京东尚科信息技术有限公司 | 应用于服务器的容灾方法和装置 |
CN108366086A (zh) * | 2017-12-25 | 2018-08-03 | 聚好看科技股份有限公司 | 一种控制业务处理的方法及装置 |
CN110278227A (zh) * | 2018-03-15 | 2019-09-24 | 阿里巴巴集团控股有限公司 | 服务处理方法、装置以及电子设备 |
CN110858168A (zh) * | 2018-08-24 | 2020-03-03 | 浙江宇视科技有限公司 | 集群节点故障处理方法、装置及集群节点 |
CN110858168B (zh) * | 2018-08-24 | 2023-08-18 | 浙江宇视科技有限公司 | 集群节点故障处理方法、装置及集群节点 |
CN111039115A (zh) * | 2018-10-15 | 2020-04-21 | 奥的斯电梯公司 | 用于监控电梯通信模块故障的方法、***以及电梯 |
CN110309016A (zh) * | 2019-06-13 | 2019-10-08 | 北京奇艺世纪科技有限公司 | 一种熔断恢复方法、装置及服务器 |
CN113347263A (zh) * | 2021-06-11 | 2021-09-03 | 上海中通吉网络技术有限公司 | 消息集群管理方法和*** |
CN113347263B (zh) * | 2021-06-11 | 2022-10-11 | 上海中通吉网络技术有限公司 | 消息集群管理方法和*** |
CN114116128A (zh) * | 2021-11-23 | 2022-03-01 | 北京字节跳动网络技术有限公司 | 容器实例的故障诊断方法、装置、设备和存储介质 |
CN114116128B (zh) * | 2021-11-23 | 2023-08-08 | 抖音视界有限公司 | 容器实例的故障诊断方法、装置、设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103731312A (zh) | 对远程方法调用的服务进行故障检查的方法和装置 | |
CN102868754B (zh) | 一种实现集群存储高可用性的方法、节点装置和*** | |
JP2017084333A (ja) | 仮想マシンクラスタの監視方法及びシステム | |
CN110830283B (zh) | 故障检测方法、装置、设备和*** | |
CN105933391A (zh) | 一种节点扩容方法、装置及*** | |
CN103383689A (zh) | 一种服务进程故障检测方法、装置及服务节点 | |
CN112181660A (zh) | 一种基于服务器集群的高可用方法 | |
CN108923992A (zh) | 一种nas集群高可用方法、***及电子设备和存储介质 | |
US11461199B2 (en) | Redundancy method, device, and system | |
CN108038005A (zh) | 基于zookeeper的共享资源访问方法、客户端、服务端、*** | |
JP5855724B1 (ja) | 仮想機器管理装置、仮想機器管理方法及び仮想機器管理プログラム | |
CN109391691A (zh) | 一种单节点故障下nas服务的恢复方法及相关装置 | |
CN103795572B (zh) | 主从服务器的切换方法及监控服务器 | |
CN103490914A (zh) | 一种网络应用设备多机热备的切换***及方法 | |
CN103761180A (zh) | 一种集群存储中磁盘故障的预防及检测方法 | |
CN104917827A (zh) | 一种实现oracle负载均衡集群的方法 | |
CN111176888A (zh) | 云存储的容灾方法、装置及*** | |
CN104202255A (zh) | 一种高效多链路数据传输实现方法 | |
CN115248826A (zh) | 一种大规模分布式图数据库集群运维管理的方法和*** | |
CN115658390A (zh) | 容器容灾方法、***、装置、设备及计算机可读存储介质 | |
CN108319522A (zh) | 一种加强分布式存储***可靠性的方法 | |
CN107071189A (zh) | 一种通讯设备物理接口的连接方法 | |
CN116185697B (zh) | 容器集群管理方法、装置、***、电子设备及存储介质 | |
EP4060514A1 (en) | Distributed database system and data disaster backup drilling method | |
CN109842526A (zh) | 一种容灾方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140416 |
|
RJ01 | Rejection of invention patent application after publication |