服务器内分派客户请求时执行语义并发控制的装置和方法

文档序号:6414760阅读:194来源:国知局
专利名称:服务器内分派客户请求时执行语义并发控制的装置和方法
技术领域
本发明涉及客户-服务器(也叫“分布式”)计算领域,其中一个计算设备(“客户机”)请求另一个计算设备(“服务器”)执行客户机的部分工作。
过去几年以来,客户-服务器计算在信息技术世界中已经变得越来越重要。这种分布式计算允许一台计算机将其某些工作委托给另一台计算机,后者-例如一有可能更适于执行该工作。
客户-服务器计算的益处,由于使用了称为面向对象的程序设计(OOP)这种著名的计算机程序设计技术,已经进一步得到加强。面向对象的程序设计允许客户机与服务器位于不同的(异类的)“平台”。平台是计算机用来进行工作的特定硬件-软件-操作系统-通讯协议的一种组合。OOP允许客户应用程序和服务器应用程序在它们自己的平台上运行,而无须考虑客户应用程序的工作请求将如何与服务器应用程序通信并被接受。同样,服务器应用程序无须考虑OOP系统将如何接收、转换服务器应用程序的处理结果并将其传送回发出请求的客户应用程序。
OOP技术如何与异类客户-服务器系统结合,其细节在美国专利号5,440,744和欧洲专利公开申请号EP0677,943A2中有所解释。本文引用这两篇公开文献作为参考。不过,下文将给出一例基本体系结构,以利读者有上下文来理解本发明的环境。


