CN102831027B - 一种基于代理的面向服务软件系统的容错方法 - Google Patents
一种基于代理的面向服务软件系统的容错方法 Download PDFInfo
- Publication number
- CN102831027B CN102831027B CN201210313927.1A CN201210313927A CN102831027B CN 102831027 B CN102831027 B CN 102831027B CN 201210313927 A CN201210313927 A CN 201210313927A CN 102831027 B CN102831027 B CN 102831027B
- Authority
- CN
- China
- Prior art keywords
- service
- queue
- agency
- fault
- error
- 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.)
- Expired - Fee Related
Links
Landscapes
- Debugging And Monitoring (AREA)
- Hardware Redundancy (AREA)
Abstract
本发明涉及一种基于代理的面向服务软件系统的容错方法,该方法具体包括:代理管理模块为每一个运行的Bundle生成一个对应的代理;当调用某个Bundle的服务时,该调用首先被重定向到对代理的调用,代理管理模块判断代理的调用过程是否捕获到错误信息,若是,则停止调用的服务,开始服务错误修复流程,若否,则代理管理模块把本次的调用信息保存到服务调用记录模块;服务错误修复利用找到的可替代服务替换错误的服务,若无可替代服务,则根据服务依赖分析模块寻找所有依赖于当前错误服务的服务,停止这些服务并且将这些服务加入到错误恢复队列中进行错误修复。与现有技术相比,本发明具有可有效容错、适用范围广等优点。
Description
技术领域
本发明涉及一种服务容错技术领域的方法,尤其是涉及一种基于代理的面向服务软件系统的容错方法。
背景技术
基于构件的软件开发可以大幅度提高软件的复用、开发的效率和质量,降低软件开发和维护的成本,各种构件支撑平台的出现很大程度上推动了软件构件化的发展,软件构件技术已经得到了广泛的应用。OSGi(open services gateway initiative,开放服务网关平台)作为一个优雅、完整、动态的组件模型,为开发者提供了一套标准的方法来管理软件的生命周期,它能够对单个Java虚拟机内的Java应用提供一个动态的构件运行环境。OSGi的应用服务程序(bundle)无需重新引导可以被远程安装、启动、升级和卸载。但是OSGi平台本身没有提供一个很好的容错机制,它不能很好的处理网络波动、设备故障以及服务构件故障等引起的错误,所以很有必要对OSGi进行容错扩展。
在对OSGi平台进行容错扩展的过程中,首先要对平台里面各个Bundle进行动态的监测,收集各个Bundle运行时的信息。其次要捕获Bundle在进行调用的过程中抛出的异常或者发生的错误,因为Bundle之间存在依赖关系,依赖于发生错误Bundle的Bundle也应该被视为无法正常运行,所以要进行错误传播的分析,以确定一个最小的影响模块集合。接着寻找影响集里面Bundle的替代Bundle,所以有必要对可替代Bundle进行定义。最后用新的模块替代出错的模块。
经对现有技术文献的检索发现,Ahn等人在Proceedings of the 2006 ACMsymposium on Applied computing,Dijon,France上所发表的Towards Reliable OSGiFramework and Applications(可靠OSGi框架及应用)中,提出了一种对OSGi平台的容错扩展。Ahn主要是通过提供冗余Bundle的方式进行容错,冗余Bundle的功能是类似的,它们之间可以互相替代。当某个Bundle出错时,用该Bundle的冗余Bundle进行替换。但是该文章中只能对没有状态的Bundle进行容错,无法满足更多的应用需求,而且对可替换的定义过于严格,更加限制了该方法的应用范围。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种容错准确率高、应用范围广的基于代理的面向服务软件系统的容错方法。
本发明的目的可以通过以下技术方案来实现:
一种基于代理的面向服务软件系统的容错方法,该方法基于扩展的OSGi,所述的扩展的OSGi包括OSGi基本框架、代理管理模块、服务调用记录模块、服务依赖分析模块和服务修复模块,所述的方法具体包括以下步骤:
第一步:代理管理模块为每一个运行的Bundle生成一个对应的代理;
第二步:当调用某个Bundle的服务时,代理管理模块将该调用首先重定向到对对应代理的调用,由代理再去调用真正的服务,代理管理模块判断代理的调用过程是否捕获到错误信息,若是,则执行第三步,若否,则代理管理模块把本次的调用信息保存到服务调用记录模块;
第三步:代理管理模块捕获到了错误,停止调用的服务,并且将该服务加入到服务修复模块的错误恢复队列中,开始服务错误修复流程;
第四步;服务修复模块首先判断当前错误恢复队列是否为空,若是,则停止服务错误修复流程,若否,则取出错误恢复队列中队首的服务,并执行第五步;
第五步:服务修复模块判断是否找到当前队首服务的可替代服务,若是,则用可替代服务替换当前队首服务,并返回第四步,若否,则执行第六步;
第六步:服务修复模块通过服务依赖分析模块找到所有依赖于当前队首服务的服务,停止这些服务并且将这些服务加入到错误恢复队列中,然后返回第四步。
所述的第一步中的生成代理具体是指:利用Java类的反射机制,对每个Bundle都生成一个与该Bundle相对应的代理,所述的代理替代该Bundle作为外部的接口。
所述的第二步中的服务调用记录模块中保存有所有服务的调用信息,以此作为服务错误修复的依据。
所述的第五步中的用可替代服务替换当前队首服务具体为:
首先将调用当前队首服务的指针都指向可替代服务,然后根据服务调用记录模块中的记录把可替代服务的状态运行到和当前队首服务出错时等价的状态。
所述的第六步中的服务依赖分析模块中存储有不同服务之间互相调用的信息图,所述的信息图根据服务依赖分析模块监听到的服务注册信息、注销信息、查询信息和调用信息动态变化。
所述的可替换服务的定义具体如下:
定义服务S为一个五元组,S={Q,IN,OUT,Trans,q0},满足:
(1)Q是状态集合;
(2)IN是触发事件集合,即对于服务的调用事件,包括调用的函数和参数;
(3)OUT是结果事件集合;
(4)Trans:Q X IN→Q X OUT是转移函数;
(5)q0∈Q,是起始状态;
服务S在启动时状态处于初始状态q0,当S接收到触发事件in∈IN,按照Trans的规则进行计算,以此类推,如果服务S接受到一组触发事件序列(in1,in2,…),根据Trans的规则,S将会输出一组结果事件序列(out1,out2,…);
对于任意的一组触发事件序列,分别作用到服务S1和S2上,如果得到的结果事件序列始终是相同的,则服务S1和S2是可替换的。
与现有技术相比,本发明具有以下优点;
(1)本发明采用基于代理的扩展,可以在原有的OSGi对Bundle的调用流程中插入代码,便于调用信息的保存和错误信息的捕获;
(2)本发明详细定义了可替换服务的概念,并且利用历史调用信息来进行服务状态的迁移,从而达到了将替换服务的类型扩展到有状态的目的,一定程度上拓宽了应用的范围。
附图说明
图1为本发明的扩展的OSGi架构示意图;
图2为在本发明的服务修复流程示意图;
图3为在本发明的错误恢复前后服务调用流程示意图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。
实施例
本实施例将基于开放式服务平台OSGi(Open Service Gateway initiative,开放服务网关平台)来实施的。OSGi平台是一个为Java提供的可插拔、面向服务的构建模型。Bundle是OSGi启动和加载的基本单元,由普通的JAR文件加上额外的描述信息构成。Bundle通过OSGi平台进行服务的发布、绑定、查找以及动态的实现模块之间的通信,为了达到模块之间松耦合和模块内高内聚,被调用的服务可以在使用的时候进行绑定。
为了实现本发明基于代理的面向服务软件系统的容错方法,该方法基于扩展的OSGi,如图1所示,所述的扩展的OSGi包括OSGi基本框架1、代理管理模块2、服务调用记录模块3、服务依赖分析模块4和服务修复模块5。代理管理模块2可为每个运行的Bundle生成一个与之对应的代理。代理的增加使得监测服务之间的调用情况得以实行,当服务出现错误的时候,代理可以马上检测到,及时地进行容错处理。错误的检测只是容错的第一步,接下来要计算错误的传播,当出错服务不能修复的情况下,所有引用该服务的服务都将不能正常工作。最后是错误的修复,错误的服务将会被具有相同功能的服务替代,并且新服务的状态要运行到和旧的服务出错时等价的状态。容错扩展的增加可以在不重新启动整个架构的前提下替换失效的服务。
服务调用记录模块3记录了所有的服务调用信息,服务依赖分析模块4维护了当前服务的依赖关系,服务修复模块5在服务发生错误的时候负责替换新的服务。这些模块都是建立在OSGi框架的服务注册中心(Service Registry)和服务管理器(Bundle manager)以及Remote-OSGi之上的。
在OSGi原有的架构上要实现错误检测是一个很大的挑战,OSGi架构没有为service client提供监听service provider的功能。所以service provider必须检查自己的状态,如果出现错误的时候,必须从OSGi里面注销,与此同时service client必须监听所有的注册事件。简言之,在OSGi架构上实现错误检测是一件非常麻烦和低效的工作。
本发明扩展的OSGi架构提供了简单高效的错误检测的机制,利用Java类的反射机制,代理对象的代码可以插入到服务的调用过程,检测服务调用的状态,比如调用成功或者失败。对于捕获的错误,每个代理都会保存起来,当发现了不可恢复的错误时,将会找到合适的替代服务,使代理重定向到新的服务,最后调用错误修复管理器让新的服务运行到和旧的服务等价的状态。
本发明基于代理的面向服务软件系统的容错方法的具体步骤为:
第一步:代理管理模块为每一个运行的Bundle生成一个对应的代理;
第二步:当调用某个Bundle的服务时,代理管理模块将该调用首先重定向到对对应代理的调用,由代理再去调用真正的服务,代理管理模块判断代理的调用过程是否捕获到错误信息,若是,则执行第三步,若否,则代理管理模块把本次的调用信息保存到服务调用记录模块;
第三步:代理管理模块捕获到了错误,停止调用的服务,并且将该服务加入到服务修复模块的错误恢复队列中,开始服务错误修复流程,如图2所示;
第四步:服务修复模块首先判断当前错误恢复队列是否为空,若是,则停止服务错误修复流程,若否,则取出错误恢复队列中队首的服务,并执行第五步;
第五步:服务修复模块判断是否找到当前队首服务的可替代服务,若是,则用可替代服务替换当前队首服务,并返回第四步,如果该错误是永久性的、不可恢复的错误,该服务将会被卸载,并执行第六步;
第六步:服务修复模块通过服务依赖分析模块找到所有依赖于当前队首服务的服务,停止这些服务并且将这些服务加入到错误恢复队列中,然后返回第四步,,直到队列里面没有需要恢复的服务这个过程才会停止。
图3所示为在本发明容错架构下,错误恢复前后服务调用流图。本发明中错误恢复是基于相同服务的冗余,一旦发现失败服务的时候,系统就会搜索失败服务的替代服务,然后用新搜索到的服务替换掉就的服务,最后把新的服务运行到和旧的服务出错时等价的状态,就完成了错误的恢复。图3中错误恢复前,用户通过代理1进行对服务1的调用,当服务1出现错误的时候,代理1将会重定向到服务2,而对于服务的调用者来说,这些都是不可见的,好像就跟没发生错误一样。
在寻找替换服务的过程中,一个关键问题就是怎么定义可替换服务。本发明所述的可替换服务具体指:
定义服务S为一个五元组,{Q,IN,OUT,Trans,q0},满足:
(1)Q是状态集合;
(2)IN是触发事件集合,即对于服务的调用事件,包括调用的函数和参数;
(3)OUT是结果事件集合,即服务对于外部的影响,例如向文件写入一组字符或者向设备发出指令等;
(4)Trans:Q X IN→Q X OUT是转移函数;
(5)q0∈Q是起始状态。服务S={Q,IN,OUT,Trans,q0}。
将以如下方式运作:服务S在启动时状态处于初始状态q0,当S接收到触发事件in∈IN,按照Trans的规则进行计算,例如Trans(q0,in)=(q1,out),S将进入新的状态q1∈Q,同时输出结果事件out∈OUT。以此类推,如果服务S接受到一组触发事件序列(in1,in2,…),根据Trans的规则,S将会输出一组结果事件序列(out1,out2,…)。对于任意的一组触发事件序列,分别作用到服务S1和S2上,如果得到的结果事件序列始终是相同的,则认为S1和S2是可替换的。
在错误恢复过程中,一个关键问题就是服务状态的恢复。由于本发明所涉及的可替代服务对于相同的输入序列具有相同的对外界的影响序列,而在本发明的扩展OSGi中已经记录了所有服务调用的信息,所以只需要把对于旧的服务的调用序列按顺序作用到新服务上去,新服务就可以到达所需的状态了。本发明定义的可替代服务只是所有服务的一个子集,没有考虑更加普适的服务。
Claims (5)
1.一种基于代理的面向服务软件系统的容错方法,其特征在于,该方法基于扩展的OSGi,所述的扩展的OSGi包括OSGi基本框架、代理管理模块、服务调用记录模块、服务依赖分析模块和服务修复模块,所述的方法具体包括以下步骤:
第一步:代理管理模块为每一个运行的Bundle生成一个对应的代理;
第二步:当调用某个Bundle的服务时,代理管理模块将该调用首先重定向到对对应代理的调用,由代理再去调用真正的服务,代理管理模块判断代理的调用过程是否捕获到错误信息,若是,则执行第三步,若否,则代理管理模块把本次的调用信息保存到服务调用记录模块;
第三步:代理管理模块捕获到了错误,停止调用的服务,并且将该服务加入到服务修复模块的错误恢复队列中,开始服务错误修复流程;
第四步:服务修复模块首先判断当前错误恢复队列是否为空,若是,则停止服务错误修复流程,若否,则取出错误恢复队列中队首的服务,并执行第五步;
第五步:服务修复模块判断是否找到当前队首服务的可替代服务,若是,则用可替代服务替换当前队首服务,并返回第四步,若否,则执行第六步;
第六步:服务修复模块通过服务依赖分析模块找到所有依赖于当前队首服务的服务,停止这些服务并且将这些服务加入到错误恢复队列中,然后返回第四步;
所述的可替换服务的定义具体如下:
定义服务S为一个五元组,S={Q,IN,OUT,Trans,q0},满足:
(1)Q是状态集合;
(2)IN是触发事件集合,即对于服务的调用事件,包括调用的函数和参数;
(3)OUT是结果事件集合;
(4)Trans:Q X IN→Q X OUT是转移函数;
(5)q0∈Q,是起始状态;
服务S在启动时状态处于初始状态q0,当S接收到触发事件in∈IN,按照Trans的规则进行计算,以此类推,如果服务S接受到一组触发事件序列(in1,in2,…),根据Trans的规则,S将会输出一组结果事件序列(out1,out2,…);
对于任意的一组触发事件序列,分别作用到服务S1和S2上,如果得到的结果事件序列始终是相同的,则服务S1和S2是可替换的。
2.根据权利要求1所述的一种基于代理的面向服务软件系统的容错方法,其特征在于,所述的第一步中的生成代理具体是指:利用Java类的反射机制,对每个Bundle都生成一个与该Bundle相对应的代理,所述的代理替代该Bundle作为外部的接口。
3.根据权利要求1所述的一种基于代理的面向服务软件系统的容错方法,其特征在于,所述的第二步中的服务调用记录模块中保存有所有服务的调用信息,以此作为服务错误修复的依据。
4.根据权利要求1所述的一种基于代理的面向服务软件系统的容错方法,其特征在于,所述的第五步中的用可替代服务替换当前队首服务具体为:
首先将调用当前队首服务的指针都指向可替代服务,然后根据服务调用记录模块中的记录把可替代服务的状态运行到和当前队首服务出错时等价的状态。
5.根据权利要求1所述的一种基于代理的面向服务软件系统的容错方法,其特征在于,所述的第六步中的服务依赖分析模块中存储有不同服务之间互相调用的信息图,所述的信息图根据服务依赖分析模块监听到的服务注册信息、注销信息、查询信息和调用信息动态变化。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210313927.1A CN102831027B (zh) | 2012-08-29 | 2012-08-29 | 一种基于代理的面向服务软件系统的容错方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210313927.1A CN102831027B (zh) | 2012-08-29 | 2012-08-29 | 一种基于代理的面向服务软件系统的容错方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102831027A CN102831027A (zh) | 2012-12-19 |
CN102831027B true CN102831027B (zh) | 2015-01-28 |
Family
ID=47334176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210313927.1A Expired - Fee Related CN102831027B (zh) | 2012-08-29 | 2012-08-29 | 一种基于代理的面向服务软件系统的容错方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102831027B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104182346A (zh) * | 2014-08-29 | 2014-12-03 | 曙光信息产业(北京)有限公司 | 一种适用于osgi的检测框架 |
CN110908820A (zh) * | 2019-11-06 | 2020-03-24 | 北京达佳互联信息技术有限公司 | 一种异步任务的执行方法、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101132402A (zh) * | 2007-08-08 | 2008-02-27 | 南京大学 | 基于行为一致条件下进行服务发现和替换方法 |
CN101247419A (zh) * | 2008-03-26 | 2008-08-20 | 北京航空航天大学 | 一种基于xesb的服务中介层容错方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7467196B2 (en) * | 2005-01-12 | 2008-12-16 | International Business Machines Corporation | Managing network errors communicated in a message transaction with error information using a troubleshooting agent |
-
2012
- 2012-08-29 CN CN201210313927.1A patent/CN102831027B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101132402A (zh) * | 2007-08-08 | 2008-02-27 | 南京大学 | 基于行为一致条件下进行服务发现和替换方法 |
CN101247419A (zh) * | 2008-03-26 | 2008-08-20 | 北京航空航天大学 | 一种基于xesb的服务中介层容错方法 |
Non-Patent Citations (1)
Title |
---|
Towards Reliable OSGi Operating Framework and Applications;HEEJUNE AHN ET AL;《Journal of Information Science and Engineering》;20071231;1379-1390 * |
Also Published As
Publication number | Publication date |
---|---|
CN102831027A (zh) | 2012-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3036633B1 (en) | Cloud deployment infrastructure validation engine | |
US7337373B2 (en) | Determining the source of failure in a peripheral bus | |
WO2019006654A1 (zh) | 金融自助设备维修派单生成方法、手持终端及电子设备 | |
Kumar et al. | Fault tolerance in real time distributed system | |
CN106330523A (zh) | 一种集群服务器容灾系统、方法和服务器节点 | |
CN102364448A (zh) | 一种计算机故障管理系统的容错方法 | |
CN102035896A (zh) | 一种适用于软件系统的基于ttcn-3的分布式测试框架 | |
WO2002054255A9 (en) | A method for managing faults in a computer system environment | |
CN103051681A (zh) | 一种面向分布式文件系统的协作式日志系统 | |
CN101860564A (zh) | 基于协议的服务组合系统和方法 | |
CN102306119A (zh) | 捕获全局异常的系统及方法 | |
CN114816820A (zh) | chproxy集群故障修复方法、装置、设备及存储介质 | |
CN102831027B (zh) | 一种基于代理的面向服务软件系统的容错方法 | |
CN114422386B (zh) | 一种微服务网关的监测方法及装置 | |
CN1308278A (zh) | 集群服务器的ip容错方法 | |
CN103152219B (zh) | 一种计算机网络系统的事件监控系统及事件监控方法 | |
Cai et al. | Utility-driven proactive management of availability in enterprise-scale information flows | |
Li et al. | Going through the life cycle of faults in clouds: Guidelines on fault handling | |
US7607051B2 (en) | Device and method for program correction by kernel-level hardware monitoring and correlating hardware trouble to a user program correction | |
CN106533790A (zh) | 部署存储服务器的方法、装置及系统、存储服务器 | |
Singh et al. | Using host criticalities for fault tolerance in mobile agent systems | |
CN102221995A (zh) | 地震数据处理作业的断点恢复方法 | |
Jayasinghe et al. | Aeson: A model-driven and fault tolerant composite deployment runtime for iaas clouds | |
CN114218158A (zh) | 一种数据管理系统、数据故障修复方法及装置 | |
CN110677469B (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150128 Termination date: 20210829 |