没有合适的资源?快使用搜索试试~ 我知道了~
13网址:http://www.elsevier.nl/locate/entcs/volume65.html9页基于故障的应用程序:一种支持容错的动态重构方法ThaisVasconcelosBatista1;2,MilanoGadelhaCarvalho3信息部巴西北纳塔尔里奥格兰德联邦大学摘要本文提出了一种基于构件的应用程序的动态重构机制及其容错策略。该机制称为通用连接器,允许将基于组件的应用程序组合为一组服务,而无需事先了解将提供某些服务的特定组件。组件将在运行时被选择。这项工作的目标是提供一种机制,该机制试图满足其负责的每个调用,并使失败尽可能透明。它是通过重用现有组件来组合应用程序的一个重要工具,因为它使程序员从搜索组件以使用它们的任务中解放出来,并且也从解决某些类型的故障中解放出来。1引言使用基于组件的方法开发分布式应用程序已经在软件工程中获得了重要性,作为减少软件开发成本和时间的一种有前途的方式。基于组件的开发专注于通过组装名为组件的预制软件来组合应用程序[15]。在这种情况下,支持分布式应用程序开发的机制面临挑战,包括容错行为[8],以产生功能良好的应用程序。容错是系统在发生故障时以良好方式运行的能力[6]。而1 本文的研究工作得到了CNPq(巴西科学技术发展委员会)的宝贵支持,编号为68.0103/01-52 电子邮件地址:thais@ufrnet.br3 电子邮件地址:milano@lcc.ufrn.br2002年由ElsevierScienceB出版。 诉操作访问根据C CB Y-NC-N D许可证进行。14基于组件的开发被广泛接受为用于组成分布式应用的方法当动态重构是应用程序的主要需求时,容错尤为重要。一般来说,通常需要动态重构支持的应用程序是任务关键型应用程序,例如灯光控制系统、金融和健康应用程序。一旦可用性成为关键问题,这类应用程序不允许发生故障。本文提出了一种用于应用程序组合开发的机制,该机制支持组件的动态选择,并包含容错处理,避免了在机制控制应用程序时发生错误。这种机制称为通用连接器[2],它使用组件必须提供的方法签名作为搜索参数来动态选择组件通用连接器使得将应用程序配置为一组服务成为可能,而无需预先了解执行服务的特定组件。通用连接器将在运行时找到组件。此外,通用连接器在所选组件上调用方法并返回结果。容错支持的目的是保证通过通用连接器完成的调用是无故障调用。本文的新颖之处在于讨论了通用连接器的容错策略,一旦原来的建议没有处理这个问题。这种机制是通过重用现有组件来组合应用程序的重要工具,因为它使程序员从搜索组件以使用它的任务中解放出来,并且也从解决某些类型的故障中解放出来。在分布式环境中,搜索分布在各个地方的组件的过载可能会阻碍程序员重用组件。使用通用连接器,程序员只使用未知对象的服务,就像他/她使用已知对象的服务本文的组织结构如下。第2节介绍了通用连接器机制。第3节描述了通用连接器提供的容错支持。最后,第4节提出了最后的评论。2通用连接器通用连接器是LuaSpace [1]的工具之一,LuaSpace [1]是一个用于开发基于组件的应用程序的环境,它将CORBA平台与用于粘合组件的解释和过程脚本语言Lua [7]结合在一起。应用程序是用Lua编写的,可以由任何绑定到CORBA的语言实现的组件组成。LuaSpace的另一个工具是LuaOrb[5] , 它是Lua 和CORBA 之间 的绑 定, 基 于CORBA 的动 态调 用接 口(DII),提供动态的15p:play(``musicfile.mid'')p= 泛型代理()Fig. 1. 使用通用连接器的像其他Lua对象一样访问CORBA组件通用连接器是一个Lua对象,它由通用代理函数创建,该函数返回一个代理,该代理不绑定到特定组件,而是引用通用连接器本身。要调用未知对象的服务,调用“孤儿”服务的方式与调用已知组件的服务的方式相同,但使用表示通用连接器的代理代替组件名称,表明服务将由通用连接器提供。为了说明这个机制,我们举一个简单的例子。图1显示了一段通过通用连接器调用play方法的配置程序,即,而不指定将提供服务的组件在这个程序的执行过程中,通用连接器将找到一个组件,该组件的接口描述了一个以le作为输入参数的播放方法,例如图2中所示的接口Player界面播放器{void run(infile);}图二. 播放器接口当一个方法被通用连接器的代理调用时,Lua解释器拦截调用并隐式地调用通用连接器实现,如图3所示 通用连接器调用一个搜索函数来查找调用中指定的服务的某个组件。 搜索可以在标准存储库(存储器或交易服务)或配置表上进行,配置表是由通用连接器管理的表,其缓存被选择来执行由应用经由通用连接器调用的服务的组件的标识。应用程序可以指示通用连接器始终在存储库中查找服务,以获得可识别性,或者首先检查配置表中的缓存数据,以获得有效性。默认行为是首先在配置表上进行搜索,并且只有在配置表中没有找到提供服务的组件时,搜索过程才在存储库为了改变这种默认行为,程序员可以将userRequest变量的布尔值设置为true,搜索过程将在标准存储库上完成选择提供服务的组件后,通用连接器安装请求,这是一系列用Lua编写的命令,用于为所选组件创建代理并激活服务。下一步16由通用连接器执行的是在配置表中向其提供者注册该方法。最后,通用连接器执行调用,并在执行后返回由调用的方法发送的结果。这种机制允许将应用程序配置为一组服务,而无需预先了解实现服务的特定组件。这些组件(如果可用)将在应用程序执行期间插入应用程序。在运行时,通用连接器搜索可以提供应用程序配置程序中声明的服务的组件,激活服务并将结果返回给客户端。一旦开发人员可以抽象出特定的组件,这种机制就为应用程序建模带来了极大的灵活性。它还解决了动态重新配置问题,因为对同一服务的不同调用可能导致选择不同的组件。3通用连接器当使用通用连接器代理完成方法调用时,通用连接器搜索功能使用被调用方法的签名在该签名与存储库中注册的组件的方法签名之间进行语法匹配。此问题可避免与不匹配类型相关的语法错误。然而,通用连接器的原始建议并不检测和纠正与通用连接器调用的服务的执行相关联的运行时错误这样,应用程序可能会由于与通用连接器所选组件相关联的故障而表现出意外行为。为应用程序开发提供支持的动态重新配置机制的适当行为是避免将故障传播给应用程序的程序员。尽管出现故障,应用程序应该能够继续运行。当泛型连接器调用组件的方法时,可能会发生两种不同类型的故障:组 件或方法不再可用。 一般来说,这种情况发生在被调用的方法或组件不再运行时。由于通用连接器在存储库或配置表中查找组件,因此会出现以下问题:搜索是在存储库上完成的:* 组件停止运行,并且没有删除存储库中的条目;* 组件接口已更改,但它没有在存储库中注册新接口。在这种情况下,存储库中有一条旧的信息。搜索是在配置表上完成的,有关所选组件的信息是旧的17连接[notuserRequest][userRequest]搜索连接[object not found]搜索服务[发现对象]选择服务构建请求服务[发现对象]插入连接测井服务[object not found]做征集日志服务[no错误][错误][错误不是致命的][致命错误]删除连接测井服务搜索组[发现对象][object not found]图三. 具有容错能力的通用连接器的结构无 法执行此方法。发生此故障的原因是与方法执行有关的问题,例如在方法调用中传递的参数格式不正确。在这种情况下,被调用的组件和方法都准备好执行,并且在执行期间发生了与组件或方法无关的内部问题。例如,在图1的示例中,Player界面的实现(如图2所示)将在播放之前打开一个le。le name作为此方法的参数如果le名称是错误的,返回(对应的le不存在)。我们将这种错误归类为非致命错误,因为如果程序员修复了le名称,则可以执行该方法在这种情况下,我们提出了一种容错机制,与通常的容错工作[6]一样,将容错操作分为检测和纠正阶段。 该机制的一般思想是拦截通用连接器进行调用后返回的运行时错误,并搜索提供相同错误的另一个组件容错程序18的服务.必须重复此过程,直到找到可以执行服务的组件,或者直到没有更多组件可以执行服务。这个过程对程序员和配置程序是透明的。其目的是掩盖组件的故障,并自动替换它们。中间件平台,如CORBA,提供了一个组件库,其中可能包含用于同一服务的不同组件。由于通用连接器工作在CORBA平台上,因此可以通过容错机制来利用CORBA存储库中服务提供者的冗余。图3展示了包含容错支持的通用连接器的UML [4]活动图。虚线区域突出显示容错程序。下面,我们解释一下。在dosolicitationqfunction激活服务后开始的检测过程中,通用连接器保持等待由运行组件或底层执行平台(CORBA和LuaOrb)发送的消息。当它接收到消息时,它验证该消息是错误还是服务执行结果。捕获错误后,下一步是将其分类为致命错误或非致命错误。致命错误是一个无法恢复的错误,与调用的特定组件有关,例如组件或服务不再可用。 非致命错误意味着组件和方法正在运行并且可以执行服务,但存在内部错误,例如,导致调用失败的参数传递错误。 这种错误会报告给程序员,在前面的例子中,如果程序员输入le名称中的错误字母,这不是致命错误,程序员可以轻松纠正。为了支持容错,通用连接器实现被修改为包括一个新的表,名为组件组表。此表缓存提供在通用连接器上调用的方法在对标准存储库进行首次搜索时,搜索服务功能将返回其接口具有对通用连接器调用的方法的组件列表,并将此列表记录在组件组表中。 这个功能避免了在组件或方法失败的情况下在存储库中进行新的搜索。在原始实现中,此表不存在。它是为了应付容错。如果没有这个表,在失败的情况下,搜索过程将查询标准存储库,恢复将是一个延迟的任务。 组件组表遵循将具有任何类型的冗余的对象分组以用于容错支持的思想[9]。只有致命错误才由纠正程序处理。在检测到致命错误之后,校正过程调用移除连接函数以从配置表和组件组表中移除与故障组件相对应的寄存器。 这样,cor-19安装过程更新两个表。然后,校正过程调用日志服务功能,该日志服务功能记录关于在通用连接器上进行的调用的所有信息,例如,状态参数通知相应的执行是已经完成还是失败。接下来,搜索组函数用于在组件组表中搜索调用失败的方法的另如果在组件组表中没有关于这种方法的缓存,则校正过程将调用转发到通用连接器开始过程。此过程将在存储库中搜索另一个组件,该组件也使用在通用连接器上调用的方法没有必要选择与故障组件连接到同一高级接口的组件只需要选择一个提供在泛型连接器上调用的方法的组件通用连接器并不保证有可用的组件,可以在通用连接器上调用方法,但是,如果存储库中记录了至少一个组件,则会选择该组件在选择组件(从组件组表或存储库中)之后,通用连接器执行调用。通过这种方式,通用连接器动态地替换有故障的组件,因此它是一种动态重新配置机制。通过这种行为,处理故障的工作就转移到了通用连接器实现上,从而使程序员不必再做这项工作。4最后发言提出了通用连接器及其容错策略。通用连接器是一种动态选择组件以提供应用程序所需服务的机制。 这项工作的目标是为基于组件的应用程序开发提供一种机制,该机制试图满足其负责的每个调用,并使失败尽可能透明。容错策略包括检测和纠正阶段。为了解决容错问题,对通用连接器的原始建议进行了扩展:插入新的功能,并创建一个新的表来记录可以满足调用的不同组件的列表。此信息由容错程序使用。在该机制中插入容错能力的目的是将搜索和替换故障组件的负担从程序员转移到机制。通用连接器可以提供的容错级别取决于在通用连接器上调用的方法上的组件的可用性。如果有一组组件可用于满足方法调用,则容错支持的级别可以很高。否则,在不存在任何组件来提供服务的极端情况下,20程序员将被告知,并且容错策略将不会成功。对搜索分布式对象的支持被认为是基于组件编程的基本服务,因此CORBA平台为该建议提供了查询和交易服务[10]然而,通用连接器功能超出了这些服务所提供的功能,这些服务只为存储库提供一些定义良好的方法来查询存储在那里的组件信息。通用连接器为程序员提供了一种统一的方式来使用来自以前选择的组件或未知组件的服务此外,它还从所选组件中激活所需的服务并返回结果。此外,交易和交易服务不提供容错支持。还有另一个CORBA服务[11] 来处理容错问题。 然而,没有可用的简单-这可能是因为它依赖于其他CORBA服务,如CORBA通知服务和CORBA对象组服务,这些服务在当前的CORBA实现中不容易找到虽然通用连接器已经使用Lua和到CORBA的spe-ci c绑定(LuaOrb)实现这是必要的语言和绑定到CORBA提供动态功能,允许配置应用程序,而不依赖于以前的声明组件,只能在运行时找到这种机制在重用现有组件方面扮演着重要的角色,因为它为程序员提供了一种使用组件而不参与搜索的方法,搜索过程主要在分布式环境中是一项费力的任务,其复杂性会阻碍程序员重用组件。使用通用连接器,搜索以自动方式完成,并且还支持容错。这些工具将程序员从与搜索组件和解决某些类型的故障相关的所有低级技术细节中解放出来,例如\组件不可用”。通用连接器的扩展正在开发中,它允许程序员将某些属性与调用的方法相关联。搜索过程将查找提供方法并满足属性的组件。然后,它可以产生一个语义上更合适的结果,相对于原始的搜索过程,只计算一个方法签名和存储库中注册的服务之间的语法匹配。引用[1] 巴蒂斯塔,T.和N. Rodriguez,基于并行的应用程序的动态重构,第五届并行和分布式系统软件工程国际研讨会(PDSE-2000),IEEE计算机协会,(Limerick,21爱尔兰,2000年)32。[2] 巴蒂斯塔,T.,C. Chavez和N. Rodriguez,动态重建,通用连接器,并行和分布式处理技术和应用国际会议论文集(PDPTA ′ 00),CSREA出版社,(拉斯维加斯,美国,2000)1127{1132}。[3] Bernstein,P.,中间件,ACM通信,39:2,(1996)。[4] Booch,G.,我和J·兰博。Jacobson,《统一建模语言用户指南》,Addison-Wesley,1999年。[5] 塞凯拉河C. Cassino和R. Ierecumimschy,跨不同软件系统的动态组件胶合,国际分布式对象和应用研讨会(DOA'99),IEEE出版社,OMG,(苏格兰爱丁堡,1999年9月)362{371.[6] Gartner,F.,异步环境下的容错分布式计算基础,ACM计算调查,31:1,3月,(1999),1 { 26。[7] 耶勒齐姆斯基河,L. H. Figueiredo和W. Celes,Lua -一种可扩展的扩展语言,软件:实践与经验,26:6,(1996),635{652。[8] Jalote,P., \分布式系统中的容错,”Prentice-Hall,1994。[9] 另外,S.,向CORBA添加组通信和容错,面向对象技术(COOTS)USENIX会议记录,USENIX,(加利福尼亚州蒙特雷,1995年6月)。[10] 王志华,“CORBA服务:公共对象服务规范”,北京:计算机科学出版社,1998.[11] 陈文辉,“CORBA的容错性”,北京大学出版社,1999。[12] 奥法利河,D. Harkey和J.Edwards,《基本分布式对象生存指南》,John Wiley Sons.,1996.[13] Siegel,J.,OMG概述:CORBA和OMA在企业计算中的应用,ACM通信,41:10,10月,(1998),37{43}。[14] Stikeleather,J.,为什 么分布式 计算是不 可避免的,对象杂志,3月,(1996),35 {39。[15] Szyperski,C.,《组件软件:超越面向对象编程》,Addison-Wesley,1998。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功