没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记114(2005)65-85www.elsevier.com/locate/entcsAlgon:从可互换分布式算法到可互换中间件卡伦·雷诺英国格拉斯哥大学计算机科学系电子邮件:karen@dcs.gla.ac.uk朱迪思·毕晓普,约翰尼·罗,巴兹尔·沃勒尔南非比勒陀利亚大学计算机科学系电子邮件:{jbishop,jlo,bworrall}@cs.up.ac.za摘要我们提出了一个可互换的分布式算法框架的设计和实现。这些算法来自于包括互斥、死锁检测和协议的集合,我们已经实现了其中第一个tonsiswo的几个例子一个算法库的Algoncts,一个将它们合并到新的或现有系统中的框架,以及一个评估比较性能的工具。通过这种方式,与分布式系统相关的大部分复杂性可以在其自己的组件级别中隔离,并且程序员可以根据给定应用程序的性能从同一类中的不同算法中通过观察给定类中的算法(例如互斥)几乎总是暴露相同的方法,可以在单个框架中实现许多算法。这些方法与Algon调度器接口,该调度器维护状态并为应用程序提供方便的钩子以调用算法的服务本文详细介绍了Algon的结构,并以一个分布式死锁检测算法为例进行了研究。 然后,我们通过在Algon中创建一个附加层来扩展关注点分离的概念,在该层下,在每个节点上运行的中间件可以互换,例如从Java-RMI到CORBA。在重新工具的系统,涉及多重继承,异常和自动生成的存根和骨架在我们的实现语言,Java的挑战,克服了新的方式。Algon有潜力成为一个寿命很长的框架,因为它可以适应新的中间件,如. NET。关键词:分布式算法,可扩展性,组件,中间件独立性,关注点分离,编程框架1571-0661 © 2005 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2004.02.06466K. Renaud等人理论计算机科学电子笔记114(2005)651介绍许多程序员接受过在工作站上开发的培训,发现分布式范式的复杂性难以处理。中间件技术隐藏了实现语言互操作性和简化维护所涉及的许多细节,但它们也引入了容易被忽视的复杂性,而孤立的系统很少表现出这种复杂性[7]。除了编程活动本身的正常认知和抽象性质之外,分布式环境中的问题还包括非确定性,竞争和同步问题[12]。例如,程序员可能面临着保证分布式互斥、实现分布式终止或检测死锁的需要。从1980年代和1990年代以来,已经有了解决这些问题的丰富的研究基础。一系列算法已根据其功能进行分类然而,算法在特定编程语言中的精确实现往往是不确定的[26,27]。因此,程序员面临着(i) 决定使用哪种算法最好,以及(ii) 实际上是以分布式的方式实现算法。虽然分布式应用程序编程的许多方面都很复杂,但许多程序员发现最难处理的基本问题之一是将所需的分布式算法纳入其系统。例如,保证互斥的最简单算法之一Ricart-Agrawala [24]涉及:(i) 向其他参与站点发送请求和回复的站点(ii) 比较时间戳,以及(iii) 排队等候的网站。提供更好性能的其他算法甚至具有更大的复杂性。虽然存在用于说明和比较算法功能的系统[2,11,25],但它们的主要功能是教育性的,并且它们不打算成为开发的组件。我们建议应用关注点分离技术,而不是试图教育参与开发分布式系统的大量程序员关于各种算法的功能,性能和复杂性[19,13]。关注点的分离简化了程序员然后程序员可以专注于个别的特定任务,并从他们的领域中删除困难和复杂的任务。K. Renaud等人理论计算机科学电子笔记114(2005)6567责任和控制。关注点分离还允许程序员将软件分解为更小、更易于管理的部分,这些部分更容易跟上不断发展的需求[18]。 这种技术已经应用于分布式应用程序的其他方面[6],并将算法与并行性分离[29],但尚未应用于分布式算法。我们建议,尽可能多的复杂性相关的分布式算法尽可能隐藏在自己的组件级别的程序员。这是在称为Algon1的框架内实现的,该框架包括:• 在需要时使用的算法库• 用于将算法合并到系统中的框架• 一种工具,用于根据分布式应用程序中不同算法的性能对其进行评估Algon为程序员提供了各种分布式算法,以便他们可以进行实验,从而为他们的特定应用选择性能最佳的算法。Algon概念及其相关的设计模式首先在[3]中提出。它已经成功实施,并开发了一个性能计算工具[23]。 在本文中,我们解释了Al-gon框架是如何运作的,程序员如何使用它来交换和比较算法,以及如何扩展这个概念,以便可以用CORBA动态地取代前Java-RMI中间件。Algon完全用Java实现,Java是一种流行的适合分布式应用程序开发的语言。我们设想一个C#版本的Algon,其中使用.NET或任何其他未来的中间件系统通过这项研究所吸取的经验教训包括软件组合的实际方面,语言功能对系统设计的影响,以及在运行时评估复杂系统的相关问题第2节描述了Algon的体系结构和一般设计原理第3节描述了如何使用Algon框架来提供不同类型的算法。第4节描述了用于使中间件级可互换的机制。第5节解释了如何使用Algon来支持有关算法选择的决策。第6节考虑相关工作,第7节结束。68K. Renaud等人理论计算机科学电子笔记114(2005)65应用层分布式层D中间件层Fig. 1. 基本Algon基础设施2Algon概念使用Algon框架扩展的分布式应用程序的抽象体系结构如图1所示。特定于应用程序的代码P使用到组件C的接口,使用经典算法类型。为了分布C(i) - 分布层D,其包括:(a) 调度器S,以及(b) 算法Aj,其实现接口Ii。分布层D是专门选择的,以匹配由Aj表示的算法族。(ii) 中间件骨干Mk,其促进与其他参与者的通信。它可以使用任何合适的通信结构,如Java RMI、CORBA或. NET。对于特定的经典分布式算法,调度程序使用接口Ii与实现该接口的所有不同类型的算法进行交互。使用接口可以更容易地引入新算法,并在运行时指定应该使用的算法例如,假设系统有四个节点,这些节点都需要访问共享资源-一些用于读取,一些用于写入。这显然需要使用分布式互斥算法。经典的算法C将是一个ReaderWriter组件。S是MEX,也就是互斥的MEX。接口Ii可以是用于所有互斥无令牌算法的MENT算法。算法Aj可能是Maekawa或Ricart-Agrawala算法-取决于系统开发人员指定的算法。中间件可以是Java RMI。当抽象架构实现时,很明显系统中需要一些辅助组件。这些组件1 Algon代表N et中的Alg算法。经典算法C公司简介接口Ii算法Aj中间件MkK. Renaud等人理论计算机科学电子笔记114(2005)6569关于算法机螺纹螺纹调度更新队列AlgonNameServer状态显示性能显示主机上记者公司简介接口Ii算法Aj解决两个问题:(i) 参与的应用程序及其算法需要对所有其他应用程序进行唯一标识,以便它们能够构建正确运行所需的请求集。这种识别支持中间件独立性:一些中间件框架,如RMI,需要知道其他对象的位置,而其他的,如CORBA,支持动态发现。(ii) Algon系统旨在直接支持系统的监测。开发人员需要能够从一个中心点监视系统活动。有必要为开发人员提供一个中央显示和控制界面,以便他/她不仅可以观察而且可以直接控制系统中的活动图二. 最大限度地减少绩效评估第一个问题可以静态地或动态地解决。静态地为每个应用程序签名是一个简单的解决方案,但是在工业环境中是不现实的。因此,我们必须动态地分配唯一的名称。 这里最明显的解决方案是使用名称服务器,如图2所示,创建AlgonNameServer就是为了达到这个目的。应用程序将实例化经 典 算 法 特 定 的 Sched-S , S 将 实 例 化 算 法 , 然 后 将 其 自 身 注 册 到AlgonNameServer。名称服务器将存储有关参与应用程序/算法及其运行的IP地址的信息,然后为应用程序分配一个唯一的标识符。70K. Renaud等人理论计算机科学电子笔记114(2005)65当应用程序想要开始使用C时,Java将向AlgonNameServer询问其他Java应用程序的标识符和IP地址,然后开始使用这些标识符构建请求集。第二个问题通过OutputDisplay类来解决。这是由AlgonNameServer实例化和绑定的,以便所有应用程序都可以将状态信息发送到一个中央输出显示,如图3所示。图三. 输出显示2.1性能测量上一节中提到的输出显示为分布式系统开发人员提供了系统活动的粗粒度快照,但它不能提供任何数据来支持算法之间的实际比较。Algon em性能测量组件就是为此而创建的。该组件接收来自所有参与节点的报告,以便它可以构建有意义的图形和表格,向程序员传达有关系统性能的信息。 为了确保在对应用影响最小的情况下完成系统性能测量,使用了一个分离式测量系统,如图2所示。Algon 报 告 使 用 三 个 类 -Reporter 、 UpdateQueue 和 Dispatch 。Reporter类与Reporter成对,Reporter向Reporter报告与算法的所有交互。Reporter维护所有状态信息并构造要发送到性能显示工具的报告。报告被插入到UpdateQueue中,UpdateQueue在单独的线程中运行,以便报告器在放置报告后K. Renaud等人理论计算机科学电子笔记114(2005)6571在队列上,可以直接将控制权返回给队列管理器。Dispatch类监视队列,当它检测到一个新的报告时,它将删除该报告并将该报告发送到性能显示工具。把报告交给-也经由队列路由放置显示,以最小化报告对性能的负面影响。通过这种方式,我们将与性能显示工具的耗时联系从工作流中分离出来。性能显示如图4所示。见图4。 性能显示工具2.2处理Algon故障分布式系统的故障语义与集中式系统不同-因此需要分布式算法。分布式算法已经被专门开发来处理此类故障,并将通过抛出的错误来报告Algon系统中的此类故障。然而,重要的是,Algon层不会将一个全新的异常家族引入到系统中,而这些异常家族是由系统的一个组件的故障引起的。系统可能会以以下方式失败:(i) 性能显示组件:系统受到保护,不会出现此组件的故障,因为Dispatch类不会报告它处理的任何异常,而是简单地停止向工具发送报告。通过Reporter和UpdateQueue向工具报告的SQL Server的功能不会受到此故障的影响的72K. Renaud等人理论计算机科学电子笔记114(2005)65Dispatch类将继续从队列中删除报告,然后丢弃它们,这样应用程序就不会因故障而中断(ii) OutputDisplay的失败虽然违背了Algon的目的,但不会导致应用程序失败。情况报告将再次不再提供。(iii) 系统设置期间AlgonNameServer的故障将导致系统失败,但初始设置后的故障不会以任何方式影响系统。我们意识到,这一单点故障可能被视为该系统的一个弱点。正如在分布式系统中常见的那样,有必要权衡具有单点故障的动态注册机制与静态的不灵活的抗故障命 名 系 统 的 优 点 。 我 们 认 为 前 者 是 更 好 的 设 计 选 择 。 复 制AlgonNameServer是一件相对简单的事情,如果有需要的话,我们会这样做整个Algon分布式层和相关组件都遵循这样的理念,即如果捕获到异常,系统将尝试继续运行,而不会干扰应用程序的运行。因此,为了不破坏控制应用程序的继续运行,Algon将以减少的Algon功能运行。下一节将展示如何应用Algon原理来合并分布式死锁检测算法。3Algon的应用在以前的工作[3]中,讨论了典型互斥算法的调用模式的细节。我们还研究和实现了一个分布式层的死锁检测算法。在本节中,我们将讨论这一层的元素是如何设置的,以及Algon框架的健壮性如何。3.1分布式死锁检测许多算法存在于这类文献中。根据Knapp [10]的说法,M-Misra边缘追踪算法表现良好,提供了正确性证明,并且不会报告错误的死锁。Chandy等人 [4]开发了两种类型的边缘追踪算法,即AND和OR模型。为了讨论的目的,我们将使用OR算法CMO,将其应用于经典的哲学家图5示出了分布式死锁检测算法如何被结合到具有三个节点的系统中。每个节点都有一个哲学家,P h,K. Renaud等人理论计算机科学电子笔记114(2005)6573图五. 用Algon添加一个分布式死锁检测算法以及零个或多个可选资源RSi。用于该算法的掩码与用于互斥算法的掩码不同用于死锁检测算法的方法称为DDBACK。为了使用该算法,Algon框架必须维护对来自Algon框架内的DDR2的每个哲学家的引用(The互斥算法不需要以这种方式实现回调。在我们所主张的关注点分离和从哲学家到哲学家的这种向上联系之间存在着明显的矛盾,因为它似乎打破了所需的分离。然而,必须记住,任何死锁检测算法都需要访问死锁进程和资源,以确定是否存在死锁。唯一能让这个检测过程更顺利的方法是通过检查进程,在这种情况下哲学家,是否可能不可避免地参与了死锁循环。死锁检测活动可以通过不同的方式触发。系统开发人员可以决定应用程序是否应该触发它,如果它已经被阻止等待资源一段时间。但这并不一定表明存在死锁:可能只是网络特别繁忙。即使遵循这种方法,程序员也必须确保将触发过程之前的等待时间调整为当前的平均等待时间。死锁检测也可以定期进行,但这往往会降低系统的速度,如果死锁不常见,则会浪费资源。为了测试我们的系统,死锁检测是从测试应用程序触发的74K. Renaud等人理论计算机科学电子笔记114(2005)65bind()DDR2getResources()得新新一旦确定了死锁的相对频率,系统开发人员就可以确定工业环境中的死锁检测策略。哲学家public void run(){ try {think();right.get(identity);left.get(identity); eat();right.put(identity);left.put(identity);}}该代码可识别为将出现在集中式系统中的代码,指示组件C的用途。例如,需要许多事务以特定顺序请求资源,以最小化死锁的发生。在上面的代码片段中演示了这种类型的排序。然而,即使在这种排序的情况下,也可能偶尔发生死锁,特别是当资源是分布式的并且在应用程序请求资源和将这种资源分配给应用程序之间存在不可避免的时间间隔时。中间件资源应用哲学家图六、设置死锁检测在参与节点之间建立通信的不同参与者之间的交互如图6所示。在应用程序开始执行之前,假定这些资源是可用的。设置过程包括应用程序实例化DDR2,然后实例化经典算法,在本例中是Philosopher。设置过程中的所有其他细节都在DDRIGHT中处理。与其他应用程序不同,例如在每次调用时涉及分布式算法的读者-作家问题[3],哲学家不需要在获取和放置资源的调用中涉及算法。只有当当前情况触发对可能的死锁的调查时,才会调用死锁算法。触发死锁测试时产生的交互如图7所示。的K. Renaud等人理论计算机科学电子笔记114(2005)6575节点1节点2节点3应用DDR2CMOhowever,send()依赖send()依赖关系send()booleanisDeadlockeddetectDeadlock见图7。 死锁测试应用程序或其他一些触发器,调用了在DLL上的detectDeadlock方法。然后,在当前节点上使用该算法,并在其他参与节点上使用该算法,以生成依赖集。分析了这种情况,并对死锁状态进行了诊断该系统如果检测到死锁,则触发检测过程的过程必须请注意,Alfrey-Misra算法检测但不解决死锁。为了处理检测到的死锁,必须将死锁解决算法单独合并到系统中。我们观察到,设计用于互斥情况下的架构在应用于完全不同的算法类型3.2其他类算法在分布式系统中使用的算法和技术传统上分为五类,即互斥算法、死锁检测算法、协议、资源管理技术和故障恢复技术[26]。一个算法被放置在这些类之一的基础上,该算法实现的效果在特定类中检查算法的实现会发现一个有趣的功能:它们都公开相同的方法。例如,互斥类中的算法 公 开 方 法 enterCritical-Section 、 executeCriticalSection 和leaveCriticalSection。死锁检测算法都公开了detectDeadlock方法。凭借这个特性,我们可以通过让类中的所有算法都符合一个干净的接口来抽象它们的实现细节。这也简化了替换应用程序使用的实现的过程,而不改变应用程序本身。需要指出的是,尽管可以将一类算法透明地隐藏在干净的接口后面,但不可能扩展这种功能76K. Renaud等人理论计算机科学电子笔记114(2005)65抽象,涵盖所有类别。不同的是,没有一个接口可以同时公开算法的互斥和死锁检测类的功能。这种情况导致的问题是,在应用程序中直接应用两个(或更多)接口-其中应用接口包括向应用程序添加任何必要的状态维护逻辑-将导致对客户端应用程序的太多更改为了改善这一问题,引入了不同类型的嵌入式组件(如MESched组件、DDBlock组件等).这些钩子负责维护与算法的执行相关联的所有状态,并为应用程序提供方便的钩子来调用算法的服务。这也使我们能够保持Algon框架的体系结构一致,而不管应用程序可能选择应用的分布式算法4中间件层在我们最初的实现中,我们使用Java RMI作为中间件层。我们的目的是在关注Algon可以支持的中间件层的比较可能性之前,集中精力研究算法的可扩展性和算法性能可视化工具的提供。我们希望提供一个独立于中间件的Algon类核心,因为这使得通过合并另一个中间件实现来扩展Algon变得更加简单。这一点很重要,因为它有助于理解特定中间件对系统的影响使Algon独立于中间件并非易事。为了解释这个困难,可以考虑使用java.rmi作为中间件层。如果我们希望使用java工具rmic来方便远程调用表示分布式算法的对象,存根类必须扩展java.rmi.server.UnicastRe-moteObject类。这个类提供了支持远程调用所需的服务器语义. 它还必须实现java.rmi.Remote接口。实现java.rmi.Remote接口的任何类的所有方法都必须抛出java.rmi.RemoteException。这是Java设计者做出的一个有趣而关键的设计决定通过在Java中赋予远程调用与本地调用相似的语义,设计者试图提供一种分布独立性的度量。在Java中,参数传递以两种方式之一发生:对象实例的引用调用和原始类型的值调用。远程调用增加了另一种方式-通过对象序列化提供的深层复制调用。由于Java试图隐藏调用的远程特性,程序员并不总是确切地知道参数是如何被调用的。K. Renaud等人理论计算机科学电子笔记114(2005)6577单播远程对象继承算法里卡特阿格拉瓦接口Ment接口远程接口通过,他/她应该知道的东西,以完善代码,使其更有效。然而,试图使调用的远程性透明化必然会失败,因为本地调用和远程调用的失败语义非常不同。因此,程序员被迫为他/她的系统的分布式组件或将他/她与该系统链接的网络的可能故障进行预防,以用于远程调用。Java通过确保java.rmi.RemoteException被远程使用的类中的所有方法抛出来为了解释在使系统独立于中间件时遇到的问题,我们将在4.1节中扩展Algon算法的继承结构,然后在4.2节中讨论困难,最后在4.3节中介绍AlgonRmic工具,它简化了程序员的过程。4.1使用互斥接口Algon中使用的互斥算法的继承结构如图8所示。每个算法实现特定的接口,该接口由特定功能类型的所有算法实现例如,Ment接口将由所有互排除NoToken算法实现Ment接口定义如下:见图8。 算法继承结构publicinterfacesMentextends Serializable{public void sendRequests();public void reply();public void request();public void getRequestSet();public void println();类78K. Renaud等人理论计算机科学电子笔记114(2005)65类继承算法里卡特阿格拉瓦单播远程对象里卡特阿格拉瓦拉远程接口接口Ment接口public void release();}此外,为了促进分布式系统系统的Algorithm类的专门化还扩展了java.rmi.server.UnicastRemoteObject和Remote类。这确保了算法可以为它们生成存根,并且存根 可以通过java.rmi中间件基础结构分发。然而,如果我们想让系统中间件独立,我们就不能再在系统中如此高的级别上使用java.rmi特定的实现。相反,我们需要在尽可能低的级别上成为特定于中间件的,并推广上层继承结构。见图9。 扩展算法继承结构4.2使中间件独立实现独立并不像看起来那么简单。 看起来解决方案是每个算法都有特定于中间件的实现,这只是扩展了继承结构,如图所示9. 然而,这一解决方案由于两个原因而受到质疑(i) Java中不允许多重继承,因此不允许RicartAgrawala Rmi同时继承RicartAgrawala和UnicastRemoteObject。(ii) Java(a) 必须声明任何可能引发的异常,并且此类声明必须是方法签名的一部分。(b) 一个子类,它覆盖了一个抛出异常必须声明它也会抛出该异常-或者相同K. Renaud等人理论计算机科学电子笔记114(2005)6579一个例外,或一个例外的子类[16]。另一方面,子类中的方法不能抛出异常,除非它的超类方法抛出相同类型的异常。这一特点有利有弊。一方面,了解Java类的方法可以抛出什么异常是很有价值另一方面,当前的限制使程序员无法轻松地调整系统以满足不断变化的需求。因此,RicartAgrawalaRmi必须从所有方法中抛出至少一个RemoteException,因为它实现了Remote接口。因此,它在RicartAgrawala中覆盖的方法也必须抛出RemoteExcep,但这将破坏RicartAgrawala所需的中间件独立性。继承问题的唯一解决方案是使用委托而不是继承。这样就建立了一个成对的继承结构,其中每个算法都有一个依赖于中间件的占位符,它在中间件中用作存根类,并将所有特定于算法的调用中继到实际算法,如图10所示。该过程可以自动化,如第4.3节所述这处理了多重继承问题,但没有处理异常处理问题,因为独立于中间件的算法RicartAgrawala和依赖于中间件的算法RicartAgrawalaRmi都必须 实 现 Ment 接 口 , 并 且 由 于 RicartAgrawalaRmi 必 须 抛 出RemoteException,这意味着Ment也必须抛出Remote Exception,再次击败了算法的中间件独立性。有一种方法可以解决这个问题。我们无法改变Java RMI依赖中间件的算法抛出RemoteException的事实。因此,我们必须确保Ment接口(该算法实现)抛出Exception类型的异常,该异常是RemoteException的超类型。Exception也是Java中抛出的所有其他异常的超类型,因此它也将充当抛出的异常的超类型 任何基于Java的中间件系统。这意味着独立于中间件的算法必须捕获和处理每个Ment接口方法的异常。这不是一个不切实际的期望,因为算法本质上是分布式组件,这一事实将导致它们偶尔因不同的原因而失败。如果Algon系统适应分布式系统的这种现实,那也是一样的。为了实现这种委托,通过添加一个中间件接口来扩展Algon,该接口为Algon提供了一种统一的发现方式,80K. Renaud等人理论计算机科学电子笔记114(2005)65算法单播远程对象里卡特阿格拉瓦继承参考RmiMentAlgorithmImpl接口Ment接口远程接口RmiAlgorithm接口RmiMentAlgorithm接口类见图10。 独立于中间件的成对算法结构调用、访问和操作算法实例。 该层如图11所示。Algon检测用户在实例化期间,所有中间件特定的组件都将启动-例如,在java.rmi的情况下,RmiRegistry。这使Algon用户不必再考虑确保特定中间件实现所需的所有组件都已到位所需的细节。4.3自动化流程使 Algon 独 立 于 中 间 件 的 最 后 一 步 是 定 义 一 个 新 的 异 常 , 称 为MiddlewareException,它可以被所有中间件层用来抛出与中间件相关的异常。由于占位符类(如RmiMentalmImpl)本质上是实际算法的中间件依赖代理,因此它们是由名为AlgonRmic的java.rmi工具生成的。对于像Ment这样的接口,AlgonRmic编译接口,并在其上运行rmic,这样存根和骨架就可以供实现该接口的任何算法使用。5使用Algon有两种机制用于定制运行时行为:配置文件和运行时变量。配置文件用于指定信息,K. Renaud等人理论计算机科学电子笔记114(2005)6581JVM进程中间件中间件实施开始RMICORBAAlgonName服务器Rmi输出显示RmiRegistry流程继承引用见图11。 Algon中间件层无法从运行时环境中发现。 配置文件hosts.prop包含以下信息:• 主站点的IP地址,每个应用程序算法都可以在其中找到Algon名称服务器;• 应该参与系统的算法的数量;以及• 系统应该使用的算法的类名可定制变量用于指定每个站点可定制的行为。以下设置当前可用:• 向命令行生成状态输出语句,以通知系统中的关键变化并协助调试;• 选择是否衡量业绩;• 将使用哪种中间件;以及• Algon输出是应该发送到命令行还是图形用户界面,如图3所示。6相关工作为了与相关的工作进行比较,对Algon进行分类并不是微不足道的。它与相关系统有一些相似之处,当然也应用了关注点分离技术。它也是一个非常专业的程序员工具。一个反应系统通常会对自己进行推理,然后根据这种推理对自己采取行动[15]。这一定义被相当松散地应用于类接口82K. Renaud等人理论计算机科学电子笔记114(2005)65许多不同的系统。响应系统由一个基本层和一个元层组成,元层的变化会导致基本层行为的变化Algon不能被归类为响应系统,因为它不对自己的行为做出反应,而是对运行时配置设置做出反应。配置文件不能真正归类为元对象。因此,我们不能将Algon与相应的系统进行比较。因此,我们将Algon归类为一种工具,它将关注点分离技术应用于算法关注点。已经做了一些研究,为程序员提供工具,将软件的行为特征与功能特征分开[6,9]。该技术已被应用于各种不同的问题,包括实时约束[1],分发和复制[6],异常处理[5],位置控制[17]和同步[14]。基本上有三个AP-实现关注点分离的方法(i) 识别关注点的具体化,并允许程序员在单独的对象中指定每个关注点。这可以在编译时使用代理[22]或在运行时使用反射[30]来完成。另一种方法是方面的定义和面向方面编程的使用[8,9]。方面被设计来处理跨代码的横切关注点。一个方面编织者然后将方面与代码合并,以生成代码,其中关注点以统一的方式处理[21]。Zhang和Jacobsen已经将其应用于中间件架构[31]。(ii) 将关注点视为正交的,并将程序员完全从关注点中解放出来[20]。(iii) 为程序员提供了一个封装复杂性的库[6]。该库通常包含程序员在需要时可以调用的函数第一种方法通常是出于响应目的,但我们不认为Algon正在为系统添加响应功能然而,Algon解决了中间件独立性的问题,而不是跨特定中间件系统的横切非功能性关注点。Algon采用模块化方法,不使用方面。第二种方法也不适合AlgonAlgon与第三类工具最相似。Algon确实提供了一个库,但给程序员提供了额外的选择,并通过性能比较工具支持明智的选择Garf [6]是一种适合第三类并且也解决了差异问题的方法。Garf为程序员提供了一个可扩展的库,用于向分布式程序添加行为特性。当-K. Renaud等人理论计算机科学电子笔记114(2005)6583Garf在当时是一种创新,但它有两个缺点:它是在Smalltalk中实现的,这限制了它的适用性,而且它没有尝试使用其他语言。不同实现技术之间的选择。Algon和Garf一样解决了分布式问题,但都是从算法的角度。而不是提供一个盲目使用的函数库,Algon认识到分布式系统的多样性,并使程序员能够相应地定制他们的系统。7结论在本文中,我们解释了Algon框架是如何运作的,程序员如何使用它来交换和比较算法,以及如何扩展这个概念,使现有的Java-RMI中间件可以动态地被CORBA取代。我们发现,Algon不需要复杂的算法的知识,并且该算法是互换的最低限度的e?在Algon框架的开发中,我们实现了三种流行的算法,用于实现分布式互斥和检测死锁。然而,这些,形成一个非常小的子集,在分布式计算领域提出的算法。未来的工作将包括实现来自上述所有类别的具有代表性的算法和技术。我们还概述了一种允许可互换中间件的技术我们有理由相信,我们将能够扩展的技术,以及其他类型的中间件。这项工作正在进行中。此后,我们将扩展性能可视化界面,目前专门用于反映算法性能,以帮助判断特定中间件对应用程序的性能影响。我们还设想了一个C#版本的Algon,其中CORBA可以与.NET或任何其他未来的中间件系统互换。通过这项研究所吸取的经验教训包括软件组合的实际方面,语言功能对系统设计的影响,以及在运行时评估复杂系统的相关问题。确认这项工作由NRF资助2053401分布式软件框架我们也感谢裁判的有益的意见,改善了文件。84K. Renaud等人理论计算机科学电子笔记114(2005)65引用[1] Aksit,M.,J. Bosch,W. van der Sterren和L. Bergmans,实时指定继承异常和实时滤波器,[28],1994,pp.386-407.[2] Ben-Ari , M. , 分 布 式 算 法 的 交 互 执 行 , ACM Journal of Educational Resources inComputing1(2001)。[3] Bishop,J.M.,K. 诉Renaud和B.Worrall,用Algon组合分布式软件- 概念和可能性,载于:Elsevier ENCS 65,ETAPS Software Composition SC 2002,法国格勒诺布尔,2002年。[4] Chandy , K.M. , J. Misra 和 L.M. Haas , Distributed Deadlock Detection , ACMTransactions on Computer Systems1(1983),pp.144-156[5] 德拉罗卡斯角 对于基于组件的系统的异常处理基础设施,在:CBSE at SIGMETRICS,ACM,Kyoto,Japan,1998,pp. 141-150[6] Guerraoui河,B. Garbinato和K. R. Mazouni,Garf:一个可靠的分布式应用程序编程工具,IEEE Concurrency5(1997),pp. 32比39[7] Kaveh,N.和W. Emmerich,Deadlock detection in distributed object systems,in:V.Gruhn,editor,8th European ESEC and 9th ACM SIGSOFT FSE,Vienna,Austria,2001,pp.44-51.[8] Kiczales ,G. ,Aspect Oriented Programming,ACM SIGPLAN Notices32(1997 ),pp.162[9] Kiczales,G.,E. Hilsdale,J. Hugunin,M. Kersten,J. Palm和W. Griswold,An overviewof ANOJ,in:ECOOP,Budapest,Hungary,2001,pp.327-353[10] Knapp,E.,分布式数据库中的死锁检测,ACM Computing Surveys19(1987),pp. 303-327[11] Kolehofe,B.,M. Papatrianti Fillou和P. Tsigas,用于教育目的的分布式算法可视化,在:第四届ITiCSE,ACM,克拉科夫,波兰,1999年,pp. 103比106[12] Kramer,J.,分布式软件工程,在:第16届ICSE,索伦托,意大利,1994年,页。253[13] 洛 佩 斯 角 , 西 - 地 和 W. Hursch , 关 注 点 分 离 , 技 术 报 告 NU-655-95-03 , 东 北 大 学(1995)。URLciteseer.nj.nec.com/lopes95separation.html[14] 卢 , J , M. Zhang , M. Xu 和 D. Yang , A two-layered class approach for the reuse ofsynchnronization code,Information and Software Technology43(2001),pp.287-294。[15] Maes,P.,计算反射中的概念和实验,见:OOPSLA,ACM,奥兰多,佛罗里达州,1987年,pp. 147-155[16] 米哈伊洛夫, A. 和A. Romanovsky,支持 进化 的 接口 例外情况, 在:A.罗曼诺夫斯基角多尼,J.L. Knudsen和A. Tripathi,编辑,异常处理技术的进展。,2022号,计算机科学讲义,Springer-Verlag,2001年,第2022页。94比110[17] Okamura,H.和Y. Ishikawa,Object location control using meta level programming,in:[28],1994,pp. 299-319[18] Osher,H. Tarr,Using dimensional separation of concerns to(re)shape evolvingsoftware,CACM44(2001),pp.43-50.[19] Parnas,D.L.,关于将系统分解为模块所用的标准,CACM15(1972),pp. 1053-1058[20] Prentezis,T.,“长期运行的高性能持久对象存储的管理”,格拉斯哥大学计算科学系计算科学系2000年毕业论文。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功