客户/服务器计算中的服务器处理设备、方法和程序产品的制作方法

文档序号:6416307阅读:197来源:国知局
专利名称:客户/服务器计算中的服务器处理设备、方法和程序产品的制作方法
技术领域
本发明涉及客户/服务器(也称为“分布式”)计算领域,其中一个计算设备(“客户”)请求另一计算设备(“服务器”)完成一部分客户工作。客户和服务器两者也可都位于同一物理计算设备上。
过去数年来客户/服务器计算在信息技术领域中愈来愈重要。这种分布式计算允许一个机器将其一部分工作分派给另一个可能更适合于完成该工作的机器。例如,服务器可能是一个功能强的运行着管理大量数据的数据库程序的计算机,而客户只是一个桌上个人计算机(PC),它向数据库请求信息以便用于其本地程序。
使用众所周知的称为面向对象编程(OOP)的计算机编程技术后,更增强了客户/服务器计算的优势,OOP允许客户和服务器位于不同(异构)“平台”上。平台是机器用于完成其工作的特定硬件/软件/操作系统/通信协议的组合。OOP允许客户应用程序和服务器应用程序各在它们自己的平台上运行而不必操心客户应用程序的工作请求如何送出并被服务器应用程序所接收。类似地,服务器应用程序不必操心OOP系统如何接收、翻译和送回服务器应用程序处理结果至原请求客户应用程序。
OOP技术如何与异构客户/服务器系统结合为整体的细节在美国专利号5,440,744和欧洲专利公开申请EP 0677,943 A2中得到解释。此处包括这后两项公开以用作参考。然而,下面将给出基本结构的例子,便于前后关联地理解本发明环境。


