服务器之间无状态会话的透明迁移的制作方法

文档序号:6491661阅读:192来源:国知局
专利名称:服务器之间无状态会话的透明迁移的制作方法
技术领域
本发明涉及管理工作量,并且特别地,涉及多节点计算机系统内的工作量管理。
背景技术
许多企业数据处理系统依靠多节点数据库服务器来存储和管理数据。这样的企业数据处理系统通常遵循多层模型,该模型在第一层中有多节点数据库服务器,并且在中间层和外层有一个或多个计算机。
图1示出了多节点数据库服务器mds11,其在多层体系结构10上执行。服务器(例如多节点数据库服务器mds11)是集成软件构件和计算资源(例如存储器、节点、以及节点上用于执行处理器上的集成软件构件的进程(process))的分配的组合,软件和计算资源的组合用于为一个或多个客户机(client)执行特殊功能。来自多节点计算机系统中的多个节点的资源可以被分配,以运行特殊服务器的软件。节点上的软件和来自该节点的资源的分配的特殊组合是服务器,其在此称为服务器实例或实例。因此,多节点服务器包括可以在多个节点上运行的多个服务器实例。多节点服务器的若干实例甚至可以在同一节点上运行。
数据库服务器管理和促进对特殊数据库的访问,处理客户机的访问数据库的请求。多节点数据库服务器(诸如多节点数据库服务器mds11)包括多个“数据库实例”,每个数据库实例都在节点上运行。多节点数据库服务器mds11管理对数据库db11的访问。多节点数据库服务器可以管理和促进对一个或多个数据库的访问。
多层体系结构10的中间层包括中间层计算机cmp11,并且外层包括用户计算机cmp12。用户计算机cmp12执行浏览器br11,其与终端用户相互作用。终端用户与浏览器br11的相互作用使得浏览器通过网络(例如因特网)向中间层计算机cmp11发送请求。该请求使得中间层计算机cmp11(客户机c11)上的进程执行应用程序appl11。通过客户机c11执行应用程序appl11使得客户机c11连接到多节点数据库服务器mds11。例如,应用程序appl11可以是定单登记应用程序,其被设置为从浏览器br11接收定单请求。用于该定单登记应用程序的数据存储在db11中。为了处理这些请求,通过客户机c11执行应用程序appl11使得客户机c11连接到数据库db11。一旦连接,则客户机c11发出数据库语句,以检索和操作存储在数据库db11中的数据。
相对于多层体系结构中的其它层而言,直接连接到服务器的层在这里指的是包括服务器的客户机。因此,客户机进程c11在这里指的是多节点数据库服务器mds11的客户机。
在此使用的术语应用程序是软件单元,其被设置为与服务器功能相互作用并且使用服务器功能。一般地,应用程序包括集成的功能和执行一组相关功能的软件模块(例如,包括机器可执行代码或可解释代码、动态链接库的程序)。
应用程序(诸如应用程序appl11)经由客户端接口元件intcomp11与多节点数据库服务器mds11相互作用。应用程序appl11的执行使得客户机c11执行客户端接口元件intcomp11,以与多节点数据库服务器mds11相互作用。应用程序appl11包括客户端接口元件intcomp11的例程(例如函数、程序、对象方法、远程过程)的调用。应用程序通常由卖方和开发组开发,该开发组不同于那些开发服务器和服务器接口(例如多节点数据库服务器mds11和客户端元件intcomp11)的开发组。
为了使客户机与多节点数据库服务器mds11相互作用,为客户机在多节点数据库服务器mds11的数据库实例上建立会话(session,对话)。会话(例如数据库会话)是为客户机到服务器(例如数据库实例)建立的特殊连接,通过该连接客户机发布一系列请求(例如,执行数据库语句的请求)。
对于在数据库实例上建立的每个数据库会话,会话期间保持会话状态。会话状态包括在数据库会话期间为数据库会话存储的数据。这样的数据包括,例如,为其建立会话的客户机的身份、以及由执行数据库会话内的软件的处理和数据库元件所产生的临时变量值。数据库元件是为数据库服务器提供专业和相关功能的一组软件模块,下面将更详细的描述。数据库元件的例子是Java执行引擎。
会话的开始和结束划分工作单元。通常,数据库会话的开始对应于终端用户经由例如浏览器建立与应用程序的交互式会话,并且当终端用户注销时结束。因此,数据库会话的开始和结束取决于应用程序逻辑和终端用户动作,并且可以不受其上建立了会话的服务器的控制。
客户端接口元件客户端接口元件(例如客户端接口元件intcomp11)是软件构件,该软件构件存在于服务器的客户机的同一计算机上并且在其上执行,并且被设置为提供在客户机与服务器之间的接口。客户端接口元件intcomp11被设置为执行与多节点数据库服务器mds11连接所需要的详细操作。例如,应用程序appl11调用客户端接口元件intcomp11的函数,以建立到多节点数据库服务器mds11的连接。客户端接口元件然后处理多节点数据库服务器mds11的特殊实例上的连接的详细资料。为了对多节点数据库服务器mds11做出请求,诸如执行查询的请求,应用程序appl11被设置为调用客户端接口元件intcomp11的函数,其然后将相同的请求发送到其上建立了会话的节点和数据库实例。
客户端接口元件intcomp11可以产生和/或访问对其它软件模块隐藏的状态,换句话说,该状态不被或可能不被其它软件模块,特别是应用程序appl11引用和访问。这种状态指的是客户端接口元件intcomp11内部的或专用的。
例如,为了在多节点数据库服务器mds11上创建数据库会话,应用程序appl11调用客户端接口元件intcomp11的例程。客户端接口元件在多节点数据库服务器mds11内的特殊数据库实例上建立数据库会话,并且存储关于内部数据结构或对象内的数据库会话的详细资料。这种数据结构和对象定义,例如为应用程序建立的会话,并且规定这样的值为,例如,数据库实例上会话的身份、数据库实例的名称、以及用于到数据库实例的连接的网址和端口数。
会话的这种详细资料并不被返回到应用程序appl11,应用程序appl11也不能访问这些详细资料。相反地,提供到应用程序appl11的是用于会话的“外部标识符”,例如客户端接口元件intcomp11的内部数据映射到会话的值,或者是对由客户端接口元件intcomp11所生成的对象的索引(reference,参考),以将会话的某些详细资料存储在应用程序appl11不能够访问到的对象的专用属性中。这样,应用程序appl11不“知道”已经为其建立的会话的特殊详细资料;然而,应用程序appl11具有为了能够将已经为应用程序appl11建立的特殊会话识别到客户端接口元件intcomp11所需要的信息。
分配工作量管理多节点数据库服务器所需的重要能力是在节点之间分配工作量。分配工作量用于通过最优地平衡节点之间的工作量来提高性能。分配工作量还允许工作从为维护操作而脱机的节点转移到另一个节点。
为了提高性能,使用连接时间平衡来分配多节点数据库服务器上的工作量。在连接时间平衡的情况下,当用于客户机的数据库会话被创建时,工作量在连接时间被分配。特别地,当客户机请求在多节点数据库服务器上建立数据库会话时,基于工作量考虑,该会话被放置在实例或节点上。例如,客户机将对会话的请求发送到多节点数据库服务器。多节点数据库服务器确定不比其它节点忙的节点,并且在该节点上为客户机建立会话。
连接时间平衡的缺点在于其不能重新平衡现有的会话;它只能在会话创建时平衡会话。由现有的会话创建的工作量不能被转移,并且直到客户机主动自愿减少或停止做出请求和/或终止会话时才降低。结果,工作量转移的定时受事件影响,而不受多节点数据库服务器的控制。
基于以上所述,提供一种在会话已经被创建之后转移会话的客户机的工作量的方法显然是理想的。


