一种分布式容错系统、设备和方法

文档序号:7718965阅读:203来源:国知局
专利名称:一种分布式容错系统、设备和方法
技术领域
本发明涉及网络管理技术,特别涉及一种分布式容错系统、设备和方法。
背景技术
目前,随着系统可靠性的发展,容错系统也随之被广泛应用。其中,容错系统是指 对系统中的关键部件进行冗余备份,并且通过一定的检测手段,能够在系统中的软件和硬 件故障时,切换到冗余部件工作,以保证整个系统能够不因这些故障而导致业务处理中断; 而在故障修复后,又能够恢复到冗余备份状态。使用容错系统,能够将可能的软件和硬件故 障给整个系统带来的风险降至最低。现有技术中常用的容错平台是基于中间件的容错平台,但是,这种基于中间件的 容错平台在实际运营考虑较少,比如,在实际应用中,当服务端新发布一个服务时,会导致 全部客户端用户都会集中访问该服务,本领域技术人员知道,新发布的服务并非是完美的, 其通常会有一些bug,因此,采用现有技术的容错平台,会大大增加网络运行风险。

发明内容
本发明实施例提供了一种分布式容错系统、设备和方法,以便降低网络运行风险。本发明实施例公开了一种分布式容错系统,所述系统包括客户端和服务端;其 中,所述服务端包含一个以上服务节点,每一服务节点用于发布服务,并在发布服务 时携带与该服务有关的信息,所述信息包括所述服务节点的信息和所述服务节点的灰度状 态;所述客户端,用于针对每一需要灰度路由的接口,将该接口运行的对应用户的用 户参数值传递给自身管理的服务代理,由该服务代理根据传递的用户参数值确定用户的灰 度状态;并根据服务节点发布服务时所携带的信息,将所述用户发送的消息路由到与所述 用户具有相同灰度状态的服务节点上。一种客户端,包括通信器和服务代理处理模块;所述服务代理处理模块提供了 服务代理;所述通信器为该系统的应用层接口,对每一需要灰度路由的接口,将该接口运行 的对应用户的用户参数值传递给由所述服务代理处理模块提供的服务代理;所述服务代理处理模块提供的所述服务代理接收传递的用户参数值,根据传递的 用户参数值确定用户的灰度状态;并根据服务节点发布服务时所携带的与该服务有关的信 息,所述信息包括所述服务节点的信息和所述服务节点的灰度状态,将所述用户发送的消 息路由到与所述用户具有相同灰度状态的服务节点上。一种分布式容错方法,该方法包括以下步骤A,针对每一需要灰度路由的接口,客户端将该接口运行的对应用户的用户参数值 传递给对应的服务代理;
B,所述服务代理根据传递的用户参数值确定该用户的灰度状态,并根据服务端中 服务节点发布服务时所携带的与该服务有关的信息,所述信息包括所述服务节点的信息和 所述服务节点的灰度状态,将所述用户发送的消息路由到与所述用户具有相同灰度状态的 服务节点上。由以上技术方案可以看出,本发明实施例中,能够实现将用户路由到与该用户具 有相同灰度状态的服务节点上,这相比于现有技术,能够大大减少访问发布新服务的服务 节点的用户个数,避免现有技术中由于将所有用户路由到发布新服务的服务节点所带来的 网络运行风险。