图1中所示,客户计算机10(例如它可以是在其中装有IBM OS/2操作系统的个人计算机)具有在其操作系统上运行的应用程序40(“IBM”和“OS/2”是国际商业机器公司的注册商标)。应用程序40周期地要求在服务器计算机20上完成工作及/或自服务器20送回数据以备用应程序40随后使用。例如,服务器计算机20可以是在IBM的MVS操作系统上运行的强功能大型计算机(“MVS”也是IBM公司的注册商标)。对于本发明的目的而言,不论要服务器执行通信服务的请求是由第一个应用程序40通过用户交互所提出的,或是在程序运行期间应用程序40与用户交互无关地运行并自动地提出请求,都不重要。
当客户计算机10希望提出请求要服务器计算机20服务时,第一应用程序40将服务请求通知第一逻辑装置50。例如它可将远距过程名称连同一系列输入和输出参数送至第一逻辑装置而做到这点。然后第一逻辑装置50处理下一任务参照存储于存储设备60中的可用通信服务的定义建立与第二计算机20的必要通信。所有可能的服务定义为对象类70的聚合框架,而这些类都从单个对象类派生而来。以此方式定义这些服务,在性能和可重用性方面提供很多优点。
为建立与服务器20的必要通信,第一逻辑装置50确定需要使用框架中哪个对象类,然后在服务器上建立该对象的实例,向该对象发送一个消息以使该对象调用其方法中的一个。这导致通过连接装置80与服务器计算机20建立连接,及随后向第二逻辑装置90发送请求。
第二逻辑装置90接着将请求往前送至在服务器计算机20上运行的第二应用程序100(今后称为服务应用程序),以便服务应用程序100能完成该请求所要求的具体任务,例如运行一个数据检索过程。一旦完成此任务,服务应用程序可能需将结果送回至第一计算机10。在执行请求的任务期间及当需将结果送回至第一计算机10时,服务应用程序100与第二逻辑装置90交互作用。第二逻辑装置90建立对象实例并调用这些对象的合适方法,当由服务应用程序100要求时,从存储于存储设备110中的对象类的聚合框架中建立对象实例。
使用上述技术时,客户应用程序40不会暴露给通信体系结构。此外,服务应用程序100是通过其标准环境机制被调用的,它不知道是被远程调用的。
对象管理组(OMG)是一个国际性联合组织,从事于带有分布式对象(如图1中所示)的异构平台上客户/服务器计算的各方面工作。OMG已刊印标准,客户计算机(例如10)可据以与服务器计算机(例如20)通信(以OOP形式)。作为这些标准的一部分,定义了一个对象请求代理程序(称为CORBA-公共对象请求代理体系结构),它在客户和服务器机器之间提供面向对象的桥梁。ORB将客户及服务器应用程序与面向对象实施细节分离,完成第一和第二逻辑装置50和90及连结装置80的至少部分工作。
作为CORBA软件结构的一部分,OMG提出了与“事务”有关的标准,这些标准称为OTS或对象事务服务。例如参阅CORBA对象事务服务规定1.0,OMG文件94.8.4。计算机实现的事务处理系统用于不少工业中的重要业务任务。一个事务规定单个工作单元,它或者应该完全地完成,或者应该不加操作地完全地清除。例如,在用户自其中提取钞票的银行自动取款机的情况下,发放钞票、减少机器中可用现钞的结算值和减少用户的银行结算值这些操作必须或者全部执行或者一项也不执行。附属操作中有一项失败将导致记录和实际事件之间不一致。
分布式事务处理涉及能影响不止一个物理或逻辑位置处的资源的事务。在上述例子中,一个事务影响到当地自动取款机管理的资源以及银行主计算机管理的银行结算。这些事务涉及一个具体客户计算机(例如10)在一系列由服务器处理的客户请求上与一个具体服务器计算机(例如20)通信。OMG的OTS负责协调这些分布式事务。
通常,一个在客户过程上运行的应用程序启动一个可能调用多个不同服务器的事务,而这些服务器中每一个启动一个服务器过程以便按照事务中包含的指令改变其本地数据库。事务结束时或者提交该事务(因而所有服务器最后完成它们本地数据库的改变),或者放弃该事务(因而所有服务器“滚回”或忽视它们本地数据库的改变)。为在事务处理期间与服务器通信(例如指示它们将事务中它们的部分或者提交或者放弃),所涉及的过程中的一个必须为该事务维持状态数据。这通常涉及用于建立一系列事务状态对象的过程,这些对象中之一是协调对象,它相对于不同服务器而协调事务。
图2显示一种常规OTS实施方式,它是由国际商业机器公司开发,并包括于1997年5月所宣布的部件代理系列(IBM公司的注册商标)产品中。希望启动一个事务(例如自银行帐户中提取现款)的客户过程21需要寻找一个能建立和保持那些将维持事务状态的事务对象的过程。由于现代趋势是建立“瘦”的客户(因而只具有最少的功能),因此客户过程21通常没有能力本地维持事务对象,必需寻找能满足此目的的服务器过程。
根据现有技术的方法,OTS(或其它服务,例如CORBA生命周期服务)找到一个在其上建立事务状态对象(包括协调对象223,控制对象221和结束对象222)的服务器过程。根据此现有技术总是挑选同一服务器过程(图2中服务器A过程22)。找到服务器A过程22后,客户过程21向服务器A过程22发送一个消息(带圆圈数1的箭头)以指令服务器A过程22建立事务状态对象。控制对象221(在OTS中为CosTransactions∷Control)提供对另两个事务状态对象的访问。结束对象(在OTS中为CosTransactions∷Terminator)用于结束事务。协调对象223(在OTS中为CosTransactions∷Coordinator)在本地存储器225中维持一个资源对象(例如银行帐号对象224,231)(在OTS中为CosTransactions∷Resource)的表,这些资源对象在事务期间已将它们的相应数据更新过。此表是需要的,以便协调对象223可在事务结束时一致性地调用它们从而或者实现它们的事务改变(将它们的本地数据作最后改变)或者滚回这些改变(将本地数据恢复至事务开始前的状态)。例如,当由于资源中的一个不能恰当地工作而使事务不能恰当地结束时,滚回是必需的。
接着服务器A过程22建立事务状态对象(221,222,223)并向客户21发送一个包含事务上下文的回答(带圆圈数2的箭头)。然后客户21向服务器B过程23(该过程包括客户过程21希望从中提取现款的银行帐户对象231)发送一个借方银行帐户命令(带圆圈数3的箭头)。此后一命令带由服务器A过程22向客户21提供的事务上下文。以此方式,过程23中的银行帐户对象231可向协调对象223登记本身(带圆圈数4的箭头)以使银行帐户对象231可被命令(带圆圈数5的箭头)来在事务结束时由协调对象223执行改变或滚回。
在以上操作中,当协调对象223与其它事务状态对象221和222一起建立时,协调对象223必须记录有关它自身和它在本地存储器225所代表的事务的信息,以便在发生临时地阻止服务器A过程22继续事务处理的故障的情况下使事务可以恢复。
有许多事务在同一服务器过程(服务器A过程22)中启动和结束,同时并不需要资源去更新其本地数据。对于这类事务,实际上启动事务的是一个服务器过程(而不是上面所讨论的客户过程)。例如,一个在自动取款机(ATM)中运行的客户过程21代表只想获取他的银行帐户结算的银行帐户主人(在图2中由银行帐户对象224所代表)在执行任务。客户过程21向服务器过程22发送结算查询命令,服务器过程22包含该客户希望检查其结算的银行帐户对象224。因此,服务器过程22通过建立三个事务状态对象221,222和223来启动事务。协调对象223访问本地存储器225以便记录该事务,使其成为可恢复。事务进而访问银行帐户对象224,读取其结算并将它返回给客户过程21。事务结束时使用结束对象222以撤消其它事务状态对象221和223,然后结束对象222将它自己撤消。
在后面这类事务中,现有技术的实施是效率不高的。由于在整个事务处理期间不须调用更多服务器过程及没有一个本地资源将本地数据更新,协调程序的将事务登记至存储器225的功能就成为不必要了。此外,协调程序必须实例化这一不争的事实占用一些处理功能,而后者本来可以更好地用于服务器过程22其它地方。
根据第一方面,本发明提供一种用于执行事务处理的客户/服务器计算系统中的服务器处理设备,该设备具有用于接收命令的装置,该命令指示服务器处理设备执行事务步骤;用于启动事务的装置;及用于判断在执行事务期间是否发生预定触发事件的装置,以及只当发生触发事件时,才相对于执行事务中涉及的多个元件而建立一个用于协调事务的装置。
触发事件最好是接收一个将作为事务一部分的本地资源更新的请求。触发事件还最好是接收一个调用作为事务一部分的附加服务器处理设备的请求。
在最佳实施例中,用于协调的装置是一个协调对象,正如公共对象请求代理体系结构的对象事务服务(CORBA的OTS)所定义的,以及在执行事务中涉及的元件是本地资源或远距服务器过程。用于协调的装置最好命令每个涉及事务的本地资源及/或远程服务器过程去执行它们相应的事务处理。
根据第二方面,本发明提供一种用于执行以上在第一方面中描述的服务器功能的方法。
根据第三方面,本发明提供一种存储于计算机可读存储媒体上的计算机程序产品,当它在计算机中运行时,用于执行第一方面的功能。
因此,使用本发明后,在发生一个要求使用协调对象的触发事件之前,并不将协调对象实例化,因而可以高效使用服务器处理器周期。因此,如事务不产生这种触发事件,则不将协调对象实例化,因而节省服务器的处理器周期。还有,如果不将协调对象实例化,则节省对本地存储器的写操作,不然当首次将协调对象实例化以使协调对象为恢复目的而登记事务的存在时,将会发生写操作。
下面参照附图阅读本发明优选实施例的描述时,将能更好地理解本发明。
图1是一个众所周知的使用对象技术的异构客户/服务器体系结构,在它的环境中可应用本发明优选实施例;图2是显示常规OTS实施的框图;图3是显示根据本发明优选实施例的OTS实施的框图;以及图4是当客户发出根据图3的OTS实施的启动事务命令时,显示服务器过程内发生的步骤的流程图。
现参照图3(框图)和图4(功能流程图)描述本发明优选实施例。在将要使用的阐述例中,假定自动取款机(ATM)是客户,将要执行的事务是银行帐号的结算查询,一个每天进行的世界范围内的经常执行的公共事务操作。
公共对象请求代理(CORBA)对象事务服务(OTS)提供称为“Current”的接口对象,后者有一个由在过程中运行的应用程序(源码)用于启动事务的“begin”方法。当应用程序在特定体系结构上建立或运行并包含“begin”方法时,基础OTS软件将运行(如以上结合现有技术所描述的)以便通过在服务器过程中建立事务状态对象而建立事务。
应注意,在现有技术中,一旦向远程服务器过程22送出一个指令服务器执行事务步骤(例如检查银行帐户结算)的命令时,服务器过程22即调用“Current”接口上的“begin”方法,结果在该服务器过程22中将三个事务状态对象(221,222和223)实例化。本发明只在此早期阶段(见图3)建立控制和结束对象(221和222),从而改变了此现有技术。如将要描述的,只当发生预定触发事件时才在稍后阶段建立协调对象223。
在步41(图4),服务器过程22自客户过程21接收结算查询命令(见图3中带圆圈数1的箭头)。在步42,服务器过程22将控制和结束对象221和222实例化,从而建立事务状态对象。应清楚地注意到,此处并未建立协调对象223。
然后在服务器过程22中所运行的应用程序的控制下,事务正常地进行。在事务进行期间,服务器过程进至步43,其中它判断是否下面两个情况都发生了1)收到更新本地资源的请求否?本地资源(例如银行帐户对象224)是一个位于与控制和结束对象(221,222)相同的服务器过程(22)中的对象。当事务进行结果改变了本地资源的值,即发生这类资源更新。例如,如事务命令从由本地资源银行帐户对象224所代表的银行帐户中取款,这涉及银行帐户对象224减少(例如改变)可用资金结算值,而这是对结算值的更新。2)协调对象尚未被实例化否?如下面将看到的,步43可重复地执行,因此有可能在以前运行中通过稍后步骤将协调对象实例化。此情况只确定是否尚未建立协调对象。
因此,在步43,如事务请求更新本地资源(如银行帐户对象224)以及如尚未将协调对象223实例化,则控制进至步44以将协调对象223实例化。也即,出现了一个要求将协调对象223调用入事务的触发事件(已请求将本地资源更新)。事务中在此点之前不需要协调对象223,因此在事务中需要对象223之前本发明并不建立对象223。
然而,如果这两个情况中之一或两者都未出现,则控制进至步45,其中服务器过程22确定是否已都出现两个情况1)收到涉及附加服务器过程的请求否?作为指令该事务的应用程序的一部分,保持事务对象的服务器过程22通常得到指令以调用另一个服务器过程(例如图2中的服务器B过程23)。当事务试图访问该附加服务器过程的资源(例如银行帐号对象231)时这通常发生。例如,有时一个事务要求比较两个不同银行帐户对象的结算。步45的此第一情况判断服务器过程22是否已收到调用事务中另一服务器过程的请求。2)协调对象尚未实例化否?再有可能在以前运行中通过流程图步骤将协调对象实例化(在步44)。此情况只判断协调对象是否尚未被建立。
因此在步45,如事务请求调用附加服务器过程(例如服务器过程23)以及如协调对象223尚未实例化,则控制进至步44以将协调对象223实例化。也即,出现了要求将协调对象223调用入事务的触发事件(曾请求调用附加服务器过程)。在事务中此点之前,不需要协调对象223,因此在事务中需要此对象223之前本发明并不建立此对象223。
然而,如步45的两个情况中之一或两者都未出现,则控制进至步46,其中服务器过程22判断事务是否已请求完成事务。如不是,则控制退回至步43以重复步43至46,并依据事务当前状态采取具体分支(是或否)。
如在步46事务准备结束,则控制进至步47,其中服务器过程22判断协调对象223是否曾实例化(也即,是否曾执行步44)。如不是(例如客户ATM只要求检查由对服务器过程22讲是本地的银行帐户对象224所代表的银行帐户结算的情况),则控制进至步49,其中结束对象222撤消控制对象221,然而撤消它自身。
然而,如在此事务处理期间曾将协调对象223实例化,则协调对象223使用它曾登记入存储器225的信息来以众所周知方式执行事务的协调式关闭(步48)。也即,协调对象223调用每一个已更新过其数据的本地资源(例如224)和调用每一个在事务处理期间曾被调用(其结果是此远程过程23将该调用送至其本地资源231)的远程服务器过程(例如23),以便指令这些资源或者执行或者滚回它们相应的改变。然后结束对象222完全以现有技术中所知常规方式撤消控制对象221和协调对象223,然后再撤消它自身(步50)。
下面是为实施本发明需对IBM的部件代理产品做编程改变的概要(使用以上讨论的现有技术)。
1)当启动一个事务时,有对象CosTransactions∷Control可供应用程序通常通过对象CosTransactions∷Current来使用。如启动事务的请求是在服务器内发出的,则只建立对象CosTransactions∷Control(221)和对象CosTransactions∷Terminator(222)。
2)当将可恢复资源更新时,应用程序必须为该事务向对象CosTransactions∷Resource(如224)登记一个对象CosTransactions∷Coordinator(223)。为得到对象CosTransactions∷Coordinator(223),必须调用方法CosTransactions∷Control∷get_coordinator()。如尚未建立对象CosTransactions∷Coordinator(223),则它在调用方法CosTransactions∷Control∷get_coordinator()时被建立。
3)当准备将请求送至其它服务器时,调用OTS截听程序。它们使用接口CosTransactions∷Current以访问对象CosTransactions∷Control(221)。然后它们调用方法CosTransactions∷Control∷get_coordinator()去访问对象CosTransactions∷Coordinator(223)以便获取CosTransactions∷PropagationContext并将它与请求一起发送。还有,如不存在对象CosTransactions∷Coordinator(223),则在方法CosTransactions∷Control∷get_coordinator()中建立它。
4)当调用对象CosTransactions∷Terminator(222)以结束事务时,它查看是否已建立对象CosTransactions∷Coordinator(223)。如已建立,则调用对象CosTransactions∷Coordinator(223)并以正常方式结束该事务(步48和50)。如不存在对象CosTransactions∷Coordinator(223),则它就简单地撤消它自身和对象CosTransactions∷Control并返回(步49)。
通过突破常规技术中将所有事务同等对待的禁锢,本发明能大量节省服务器的处理器周期。在当前启动运行的事务的上下文中需要协调式事务关闭机制(优选实施例中的对象Coordinator 223)之前,并不建立该机制。当现行运行事务不需要登记时,这也可防止事务登记至存储器中。
权利要求
1.用于执行事务处理的客户/服务器计算系统中的服务器处理设备,所述设备包括用于接收指令服务器处理设备执行事务处理步骤的命令的装置;用于启动事务处理的装置;以及用于判断在执行事务处理期间是否出现预定触发事件的装置,及只当出现触发事件时,才建立用于相对于在执行事务处理中涉及的多个元素协调事务处理的装置。
2.权利要求1的设备,其中所述触发事件是接收一个将作为事务处理一部分的本地资源更新的请求。
3.权利要求1的设备,其中所述触发事件是接收一个调用作为事务处理一部分的附加服务器处理设备的请求。
4.权利要求1的设备,其中所述用于协调的装置是如公共对象请求代理体系结构的对象事务服务(CORBA的OTS)所定义的协调对象。
5.权利要求1的设备,其中所述在执行事务中所涉及的元素是本地资源或远程服务器过程。
6.权利要求5的设备,其中所述协调操作涉及命令每个在事务处理中涉及的本地资源和/或远程服务器过程执行它们相应的事务活动。
7.用于执行事务的客户/服务器计算系统中的服务器处理方法,在服务器上执行的所述方法包括以下步骤接收指令服务器执行事务处理步骤的命令;启动事务;以及判断在执行事务处理期间是否出现预定触发事件,及只当出现触发事件时,才建立用于相对于在执行事务处理中涉及的多个元素协调事务处理的装置。
8.权利要求7的方法,其中所述触发事件是接收一个将作为事务处理一部分的本地资源更新的请求。
9.权利要求7的方法,其中所述触发事件是接收一个调用作为事务处理一部分的附加服务器处理设备的请求。
10.权利要求7的方法,其中所述用于协调的装置是如公共对象请求代理体系结构的对象事务服务(CORBA的OTS)所定义的协调对象。
11.权利要求7的方法,其中所述在执行事务中所涉及的元素是本地资源或远程服务器过程。
12.权利要求11的方法,其中所述协调操作涉及命令每个在事务处理中涉及的本地资源和/或远程服务器过程执行它们相应的事务活动。
13.存储于计算机可读存储媒体上的计算机程序产品,当所述计算机程序产品在服务器计算机上运行时,所述产品执行在执行事务处理的客户/服务器计算系统中使用的服务器处理方法,所述方法包括以下步骤接收指令服务器计算机执行事务处理步骤的命令;启动事务;以及判断在执行事务处理期间是否出现预定触发事件,及只当出现触发事件时,才建立用于相对于在执行事务处理中涉及的多个元素协调事务处理的装置。
全文摘要
一种用于在执行事务处理的客户/服务器计算系统中的服务器处理方法具有以下步骤:接收指令服务器执行事务处理步骤的命令;启动事务;以及判断在执行事务处理期间是否出现预定触发事件,及只当出现触发事件时,才建立用于相对于在执行事务处理中涉及的多个元素协调事务处理的装置。
文档编号G06F9/30GK1236918SQ9910395
公开日1999年12月1日 申请日期1999年3月10日 优先权日1998年3月18日
发明者阿曼达·埃里萨贝斯·切瑟尔, 马丁·穆尔霍兰德, 卡塞恩·萨哈·沃 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1