通过附图中的实例来描述本发明,但是不局限于此,在附图中相同的参考标号表示类似的元件,其中图1是计算机系统的多层体系结构的框图。
图2是示出可以在其上实施本发明的实施例的多节点计算机系统的框图。
图3是示出根据本发明的实施例的参与迁移会话的应用程序服务器、源数据库实例、以及目标数据库实例的框图。
图4是示出根据本发明的实施例的使用会话的一部分会话状态的数据库元件的框图。
图5是示出根据本发明的实施例的在服务器之间迁移会话的协议的实体-相互作用的图。
图6是可以用于实施本发明的实施例的计算机系统的框图。
具体实施例方式
本文描述了用于在分布环境中的节点之间迁移会话的方法和装置。在下面的描述中,为了解释的目的,陈述了大量的特殊细节以提供对本发明的全面理解。然而,显而易见,本发明在没有这些特殊细节的情况下也可以实践。在其它的实例中,以框图的形式示出了公知的结构和装置,以避免不必要地模糊本发明。
在此描述了这样的技术,其允许客户机以对于为其建立了初始会话的应用程序而言透明的方式,从服务器上的会话切换到另一个服务器上的另一个会话。术语“迁移”指的是一种操作,其中,服务器上的现有会话的客户机从现有会话切换到另一个会话,允许现有会话被终止并且允许客户机使用另一个会话来代替现有会话。现有会话在此指的是已经被迁移。术语“透明的”指的是通过相对于软件单元而言不需要执行适于执行操作的单元中的指令的方式来执行该操作。因此,在透明的会话迁移的情况下,客户机在不执行适于完成该迁移的应用程序指令的情况下在会话之间被切换。相反地,客户端接口元件(应用程序通过其与服务器相互作用)处理迁移的详细资料,修改客户端接口元件的内部状态以实现该状态。不需要修改传统应用程序来建立在此所描述的技术。
在会话迁移的情况下,客户机请求多节点系统上的会话,并且在运行在节点上的“源服务器”上为客户机建立会话。客户机被切换到“目标服务器”上的“目标会话”。由客户机使用目标会话代替源服务器上的会话。
会话在一定的条件被迁移,其中,从源节点迁移的会话的会话状态的副本不需要被俘获和被恢复为目标服务器上的目标会话。客户机指定这些条件。此外,客户机可以将特殊会话可以在不需要俘获会话的状态的情况下被迁移识别到服务器。以该方式迁移会话允许会话被更快地迁移,因为不需要在服务器之间转移状态。
会话迁移的参与者可以包括计算机上的客户机、源服务器、和目标服务器,每个参与者位于多节点系统中的不同节点上。参与者遵循协议的变化,该协议允许会话迁移对于应用程序或为其建立了会话的其它软件模块透明地发生。
透明的会话迁移在此被说明为可以在多节点数据库服务器上被实施。然而,本发明的实施例并不局限于迁移存放(host)在多节点数据库服务器上的会话。
说明性的计算机系统图2示出用于说明本发明的实施例的n层数据库系统dbs20、N层计算机系统。第一层包括存放于数据库群集dbc20上的多节点数据库服务器mds20,第二层包括存放于计算机上的应用程序服务器aps20,并且外层包括终端用户会话usr20,该会话是在与通过网络连接而连接到应用程序服务器aps20的进程相关的计算机上的会话。
数据库群集dbc20包括节点nd21、nd22、nd23、和nd24。数据库群集dbc20中的节点可以是经由网络互连的计算机(例如,工作站、个人计算机)形式,并且可以是网格的一部分。
多节点数据库服务器mds20管理并促进对数据库dbs20的访问。多节点数据库服务器mds20包括数据库实例inst21、inst22、inst23、和inst24。
直接地或通过另一台计算机连接到作为多节点数据库服务器的一部分的数据库实例以访问由该数据库实例管理的数据库的客户机,在此指的是数据库实例的客户机、多节点数据库服务器的客户机、或数据库的客户机。例如,不是数据库群集dbc20的一部分的计算机上的进程执行应用程序,并且被连接到数据库实例inst23以访问数据库db20。该进程指的是数据库实例inst23的客户机、多节点数据库服务器mds20的客户机、以及数据库db20的客户机。类似地,应用程序服务器aps20是多节点分布式数据库服务器mds20和数据库db20、以及应用程序服务器aps20连接到的任何数据库实例的客户机。
工作量管理器wm20是在数据库群集dbc20上运行的进程,负责管理存放在数据库群集dbc20上的数据库实例上的工作量。工作量管理器wm20可以在数据库群集dbc20的一个或多个节点(包括节点nd21、nd22、nd23、和nd24)上运行。工作量管理器的例子是在Incremental Run-Time Session Balancing中描述的数据库导控器(director),其通过将一个或多个会话从源数据库实例迁移到目标数据库实例来执行运行时会话平衡。
应用程序服务器aps20是存储应用程序的应用码、提供对该应用码的访问、并执行该应用码的服务器。应用程序服务器aps20将数据库请求发送到多节点数据库服务器mds20。响应于执行存储在应用程序服务器上的应用码,该请求可以由应用程序服务器aps20生成。应用程序服务器aps20可以包括这样的应用程序,例如定单登记应用程序,其被设置为将数据库语句传送到数据库服务器mds20,以操作保存用于定单登记应用程序的数据的数据库db20上的表格。应用程序服务器可以具有多个节点上的多个实例。应用程序服务器的例子是Oracle 9i应用程序服务器或Oracle 10g应用程序服务器。
应用程序服务器aps20还可以执行许多功能来管理终端用户会话usr20,其涉及与除数据库服务器以外的其它类型服务器的相互作用。这样的服务器包括目录服务器和证书服务器。
终端用户会话usr20的进程可以为例如执行经由诸如因特网的广域网或公用网络连接到应用程序服务器aps20的浏览器。响应于由浏览器发送到应用程序服务器aps20的请求,应用程序服务器aps20执行应用码,向数据库服务器mds20发布数据库语句,并且生成网页以回传到浏览器。
为客户机建立的会话为了使数据库服务器mds20的客户机(诸如应用程序服务器aps20)与多节点数据库服务器mds20相互作用,在数据库实例上为客户机建立数据库会话。客户机可以通过将数据库连接请求传送到数据库群集dbc20来建立数据库会话。接收器(listener)接收数据库连接请求。接收器是在数据库群集dbc20上运行的进程,其接收客户机数据库连接请求,并且将这些请求指向数据库群集dbc20内的数据库实例。
一旦为客户机建立了数据库会话,客户机就可以发布附加请求,该附加请求可以是远程过程调用的形式,并且包括下列目的的请求,即开始执行事务、执行查询、执行更新和其它类型的事务操作、提交或相反终止事务、以及终止数据库会话。
应用程序服务器aps20还为用于终端用户会话usr20的连接建立应用程序会话。来自终端用户会话usr20的进程的多个请求可以与同一应用程序会话相关。应用程序会话可以为被分配的在应用程序服务器aps20内运行的一个或多个进程。这样的进程在此称为应用程序会话进程。
说明性的客户机以及源实例和目标实例图3是更详细地示出根据本发明实施例的用于说明透明的会话迁移的应用程序服务器aps20以及数据库实例inst22和inst24的框图。实例inst22和inst24分别被标记为源实例inst22和目标实例inst24。
应用程序服务器aps20存放应用程序会话asess30,并且包括客户端接口元件csi30。应用程序服务器aps20经由客户端接口元件csi30与多节点数据库服务器mds20相互作用。应用程序服务器aps20包括客户端接口元件csi30的例程(例如,函数、程序、对象方法、远程过程)的调用。应用程序服务器aps20的执行使得应用程序服务器aps20执行客户端接口元件csi30,以与数据库群集dbc20相互作用。
为了解释的目的,当通过进程实际执行软件使得进程执行特殊动作时,诸如应用程序服务器aps20和客户端接口元件csi30的软件模块,在此被描述为执行那些动作。例如,当应用程序服务器aps20被描述为发送或接收消息或访问数据时,执行该应用软件的进程正在发送信息或接收消息或访问数据。
会话汇合(pooling)应用程序服务器aps20保持会话池(pool)sp131和sp132作为源实例inst22和目标实例inst24上的“预先建立的”数据库会话的池。当需要用于应用程序会话的数据库会话时,应用程序服务器aps20从会话池中分配一个会话。数据库会话随后从应用程序会话解除分配,并变成可用于随后分配到另一个应用程序会话。当应用程序会话以这种方式被分配或解除分配时,数据库会话分别指的是被检出(check-out)和检入(check-in)。数据库会话被检出和检入时间之间的时间间隔与数据库会话的持续时间相比相对较短。数据库会话可以被多次检出到多个应用程序会话。
例如,用户使用与终端用户usr20相关的浏览器来订购书籍。浏览器在应用程序服务器aps20上建立应用程序会话asess31以执行用于订购书籍的订购应用程序。订购应用程序需要查询数据库服务器mds20以获得关于用户正在搜索的书籍的数据。应用程序服务器aps20将数据库会话s_sess31从会话池sp131检出到应用程序会话。订购应用程序向数据库服务器发布查询,查询结果被返回到订购应用程序,然后数据库会话s_sess31被检入。接着,订购应用程序需要发布数据库语句以使数据库改变为建立书籍订购。来自会话池sp131的另一个数据库会话被检出到应用程序会话asess31。
在数据库会话s_sess31被检入之后,另一个应用程序会话(应用程序会话asess32)需要数据库会话来返回书籍订购。数据库会话s_sess31被检出到应用程序会话asess32,使得做出数据库改变所需要的数据库语句可以被发布到数据库服务器mds20。数据库会话s_sess31然后被检入,并随后被另外多次检出到多个其它应用程序会话。
调用(call)调用是由客户机向服务器做出的执行任务的请求。一般地,调用由执行软件模块中的例程的调用的进程做出。调用使得该进程执行该例程(这种执行可能本身需要调用和执行其它例程),然后返回到执行模块到在调用的点或恰好超过调用的点(或某些其它指定的点,例如,异常处理程序)。
调用可能需要以一个或多个输入参数传到被调用例程,并且返回值作为一个或多个输出参数。消息可以被传送作为一部分输入参数和一部分输出参数。通常做出对数据库实例的调用以执行任务,例如执行数据库语句。由调用传送的消息可以包括作为输入参数的查询字符串,以及作为输出参数的查询结果或对结果的位置的索引。
远程过程调用是由进程做出的例程的调用,其中,在相同或不同节点和/或计算机上的另一个进程执行被调用的例程。另一个进程被称为远程进程。调用通过通信连接(例如网络连接)将执行例程的请求传送到另一个进程而做出。同样,输入参数和输出参数也通过连接被传送。当远程进程执行过程时,调用进程的执行被挂起或阻塞。
调用使得调用进程或远程进程执行被调用的例程,这可能引起其它例程的调用和执行。当调用返回时,调用终止。被执行作为被调用例程的执行的一部分的操作,指的是在调用内做出。
例如,为了访问(make a call)数据库群集dbc20,应用程序服务器aps20调用客户端接口元件csi30的函数。响应于该调用,客户端接口元件csi30执行该访问,其需要客户端接口元件csi30修改并访问由客户机端接口元件csi30存储在存储器中的“本地”数据,并且客户端接口元件csi30对源实例inst22做出多次远程过程调用,该多个远程过程调用包括第一远程过程调用和第二远程过程调用。响应于第一远程过程调用,源实例inst22执行各种操作。本地数据的修改和访问、多个远程过程调用、以及由源实例inst22执行的各种操作,指的是在由应用程序服务器aps20做出的“应用程序调用”内执行。当执行由第一远程过程调用所调用的例程(可能需要执行其它例程)时由源实例inst22执行的各种操作在此指的是在第一远程过程调用内被执行、因为第一远程过程调用由客户端接口元件csi30做出所以在客户端调用内的第一远程过程调用内被执行、以及因为当执行由应用程序服务器aps20所调用的例程时远程过程调用由客户端接口元件csi30做出所以在应用程序调用内被执行。应用程序调用或客户端调用在此都可以称为客户机调用。
数据库元件数据库元件是提供专用和相关功能的数据库服务器上的一组软件模块。在会话期间被执行的数据库元件可以生成并使用一部分会话状态,在此称为元件会话状态。图4示出示例性的一组数据库元件和它们在会话状态sesst40内的各自的元件会话状态。会话状态sesst40是数据库会话s_sess31的会话状态。图4示出下列数据库元件光标(cursor,指针)元件dc41、PL/SQL元件dc42、会话参数元件dc43、和Java元件dc44。
光标元件dc41用于管理诸如源实例inst22和目标实例inst24的数据库实例内的光标。光标是用于存储关于已分析的数据库语句的信息和涉及数据库语句的处理的其它信息的存储器的区域。光标元件dc41使用和存储光标状态cs41中的信息,其中光标状态是会话状态sesst40内的元件会话状态。
PL/SQL元件dc42负责执行用PL/SQL编写的代码(例如,过程),PL/SQL是Oracle公司公布的过程数据库语言。该元件使用元件会话状态PL/SQL状态cs42来存储涉及PL/SQL代码的执行的信息,例如变量值和已分析的PL/SQL语句。
会话参数元件dc43负责管理属性,属性通常控制与会话相关的调用和请求如何被处理。属性存储在元件会话状态参数状态cs43中。例如,会话参数可以包括为通过执行查询返回的结果控制特殊人类语言的属性。
Java元件dc44负责执行用Java编写的代码(例如,类和对象方法)。该元件使用元件会话状态Java状态cs44来存储涉及Java代码的执行的信息。
有状态和无状态会话以及会话迁移对于给定的数据库会话,当未来应用程序调用并不取决于由先前应用程序调用所产生的会话状态时,数据库会话是无状态的。当未来应用程序调用取决于由先前应用程序调用所产生的会话状态时,数据库会话是有状态的。
由于未来应用程序调用对有状态会话的会话状态的潜在依赖性,有状态数据库会话的迁移需要确定存储在源实例上的部分会话状态是否可以被转移到另一个数据库实例,如果可以,则在源数据库实例与目标实例之间转移会话状态的副本。在Transparent SessionMigration Across Database Servers中描述了用于迁移有状态会话的技术。
正如这里所描述的,进行各种迁移检验以确定会话状态是否可以被转移到另一个数据库实例。这些迁移检验包括确定数据库会话是否在事务边界、是否在调用边界、或是否在元件边界。
如果当前没有活动事务(active transaction)被执行用于会话,则数据库会话在事务边界。事务是被执行作为原子单位的工作的逻辑单元。在数据库系统的环境下,数据库必须反映由事务做出的全部变化,或不反映由事务做出的任何变化以确保数据库的完整性。因此,没有由事务做出的变化被永久地应用于数据库,直到事务已经被完全地执行。当使由事务所做出的变化永久时,交易被称为“提交”。如果事务还没有被提交、中止、或终止,则事务是活动的。
如果数据库实例已经完成执行客户机调用而不是处于处理该调用的中间阶段,则会话在调用边界。例如,为了处理执行数据库语句的调用,数据库实例经过多个阶段,每个阶段对应于特殊类型的操作。这些阶段是(1)创建光标,(2)分析数据库语句并绑定其变量,(3)执行数据库语句,(4)取出行从而返回给查询,和(5)关闭光标。在8.0版Oracle8 Server Concepts的第三卷(其内容结合于此作为参考)的第23章中更为详细地描述了这些阶段。中间阶段是在对调用的处理完成之前执行的操作。在当前实例中,中间阶段为阶段(1)-(5)。在源实例inst22响应于调用而执行步骤(5)以后,源会话sess30在调用边界。
如果会话的每个数据库元件都在其各自的元件边界,那么会话在元件边界。如果数据库元件的元件会话状态可以被迁移到另一个会话,则数据库会话在特殊数据库元件的元件边界。数据库元件提供了返回指示数据库元件的各个元件会话状态是否可以被迁移的值的功能。数据库会话的元件会话状态不可以被迁移的原因在于,元件会话状态包括打开文件的文件描述符。该文件描述符包含只对存放数据库会话的实例有效的信息。
迁移无状态会话与有状态数据库会话不同,无状态数据库会话可以被迁移到另一个实例,而无须俘获存储在源实例上的会话状态的副本并将该副本恢复为目标实例和会话。此外,如果已知数据库会话是无状态的,就可以不必执行这样的迁移检验以确保会话状态可以被转移到另一个实例,诸如确定数据库会话是否在元件边界的检验。
数据库会话何时变成无状态以及多久一次变成无状态主要取决于客户端行为,包括应用程序的行为和由应用程序用于与数据库服务器相互作用的接口元件的行为。例如,应用程序服务器aps20以以下方式使用数据库会话,即如果在一个数据库会话的持续时间内不是多次变成无状态,数据库会话就变成无状态的多个会话。当数据库会话被检出时,其通常仅用于处理应用程序会话内的一个或少数应用程序调用,然后被检入。该检出和检入的循环被重复另外的多次用于多个其它应用程序会话。在一次循环期间,例如,做出应用程序调用以查询数据库服务器。在另一次循环期间,做出多个应用程序调用以开始事务、做出变化、然后提交事务。在循环内做出的应用程序调用通过以下方式做出,即这些调用并不取决于先前循环期间产生的会话状态。事实上,由于安全方面的原因,这种依赖性可能是不合需要的。在每个应用程序调用之后和/或每个事务之后,也就是在应用程序调用边界和/或在每个事务边界,实例inst22和inst24上的数据库会话能够变成无状态。
会话池功能可以由诸如客户端接口元件321或Java数据库元件的接口元件来执行。正如将要详细描述的,因为接口元件执行会话池功能,所以它们的行为影响数据库会话是否是无状态。这种接口元件还具有确定数据库会话是否是无状态的足够信息。因此,接口元件可以在不需要执行和/或改变应用码以处理迁移无状态会话的任何详细资料的情况下,用于执行迁移无状态会话的详细资料。
根据这里所描述的用于无状态会话的迁移的技术,多节点服务器的客户机(诸如响应应用程序或客户端接口元件的执行的应用程序服务器aps20上的客户机)向服务器提供了无状态标准,该标准指示一个或多个条件,在该条件下数据库会话是无状态的并因此可以被迁移。例如,无状态标准可以规定数据库会话在事务边界、调用边界、或其组合处是无状态的。
透明会话迁移协议图5是用于说明用于无状态会话的会话迁移的协议的实体相互作用图。根据实施例,该协议涉及如Transparent Session MigrationAcross Servers中所描述的用于迁移有状态会话的相同或相似消息的传输。这些协议在此总称为有状态协议。消息被分别地传输,这是因为每个消息都表示一特殊组操作的完成(例如会话状态转移的完成),并且这些信息被用于在开始另一阶段的会话迁移以前验证该组操作的完成。但是,这样的操作不是以这里所描述的无状态会话迁移协议来执行;因此不要求完成这些操作及其验证。因此,这些消息的传输可以成束。
使用应用程序服务器aps20、源实例inst22、和目标实例inst24作为协议的参与者来描述该协议。该协议由迁移启动器来启动,迁移启动器是用于确定和/或请求一组会话将要被迁移的实体。例如,工作量管理器wm20可以确定一组会话将要从源实例inst22被迁移到目标实例inst24,从而将工作量从源实例inst22转移到目标实例inst24。工作量管理器wm20生成迁移该组会话的请求。请求会话迁移从而在数据库实例之间转移工作量的工作量管理器wm20,只是实体的一个实例,并且目的是请求会话迁移;可以存在为了其它类型的目的而请求迁移一组会话的其它类型的实体。例如,负责关闭数据库实例的实体可以迁移当前由数据库实例存放的所有会话,从而该数据库实例可以被关闭。
为了说明的目的,多节点数据库服务器mds20已经从应用程序服务器aps20接收无状态标准,该无状态标准规定,如果数据库会话在应用程序调用边界,则为应用程序服务器aps20建立的数据库会话可以被迁移。
在步骤505,源实例inst22接收迁移请求1,该请求是迁移一列一个或多个会话的请求。该请求从诸如工作量管理器wm20的会话迁移启动器被传送。被选择或指定用于会话迁移的会话,在此被称为选定会话。为了说明的目的,要转移的会话的列表只包括一个选定会话,即源会话s_sess31。
在步骤520,源实例inst22执行无状态检验,也就是,确定是否满足了无状态标准。在当前的例子中,源实例inst22确定源会话s_sess31在应用程序调用边界。
一旦源实例inst22已经在步骤520确定满足了无状态标准,则在步骤525,源实例inst22等待客户机对源会话s_sess31的调用,并且截取该调用以发送下列消息束——选择消息2、准备迁移消息3、和切换消息8。调用指的是被截取,这是因为虽然调用被用于实现涉及会话迁移的某些动作(例如发送选择消息2),但是调用也是为除了实现这种动作之外的某些目的(例如请求执行查询)而做出的。返回到客户机的输出参数包括可以具有多种属性的“输出数据结构”。源实例inst22通过将输出参数的属性设置为特殊值来传输选择消息2、准备迁移消息3、和切换消息8。
选择消息2通知客户端接口元件csi30,已经为迁移选择了选定会话。准备迁移消息3指示客户端接口元件csi30建立目标实例inst24上的源会话,并且包含用于建立到目标实例inst24的连接的连接信息。切换消息8指示应用程序服务器开始使用目标会话并且终止源会话。
被截取的调用在来自应用程序服务器aps20的应用程序调用内被启动。剩余的协议在该应用程序调用内被执行。
在步骤527,应用程序服务器aps20向目标实例inst24传输建立目标会话的请求。在数据库实例上建立会话可能需要鉴定应用程序服务器aps20。为了鉴定应用程序服务器aps20,鉴定信息(例如,用户名和口令)通过客户端接口元件csi30被提供到源实例inst22。客户端接口元件csi30早先已经从应用程序服务器aps20接收了鉴定信息,从而在数据库群集dbc20上建立会话。
应用程序服务器将目标会话的会话参数设置为与源会话s_sess31的会话参数相同的值。已经将该值提供到源实例inst22用于源会话s_sess31的客户端接口元件csi30,已经保留了这些值并且使用它们来设置目标实例inst24的会话参数。
在步骤530,目标实例inst24建立目标会话。
在步骤555,应用程序服务器aps20切换到目标会话。客户端接口元件的内部状态(诸如映射源会话的外部标识符的内部数据)被修改,以反映目标会话现在是客户机的会话。然后,应用程序服务器aps20将迁移结束消息传输到源实例inst22。迁移结束消息9包含指示应用程序服务器aps20和/或目标实例inst24已经成功地完成了它们各自的会话迁移部分的数据。最后,应用程序服务器aps20向源实例inst22发送信息以终止源会话。在随后的客户机和由应用程序服务器aps20进行的应用程序调用中,使用目标会话来代替源会话。
在有状态迁移协议中,准备迁移消息3和切换消息8被分别地发送,以引起和验证有状态会话迁移所需要的特定操作被执行。无状态会话迁移不需要这些操作。例如,在有状态迁移协议的情况下,准备迁移消息3不仅使得客户机建立会话,而且使得目标实例建立迁移通道。迁移通道用于传递会话状态的副本。关于迁移通道的信息被发送到客户机,客户机进而将信息发送到源实例。源实例经由迁移通道来传递会话状态。当所有会话状态的传输已经完成时,源实例发送切换消息8。
在无状态迁移协议中,在源实例上的会话状态的副本没有被俘获并在源实例与目标实例之间被转移。因此,不需要延迟发送切换消息8直到状态已经被完全地转移。因此,切换消息可以与准备迁移消息3一起被发送。
步骤520到步骤555在单个应用程序调用内被执行。应用程序服务器aps20不知道或不需要知道当应用程序调用开始时与外部会话标识符相关的特殊数据库会话不同于当应用程序调用返回时与外部会话标识符相关的特殊数据库会话。不需要为了迁移会话而执行适于处理数据库会话的会话迁移的任何应用程序指令。这样,数据库会话已经被透明地迁移到应用程序。
应用程序规定的迁移边界在实施例中,应用程序服务器aps20向数据库服务器mds20规定数据库会话何时是无状态以及何时不是无状态。为了规定数据库会话是无状态的,应用程序服务器aps20向数据库服务器mds20发送识别无状态数据库会话的消息。数据库服务器mds20然后生成数据,从而将数据库会话标记为无状态。
当数据库服务器mds20接收到迁移数据库会话的请求并且确定该数据库会话被标记为无状态时,数据库服务器mds20迁移该数据库会话。该迁移可以在不执行其它无状态检验的情况下被执行。因此,一旦数据库服务器mds20确定数据库会话被标记为无状态,其可以执行步骤525,将选择消息2、准备迁移消息3、和切换消息8作为一束来传输。
为了规定数据库会话不是无状态的,应用程序服务器aps20向数据库服务器mds20发送识别数据库会话的消息。数据库服务器mds20然后生成数据,从而将数据库会话为无状态的标记清除。当数据库服务器mds20接收到迁移数据库会话的请求并且确定该数据库会话没有被标记为无状态时,数据库服务器mds20放弃(forego)迁移该数据库会话。
允许应用程序识别无状态的数据库会话能够实现各种优化。因为不需要等待数据库会话到达边界或确定数据库会话在边界,所以数据库会话一旦被选定用于迁移就能够较快地被迁移。此外,可以迁移某些会话,以别的方式这些会话不能被迁移,因为它们的状态由于多种原因而不能被传送,或数据库服务器不能确定数据库会话变成无状态的条件。
为了说明的目的,一旦来自会话池sp131的数据库会话被检出,就可以使多个应用程序调用来执行多个事务。当数据库会话被检出时,数据库会话为有状态的。因此,即使数据库会话可以是有状态的,即使其在应用程序调用边界处或在事务边界。然而,一旦数据库会话被检入,数据库会话就不再是有状态的。
数据库服务器能够确定数据库会话何时在应用程序边界以及何时在事务边界。但是,由于数据库会话可以在调用边界或事务边界并且仍然是有状态的,因此知道这些条件何时存在对于检测数据库会话为无状态的条件是不够的。
另一方面,应用程序服务器aps20能够确定数据库会话无状态的条件,这是因为应用程序服务器可以检测数据库会话何时被检入以及何时被检出。当数据库会话被检出时,应用程序服务器aps20向数据库服务器mds20发送识别数据库会话为有状态的消息。当数据库会话被检入时,应用程序服务器aps20向数据库服务器mds20发送识别数据库会话为无状态的消息。
硬件综述图6示出可实现本发明的实施例的计算机系统600的方框图。计算机系统600包括总线602或用于传送信息的其它通信机构、和与总线602连接以处理信息的处理器604。计算机系统600还包括例如随机存取存储器(RAM)或者其它动态存储装置等主存储器606,该主存储器与总线602连接,用于储存信息及要由处理器604执行的指令。主存储器606还可用于在执行将被处理器604执行的指令期间储存临时变量或其他中间信息。计算机系统600还包括与总线602连接的只读存储器(ROM)608或者其他静态存储装置,用于储存静态信息和关于处理器604的指令。例如磁盘或光盘等存储装置610与总线602连接,用于储存信息和指令。
计算机系统600可以经由总线602连接到诸如阴极射线管(CRT)等用于向计算机用户显示信息的显示器612。包括字母数字键和其它键的输入装置614与总线602相连接,用于传送信息和命令选择到处理器604。另一种用户输入装置是光标控制器616,如鼠标、轨迹球、或光标方向键等,用于传送方向信息和命令选择到处理器604及用于控制显示器612上的光标移动。该输入装置通常具有沿两个轴(第一轴(例如x轴)和第二轴(例如y轴))的两个自由度,使装置可在平面中确定位置。
本发明涉及用于实现在此描述的技术的计算机系统600的使用。根据本发明的实施例,响应于处理器604执行包含在主存储器606中的一个或多个指令的一个或多个序列,通过计算机系统600执行这些技术。可将这些指令从诸如存储设备610等另一计算机可读介质读入主存储器606。通过执行包含在主存储器606中的指令序列,使处理器604执行此处所述的处理步骤。在可选实施例中,可用硬连线电路取代软件指令,或者与软件指令结合来实施该发明。因此,本发明中的实施例不限于硬件电路和软件的任何特定组合。
这里使用的术语“计算机可读介质”是指参与提供指令给处理器604来执行的任何介质。这种介质可以采取很多形式,包括但不限于非易失性介质、易失性介质、和传输介质。非易失性介质举例来说包括例如存储装置610等光盘或磁盘。易失性介质包括例如主存储器606等动态存储器。传输介质包括同轴电缆、铜线、和光纤,包括包含总线602的导线。传输介质还可采取声波或光波的形式,例如那些在无线电波和红外线数据通信过程中产生的声波和光波。
通常的计算机可读介质举例来说包括软盘、软磁盘(flexibledisk)、硬盘、磁带、或者任何其它磁性介质;CD-ROM、任何其它光学介质;打孔纸、纸带、或者任何带有孔图案的物理介质;RAM、PROM、EPROM、FLASH-EPROM、或者其他任何存储芯片或者卡;下面描述的载波、或者计算机可读的任何其他介质。
各种形式的计算机可读介质可参与传送一个或者多个指令的一个或多个序列给处理器604来执行。例如,该指令初始地可承载在远程计算机的磁盘中。该远程计算机能将该指令加载到其动态存储器中,然后使用调制解调器通过电话线发送指令。计算机系统600本地的调制解调器可接收电话线上的数据,且使用红外转换器将数据转换成红外信号。红外探测器可以接收红外信号携带的数据,且合适的电路可以把信息放到总线602上。总线602把数据传送到主存储器606中,处理器604从主存储器606取回并执行这些指令。由主存储器606接收的指令可随意地在处理器604执行这些指令之前或之后储存于存储装置610中。
计算机系统600还包括连接到总线602的通信接口618。通信接口618提供连接到网络链路620的双向数据通信,该网络链路与局域网622相连。例如,通信接口618可以是综合业务数字网(Integrated Services Digital Network,ISDN)卡或者调制解调器,用于提供到相应类型电话线的数据通信连接。又如,通信接口618可以是局域网(Local Area Network,LAN)卡,用于提供至兼容LAN的数据通信连接。也可以使用无线链路。在任何这样的实施方式中,通信接口618均发送和接收承载表示各种信息的数字数据流的电信号、电磁信号和光学信号。
网络链路620通常可通过一个或者多个网络提供数据通信给其它数据装置。例如,网络链路620可通过局域网622提供与主机624连接,或者提供与互联网服务提供商(Internet Service Provider,ISP)626操作的数据设备的连接。ISP 626进而通过目前通称为“互联网”628的全球分组数据通信网络提供数据通信服务。局域网622和互联网628都使用承载数字数据流的电信号、电磁信号或光学信号。通过各种网络的信号、和网络链路620上的信号、和通过通信接口618的信号,是传输信息的载波的典型形式,这些信号都传送数字数据给计算机系统600或者传送来自计算机系统600的数字数据。
计算机系统600能通过网络、网络链路620、和通信接口618发送消息和接收数据(包括程序代码)。在互联网实例中,服务器630可通过互联网628、ISP 626、局域网622、和通信接口618传送关于应用程序的所请求代码。
当代码被接收和/或储存在存储装置610上或者其它非易失性存储器上用于随后执行时,处理器604可执行所接收到的代码。以此方式,计算机系统600可以获得载波形式的应用程序代码。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种用于管理多节点系统上的会话的方法,所述方法包括下列步骤接收为所述多节点系统的客户机建立特定会话的请求;在所述多节点系统的第一节点上建立第一会话作为所述特定会话;从所述客户机接收第一数据,所述第一数据指示用于在所述多系统的所述第一节点与第二节点之间转移会话的一个或多个标准;基于所述一个或多个标准,确定将所述第一会话转移到所述多节点系统的所述第二节点;以及响应于确定转移所述第一会话,为所述多节点系统上的所述客户机在所述第二节点上建立第二会话作为所述特定会话。
2.根据权利要求1所述的方法,其中,所述一个或多个标准是基于所述第一会话是否是无状态的。
3.根据权利要求1所述的方法,其中,所述一个或多个标准是基于与所述第一会话相关的事务是否已经终止。
4.根据权利要求1所述的方法,其中,所述一个或多个标准是基于与所述第一会话相关的客户机调用是否已经完成。
5.根据权利要求1所述的方法,其中,所述一个或多个标准指示在第一应用程序调用以后做出的随后的应用程序调用是否取决于为所述第一应用程序调用生成的第一会话状态。
6.根据权利要求5所述的方法,其中,所述随后的应用程序调用取决于所述第一会话状态。
7.根据权利要求1所述的方法,其中,服务器存放所述客户机和多个其它会话;所述服务器在所述第一节点上保持会话池,所述会话池包括所述第一会话;以及所述服务器将所述第一会话分配到所述多个其它会话以及解除分配。
8.根据权利要求7所述的方法,其中,所述服务器是应用程序服务器。
9.一种用于管理多节点系统上的会话的方法,所述方法包括下列步骤接收为所述多节点系统的客户机建立特定会话的请求;在所述多节点系统的第一节点上建立第一会话作为所述特定会话;从所述客户机接收第一数据,所述第一数据将所述第一会话识别为在不需要俘获所述第一会话的状态的情况下就可以在所述第一节点与第二节点之间被迁移的会话;基于所述第一数据,确定将所述第一会话迁移到所述第二节点;响应确定将所述第一会话转移到所述第二节点;以及为所述多节点系统上的所述客户机在所述第二节点上建立第二会话作为所述特定会话。
10.根据权利要求9所述的方法,其中,响应于确定在第一应用程序调用之后做出的随后的应用程序调用不取决于为所述第一应用程序调用生成的第一会话状态,所述客户机发送所述第一数据。
11.根据权利要求9所述的方法,所述步骤进一步包括服务器存放所述客户机和多个其它会话;所述服务器在所述第一节点上保持会话池,所述会话池包括所述第一会话;所述服务器将所述第一会话分配到所述其它会话的特殊会话;以及其中,所述服务器分配所述第一会话使得所述服务器传送所述第一数据。
全文摘要
技术允许客户机以对于为其建立了初始会话的应用程序而言是透明的方式,从已经为服务器上的客户机建立的会话迁移到另一个服务器上的另一个会话。会话在以下条件下被转移,即,将要从源节点迁移的会话的会话状态的副本不需要被俘获和被恢复至目标会话。
文档编号G06F17/00GK1836416SQ200480023062
公开日2006年9月20日 申请日期2004年8月13日 优先权日2003年8月14日
发明者桑贾伊·卡卢斯卡尔, 斯里尼瓦斯·戈拉普迪 申请人:甲骨文国际公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1