图1所示,客户机10(例如可以是一台安装了IBMOS/2操作系统的个人电脑)有一个应用程序40在其操作系统上运行(“IBM”和“OS/2”是IBM公司的商标)。应用程序40将定期地要求将工作在服务器计算机20上执行,并且/或者将数据从服务器20返回,供应用程序40以后使用。服务器计算机20例如可以是一个运行IBM的MVS操作系统的高能主计算机(MVS也是IBM公司的商标)。就本发明来说,要求由服务器执行通讯访问的请求,是用户与第一个应用程序40的交互作用提出的,还是应用程序40不依赖用户的交互作用而独立操作、在程序运行期间自动提出请求的,这对于本发明来说无关紧要。
当客户计算机10希望提出一个请求,要求服务器计算机20的服务时,第一应用程序40向第一逻辑装置50通知所要求的服务。通知方法例如是,将某个远程过程的名称连同一列输入和输出参数一起发送给第一逻辑装置50。第一逻辑装置50然后处理这样的任务,即通过查阅在存储器60中存储的对可用通讯服务的定义,建立与第二计算机的必要通讯。所有可能的服务都被定义成一个对象类内聚框架(cohesive framework of object classess),这些类(class)是从一个单一对象类导出的。用这种方法来定义服务在效能和可重用性方面具有很多优点。
为了建立与服务器20的必要通讯,第一逻辑装置50首先判断需要使用框架中的哪个对象类,然后创建该对象的一个实例(instance);向该对象发送一个信息,以使该对象调用它的一个子程序(method)。其结果是通过连接装置80建立了与服务器计算机20的链路,随后发送一个请求到第二逻辑装置90。
第二逻辑装置90将请求传递到服务器计算机20上运行的第二应用程序100(本文以下称为服务应用程序),以便服务应用程序100能执行该请求要求的特定任务,例如运行一个数据检索过程。该任务一旦完成,服务应用程序可能需要将结果发送回第一计算机10。服务应用程序100在执行请求任务期间以及在向第一计算机10反馈结果时,与第二逻辑装置90交互作用。第二逻辑装置90建立对象的实例,并在服务器应用程序100要求时,按要求调用这些对象的适当子程序。对象实例是根据存储器110中存储的对象类内聚框架创建的。
由于采用以上技术,客户应用程序40就不向通讯体系结构暴露。此外,服务应用程序100是通过为其环境的标准机构被调用的,所以它不知道自己正被远程调用。
对象管理组织(OMG)是一个国际性组织,涉及在图1所示异类平台上的客户-服务器计算的各个方面。OMG已经发布了客户计算机(例如10)与服务器计算机(例如20)通讯(以OOP形式)的公开标准。这些标准中有一部分定义了一种对象请求代理器(ORB-Object Request Broker),它起着客户机与服务器计算机之间面向对象的桥路的作用。ORB从面向对象的执行细节中断开客户和服务器应用程序的连接,至少执行第一第二逻辑装置50与90以及连接装置80的部分工作。
图2表示这种系统的常规体系结构。一旦客户请求经过对象请求代理器21进入服务器,对象请求代理器就寻找能执行请求的某个服务器对象,并将请求发送给该服务器对象的对象适配器22(也由OMG标准定义),请求被存储在对象适配器的缓冲器中,等待由服务器对象处理。服务器对象有多个并行执行线程(23a、23b、23c),服务器对象可以在其中任何线程上执行自己的一个实例。这样,服务器对象就可以同时处理多个请求。对象适配器22负责查看并行的执行线程中哪个准备好执行另一个请求,并将位于缓冲器外出端的请求分配给下一个可用执行线程。这在上述美国专利中被描述成服务器将排队请求分派给执行线程的“分派”机制。
图2的OMG标准服务器体系结构特别适用于事务处理领域。计算机实现的事务处理系统在许多产业中被用于执行重要的商业任务。一个事务定义一个单一工作单元,它要么完全被完成,要么就根本不执行。以银行自动柜员机为例,如果有顾客欲从自动柜员机取款,则送出钞票、减少机器中的现款余额、减少客户的银行帐户余额诸动作,要么必须全部发生,要么哪一个都不得发生。这些子动作中无论哪个发生错误,都会导致记录与实际不符的后果。
分布式事务处理涉及的事务,影响到多处物理或逻辑位置的资源。在上面的例子中,事务既影响自动柜员机管理的资源,也影响银行主计算机管理的银行收支记录。这类事务牵涉到一个特定的客户计算机(例如图1的10)与另一个特定的服务器计算机(例如图1的20)就服务器处理的一系列客户请求进行的通讯。
在典型的客户-服务器系统中,客户系统和服务器系统对这类事务的总体处理各自都有工作。此外,同一时间可能会有许多不同的客户试图使用同一服务器来处理各自的事务。例如,许多不同的ATM机(客户系统)可能会试图同时开始事务以访问在银行大型中央服务器上运行的流行数据库程序中的数据。在这些情况下,服务器必须能够隔开这些并发事务,以防它们彼此影响。就是说,在一个事务处理完(事务的所有部分都了结,或者所有部分都放弃)之前,其它试图访问相同服务器对象的事务必须被迫等待。
例如,如果在城市一边一家银行的ATM机上,丈夫试图将$2000从家庭的支票帐户转到利息更高的家庭存款帐户,与此同时,在城市另一边的(不同一家银行所有的)ATM机上,其太太正试图执行同样的事务,则服务器必须能够有效地处理这种情况,使这两个并发事务不会对拥有该数据库服务器的银行产生问题。
解决这种问题的典型方法是,服务器数据库程序对并发访问进行事务锁定(transactional locking)。就是说,一旦第一个客户(例如该丈夫的ATM)请求访问数据库中存储的家庭帐户数据,服务器的数据库管理系统(DBMS)就锁定访问。然后,尽管太太的事务已经并发地提出了请求,但是丈夫的事务会继续独立地得到处理。太太的客户ATM无权访问该数据,因为丈夫的客户ATM已经对该数据上了锁。
在服务器应用程序中(即DBMS中)设置的并发控制功能,对于上述一类的数据库服务器来说,运作得还不错,这是因为在这些服务器的管理系统软件中已经融入了复杂的锁定技术。然而,如果上述系统要使用其它类型的应用程序,就要求服务器应用程序的程序员在编写面向对象的程序是将复杂的锁定方案加入其程序中。此外,程序员还必须深入了解事务处理理论,以便能够在程序的并发控制内容中建立适当的事务处理上下文。
为了解决这个问题,IBM公司1997年1月25日申请了一个专利(英国专利申请号9701566.3),在该专利公开的方法中,事务锁定在ORB(图2的21)内执行。就是说,该方法在各客户请求向对象适配器22传送途中经过ORB21时,判断是否有必要为服务器资源上锁,如果与当前保留的锁不冲突,就为这些资源上锁。如果存在冲突,则新来的请求必须等待,直到当前保留的冲突锁(被以前的请求)释放。
然而,在上述这两种现有技术方法中,要进行并发控制就必须为服务器资源上锁。这种上锁的步骤如下所述。首先,将新来的请求分派到可用的线程,创建服务器对象的一个实例。第二,为该线程获得本地存储器来存储服务器对象的该实例。第三,将服务器对象相联的程序和数据写入该存储器。第四,访问用于执行的相关文件。最后,在执行上述四个步骤之后,为该服务器对象上锁,以确保不允许以后的请求与该先到的请求对该服务器对象的资源的访问产生冲突。对于下一个分派的请求,执行前四个步骤,如果该请求要求访问被锁定的资源,则该请求必须等待,直到该服务器对象的锁被第一个请求释放。
用锁来执行并发控制的结果是经常使中央处理机单元(CPU)资源得不到有效利用,在并发请求的数目增加时尤其如此。例如,假设2000个用户都共用同一个汇率对象,其中1999个客户要获得某个人们经常关心的汇率(例如美元对英镑)的最新值,另一个用户要更新该汇率的值。如果采用上锁的方法,则要用到2000个线程,要分配2000个本地存储器存储区。要分派这么多请求到线程、获得这么多存储区、写入大量程序、访问大量文件,就需要很大数目的CPU处理周期。所以,本领域极其需要有一种更有效的方法来分派客户请求。
本发明的一个方面是,提供一种在面向对象的异类客户-服务器计算环境中分派客户请求供服务器对象执行的装置,该装置包含一个存储请求的缓冲器,缓冲器有一个输入端和一个输出端,前者与一个向该装置输送客户请求的通讯通道相连;与缓冲器输出端相连的多个执行线程;一个语义并发控制装置,其作用之一是,检查缓冲器中某请求的语义以及多个并行的执行线程中的任何执行线程上当前正被执行的各请求的语义,其作用之二是,如果对请求的语义检查表明,从缓冲器向执行线程分派请求会导致对服务器对象的资源的访问冲突,则推迟这种分派。
最好是,缓冲器包含在对象适配器内。进一步最好是,通讯通道中包括一个对象请求代理器。进一步最好是,语义并发控制装置在判断分派缓冲器中的一个请求是否与已经分派给线程的请求冲突时,要考虑服务器对象的状态。
本发明的第二个方面是,提供一种在面向对象的异类客户-服务器计算环境中分派客户请求供服务器对象执行的方法,该方法包含以下步骤检查存储请求的缓冲器中的某请求的语义,其中该缓冲器有一个输入端和一个输出端,前者与一个向本发明装置传输客户请求的通讯通道相连;检查与缓冲器输出端相连的多个并行的执行线程中的任何执行线程上当前正被执行的各请求的语义;如果对请求的语义检查表明,从缓冲器向执行线程分派请求会导致对服务器对象的资源的访问冲突,则推迟这种分派。
本发明的第三个方面是,提供一种计算机程序产品,它在计算机上运行时,执行本发明第二个方面的方法。
因此,运用本发明,由于没有必要对服务器对象资源加锁,于是服务器对象就能对在服务器处收到的客户请求更高效执行并发控制,节省大量的CPU处理周期。具体来说,如果上锁,则缓冲器中的所有请求都被分派给各线程,存储器被分配给每个分派的请求,对每个分派的请求发生其它的相关处理。然而,运用本发明,从缓冲器分派一个请求(以及为该请求分配存储器)只在判定该请求对服务器对象资源的访问不会与线程上当前正在执行的其它请求产生冲突时才发出。
要更好地理解上述发明,可以阅读下文结合以下各附图对一个最佳实施例的详细说明。
图1的框图表示一种已知的采用对象技术的异类客户-服务器体系结构,本发明可应用到其上下文。
图2是按照常规设计的一种服务器体系结构的框图。
图3是按照本发明一个最佳实施例的一种服务器体系结构的框图。
图4是表示按照本发明一个最佳实施例的处理步骤的一个流程图。
在图3的最佳实施例中,服务器进程接收的来自客户进程的请求,首先由服务器的对象请求代理器31接收。ORB31然后将以某服务器对象为目的地的请求传递到该服务器对象的对象适配器32。该服务器对象有多个并行的执行线程33a、33b、33c,各执行线程上能并行运行该服务器对象的不同实例,以便执行大量的客户请求。这些与上述的图2表示的现有技术类似。
根据图3表示的本发明的最佳实施例,在图2表示的现有技术中附加了另外一个软件单元。这一附加软件单元是并发控制单元34,它从对象适配器32接收一个输入,也从各执行线程33a~33c接收输入并向对象适配器32提供一个输出。并发控制单元34执行的功能保证,如果将对象适配器32中的某客户请求分派给某执行线程会导致对服务器对象的资源的访问冲突,则不将该客户请求分派给该执行线程。
在以下为说明本最佳实施例的操作而描述的例子中,服务器对象代表一个银行帐户。于是,以下讨论的各种请求都是要访问某银行帐户的请求。有一个排队请求是来自某客户ATM(自动柜员机)要求从该帐户提取资金的请求。发出该请求的请求人是该帐户的所有人,希望提取一些资金。发出第二个排队请求的是一个银行官员,他请求查询该银行帐户的透支数额(可能该帐户上的余额快要接近零,因此该银行官员担心该帐户帐面会发生赤字)。第三个排队请求来自另一个客户ATM,目的是查看该帐户的余额。发出该请求的是帐户所有人的太太,她在城中与所有人不同地点的另一个ATM上。
并发控制单元34接受输入对象适配器32中缓冲器顶部的请求(即队列中下一个要分派给执行线程33a、33b或33c的请求),以确定请求的语义。就是说,并发控制单元34要确定,该请求是对该银行帐户对象请求读访问,还是对该银行帐户对象请求写访问,或者既不是对该银行帐户对象请求读访问,又不是对该银行帐户对象请求写访问。
并发控制单元34也从线程33a、33b和33c接受输入,以确定当前正在线程上执行的请求的语义。就是说,并发控制单元34要确定,当前正在线程上执行的各请求涉及的是对该银行帐户对象请求读访问,还是对该银行帐户对象请求写访问,或者既不是对该银行帐户对象请求读访问,又不是对该银行帐户对象请求写访问。
接着,并发控制单元34将对象适配器32中缓冲器顶部的请求的语义,与当前正在线程(33a、33b、33c)上执行的各请求的语义进行比较。并发控制单元34只有在认定如果将服务器适配器32中顶部的请求分派给某可用线程不会导致对服务器对象的资源的访问冲突时,才将该客户请求分派给该可用线程。
例如,如果缓冲器顶部的请求是太太要求查看银行帐户余额的请求,则并发控制单元34检查该请求的语义后确定这是一个读请求。该请求的目的仅仅是读银行帐户的余额(而不会改变数据库中该帐户相联的任何数据的值)。假设现在只有一个请求正在某线程(假设是33a)上执行,即银行官员要求查看该帐户上预定的透支,并发控制单元34则检查该请求的语义后确定这又是一个读请求(不必改变任何存储数据,只是将透支数目返回给该官员)。因为这两个请求都是读请求,所以并发控制单元34就将对象适配器32中该顶部请求分派给其它某个线程(例如是33b)。
然而,如果当前正在线程33a上执行是帐户所有人要求取款的请求,对象适配器32的顶部请求是太太要求查看银行帐户余额的请求,执行结果则不一样。因为当前正在线程33a上执行的请求表明它是一个写请求(因为其结果是减少该银行帐户的余额),所以对象适配器中缓冲器顶部的请求(其目的是读同一个余额)就不被分派给线程,而是被迫等待,直到线程33a上的请求执行完成。
本发明的最佳实施例执行的步骤如图4的流程图所示。
在步骤4l,并发控制单元34检查排在对象适配器32中缓冲器顶部的请求(该请求是下一个由缓冲器分派的请求)的语义。就是说,并发控制单元34要确定该请求是请求对服务器对象资源读访问,还是请求对服务器对象资源写访问。
步骤42,并发控制单元34检查当前正在线程33a、33b、33c上执行的各请求的语义。就是说,并发控制单元34要确定执行请求正在执行是对服务器对象资源读访问,还是对服务器对象资源写访问。
步骤43,并发控制单元34用其在步骤41和42所收集的信息来确定,该顶部请求是可以被分派(步骤44)给一个可用执行线程,还是应当让其等待(步骤45),直到至少有一个当前执行请求的执行完成了对该服务器对象资源的访问。其做法是,如果有一个读请求在缓冲器的顶部等待分派,而所有当前执行的请求都是读请求,则可以将该读请求分派给某个可用线程去并发执行,因为对同一服务器对象资源的并发读操作之间不存在冲突。然而,如果一个写操作与另一个写操作或者与读操作并发执行,则存在冲突。因此,如果分派对象适配器32中的顶部请求会导致后一种情况的发生,则并发控制单元34就要推迟分派。
根据服务器对象的性质,并发控制单元34在决定是否允许分派某请求时,也可以具体考察服务器对象的状态。例如,假设服务器对象是这样一种队列,其队列中的每一元素对于读/写来说都是可单独寻址的。来自第一个事务的请求正在请求读位于该队列前面的元素,并且该请求已经被分派给执行线程。此时,就可以将正在请求向队列中最后一个元素写数据的(正在等待分派的)第二个请求,并发地分派给同一个服务器对象,即使该第二个请求正在请求要写访问的,正是(假设该队列不是空队列)第一个请求已经被允许进行读访问的同一个服务器对象。这是因为,第二个请求尽管是个写请求,却不与第一个请求(这是读请求)冲突。原因就在该服务器对象由多个元素组成,这些元素能被不同的请求单独地访问而不会彼此冲突。
此外,并发控制单元34没有必要总是考虑将缓冲器中的顶部请求作为下一次分派的候选对象。并发控制单元34可以检查缓冲器中所有请求和不按顺序地挑选请求来分派。
权利要求
1.一种在面向对象的异类客户-服务器计算环境中分派客户请求供服务器对象执行的装置,该装置的特征在于包含一个存储请求的缓冲器,缓冲器有一个输入端和一个输出端,前者与一个向该装置输送客户请求的通讯通道相连;与缓冲器输出端相连的多个并行执行线程;一个语义并发控制装置,其作用之一是,检查缓冲器中某请求的语义以及多个并行的执行线程中的任何执行线程上当前正被执行的各请求的语义,其作用之二是,如果对请求的语义检查表明,从缓冲器向执行线程分派请求会导致对服务器对象的资源的访问冲突,则推迟这种分派。
2.权利要求1的装置,其特征在于缓冲器包含在一个对象适配器内。
3.权利要求1的装置,其特征在于,通讯通道包括一个对象请求代理器。
4.权利要求1的装置,其特征在于,语义并发控制装置在判断分派缓冲器中某请求是否与已经分派到线程上的请求冲突时,还要考虑服务器对象的状态。
5.一种在面向对象的异类客户-服务器计算环境中分派客户请求供服务器对象执行的方法,其特征在于包含以下步骤检查一个存储请求的缓冲器中一个请求的语义,其中该缓冲器有一个输入端和一个输出端,前者与一个向该装置输送客户请求的通讯通道相连;检查与缓冲器输出端相连的多个并行的执行线程中的任何执行线程上当前正被执行的各请求的语义;如果对请求的语义检查表明,从缓冲器向执行线程分派请求会导致对服务器对象的资源的访问冲突,则推迟这种分派。
6.权利要求5的方法,其特征在于缓冲器包含在一个对象适配器内。
7.权利要求5的方法,其特征在于,通讯通道包括一个对象请求代理器。
8.一种在计算机可读介质上存储的计算机程序产品,当用于在计算机上运行时,执行一种在面向对象的异类客户-服务器计算环境中分派客户请求供服务器对象执行的方法,该方法的特征在于包含以下步骤检查一个存储请求的缓冲器中一个请求的语义,其中该缓冲器有一个输入端和一个输出端,前者与一个向该装置输送客户请求的通讯通道相连;检查与缓冲器输出端相连的多个并行的执行线程中的任何执行线程上当前正被执行的各请求的语义;如果对请求的语义检查表明,从缓冲器向执行线程分派请求会导致对服务器对象的资源的访问冲突,则推迟这种分派。
9.权利要求8的产品,其特征在于缓冲器包含在一个对象适配器内。
10.权利要求8的产品,其特征在于,通讯通道包括一个对象请求代理器。
全文摘要
本发明提供一种在面向对象的异类客户—服务器计算环境中分派客户请求供服务器对象执行的装置,该装置包含:一个存储请求的缓冲器;与缓冲器输出端相连的多个并行执行线程;一个语义并发控制装置,作用之一是,检查缓冲器中某请求的语义以及多个并行的执行线程中的任何执行线程上当前正被执行的各请求的语义,作用之二是,如果对请求的语义检查表明从缓冲器向执行线程分派请求会导致对服务器对象的资源的访问冲突,则推迟这种分派。
文档编号G06F9/46GK1225473SQ9812597
公开日1999年8月11日 申请日期1998年12月31日 优先权日1998年2月4日
发明者T·弗罗因德, I·S·C·豪斯顿 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1