图1为本发明实施例提供的系统结构图;图2为本发明实施例提供的系统详细结构图;图3为本发明实施例提供的客户端结构图;图4为本发明实施例提供的流程图。
具体实施例方式为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对 本发明进行详细描述。本发明实施例基于对自动生成协议(jce Java Cryptography Extension)的分 析,提出了分布式容错系统。其中,本发明实施例提供的分布式容错系统,能够对服务的灰 度发布提供框架层面的支持,具体可参见图1。参见图1,图1为本发明实施例提供的统一容错系统结构图,如图1所示,该容错系 统可包括客户端11和服务端22。其中,服务端22,用于发布服务,并在发布服务时携带与该服务有关的信息,所述 信息包括所述服务端包含的1个以上部署了所述服务的服务节点的信息和所述服务节点 的灰度状态,具体地,本实施例中,服务节点的信息可为该服务节点的IP地址和端口。需要说明的是,服务节点的灰度状态与该服务节点提供的服务有关,当该服务节 点提供的服务不变,则该服务节点的灰度状态也一般不会发生改变。客户端11用于针对每一需要灰度路由的接口,将该接口运行的对应用户的用户 参数值传递给自身管理的服务代理,这里,用户参数值与客户端用户对应,具体实现时可为 QQ号码,或者用户的电话号码等,本发明实施例并不具体限定;由该服务代理根据传递的 用户参数值确定用户的灰度状态;并根据服务端22发布服务时所携带的信息,将来自所述 用户的消息路由到与所述用户具有相同灰度状态的服务节点上。至此,通过本发明实施例提供的系统,能够实现将用户路由到与该用户具有相同 灰度状态的服务节点上,这相比于现有技术,能够大大减少访问发布新服务的服务节点的 用户个数,避免现有技术中由于将所有用户路由到发布新服务的服务节点所带来的网络运 行风险。本实施例在具体实现时,可通过直接指定与客户端11相连的服务节点,具体是通 过直接指定IP地址和端口指定与客户端相连的服务节点,其中,在指定服务节点时,可以指定多个服务节点,用于容错;如此,客户端11即可获取与自身相连的服务节点发布服务 时携带的与该服务有关的信息;这里,直接指定服务节点的示例如下
HelloPrx pPrx = _comm->stringToProxy<HelloPrx>( "Test.HelloServer.HelloObj@
tcp -h 127.0.0.1 -ρ 45458:tcp -h 127.0.0.1 -ρ 45459:tcp -h 127.0.0.1 -ρ 45460");其中,Test为服务所在的应用名称,Hellc^erver为服务名称,HelloObj为对象名 称ObjectName,@为直接指定的标识,_h 127. 0. 0. 1为服务节点的IP地址;-ρ 45458、-ρ 45459和-ρ 45460为服务节点的监听端口,可以看出,一个服务节点可以支持多个监听端 口,这里,该监听端口可支持TCP/UDP。可以看出,通过直接指定服务节点的形式,能够使客户端比较简单地获取与自身 相连的服务节点发布服务时所携带的与该服务相关的信息。但是,采用上述通过直接指定 与客户端11相连的服务端的服务节点的方式,需要在程序代码中写死,大大减少本发明实 施的灵活性,因此,本实施例还提供了另一种方式即利用Registry来获取与自身相连的 服务节点。这里,Registry的服务地址可通过配置中的locator参数指定,例如locator = taf. tafregistry. QueryObjitcp-h 127. 0. 0. l_p 17890 ;如此,本实施例中,通过Registry间接指定服务节点可如下式HelloPrx pPrx = _comm- > stringToProxy<HelloPrx>(〃 Test. HelloServer. HelIoObj");为了便于客户端11获取与自身相连的服务节点发布服务时所携带的信息,本实 施例中,客户端11需要按照预设的刷新规则从Registry上刷新最新的服务列表,这里,服 务列表中包含了服务节点的灰度状态、服务节点提供的服务信息和服务节点的信息(比如 IP地址和端口);刷新原则为如果本地服务列表为空且距离上次更新时间大于预设时间 (比如2秒),则同步刷新服务列表;如果距离上次刷新时间大于配置的刷新时间(比如1 分钟),则异步刷新服务列表。如此,客户端11即可获取与自身相连的比较新的服务列表。需要说明的是,本实施例中,客户端管理的服务代理可通过以下两种方式确定 (当然,客户端提供并管理的的代理,比如对象代理(Object Proxy)等也可采用以下两种 方式确定)第一种方式直接代理,具体是通过指定服务端IP地址和端口获取代理,比如StringToProxy ( “ Test. TestServer. TestBaseOb jitcp-h 127. 0. 0. 1-p 22322,,);其中,Test 服务所在的应用名称;TestServer 服务名称;TestBaseObj ObjectName ;i 直接代理标识;tcp 传输协议,支持tcp和udp ;_h 127. 0. 0. 1 服务端IP 地址为127. 0. 0. 1 ;-ρ 22322 服务端监听端口为22322。第二种方式间接代理,这种方式是通过指定0b jectName,由taf-registry根据 ObjectName获取对应的IP和Port,其中,taf-registry的地址需要在通信器的配置文件 中配置。可以看出,因此ObjectName必须在Registry上全局唯一。比如
stringToProxy (“ Test. TestServer. TestBaseObj,,)。至此,通过以上方式,客户端即可获取对应的服务代理。为了使本发明实施例提供的系统更加清楚,下面对本发明实施例提供的系统进行 详细描述。参见图2,图2为本发明实施例提供的系统结构图。如图2所示,可包括客户端 和服务端。其中,客户端和服务端的具体功能可与图1所述。优选地,本实施例中,如图2所示,客户端11包括通信器101和服务代理处理模 块102 ;这里,服务代理处理模块102提供了服务代理(krvant Proxy);其中,通信器101为该系统的应用层接口,针对每一需要灰度路由的接口,将该接 口运行的对应用户的用户参数值通过调用预先设置的^voke接口传递给与所述预先设置 的hvoke接口具有映射关系的服务代理;服务代理处理模块102提供的服务代理还提供了用于注册路由的路由接口,其 中,所述路由接口接收传递的用户参数值,并判断所述用户参数值是否满足预设的灰度状 态条件,如果满足,则确定所述用户的灰度状态为灰度,如果不满足,则确定所述用户的灰 度状态为普通;之后,将确定的灰度状态返回。这里,灰度状态具体为灰度(标记为“1”)和 普通(标记为“0”)。如图2所示,客户端11还可包括客户端业务线程处理模块103 ;其中,客户端业务线程处理模块103连接在通信器101和服务代理处理模块102 之间,提供了业务线程,在接收到用户发送的消息时,由自身提供的业务线程将所述消息提 供给服务代理处理模块;如此,服务代理处理模块102根据确定的该用户的灰度状态和获取的服务端发布 服务时所携带的信息通过自身提供的所述服务代理调用与所述用户具有相同灰度状态的 服务节点的接口,以使该接口处理该用户发送的消息。具体地,这里,服务代理处理模块102提供的服务代理调用服务节点的接口具体 实现时主要有同步调用、异步调用和单向调用。其中,同步调用是服务代理同步调用服务节点(具体是调用服务节点的某个接 口),调用后该业务线程阻塞,直到调用被服务端返回或者调用超时,即同步调用时,客户端 业务线程timewait在当前请求上,直到调用被服务端返回或者直到调用超时;其中,同步 超时时间可以由应用层设定,可以精确到毫秒级,具体可在配置中指定,缺省为3秒。可以 看出,一个业务线程每次只能处理一个消息,因此同一 ObjectName队列中的消息数小于等
于应用层业务线程个数。为便于了解同步调用,下面描述同步调用的示例
权利要求
1.一种分布式容错系统,其特征在于,所述系统包括客户端和服务端;其中,所述服务端包含一个以上服务节点,每一服务节点用于发布服务,并在发布服务时携 带与该服务有关的信息,所述信息包括所述服务节点的信息和所述服务节点的灰度状态;所述客户端,用于针对每一需要灰度路由的接口,将该接口运行的对应用户的用户参 数值传递给自身管理的服务代理,由该服务代理根据传递的用户参数值确定用户的灰度状 态;并根据服务节点发布服务时所携带的信息,将所述用户发送的消息路由到与所述用户 具有相同灰度状态的服务节点上。
2.根据权利要求1所述的系统,其特征在于,所述客户端通过直接指定IP地址和端口 的形式指定与自身相连的服务节点,并获取该服务节点发布服务时所携带的信息;或者,所述客户端通过由注册器Registry间接获取与自身相连的服务节点;并按照预设的 刷新原则从所述注册器上刷新服务列表,所述服务列表中包含了服务节点发布服务时所携 带的信息;所述刷新原则为如果客户端本地服务列表为空且距离上次更新时间大于预设 时间,则同步刷新服务列表;如果距离上次刷新时间大于配置的刷新时间,则异步刷新服务 列表。
3.根据权利要求1或2所述的系统,其特征在于,所述客户端包括通信器和服务代理 处理模块;所述服务代理处理模块提供了服务代理;所述通信器为该系统的应用层接口,对每一需要灰度路由的接口,将该接口运行的对 应一用户的用户参数值通过调用预先设置的^voke接口传递给与所述预先设置的^voke 接口具有映射关系的服务代理;所述服务代理处理模块提供的服务代理还提供了用于注册路由的路由接口,所述路 由接口接收传递的用户参数值,并判断所述用户参数值是否满足预设的灰度状态条件,如 果满足,则确定所述用户的灰度状态为灰度,如果不满足,则确定所述用户的灰度状态为普通。
4.根据权利要求3所述的系统,其特征在于,所述客户端还包括客户端业务线程处理 模块;所述客户端业务线程处理模块连接在通信器和服务代理处理模块之间,提供了业务线 程,在接收到用户发送的消息时,由自身提供的业务线程将所述消息提供给所述服务代理 处理模块;所述服务代理处理模块根据确定的用户的灰度状态和服务节点发布服务时所携带的 信息,并通过自身提供的所述服务代理调用与所述用户具有相同灰度状态的服务节点的接 口处理该用户发送的消息。
5.根据权利要求2所述的系统,其特征在于,所述服务节点包括网络线程处理模块和 服务端业务线程处理模块;所述网络线程处理模块在通过所述服务端支持的端口接收到消息时,判断所述端口对 应的Adapter的当前访问量是否已到达预设的阈值,如果是,丢弃所述消息;否则,将所述 消息放入Adapter对象对应的消息接收队列中;所述服务端业务线程处理模块提供业务线程,从其提供的业务线程所属的Adapter对 应的消息接收队列中读取消息,对所述消息执行逻辑处理,并在完成处理后,返回相应的消 息,将该返回消息放入网络发送队列中;所述网络线程处理模块在预设时间到达时,从所述网络发送队列中取出并发送该返回消息。
6.根据权利要求5所述的系统,其特征在于,所述消息中携带了该消息的超时时间; 所述网络线程处理模块将所述消息放入Adapter对象对应的消息接收队列中时,记录该消息的入队时间;所述服务端业务线程处理模块读取消息时,计算该消息在队列中的时间,如果计算的 时间超过该消息携带的超时时间,则不对该消息执行逻辑处理;否则,对所述消息执行逻辑处理。
7.一种客户端,其特征在于,所述客户端包括通信器和服务代理处理模块;所述服务 代理处理模块提供了服务代理;所述通信器为该系统的应用层接口,对每一需要灰度路由的接口,将该接口运行的对 应用户的用户参数值传递给由所述服务代理处理模块提供的服务代理;所述服务代理处理模块提供的所述服务代理接收传递的用户参数值,根据传递的用户 参数值确定用户的灰度状态;并根据服务节点发布服务时所携带的与该服务有关的信息, 所述信息包括所述服务节点的信息和所述服务节点的灰度状态,将所述用户发送的消息路 由到与所述用户具有相同灰度状态的服务节点上。
8.根据权利要求7所述的客户端,其特征在于,所述服务代理处理模块提供的服务代 理中存在与预先设置的^voke接口具有映射关系的服务代理;所述通信器通过调用预先设置的^voke接口将所述用户参数值传递给与所述预先设 置的hvoke接口具有映射关系的服务代理;所述服务代理处理模块提供的与所述^voke接口具有映射关系的服务代理提供了用 于注册路由的路由接口,所述路由接口接收传递的用户参数值,并判断所述用户参数值是 否满足预设的灰度状态条件,如果满足,则返回所述用户的灰度状态为灰度,如果不满足, 则返回所述用户的灰度状态为普通。
9.根据权利要求7或8所述的客户端,其特征在于,所述客户端还包括客户端业务线 程处理模块;所述客户端业务线程处理模块连接在通信器和服务代理处理模块之间,提供了业务线 程,在接收到用户发送的消息时,由自身提供的业务线程将所述消息提供给所述服务代理 处理模块;所述服务代理处理模块根据确定的用户的灰度状态和服务节点发布服务时所携带的 信息,并通过自身提供的所述服务代理调用与所述用户具有相同灰度状态的服务节点的接 口处理该用户发送的消息。
10.一种分布式容错方法,其特征在于,该方法包括以下步骤A,针对每一需要灰度路由的接口,客户端将该接口运行的对应用户的用户参数值传递 给对应的服务代理;B,所述服务代理根据传递的用户参数值确定该用户的灰度状态,并根据服务端中服务 节点发布服务时所携带的与该服务有关的信息,所述信息包括所述服务节点的信息和所述 服务节点的灰度状态,将所述用户发送的消息路由到与所述用户具有相同灰度状态的服务 节点上。
11.根据权利要求10所述的方法,其特征在于,所述步骤A中,所述客户端将用户参数 值通过预先设置的hvoke接口传递给预先配置的与该hvoke接口对应的服务代理;所述步骤B中,所述服务代理提供了用于注册路由的路由接口 ;所述服务代理根据传 递的用户参数值确定该用户的灰度状态包括所述服务代理通过所述路由接口接收传递的用户参数值,并判断所述用户参数值是否 满足预设的灰度状态条件,如果满足,则确定所述用户的灰度状态为灰度,如果不满足,则 确定所述用户的灰度状态为普通。
12.根据权利要求11所述的方法,其特征在于,所述步骤B中,所述根据服务节点发布 服务时所携带的信息,将用户发送的消息路由到与所述用户具有相同灰度状态的服务节点 上包括Bi,如果通过由注册器Registry间接获取与自身相连的服务节点,则按照预设的刷新 原则从所述注册器上刷新服务列表,所述服务列表中包含了服务节点的灰度状态、服务节 点的提供的服务信息和服务节点的信息;所述刷新原则为如果本地服务列表为空且距离 上次更新时间大于预设时间,则同步刷新服务列表;如果距离上次刷新时间大于配置的刷 新时间,则异步刷新服务列表;B2,根据刷新的服务列表,获取与所述用户具有相同灰度状态的服务节点,将用户发送 的消息路由给所述确定的1个或者多个服务节点。
13.根据权利要求11所述的方法,其特征在于,如果所述服务列表的刷新时间与服务 节点灰度状态变化的时间不同步,则所述步骤B中,当将灰度状态为普通的用户发送的消息路由到灰度状态当前更换为 灰度的服务节点时,则所述服务节点产生reset响应,根据产生的reset响应重新更新本地 服务列表中该服务节点的灰度状态为灰度;当将灰度状态为灰度的用户发送的消息路由到灰度状态当前更换为普通的服务节点 时,则所述服务节点正常处理所述消息。
14.根据权利要求10所述的方法,其特征在于,该方法进一步包括服务端接收到消息 后,判断该消息携带的标识信息是否和预设的需要染色的标识信息匹配,这里,标识信息可 为用户号码、远程对象和接口中的至少一个;如果是,则对该消息进行处理,并打印对应的 染色日志;如果在对消息的处理过程中,还需调用其他服务,则通过状态字传递染色信息, 被调服务进行相应的处理,并打印对应的染色日志。
全文摘要
本发明实施例公开了一种分布式容错系统、设备和方法,其中,所述系统包括客户端和服务端;其中,所述服务端包含一个以上服务节点,每一服务节点用于发布服务,并在发布服务时携带与该服务有关的信息,所述信息包括所述服务节点的信息和所述服务节点的灰度状态;所述客户端,用于针对每一需要灰度路由的接口,将该接口运行的对应用户的用户参数值传递给自身管理的服务代理,由该服务代理根据传递的用户参数值确定用户的灰度状态;并根据服务节点发布服务时所携带的信息,将所述用户发送的消息路由到与所述用户具有相同灰度状态的服务节点上。采用本发明,能够降低网络运行风险。
文档编号H04L29/06GK102064954SQ20091022479
公开日2011年5月18日 申请日期2009年11月17日 优先权日2009年11月17日
发明者张凯, 张维全, 朱涛, 范世青, 阮曙东, 陈德贤, 陈生 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1