JP4976128B2 - サーバ間の透過的なセッション移送 - Google Patents

サーバ間の透過的なセッション移送 Download PDF

Info

Publication number
JP4976128B2
JP4976128B2 JP2006523426A JP2006523426A JP4976128B2 JP 4976128 B2 JP4976128 B2 JP 4976128B2 JP 2006523426 A JP2006523426 A JP 2006523426A JP 2006523426 A JP2006523426 A JP 2006523426A JP 4976128 B2 JP4976128 B2 JP 4976128B2
Authority
JP
Japan
Prior art keywords
session
node
client
transport
database
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2006523426A
Other languages
English (en)
Other versions
JP2007511807A (ja
Inventor
カラスカー,サンジェイ
ゴラプディ,スリーニバス
チャタジー,デバシシュ
Original Assignee
オラクル・インターナショナル・コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US10/918,055 external-priority patent/US7552171B2/en
Priority claimed from US10/917,953 external-priority patent/US7552218B2/en
Priority claimed from US10/917,873 external-priority patent/US7516221B2/en
Application filed by オラクル・インターナショナル・コーポレイション filed Critical オラクル・インターナショナル・コーポレイション
Publication of JP2007511807A publication Critical patent/JP2007511807A/ja
Application granted granted Critical
Publication of JP4976128B2 publication Critical patent/JP4976128B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • G06F9/4862Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration the task being a mobile agent, i.e. specifically designed to migrate

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、マルチノードコンピュータシステムにおいて作業負荷のバランスをとるためにサーバ間でセッションを転送するなどのタスクを実行するよう、セッション状態をキャプチャし、復元することに関する。
本出願は、「コンピュータリソース提供(Computer Resource Provisioning)」と題された、2003年8月14日出願の米国仮出願番号第60/495,368号の優先権を主張し、それが本願明細書に引用して援用される。
本出願は、下記の米国出願に関連する。
2004年8月12日出願の、サンジェイ・カラスカー(Sanjay Kaluskar)他による、「サーバ間の透過的セッション移送(Transparent Session Migration Across Servers)」と題された、米国出願番号第XX/XXX,XXX号(代理人事件整理番号第50277−2383号)に関連し、それが本願明細書に引用にて援用される。
2004年8月12日出願の、ベニー・サウダー(Benny Souder)他による、「マルチノードシステムにおけるリソースのダイナミックアロケーションの階層的管理(Hierarchical Management of the Dynamic Allocation of Resources in a Multi-Node System)」と題された、米国出願番号第XX/XXX,XXX号(代理人事件整理番号第50277−2382号)に関連し、それが本願明細書に引用にて援用される。
2004年8月12日出願の、ラシュミナラヤナン・チダムバラン(Lakshminarayanan
Chidambaran)他による、「マルチノードシステムにおいてバランスをとる増分的実行時セッション(Incremental Run-Time Session Balancing in a Multi-Node System)」と題された、米国出願番号第XX/XXX,XXX号(代理人事件整理番号第50277−2411号)に関連し、それが本願明細書に引用にて援用される。
2004年8月12日出願の、「結果集合の中断、および中断された結果集合からの透過的セッション移送の継続(Suspending A Result Set And Continuing From A Suspended Result Set For Transparent Session Migration)」と題された米国仮出願番号第XX/XXX,XXX号(代理人事件整理番号第OI7039362001号、出願人事件整理番号第OID-2004-043-01号)に関連し、それが本願明細書に引用にて援用される。
2004年8月12日出願の、「結果集合の中断、および中断された結果集合からの継続(Suspending A Result Set And Continuing From A Suspended Result Set)と題された米国仮出願番号第XX/XXX,XXX号(代理人事件整理番号第OI7039362002号、出願人事件整理番号第OID―2004―043―02号)に関連し、それが本願明細書に引用にて援用される。
2004年8月12日出願の、「結果集合の中断、および中断された結果集合からのスクロール可能なカーソルのための継続(Suspending A Result Set And Continuing From A Suspended Result Set For Scrollable Cursors)と題された米国仮出願番号第XX/XXX,XXX号(代理人事件整理番号第OI7039362003号、出願人事件整理番号第OID―2004―043―03号)に関連し、それが本願明細書に引用にて援用される。
本出願は、下記の国際出願に関連する。
2004年8月9日にオラクル・インターナショナル・コーポレイション(Oracle International Corporation)によって米国受理官庁に出願された、「データベースの自動的かつ動的な提供(Automatic and Dynamic Provisioning of Databases)」(代理人事件整理番号第50277-2571号)と題された国際出願PCT/XXXX/XXXXXに関連し、それが本願明細書に引用にて援用される。
2004年8月13日にオラクル・インターナショナル・コーポレイション(Oracle International Corporation)によって米国受理官庁に出願された、「マルチノードシステムにおけるリソースの動的割当ての階層的管理(Hierarchical Management of the Dynamic Allocation of Resources in a Multi-Node System)」(代理人事件整理番号第50277-2592号)と題された国際出願PCT/XXXX/XXXXXに関連し、それが本願明細書に引用にて援用される。
2004年8月13日にオラクル・インターナショナル・コーポレイション(Oracle International Corporation)によって米国受理官庁に出願された、「ステートレスなセッションの透過的なサーバ間移送(Transparent Migration of Stateless Sessions Across
Servers)」(代理人事件整理番号第50277-2594号)と題された国際出願PCT/XXXX/XXXXXに関連し、それが本願明細書に引用にて援用される。
2004年8月13日にオラクル・インターナショナル・コーポレイション(Oracle International Corporation)によって米国受理官庁に出願された、「オンデマンドノードおよびサーバインスタンスの割当ておよび割当て解除(On Demand Node and Server Instance Allocation and De-Allocation)」(代理人事件整理番号第50277-2595号)と題された国際出願PCT/XXXX/XXXXXに関連し、それが本願明細書に引用にて援用される。
発明の背景
多くのエンタープライズデータ処理システムは、データを格納し、管理するためにマルチノードデータベースサーバに依存する。このようなエンタープライズデータ処理システムは、典型的には、第1の階層にマルチノードデータベースサーバを有し、中間階層および外部階層に1つ以上のコンピュータを有する多層構成モデルに従う。
図1は、多層アーキテクチャ10で実行されるマルチノードデータベースサーバmds11を表す。マルチノードデータベースサーバmds11などのサーバは、統合ソフトウェアコンポーネントと、メモリ、ノード、および統合ソフトウェアコンポーネントをプロセッサ上で実行するためのノード上のプロセスなどの計算リソースの割当てとの組合わせであって、このソフトウェアと計算リソースとの組合わせは、1つ以上のクライアントに代わって特定の機能を専ら実行する。マルチノードコンピュータシステムの複数のノードからのリソースは、特定のサーバのソフトウェアを実行するために割当てられ得る。ノード上のソフトウェアとそのノードからのリソースのアロケーションとの特定の組合わせは、本願明細書においてサーバインスタンスまたはインスタンスと称されるサーバである。このように、マルチノードサーバは、複数のノードで作動し得る複数のサーバインスタンスを含む。マルチノードサーバのいくつかのインスタンスは、同じノード上でさえ作動し得る。
データベースサーバは、特定のデータベースへのアクセスを支配して容易にし、クライ
アントからのデータベースにアクセスするリクエストを処理する。マルチノードデータベースサーバmds11などのマルチノードデータベースサーバは、複数の「データベースインスタンス」を含み、各データベースインスタンスは、ノード上で作動する。マルチノードデータベースサーバmds11はデータベースdb11へのアクセスを支配する。マルチノードデータベースサーバは、1つ以上のデータベースへのアクセスを支配し、容易にすることができる。
多層アーキテクチャ10の中間層は中間層コンピュータcmp11を含み、外部層はユーザコンピュータcmp12を含む。ユーザコンピュータcmp12は、エンドユーザと対話するブラウザbr11を実行する。エンドユーザのブラウザbr11との対話により、ブラウザは、インターネットなどのネットワークを介して中間層コンピュータcmp11にリクエストを送信する。リクエストは、中間層コンピュータcmp11上のプロセス、すなわちクライアントcl1にアプリケーションappl11を実行させる。クライアントcl1によってアプリケーションappl11が実行されることにより、クライアントcl1はマルチノードデータベースサーバmds11に接続する。例えばアプリケーションappl11は、ブラウザbr11から注文リクエストを受取るよう構成される受注アプリケーションであり得る。受注アプリケーションのためのデータはdb11に格納される。リクエストを処理するために、クライアントcl1によってアプリケーションappl11が実行されると、クライアントcl1はデータベースdb1に接続する。一旦接続されると、クライアントcl1は、データベースdb11に格納されたデータを検索して操作するためのデータベースステートメントを出す。
本願明細書において、多層アーキテクチャの他の層に対し、サーバに直接接続する層はサーバのクライアントを含むと称される。したがって、クライアントプロセスcl1は、本願明細書においてマルチノードデータベースサーバmds11のクライアントと称される。
アプリケーションは、この用語が本願明細書において用いられる場合、サーバの機能と対話してそれらを用いるよう構成される、ソフトウェアの単位である。一般にアプリケーションは、一組の関連した機能を実行する、統合された関数およびソフトウェアモジュール(例えば機械で実行可能なコードまたは解釈可能なコードからなるプログラム、動的にリンクされたライブラリ)からなる。
アプリケーションappl11などのアプリケーションは、クライアント側インターフェイスコンポーネントintcomp11を介してマルチノードデータベースサーバmds11と対話する。アプリケーションappl11の実行により、クライアントcl1はクライアント側インターフェイスコンポーネントintcomp11を実行し、マルチノードデータベースサーバmds11と対話する。アプリケーションappl11は、クライアント側インターフェイスコンポーネントintcomp11のルーチン(例えば関数、プロシージャ、オブジェクト方法、リモートプロシージャ)の呼出しを含む。典型的にはアプリケーションは、マルチノードデータベースサーバmds11およびクライアント側コンポーネントintcomp11などのサーバおよびサーバへのインターフェイスを開発する人とは異なるベンダおよび開発チームによって開発される。
クライアントがマルチノードデータベースサーバmds11と対話するために、マルチノードデータベースサーバmds11のデータベースインスタンス上にクライアントのためにセッションが確立される。データベースセッションなどのセッションは、データベースインスタンスなどの、クライアントのためにサーバに確立される特定の接続であって、
それを介してクライアントは一連のリクエスト(例えばデータベースステートメントを実行するためのリクエスト)を出す。
データベースインスタンスに確立される各データベースセッションについて、セッション状態がセッションのために維持される。セッション状態は、データベースセッション中にデータベースセッションのために格納されるデータを含む。例えばこのようなデータは、セッションが確立されるクライアントのIDと、データベースセッション内でソフトウェアを実行しているデータベースコンポーネントおよびプロセスによって生成される一時的な変数値とを含む。データベースコンポーネントは、特殊化された関連する機能をデータベースサーバに与える一組のソフトウェアモジュールであって、より詳細に後述される。データベースコンポーネントの例は、Java(登録商標)実行エンジンである。
セッションの始まりと終わりが作業単位の境界を画定する。しばしば、データベースセッションの始まりは、例えばブラウザなどを介してアプリケーションと対話型セッションを確立するエンドユーザと対応し、エンドユーザがログオフすると終了する。このように、データベースセッションの始めと終わりは、アプリケーションロジックおよびエンドユーザの行動に依存し、セッションが確立されるサーバによって制御され得ない。
クライアント側インターフェイスコンポーネント
クライアント側インターフェイスコンポーネントintcomp11などのクライアント側インターフェイスコンポーネントは、サーバのクライアントの同じコンピュータに存在し、そこで実行されるソフトウェアコンポーネントであって、クライアントおよびサーバ間にインターフェイスを与えるよう構成される。クライアント側インターフェイスコンポーネントintcomp11は、マルチノードデータベースサーバmds11とインターフェイスするのに必要な詳細な動作を実行するよう構成される。例えば、アプリケーションappl11がクライアント側インターフェイスコンポーネントintcomp11の関数を呼び出して、マルチノードデータベースサーバmds11への接続を確立する。クライアント側インターフェイスコンポーネントは次に、マルチノードデータベースサーバmds11の特定のインスタンス上での接続の詳細を処理する。アプリケーションappl11は、クエリー実行のリクエストなどマルチノードデータベースサーバmds11のリクエストを出すためにクライアント側インターフェイスコンポーネントintcomp11の関数を呼び出すよう構成され、クライアント側インターフェイスコンポーネントintcomp11は次に、セッションが確立されるノードとデータベースインスタンスとにその同じリクエストを送信する。
クライアント側インターフェイスコンポーネントintcomp11は、他のソフトウェアモジュールから隠された状態、すなわち他のソフトウェアモジュール、特にアプリケーションappl11によっては参照もアクセスもされない、またはされることができない状態を生成し得、および/またはそれにアクセスし得る。このような状態は、クライアント側インターフェイスコンポーネントintcomp11に対して内部的または非公開であると称される。
例えば、マルチノードデータベースサーバmds11上にデータベースセッションを生成するために、アプリケーションappl11は、クライアント側インターフェイスコンポーネントintcomp11のルーチンを呼び出す。クライアント側インターフェイスコンポーネントは、マルチノードデータベースサーバmds11内の特定のデータベースインスタンス上でデータベースセッションを確立して、内部データ構造またはオブジェクト内にデータベースセッションについての詳細を格納する。このようなデータ構造およびオブジェクトは、たとえばアプリケーションのために確立されるセッションを規定し、データベースインスタンス上のセッションのID、データベースインスタンスの名称、およ
びデータベースインスタンスへの接続のためのネットワークアドレスおよびポート番号などの値を指定する。
セッションのこのような詳細はアプリケーションappl11に返されず、アプリケーションappl11は詳細にアクセスすることもできない。その代わりアプリケーションappl11に与えられるのは、クライアント側インターフェイスコンポーネントintcomp11の内部データがセッションにマッピングする値などのセッション用「外部識別子」、またはクライアント側インターフェイスコンポーネントintcomp11によって生成されるオブジェクトに対する参照であって、アプリケーションappl11にはアクセスできない、オブジェクトの非公開の属性にセッションのいくつかの詳細を格納する。このように、アプリケーションappl11は、アプリケーションappl11のために確立されているセッションの具体的な詳細を「知らない」。しかしながらアプリケーションappl11は、アプリケーションappl11のために確立されている特定のセッションをクライアント側インターフェイスコンポーネントintcomp11に対して特定し得るのに必要な情報を有する。
作業負荷の分散
マルチノードデータベースサーバを管理するために必要な重要な能力は、ノード間で作業負荷を分散することである。ノード間で作業負荷を最適にバランスを保つことによる作業負荷の分散が用いられて性能を向上させる。作業負荷の分散はまた、メンテナンス動作のためにオフラインにされているノードから別のノードに作業がシフトされることを可能にする。
性能を向上させるために、マルチノードデータベースサーバ上の作業負荷は、接続時間バランスを使用して分散される。接続時間のバランスをとることで、クライアントのためのデータベースセッションが生成されると、作業負荷は接続時間において分散される。具体的には、クライアントがマルチノードデータベースサーバ上でデータベースセッションを確立するよう要求すると、作業負荷への考慮を基にセッションがインスタンスまたはノードに配置される。例えばクライアントは、セッションについてのリクエストをマルチノードデータベースサーバに送信する。マルチノードデータベースサーバは、あるノードが他のノードよりビジーでないと判断して、そのノード上にクライアントのためのセッションを確立する。
接続時間のバランスをとることについての欠点は、それが既存のセッションをバランスし直すことができないことである。それはセッションが生成されたときにしかバランスをとれない。既存のセッションにより生成される作業負荷は、クライアントが自発的に要求するのを減らすかもしくは止めるまで、および/またはセッションを終了するまで、シフトされたり減じられたりすることができない。その結果、作業負荷をシフトするタイミングは、マルチノードデータベースサーバの制御下にはないイベントに従う。
上記に基づいて、セッションが生成された後にセッションのクライアントの作業負荷をシフトする方法を与えることが、明らかに望ましい。
本発明は、添付の図面の図において限定としてでなく例として図示され、そこで同じ参照番号は同様の構成要素を指す。
発明の詳細な説明
マルチノード環境においてセッションを転送するのに用いられ得る手法が記載される。下記の記載において、説明のため、本発明の完全な理解を与えるために多くの具体的な詳
細が記載される。しかしながら、本発明がこれらの具体的な詳細なしで実行され得ることは明らかである。他の場合には、本発明を不必要に不明瞭にすることを避けるため、周知の構造及び装置はブロック図形式で示される。
本願明細書に説明されるのは、最初のセッションが確立されたアプリケーションに対して透過的な方法で、クライアントがあるサーバのあるセッションから別のサーバのセッションへ切り換えられることを可能にする手法である。移送という用語は、サーバ上の既存のセッションのクライアントが既存のセッションから別のセッションへ切り換えられる動作を指し、既存のセッションが終了され、クライアントが既存のセッションの代わりに他のセッションを用いることを可能にする。本願明細書において、既存のセッションが移送されたと称される。「透過的な」という用語は、ソフトウェアの単位に関して、動作を実行するように適合される、そのユニットの命令の実行を要しない方法で動作を実行することを指す。したがってクライアントは、透過的なセッション移送では、移送を達成するよう適合されたアプリケーション命令を実行することなく、セッション間で切り換えられる。その代わり、アプリケーションがそれを介してサーバと対話する、クライアント側インターフェイスコンポーネントが移送の詳細を処理し、クライアント側インターフェイスコンポーネントの内部状態を変更して同じ効果をもたらす。レガシーアプリケーションは、本願明細書に説明される手法を開始するために変更される必要はない。
透過的な移送セッションにおいて、セッションは「ソース」サーバから「宛先」サーバへ透過的に移送される。このように既存のセッションは、性能および資源利用可能性を向上させるため、サーバ間でバランスをとり得る。
セッションを移送するために、セッションの状態はキャプチャされ、復元される。セッションの状態をキャプチャすることは、セッションのセッション状態の真のコピーとしてバイトのストリームを生成することを伴い、ストリームはオブジェクト、ファイルまたは他の種類のデータ構造に格納されることができ、セッションを復元するために後にアクセスされ得る。透過的なセッションの移送では、クライアントのセッションはソースサーバにキャプチャされ、データ構造に格納されて宛先サーバへ移動されるバイトのストリームを生成し、宛先サーバはクライアントのために確立された宛先サーバ上のセッションにバイトのストリームをロードすることによってセッションを復元する。
セッション移送に関与するものは、コンピュータのクライアント、ソースサーバおよび宛先サーバを含むことができ、各々がマルチノードシステムの異なるノードに位置する。関与するものは、アプリケーションまたはセッションが確立された他のソフトウェアモジュールにセッション移送が透過的に発生することを可能にする、プロトコルの変形例に従う。したがってプロトコルは、透過的なセッション移送プロトコルと称される。プロトコルは、いずれかのセッション移送動作が失敗した場合に回復処理を可能にする。
一実施例によれば、セッション状態は、「コンポーネントセッション状態」の結合または組合わせとしてみなされ得る。コンポーネントセッション状態は、データベースコンポーネントによって特に生成され、用いられる。セッション状態は、複雑なコンポーネント状態の組合わせであり得る。コンポーネントセッション状態のコピーを生成し、復元するソフトウェアを開発することは同じく手間がかかる。本願明細書において、このようなソフトウェアの開発および適用を容易にする拡張可能なフレームワークが記載される。拡張可能なフレームワークはコールバック関数のためのインターフェイスを規定し、コールバック関数は呼び出されてコンポーネントセッション状態をキャプチャし、復元し、セッションが移送されることをコンポーネントセッション状態が許容するか否かを判断する。
拡張可能なフレームワークがセッション移送を用いて示されるが、フレームワークはこの使用に限られない。それは、セッション状態がキャプチャされ、格納され、後にセッションのために復元される、あらゆる使用に適用され得る。
例示的コンピュータシステム
図2は、本発明の一実施例を実現するために用いられ得るマルチノードコンピュータシステムを示す。図2を参照すると、データベースクラスタdbc20を示す。データベースクラスタは、特定のデータベースへのアクセスを管理するマルチノードデータベースサーバ、例えばマルチノードデータベースサーバmds20などをホストする、ノードの集合である。データベースクラスタdbc20は、ノードnd21、nd22、nd23およびnd24を含む。データベースクラスタdbc20のノードは、ノード間である程度の共有記憶(例えばディスクドライブの集合への共有のアクセス)を与える。データベースクラスタdbc20のノードは、ネットワークを介して相互接続されるコンピュータ(例えばワークステーション、パーソナルコンピュータ)の形であることができ、グリッドの一部であり得る。データベースサーバmds20は、データベースインスタンスinst21、inst22、inst23およびinst24を含む。
データベースインスタンスにより管理されるデータベースにアクセスするために、マルチノードデータベースサーバの一部であるデータベースインスタンスに接続するクライアントは、本願明細書においては、データベースインスタンスのクライアント、マルチノードデータベースサーバのクライアント、またはデータベースのクライアントと称される。例えば、データベースクラスタdbc20の一部ではないコンピュータ上のプロセスはアプリケーションを実行し、データベースdb20にアクセスするためデータベースインスタンスinst23に接続される。このプロセスは、データベースインスタンスinst23のクライアント、マルチノードデータベースサーバmds20のクライアント、およびデータベースdb20のクライアントと称される。
作業負荷マネージャwm20は、データベースクラスタdbc20上で作動するプロセス、特定的にはインスタンスinst21であって、データベースクラスタdbc20上でホストされるデータベースインスタンスの作業負荷を管理する役割がある。作業負荷マネージャの例はデータベースディレクタであって「バランスをとる増分的実行時セッション(Incremental Run-Time Session Balancing)」に記載されており、ソースデータベースインスタンスから宛先データベースインスタンスへ、1つ以上のセッションを移送することによって、実行時セッションのバランスをとることを実行する。
リスナによってクライアントのために確立されるセッション
クライアントがマルチノードデータベースサーバmds20と対話するために、クライアントはデータベース接続リクエストを送信してデータベースインスタンスにセッションを確立する。リスナはデータベースクラスタdbc20上で実行するプロセスであってリクエストを受け取り、それらをデータベースクラスタdbc20内のデータベースインスタンスに導く。
一旦データベースセッションがクライアントのために確立されると、クライアントはリモートプロシージャ呼出しの形式であり得る追加的なリクエストを出すことができ、リクエストは、トランザクション実行開始、クエリーの実行、アップデートおよび他の種類のトランザクション動作の実行、トランザクションの完遂または逆の終了、およびデータベースセッションの終了のリクエストを含む。
例示的クライアントおよびソースならびに宛先インスタンス
図3は、本発明の一実施例による透過的なセッション移送を示すために用いられる、例
示的クライアント、ソースおよび宛先インスタンスを示すブロック図である。図3を参照すると、データベースインスタンスinst22およびinst24を、ソースインスタンスinst22および宛先インスタンスinst24として示す。クライアントcl30は、クライアントコンピュータcmp30で実行するプロセスである。クライアントコンピュータcmp30はデータベースクラスタdbc20のいかずれのノードからも離れており、クライアントcl30を含む、データベースクラスタdbc20の1つ以上のデータベースクライアントをホストするコンピュータである。クライアントコンピュータcmp30によってホストされるクライアントは、アプリケーションappl30などのアプリケーションを実行するプロセスを含み、アプリケーションappl30はクライアントcl30によって実行される。
アプリケーションappl30は、クライアント側インターフェイスコンポーネントintcomp30を介してデータベースクラスタdbc20およびマルチノードデータベースサーバmds20と対話する。アプリケーションappl30は、クライアント側インターフェイスコンポーネントintcomp30のルーチン(例えば関数、プロシージャ、オブジェクト方法、リモートプロシージャ)の呼出しを含む。クライアント側インターフェイスコンポーネントの例は、オラクル社(Oracle Corporation)から入手可能な、オラクルコールインターフェイス(「OCI」(Oracle Call Interface))である。
説明する目的のため、本願明細書においては、実際はプロセスによるソフトウェアの実行によってプロセスに特定の作用を実行させる場合、アプリケーションappl30などのソフトウェアモジュールがそれらの作用を実行するとして記載される。例えば、アプリケーションappl30がメッセージを送受信するか、またはデータにアクセスすると記載される場合、アプリケーションソフトウェアを実行しているプロセスがメッセージを送受信しているか、またはデータにアクセスしている。
コール
コールは、タスクを実行するためクライアントからサーバになされるリクエストである。典型的には、コールはソフトウェアモジュールのルーチンの呼出しを実行するプロセスによって行われる。呼出しは、プロセスにルーチンを実行させ(このような実行は、それ自体で他のルーチンのコールおよび実行を伴うことができる)、次に、呼出し点まで、またはそれを少し超えた時点(または他の何らかの、例えば例外ハンドラなどの指定された時点)まで戻らせてモジュールを実行させる。
コールは、呼び出されたルーチンに対して1つ以上の入力パラメータを渡し、1つ以上の出力パラメータとして値を返すことを伴い得る。入力パラメータおよび出力パラメータの一部としてメッセージが送信され得る。データベースインスタンスに対するコールは、典型的にはデータベースステートメントを実行するなどのタスクを実行するために行われる。コールにより送信されるメッセージは、入力パラメータとしてのクエリー列と出力パラメータとしてのクエリー結果または結果の場所への参照とを含み得る。
リモートプロシージャコールは、プロセスによって行われるルーチンのコールであって、別のプロセスが、同じかまたは異なるノードおよび/またはコンピュータ上でコールされたルーチンを実行する。他のプロセスはリモートプロセスと称される。コールは、ネットワーク接続などの通信接続を介して、ルーチンを実行するためのリクエストを別のプロセスに送信することによって行われる。入力パラメータおよび出力パラメータもまた接続を通じて送信される。リモートプロセスがプロシージャを実行する一方で、コールプロセスの実行は中断されるかまたはブロックされる。
コールは、コールされたルーチンをコールプロセスまたはリモートプロセスに実行させ
、それにより他のルーチンのコールおよび実行をもたらし得る。コールが戻るとコールは終了する。コールされたルーチンの実行の一部として行われる動作は、コール内で行われると称される。
例えば、データベースクラスタdbc20にコールを行うために、アプリケーションappl30は、クライアント側インターフェイスコンポーネントintcomp30の関数のコールを行う。呼び出しに応答して、クライアント側インターフェイスコンポーネントintcomp30がコールを実行し、それは、クライアント側インターフェイスコンポーネントintcomp30が、クライアント側インターフェイスコンポーネントintcomp30によりクライアントコンピュータcmp30のメモリに格納された「ローカルな」データを変更しアクセスすることを含み、クライアント側インターフェイスコンポーネントintcomp30はソースインスタンスinst22に複数のリモートプロシージャコールを行い、複数のリモートプロシージャコールは第1のリモートプロシージャコールおよび第2のリモートプロシージャコールを含む。第1のリモートプロシージャコールに応答して、ソースインスタンスinst22はさまざまな動作を実行する。ローカルデータの変更およびアクセス、複数のリモートプロシージャコール、およびソースインスタンスinst22により実行されるさまざまな動作は、アプリケーションappl30によって行われる「アプリケーションコール」内で実行されると称される。第1のリモートプロシージャコールにより呼び出されたルーチンを実行する一方でソースインスタンスinst22によって実行されるさまざまな(他のルーチンの実行を伴い得る)動作は、本願明細書においては、第1のリモートプロシージャコール内で行われると称され、第1のリモートプロシージャコールがクライアント側インターフェイスコンポーネントintcomp30によって行われるので、クライアント側コール内で行われると称され、また、アプリケーションappl30によってコールされたルーチンを実行する一方でリモートプロシージャコールがクライアント側インターフェイスコンポーネントintcomp30によって行われるので、アプリケーションコール内で行われると称される。アプリケーションコールまたはクライアント側コールは、本願明細書において、両方ともクライアントコールと称され得る。
透過的なセッション移送プロトコル
図4は、透過的なセッション移送のためのプロトコルを示すために用いられるエンティティ対話の図である。プロトコルは、プロトコルに関与するクライアントcl30、ソースインスタンスinst22および宛先インスタンスinst24を用いて示される。プロトコルは移送開始プログラムによって開始され、移送開始プログラムはセッションの集合が移送されることを決定し、および/またはリクエストするエンティティである。例えば作業負荷マネージャwm20は、ソースインスタンスinst22から宛先インスタンスinst24へ作業負荷をシフトするために、あるセッションの集合がソースインスタンスinst22から宛先インスタンスinst24へ移送されるべきことを決定し得る。作業負荷マネージャwm20は、そのセッションの集合の移送のリクエストを生成する。データベースインスタンス間で作業負荷をシフトするためセッション移送をリクエストする作業負荷マネージャwm20は、セッション移送をリクエストするエンティティおよび目的の一例にすぎない。他の種類の目的のためにセッションの集合が移送されるよう要求する他の種類のエンティティがあり得る。例えば、あるデータベースインスタンスをシャットダウンする役割があるエンティティが、そのデータベースインスタンスがシャットダウンされ得るよう、データベースインスタンスによって現在ホストされている全てのセッションを移送することができる。
ステップ405において、ソースインスタンスinst22は、1つ以上のセッションのリストを移送するリクエストである移送リクエスト2を受け取る。リクエストは、例えば作業負荷マネージャwm20などのセッション移送開始プログラムから送信される。セ
ッション移送のために選択されるかまたは他の方法で指定されるセッションは、本願明細書において、選択されたセッションと称される。図示する目的で、移送するセッションのリストは、選択されたセッションを1つのみ、すなわちソースセッションsess31のみを含む(図3参照)。
ステップ410において、ソースインスタンスinst22は、クライアントからのソースセッションsess30へのコールを待ち、そのコールを傍受して選択メッセージ3をクライアントに送る。コールが傍受されたと称されるのは、コールが選択メッセージ3を送る作用など、セッション移送に関連する何らかの作用をもたらすよう用いられているが、コールはそのような作用をもたらすこと以外の何らかの目的、例えばクエリーの実行を要求するなどのために生成されたからである。クライアントに返される出力パラメータは、複数の属性を有し得る「出力データ構造」を含む。ソースインスタンスinst22は、出力パラメータの1つ以上の属性を特定の値に設定することによって、選択メッセージ3を送信する。
ステップ420において、ソースインスタンスinst22は移送チェックを実行し、すなわち移送基準が満たされているか否か判断する。移送基準が満たされる場合、プロトコルの実行はステップ425へ進む。
移送基準
図5は、一実施例による3種類の移送基準の使用を表すブロック図である。図5を参照すると、ブロック510において、ソースセッションsess30がトランザクション境界にあるか否かが判断される。ブロック520において、ソースセッションsess30がコール境界にあるか否かが判断される。ブロック530において、ソースセッションsess30がコンポーネント境界にあるか否かが判断される。
セッションのために実行されているアクティブなトランザクションが現在ない場合、セッションはトランザクション境界にある。トランザクションは、原子単位として実行される、論理的作業単位である。データベースシステムのコンテキストにおいて、データベースの完全性を確実にするために、データベースはトランザクションによってなされた変更のすべてを反映するか、またはトランザクションによってなされた変更のいずれをも反映しないかでなければならない。結果的に、トランザクションが完全に実行されてしまうまで、トランザクションによってなされた変更のいずれも恒久的にはデータベースに適用されない。トランザクションは、トランザクションによってなされた変更が恒久的になされた場合に「完遂する」と言われる。トランザクションが完遂されていないか、中止されたか、または他の方法で終了された場合、トランザクションはアクティブである。
データベースインスタンスがクライアントコールを処理する中間ステージにあるのではなくコールの実行を終了していた場合、セッションはコール境界にある。
例えばデータベースステートメントを実行するコールを処理するために、データベースインスタンスは、各ステージが特定の動作の種類に対応するようなステージを経る。これらのステージは、(1)カーソルを生成し、(2)データベースステートメントを解析してその変数をバインドし、(3)データベースステートメントを実行し、(4)クエリーに返すために行をフェッチし、および(5)カーソルを閉じるステージである。これらのステージは、「オラクル8サーバコンセプト(Oracle 8 Server Concepts)リリース8.0、第3巻(その内容はここにて引用にて援用される)第23章に、より詳細に記載される。中間ステージは、コールの処理が完了する前に実行される動作である。この例において、中間ステージはステージ(1)−(5)である。ソースインスタンスinst22がコールに応答してステップ(5)を実行したあと、ソースセッションsess30はコール境界にある。
セッションの各々のデータベースコンポーネントがそのそれぞれのコンポーネント境界にある場合、セッションはコンポーネント境界にある。前述したように、データベースコンポーネントはセッション状態の一部を用い、それは本願明細書においてコンポーネントセッション状態と称される。ソースセッションsess30などのセッションは、データベースコンポーネントのコンポーネントセッション状態が別のセッションに移送されることができる場合、特定のデータベースコンポーネントのためのコンポーネント境界にある。
例示的データベースコンポーネント
図6は、データベースコンポーネントdc60の例示的集合、およびセッション状態state60内のそのそれぞれのコンポーネントセッション状態を示す。セッション状態state60は、ソースセッションsess30のためのセッション状態である。図6は、次のデータベースコンポーネントを示す。カーソルコンポーネントcc61、PL/SQLコンポーネントcc62、セッションパラメータコンポーネントcc63およびJava(登録商標)コンポーネントcc64である。
カーソルコンポーネントcc61は、ソースインスタンスinst22および宛先インスタンスinst24などのデータベースインスタンス内でカーソルを管理するために用いられる。カーソルは、解析されるデータベースステートメントの情報とデータベースステートメントの処理に関する他の情報とを格納するために用いられるメモリの領域である。カーソルコンポーネントcc61は、セッション状態state60内のコンポーネントセッション状態であるカーソル状態cs61の情報を使用し、格納する。
PL/SQLコンポーネントcc62は、オラクル社(Oracle Corporation)によって広められた手続き型データベース言語であるPL/SQLで書き込まれるコード(例えばプロシージャ)を実行する役割がある。コンポーネントは、コンポーネントセッション状態PL/SQL状態cs62を用いて、変値および解析されたPL/SQLステートメントなどのPL/SQLコードの実行に関連した情報を格納する。
セッションパラメータコンポーネントcc63は、セッションに関連付けられるコールおよびリクエストが処理される方法を一般に制御する属性を管理する役割がある。属性は、コンポーネントセッション状態パラメータ状態cs63に格納される。例えば、セッションパラメータは、クエリーを実行することにより返される結果のための特定の人間の言語を制御する属性を含むことができる。
Java(登録商標)コンポーネントcc64は、Java(登録商標)で書き込まれるコード(例えば、クラスおよびオブジェクト方法)を実行する役割がある。コンポーネントは、コンポーネントセッション状態Java(登録商標)状態cs64を用いてJava(登録商標)コードの実行に関連した情報を格納する。
カーソルコンポーネントcc61、PL/SQLコンポーネントcc62、セッションパラメータコンポーネントcc63およびJava(登録商標)コンポーネントcc64は、各々インターフェイス定義に適合するデータベースコンポーネントインターフェイスを含む。インターフェイス定義はルーチンの集合、典型的には関数およびそれらのルーチンによって返される値を定義する。インターフェイス定義の例は、コンピュータ言語で規定されるオブジェクトクラス、インターフェイス定義言語(例えばOMGインターフェイス定義言語)で記述されるインターフェイス、またはインターフェイスを記述する人間の言語で書かれた仕様を含む。データベースコンポーネントインターフェイスの機能は、セッション間のコンポーネントセッション状態の転送をサポートする。一実施例によれば、
インターフェイスは3つの関数を含む。:IsReadyToMigrate()、GetState()、SetState()である。
IsReadyToMigrate()が呼び出され、データベースコンポーネントに、セッションのためのデータベースコンポーネントのコンポーネントセッション状態が別のセッションのセッション空間に移送され得るか否かを判断させる。関数は、コンポーネントセッション状態が移送され得るか否かを示す結果を返す。例えば、PL/SQLコンポーネントcc62のIsReadyToMigrate()関数が呼び出される場合、PL/SQLコンポーネントcc62は、PL/SQL状態cs62内にオープンファイルのファイル記述子を格納していることを判断する。ファイル記述子は、ソースインスタンスinst22のセッションに対してのみ有効であって宛先インスタンスinst24には有効でない情報を含み、したがって、PL/SQLコンポーネントcc62はPL/SQL状態cs62が移送され得ないことを示す値を返す。
関数GetState()が呼び出され、データベースコンポーネントにセッションのコンポーネントセッション状態のコピーを生成させる。関数SetState()が呼び出され、データベースコンポーネントにコンポーネントセッション状態のコピーをターゲットセッションのセッション状態へロードさせる(例えば、加える)。
GetState()関数によって返されたコンポーネントセッション状態は、返されたコンポーネントセッション状態のコピーを転送することに関与する1つ以上のエンティティがコンポーネントセッション状態の特定の構造について知る必要はないという点で、不透明である。エンティティは、単にGetState()関数を呼び出してデータベースコンポーネントのコンポーネントセッション状態をキャプチャし、SetState()を呼び出してコピーを渡すことによって、返されたコンポーネントセッション状態のコピーをロードする。
ソースセッションsess30が各データベースコンポーネントについてコンポーネント境界にあるか否かの判断は、コンポーネントセッション状態を使用していることができる各データベースコンポーネントについてIsReadyToMigrate()関数を呼び出すことによりなされる。全てのこのような呼出しが、それぞれのコンポーネントセッション状態が移送され得ることを示す値を返す場合、ブロック530において、ソースセッションsess30が各データベースコンポーネントについてコンポーネント境界にあると判断される。
移送準備
ステップ420において、ソースインスタンスinst22が、移送基準が満たされたと一旦判断すると、ステップ425においてソースインスタンスinst22がクライアントに移送準備メッセージ4を送信する。ステップ425は、コールを傍受することによって実行される。移送準備メッセージ4は、傍受されたコールに返される出力データ構造を介して送信される。移送準備メッセージ4および選択メッセージ2は、同じクライアントコールにおいて返され得る。
移送準備メッセージは、宛先インスタンスinst24に接続を確立するための接続情報を含む。接続の目的は、宛先インスタンスinst24上に宛先セッションを確立し、ソースセッションsess30を移送することに宛先インスタンスが関与するのを開始することである。
傍受されたコールは、アプリケーションappl30からのアプリケーションコール内で開始された。残りのプロトコルはこのアプリケーションコール内で実行される。傍受さ
れたクライアントは本願明細書において、「シードコール」と称される。なぜならクライアントcl30は、残りのプロトコルを開始し、セッション移送を完了するためにコールを行わなければならないからである。
ステップ427において、クライアントcl30は、宛先セッションを確立するリクエストを宛先インスタンスinst24に送信する。データベースインスタンス上にセッションを確立するには、クライアントcl30の認証を必要とし得る。クライアントcl30を認証するために、クライアント側インターフェイスコンポーネントintcomp30からソースインスタンスinst22に認証情報(例えばユーザ名およびパスワード)が与えられる。クライアント側インターフェイスコンポーネントintcomp30は、データベースクラスタdbc20上にセッションを確立するため、appl30から以前に認証情報を受け取っている。
クライアントcl30は、宛先セッションのセッションパラメータをソースセッションsess30のパラメータと同じ値に設定する。ソースセッションsess30のためにソースインスタンスinst22に値を供給したクライアント側インターフェイスコンポーネントintcomp30は、これらの値を保持し、宛先インスタンスinst24のセッションパラメータを設定するために用いる。
ステップ430において、宛先インスタンスinst24は、宛先セッションおよび「移送チャネル」を確立し、それはソースインスタンスおよび宛先インスタンス間でセッション状態を転送するために用いられる、通信チャネルである。
本発明の一実施例において、移送チャネルが確立される。いくつかのデータベースサーバにおいて、各セッションのために、データベースサーバは唯一のエンドポイント(例えばポートと関連付けられたポート番号)において受信メッセージを受け取る。単一エンドポイントは典型的には、クライアントと通信するための接続に用いられる。例えば接続はクライアントによって用いられてデータベースステートメントを送信したり、データベースインスタンスによって用いられてクエリー結果を送信したり上述のようなメッセージを送信したりする。セッションのための単一エンドポイントは、本願明細書においてセッションの入来エンドポイントと称される。
選択されたセッションのセッション状態を転送するために、シャドウポートと称される、宛先インスタンスinst24上の新しい、異なる入来エンドポイントが移送チャネルのために用いられる。宛先インスタンスinst24は、シャドウポートにおいて、ソースインスタンスinst22からの接続リクエストを聞いて、受け入れる。例えば、新しいソケットがシャドウポートのために生成され得、セッションの入来エンドポイントとして用いられ得る。宛先インスタンスinst24は、新しいソケットにおいて、ソースインスタンスinst22からの接続リクエストを聞いて、受け入れる。
次に、宛先インスタンスinst24は宛先準備完了メッセージ6をクライアントcl30に送信する。宛先準備完了メッセージ6は移送チャネル情報を含み、それはソースインスタンスinst22が移送チャネルを介して宛先インスタンスinst24に接続するのに充分な情報を含む。例えば移送チャネルは、シャドウポートのポート番号を含む。
ステップ435においてクライアントcl30が宛先準備完了メッセージ6を受け取り、ソースインスタンスinst22に移送準備完了メッセージ7を送信する。移送チャネル情報はメッセージとともに送られる。
ソースインスタンスinst22は、移送準備完了メッセージ7を受け取る。
ステップ440において、ソースインスタンスinst22は、セッション状態7を移送チャネルを介して宛先インスタンスinst24へ転送する。受け取られた移送チャネル情報に基づいて、まず、ソースインスタンスinst22は、移送チャネルを介して宛先インスタンスinst24に「移送接続」を確立する。一実施例において、特定のデータベースコンポーネントのために、ソースインスタンスinst22がそれぞれのGetState()関数を呼び出し、返されたコンポーネントセッション状態のコピーを格納して、移送接続を介して宛先インスタンスinst24にコピーを送信する。
ステップ445において、宛先インスタンスinst24が移送接続を介して送信されるコンポーネントセッション状態を受け取り、送られたデータベースコンポーネントの各コンポーネントセッション状態について、それぞれのSetState()関数を呼び出し、宛先セッションのセッション状態にコンポーネントセッション状態をロードする。
ソースインスタンスinst22および宛先インスタンスinst24が作業を並行して実行するような方法で、ソースインスタンスinst22および宛先インスタンスinst24間のセッション状態の転送が実行され得る。例えば、関数GetState()は、セッションコンポーネントのコンポーネントセッション状態の一部だけを返すことができ、全てのコンポーネントセッション状態を検索するために複数回呼び出され得る。ソースインスタンスinst22がGetState()を呼び出すことによって一部を検索する場合、ソースインスタンスinst22は宛先インスタンスinst24にその一部を送信し、次に再度GetState()を呼び出して別の一部を検索する。宛先インスタンスinst24が一部を受け取ると、宛先インスタンスinst24はSetSate()をコールして宛先セッション状態へ一部を転送する。このように、宛先インスタンスinst24がセッション状態の一部をロードする一方で、ソースインスタンスinst22はセッション状態の一部を検索していることができる。このような方法で、ソースインスタンスinst22および宛先インスタンスinst24は、コンポーネントセッション状態を転送するため、並行してそれぞれの動作を実行する。
ソースセッションから宛先インスタンスinst24までセッション状態の転送を完了した後、移送接続は終了される。宛先インスタンスinst24は、宛先セッションsess30の入来エンドポイントをクライアントエンドポイントへ変更して戻す。
ステップ450において、ソースインスタンスinst22はスイッチメッセージ8をクライアントcl30に送信し、宛先セッションに切り換え得ることをクライアントcl30に知らせる。スイッチメッセージ8は、コールの出力パラメータ値として移送準備完了メッセージを返すことにより、移送準備完了メッセージが送られたクライアントコールの一部として、クライアントcl30に送られ得る。メッセージはまた、その後のクライアントcl30コールの一部として返され得る。
ステップ455において、スイッチメッセージ8を受け取ることに応答して、クライアントcl30は宛先セッションに切り換える。クライアント側インターフェイスコンポーネントの内部状態、例えばソースセッションの外部識別子をマッピングする内部データは、宛先セッションがいまやクライアントのセッションであることを反映するよう修正される。次に、クライアントcl30は、ソースインスタンスinst22に移送終了メッセージを送信する。移送終了メッセージ9は、クライアントcl30および/または宛先インスタンスinst24がセッション移送のそれぞれの部分をうまく完了したことを示すデータを含む。さらに詳細に後述するように、移送終了メッセージ9はセッション移送がうまく完了したか否かを通信するのに用いられる。最後にクライアントcl30は、ソースセッションを終了するためのメッセージをソースインスタンスinst22に送信する
。クライアントcl30によるその後のクライアントコールおよびアプリケーションコールにおいて、宛先セッションがソースセッションの代わりに用いられる。
ステップ420からステップ455までは、単一のアプリケーションコール内で実行される。アプリケーションは、アプリケーションコールが開始されたときに外部セッション識別子に関連付けられる特定のデータベースセッションが、アプリケーションコールが戻るときと同じでないことを、知らないかまたは知っている必要はない。データベースセッションのセッション移送を処理するよう調整されるいかなるアプリケーション命令も、セッションを移送するために実行される必要はない。このような方法で、データベースセッションは透過的にアプリケーションに移送された。
キックスタートする同期的に実行されるセッション移送
コールにより要求されるセッション移送に関して、セッション移送は、非同期でまたは同期的に実行され得る。同期的に実行される場合、コールは、要求されたセッションのセッション移送が完了された後に戻る。呼び出し側は、セッション移送の完了までブロックされる。非同期で実行される場合、要求されたセッション移送が実行されている間は呼び出し側の実行はブロックされない。コールはセッション移送が完了される前に戻ることができる。
上述のように、図4で表されるセッション移送プロトコルの完了は、クライアントから受け取られるシードコールに依存する。セッション移送の開始はシードコールが行われるまで遅延される。相当な遅延があり得る。例えばクライアントcl30は、ブラウザのグラフィックインターフェイスを操作する人間のユーザに応答してブラウザを実行し、ソースインスタンスinst22にアプリケーションコールを生成する。人間のユーザは、ブラウザ出力を読みとるために休止するか、または休憩のために去るなど長期間グラフィックインターフェイスを操作しないことがあり、アプリケーションコールおよびシードコールの発行を遅延させる。同期的に出されたセッション移送リクエストは、このように相当期間ブロックされ得る。
このような長い遅延を避けるため、同期的に実行されるセッション移送が開始され得る。セッションの同期セッション移送を要求するコールが行われた後に、シードコールが受取られることなく時間期間が切れた場合、シードコールリクエストと称されるメッセージがセッションのクライアントに送信されて、クライアントにシードコールを行うよう要求する。例えば、シードコールリクエストは、ソースインスタンスinst22により開始されるクライアントcl30への単純なピングであり得る。
一実施例において、セッション移送の進行は、移送トラッキング機構(例えば、より詳細に後述されるもの)を用いてトラッキングされ得、それは移送進捗データを生成する。移送進捗データはセッション移送がどのステージに達したかを示す。移送開始プログラムは、セッションの移送が実行され、または中止されなければならない「移送タイムアウト時間」を特定する。移送タイムアウト時間の一部によって、移送進捗データが、シードコールが行われたステージにセッション移送が到達しなかったことを示すと、シードコールリクエストが生成される。
シードコールリクエストはソースインスタンスinst22のみならず、例えば移送開始プログラムによっても開始され得る。一実施例において、セッションを移送する要求した後に、移送開始プログラムがソースインスタンスinst22のAPI関数を呼び出し、移送進捗データを得る。移送イニシエータは、ある基準に基づいて、クライアントにシードコールリクエストを出すべきか否かを判断する。代替として、移送イニシエータは、セッションを移送するよう移送リクエストをした後自動的に、選択されたセッションのク
ライアントにシードコールリクエストを出すことができる。
回復可能性
透過的なセッション移送が進行する間、ソースインスタンスinst22、宛先インスタンスinst24およびクライアントcl30は移送ステージ間を遷移する。これらの移送ステージはセッション移送の進捗を表示し、トラッキングされ、報告され、移送進捗データを引き出すために用いられる。さらに、セッションのセッション移送中に障害が起り、回復動作の実行が必要となり得る。実行される特定の動作は、障害が起ったとき到達していた移送ステージに依存する。
図7は、セッション移送中、セッション移送に関与するものが遷移する、さまざまな移送ステージを示すステージ遷移図である。さまざまなイベントの発生またはある動作の完了によって、移送ステージ間での遷移が生じる。クライアント側ステージ72はクライアントcl30の移送ステージに対応する一方で、サーバ側ステージ73はマルチノードデータベースサーバmds20の移送ステージに対応する。
図7を参照すると、ステージSRC-NORMALは、セッション移送の実行中ではないマルチノードデータベースサーバmds20に対応する、サーバ側ステージである。マルチノードデータベースサーバmds20は、セッションを移送するためのリクエストを受け取るまで、この移送ステージに留まる。このようなリクエストが受け取られると、マルチノードデータベースサーバmds20はステージSRC―SELECTEDに遷移し、そこでマルチノードデータベースサーバmds20は選択メッセージ4を送信し、次にステージSRC―CONFIRMED-SELECTEDへ進む。
マルチノードデータベースサーバmds20は次に、移送チェックを実行する。一旦マルチノードデータベースサーバmds20が移送基準が満たされていると判断すると、マルチノードデータベースサーバmds20は、ステージSRC−READY−FOR−PREPAREに遷移する。このステージ中、マルチノードデータベースサーバmds20はクライアントコールが傍受するのを待って、そのコールを用いてクライアントcl30に移送準備メッセージ4を送信する。一旦マルチノードデータベースサーバmds20が移送準備完了メッセージ7を受け取ると、マルチノードデータベースサーバmds20はステージSRC−PREPAREに遷移する。
ステージSRC―PREPAREの間、ソースインスタンスinst22はソースセッションのセッション状態をキャプチャして、移送接続を介して宛先インスタンスinst24にセッション状態のコピーを転送し、宛先インスタンスinst24はそれを宛先セッションのセッション状態に加える。マルチノードデータベースサーバmds20は、ソースセッション状態を完了した後、ステージSRC-READY-FOR-SWITCHに遷移し、そこでソースインスタンスinst22がクライアントcl30にスイッチメッセージを送信する。ソースインスタンスinst22が、宛先セッションへの切り換えは成功したことを示す移送終了メッセージ9をクライアントcl30から受け取ると、マルチノードデータベースサーバmds20はステージSRC―SWITCHEDに遷移し、そこでソースセッションの終了を開始するなどの動作が実行される。
ステージSRC―SWITCHEDの完了後、マルチノードデータベースサーバmds20は通常ステージacl80に遷移する。
クライアント側ステージ
サービス側ステージと同様に、クライアント側ステージはステージCLN―NORMALを含み、このステージはセッション移送に関与中ではないクライアントcl30に対応
する。一旦クライアントcl30が選択メッセージ3を受け取ると、クライアントcl30はステージCLN-SELECTEDに遷移する。クライアントcl30が移送準備メッセージ4を受け取ると、クライアントcl30はステージCLN-READY-FOR-PREPAREに遷移する。このステージの間、クライアントcl30は宛先セッションの確立などの動作を実行し、宛先セッションのセッションパラメータを確立して、宛先インスタンスinst24から宛先準備完了メッセージ6を受け取る。一旦このメッセージが受け取られると、クライアントcl30はソースインスタンスinst22に移送準備完了メッセージ7を送信し、ステージCLN―PREPAREに遷移する。
クライアントcl30が宛先準備完了メッセージ6を受け取ると、クライアントcl30はステージCLN−READY−FOR−SWITCHに遷移し、クライアントcl30はスイッチングの完了が成功したことを示す移送終了メッセージ9をソースインスタンスinst22に送信する。クライアントcl30は次にステージCLN-SWITCHEDへ進み、クライアントはソースセッションの終了を要求するなどの動作を実行する。最後に、クライアントcl30はステージCLN-NORMALに遷移する。
回復
ソースセッションのセッション移送中、セッション移送を妨げるかまたは望ましくない完了を行うイベントが起り得る。このようなイベントは、本願明細書において「移送障害イベント」と称される。移送障害イベントが起ると、クライアントcl30およびマルチノードデータベースサーバmds20は、ステージCLN−FAILUREおよびSRC−FAILUREにそれぞれ遷移し、そこで回復動作が実行されて、試みられたセッション移送の全ての関与者が、セッション移送を完了することなく進行することを可能にする。実行される回復動作の特定の集合は、障害が起った特定の移送ステージに依存する。
例えば、cl30が移送準備メッセージ7を受け取った後、クライアントcl30は宛先インスタンスinst24上に宛先セッションを確立しようと試みるが、そうすることができない。このような障害イベントが起った場合、クライアントcl30はステージCLN−FAILUREに遷移する。ステージCLN−FAILUREの一部として、クライアントcl30は移送終了メッセージ9を送信し、メッセージ9はクライアントcl30および宛先インスタンスがセッション移送の一部を実行できないことを特定するデータを含み、具体的には、そのクライアントcl30が宛先セッションを確立することができないことを特定する。
ソースインスタンスinst22が移送終了メッセージ9を受け取ると、ソースインスタンスinst22は移送障害イベントが起ったと判断する。ソースインスタンスinst22は、次にステージCLN−FAILUREに入る。このステージで、ソースインスタンスinst22は「移送不能データ」を生成することができ、これはソースセッションが移送のために選択されたが移送され得なかったことを示すデータである。データはまた、例えば、宛先セッションが確立されることができなかったなど、移送する試みに失敗したものの元になる理由または移送障害イベントを示し得る。移送不能データは、ソフトウェアおよび/または、移送のためのセッションを選択する役割があるプロセス、例えば作業負荷マネージャwm20のために有用であり得、それらによってアクセスされ得る。移送不能データが、セッションを移送しようとして成功しなかった試みが最近行われたことを示す場合、作業負荷マネージャwm20は、移送のためにセッションを選択することを先行することができる。
最後にソースインスタンスinst22は、ソースインスタンスinst22がそこで失敗したセッション移送を試みた、クライアント側コールの実行を完了する。。マルチノードデータベースサーバmds20は次に再びステージSRC−NORMALに入る。
クライアント側コールが戻ると、クライアント側コールがアプリケーションコール内で実行していた、そのアプリケーションコールが戻る。クライアントcl30は次にステージCLN−FAILUREを去り、ステージCLN−NORMALに入る。
回復動作は、使われ、割り当てられ、および/または他の方法でセッション移送を実行するために確保されてもはや必要でなくなったリソースを解放することを伴い得る。
例えば、マルチノードデータベースサーバmds20およびクライアントcl30がステージSRC−PREPAREにある間、ソースインスタンスinst22がデータベースコンポーネントがセッション状態を与え得ないことかまたは移送接続が失敗したことのいずれかを検出した場合、ソースインスタンスinst22はセッション状態をキャプチャしている。移送障害イベントが起ると、マルチノードデータベースサーバmds20はステージSRC−FAILUREに入る。ソースインスタンスinst22は移送接続を閉じ、試みられたセッション移送を実行する目的で用いられたメモリ(例えばコンポーネントセッション状態を転送する前にキャプチャされたコンポーネントセッション状態を格納したメモリなど)の割当てを解除する。ソースインスタンスinst22は、スイッチメッセージ8を送るのではなく、クライアントcl30に「移送中止」メッセージを送信してセッション移送が中止されることを示す。メッセージは、試みられたセッション移送がその中で実行されているクライアントコールの出力パラメータを介して送信される。ソースインスタンスinst22がクライアントコールの実行を完了すると、マルチノードデータベースサーバmds20は次にステージSRC−NORMALに入る。
クライアントcl30がメッセージを受け取ると、クライアントcl30は宛先セッションを終了する。この動作は、宛先セッションに割り当てられていたメモリを解放する。クライアントcl30は、終了された宛先セッションを用いず、ソースセッションsess30を用い続ける。
拡張可能なセッションコンポーネントフレームワーク
データベースコンポーネントの使用は、セッション移送に対する拡張可能なフレームワークを可能にする。データベースコンポーネントの開発および計画的な実行を容易にするので、フレームワークは拡長可能である。
図7は、一実施例による拡長可能なデータベースコンポーネントフレームワークの特徴を示すブロック図である。図7は、データベースコンポーネント60、登録関数rf80、およびアクティブコンポーネントリストacl80を示す。
登録関数rf80は、動的にハンドル名を登録するためにデータベースコンポーネントによって呼び出されるデータベースサーバの関数である。ハンドルは、データベースサーバがデータベースコンポーネントインターフェイスの関数を呼び出すことを可能にする。例えばハンドル名は、ポインタおよび/またはオブジェクト参照であり得る。
所与のセッションのために、全てのデータベースコンポーネントが必要である、または用いられるわけではない。例えばセッションのクライアントは、例えばPL/SQLまたはJava(登録商標)の実行を要求するリクエストは決してすることができない。データベースインスタンスが、データベースコンポーネントがセッションのため必要であると判断すると、データベースインスタンスはデータベースコンポーネントを呼び出す。この呼出しはデータベースコンポーネントにセッションのための初期化動作を実行させ、それは登録関数rf80を呼び出して、入力パラメータとしてハンドル名に渡すことを含む。データベースサーバは次に、アクティブコンポーネントリストacl80にエントリを加
える。エントリは、データベースコンポーネントをセッションのアクティブなデータベースコンポーネントとして特定する。
データベースサーバ上の所与のセッションのために、データベースサーバはアクティブコンポーネントリストacl80を維持し、アクティブコンポーネントリストacl80はセッションのためのアクティブなデータベースコンポーネントを特定し、それぞれのハンドル名を含む。特定のセッションを移送するために、データベースサーバはアクティブデータベースコンポーネントのみを処理し、すなわち、移送境界をチェックし、セッションについてアクティブなデータベースコンポーネントのみのデータベースコンポーネントセッション状態を移送する。
図7に示されるのは、データベースコンポーネントインターフェイス内に含まれ得る追加的関数である。関数IsReadyToMigrate()、GetState()、SetState()に加えて、データベースコンポーネントインターフェイスは関数Migration−Enabled()およびMigrationCost()を含む。
関数Migration−Enabled()は、特定のデータベースコンポーネントについて、コンポーネントセッション状態が別のサーバに移送されることが可能か否かについて示すデータを返す。一実施例において、いくつかのデータベースコンポーネントは、コンポーネントセッション状態の移送をサポートするために必要な開発をされることができなかった。
MigrationCost()関数は、コンポーネントを移送することのコストを示すデータを返す。一実施例において、セッションを移送するコストがコスト関連の移送基準を満たすことを確実にするよう、移送チェックが実行され得る。特定のデータベースコンポーネントのコンポーネントセッション状態を移送するための個々のコストがこのような移送基準を破る場合、またはコンポーネントセッション状態を移送するための総体的なコストがこのような移送基準を破る場合、選択されたセッションは移送されない。加えて関数は、移送するセッションをコストに基づいて選択するために用いられ得る、コストデータを提供し得る。
データベースコンポーネント開発の専門家への委任
データベースコンポーネントは非常に複雑であり得る。データベースコンポーネントの開発および保守についての責任は、通常、責任の遂行に必要なトレーニングおよび経験を有するエキスパート開発者の専門チームに任される。コンポーネントセッション状態をキャプチャし、ロードするソフトウェアもまた、非常に複雑である。その開発は、データベースコンポーネントがその得意領域に該当するような開発チームによって最も効果的に実行される。
データベースコンポーネントインターフェイスは、この開発努力を、サブタスクを効果的に実行する開発チームに割り当てられ得るようなサブタスクに分割することを可能にする。特定のデータベースコンポーネントを専門とする開発チームがそのコンポーネントを開発するために割り当てられ、コンポーネントがインターフェイスをサポートし、セッションがデータベースコンポーネントに関して移送境界にあるか否か判断し、コンポーネントセッション状態をキャプチャしてロードすることを可能にする。さらに、複雑なデータベースコンポーネントを取扱う必要なくセッション移送プロトコルを実現するソフトウェアモジュールを開発するために、開発チームが割り当てられ得る。このように、セッション移送ソフトウェアの開発は、より効果的に、効率的に実行され得る。
移送対応データベースコンポーネント開発の計画的な実行
移送対応データベースコンポーネントの開発が計画的に実行され得る。セッション移送がマルチノードデータベースサーバまたは何らかのレベルのサーバに設けられる前に、全てのデータベースコンポーネントが移送対応である必要はない。以前に発表されたデータベースサーバ製品においては、データベースコンポーネントのあるサブセットしか移送対応である必要はない。いくつかのセッション、すなわち移送対応ではないアクティブデータベースコンポーネントを有するものが移送され得ない一方で、他のセッションは移送され得る。後に発表されたものでは、より多くのデータベースコンポーネントが移送対応であり、より広い範囲の環境においてセッションが移送され得る。
移送チェックが実行される際、選択されたセッションが移送対応でないアクティブデータベースコンポーネントを有するか否かについてチェックが実行され得る。選択されたセッションが移送対応でないアクティブデータベースコンポーネントを有することを検出すると、移送障害イベントとして処理され得る。
他の実施例
本発明の一実施例が、多層システムの単一層のマルチノードデータベースサーバのリソースを動的に割り当てることによって示された。しかしながら、本発明の一実施例は、データベースサーバ内または多層システムの単一層内でセッションを移送することに限られない。
例えば、本発明の一実施例は多層システムの複数の層においてセッションを移送するのに用いられ得、システムは、マルチノードデータベースサーバを第1の層に含み、マルチノードアプリケーションサーバを第2の層に含み、アプリケーションサーバはデータベースサーバに関してクライアントであり、ネットワークを介してアプリケーションサーバに接続するブラウザはアプリケーションサーバに関してクライアントである。データベースサーバが主にアプリケーションサーバのためのデータベースを格納し、アクセスを提供するために用いられる一方、アプリケーションサーバは主にアプリケーションコードを格納し、アクセスを与え、実行するために用いられる。透過的なセッション移送が用いられることができ、セッションがデータベースサーバ上のインスタンス間で移送されるのと同様の方法で、アプリケーションのインスタンス間でセッションを移送し得る。アプリケーションサーバの例は、オラクル9iアプリケーションサーバ(Oracle 9i Application Server)またはオラクル10gアプリケーションサーバ(Oracle 10g Application Server)である。
セッション移送を動的バランスセッションおよびサーバ間作業負荷に限定するものは、いずれも透過的セッション移送ではない。例えば、計画されたダウンタイムの間サーバがダウンされることを可能にするために、またはサーバが提供された後に利用可能になったとき、セッションを別のサーバに動かすためにセッションがサーバから移送され得る。
ハードウェア概観
図9は、本発明の一実施例が実現され得るコンピュータシステム900を示すブロック図である。コンピュータシステム900は、バス902または情報を通信するための他の通信機構と、バス902に結合されて情報を処理するためのプロセッサ904とを含む。コンピュータシステム900はまた、バス902に結合されて、プロセッサ904によって実行される命令および情報を格納するためのメインメモリ906、たとえばランダムアクセスメモリ(RAM)または他の動的記憶装置をも含む。メインメモリ906は、プロセッサ904によって実行される命令の実行中に、一時的変数または他の中間情報を格納するためにも用いられ得る。コンピュータシステム900は、バス902に結合されてプロセッサ904に対する静的情報および命令を格納するための読出専用メモリ(ROM)908または他の静的記憶装置をさらに含む。磁気ディスクまたは光学ディスクなどの記
憶装置910が設けられてバス902に結合され、情報および命令を格納する。
コンピュータシステム900は、コンピュータユーザに情報を表示するための表示部912、たとえば陰極線管(CRT)に、バス902を介して結合され得る。英数字キーおよび他のキーを含む入力装置914がバス902に結合されて、情報およびコマンド選択をプロセッサ904に通信する。別の種類のユーザ入力装置は、方向情報およびコマンド選択をプロセッサ904に通信して表示部912上のカーソル動作を制御するための、カーソル制御機器916、たとえばマウス、トラックボール、またはカーソル方向キーである。この入力装置は一般に、2つの軸、すなわち第1の軸(x等)および第2の軸(y等)において2自由度を有し、これによって入力装置は平面上で位置を特定できる。
本発明は、本願明細書に記載された技術を実現するためにコンピュータシステム900を用いることに関する。本発明の一実施例によると、これらの技術は、メインメモリ906に含まれる1つ以上の命令の1つ以上のシーケンスをプロセッサ904が実行することに応答して、コンピュータシステム900により実行される。このような命令は、別のコンピュータ読取可能な媒体、たとえば記憶装置910等からメインメモリ906内に読出すことができる。メインメモリ906に含まれる命令のシーケンスを実行することにより、プロセッサ904に本願明細書に記載された処理のステップを実行させる。代替的な実施例では、ソフトウェア命令の代わりに、またはソフトウェア命令と組合せた結線回路を用いて、本発明を実施することができる。したがって、本発明の実施例は、ハードウェア回路およびソフトウェアのいかなる特定の組合せにも限定されない。
本願明細書で用いられる「コンピュータ読取可能な媒体」という用語は、プロセッサ904に対して実行のために命令を提供することにかかわるあらゆる媒体を指す。このような媒体は、不揮発性媒体、揮発性媒体、および伝送媒体を含む多くの形態をとり得るが、これらに限定されない。不揮発性媒体には記憶装置910等の光学または磁気ディスクが含まれる。揮発性媒体にはメインメモリ906等のダイナミックメモリが含まれる。伝送媒体には、同軸ケーブル、銅線、光ファイバ、およびバス902を構成するワイヤを含む。伝送媒体は、電波および赤外線データ通信の際に生成されるもの等の音波または光波の形をとり得る。
コンピュータ読取可能な媒体の一般的な形態には、たとえばフロッピー(登録商標)ディスク、フレキシブルディスク、ハードディスク、磁気テープ、任意の他の磁気媒体、CD−ROM、任意の他の光学媒体、パンチカード、紙テープ、孔パターンを有する任意の他の物理的媒体、RAM、PROM、EPROM、FLASH−EPROM、任意の他のメモリチップもしくはカートリッジ、以下に述べる搬送波、またはコンピュータが読出すことのできる任意の他の媒体が含まれる。
プロセッサ904に対して実行のために1つ以上の命令の1つ以上のシーケンスを運ぶ際に、さまざまな形態のコンピュータ読取可能な媒体が関与し得る。たとえば、命令は、最初に遠隔コンピュータの磁気ディスクで運ばれ得る。遠隔コンピュータはそれらの命令をそれ自体のダイナミックメモリにロードして、それらの命令をモデムを用いて電話回線経由で送信することができる。コンピュータシステム900に対してローカルなモデムが電話回線上のデータを受信して、赤外線送信機を用いてそのデータを赤外線信号に変換することができる。赤外線検出器が赤外線信号によって運ばれたデータを受信し得、適切な回路がそのデータをバス902上に出力することができる。バス902はそのデータをメインメモリ906に運び、そこからプロセッサ904が命令を取り出して実行する。メインメモリ906が受信した命令は、プロセッサ904による実行前または実行後のいずれかに、記憶装置910に任意に格納され得る。
コンピュータシステム900は、バス902に結合された通信インターフェイス918も含む。通信インターフェイス918は、ローカルネットワーク922に接続されたネットワークリンク920に対する双方向のデータ通信結合をもたらす。たとえば通信インターフェイス918は、対応する種類の電話回線に対するデータ通信接続を与えるためのサービス統合デジタルネットワーク(ISDN)カードまたはモデムであり得る。別の例として、通信インターフェイス918は、互換性を有するローカルエリアネットワーク(LAN)にデータ通信接続を設けるためのLANカードであり得る。無線リンクもまた実現することができる。このようなどの実現例においても、通信インターフェイス918は、さまざまな種類の情報を表わすデジタルデータストリームを運ぶ、電気的、電磁的、または光学的信号を送受信する。
ネットワークリンク920は一般に、1つ以上のネットワーク経由で他のデータ装置に対するデータ通信をもたらす。たとえば、ネットワークリンク920は、ローカルネットワーク922を介してホストコンピュータ924またはインターネットサービスプロバイダ(Internet Service Provider)(ISP)926によって運営されるデータ装置に接続をもたらすことができる。ISP926は次いで、現在一般に「インターネット」928と呼ばれるワールドワイドパケットデータ通信網を介してデータ通信サービスを提供する。ローカルネットワーク922およびインターネット928はともに、デジタルデータストリームを運ぶ電気的、電磁的、または光学的信号を用いる。さまざまなネットワークを経由する信号と、ネットワークリンク920上の、コンピュータシステム900との間でデジタルデータを運ぶ通信インターフェイス918経由の信号とは、情報を運搬する搬送波の例示的形態である。
コンピュータシステム900は、ネットワーク、ネットワークリンク920、および通信インターフェイス918を介してメッセージを送信し,プログラムコードを含むデータを受信することができる。インターネットの例では、サーバ930は、インターネット928、ISP926、ローカルネットワーク922および通信インターフェイス918経由でアプリケーションプログラムに対して要求されたコードを送信することができる。
受信されたコードは、受信されたときにプロセッサ904によって実行され得、および/または後の実行のために記憶装置910もしくは他の不揮発性記憶装置に格納され得る。この態様で、コンピュータシステム900は搬送波の形でアプリケーションコードを得ることができる。
上述の明細書では、本発明の実施例を実現例ごとに異なり得る多数の特定の詳細を参照して説明してきた。したがって、本発明が何であるか、および出願人が発明として意図したのは何であるかを示す唯一独占的なものが、この出願から特有の形態で発生する請求項の組であって、そこでこのような請求項は以降のあらゆる補正を含む。このような請求項に含まれる用語に対して本願明細書で明示された任意の定義は、請求項で用いられている通りにこのような用語の意味を支配するものとする。したがって、請求項に明示的に記載されていない限定、要素、特性、特徴、利点または属性は、このような請求項の範囲をいかなる意味でも限定してはならない。したがって、本願明細書および図面は限定的な意味ではなく例示的な意味で捉えられるべきである。
コンピュータシステムのための多層アーキテクチャのブロック図である。 本発明の一実施例による、本発明の一実施例が実現され得るマルチノードコンピュータシステムを示すブロック図である。 本発明の一実施例による、セッションの移送に関与するクライアント、ソースデータベースインスタンスおよび宛先データベースインスタンスを示すブロック図である。 本発明の一実施例による、サーバ間でセッションを移送するためのプロトコルを示すエンティティ対話の図である。 本発明の一実施例による、セッションを移送するか否かを判断するための移送基準およびその使用を示すブロック図である。 図6は、本発明の一実施例によればセッションの一部のセッション状態を使用するデータベースコンポーネントを示すブロック図である。 図7は、本発明の一実施例による、セッション移送のステージを示すステージ遷移図である。 図8は、本発明の一実施例によれば、セッションのセッション状態をキャプチャし、ロードする役割があるデータベースコンポーネントのための拡張可能なフレームワークのさまざまなコンポーネントを示す図である。 図9は、本発明の実施例を実行するために用い得るコンピュータシステムのブロック図である。

Claims (15)

  1. コンピュータシステムで実現可能なステップを含む方法であって、
    前記コンピュータシステムは、クライアントコンピュータと、複数のサーバを実行するマルチノードコンピュータシステムとを備え、前記クライアントコンピュータは、クライアントアプリケーションと前記複数のサーバとの間にインタフェースを与えるように構成されたインタフェースコンポーネントを実行し、
    前記マルチノードコンピュータシステムが、前記クライアントコンピュータから、あるセッションを前記マルチノードコンピュータシステムのクライアントのために確立するためのリクエストを受け取るステップと、
    前記クライアントコンピュータ上の前記インタフェースコンポーネントが、前記あるセッションとして前記マルチノードコンピュータシステムの第1のノード上の第1のセッションを確立するステップとを含み、前記第1のノードは、前記複数のサーバのうちのソースサーバであり、
    前記ソースサーバが1つ以上の移送基準が満たされているか否かを判断するステップをさらに含み、
    前記1つ以上の移送基準が満たされているか否かを判断するステップは、前記第1のセッションの第1のセッション状態の1つ以上の部分が別のノード上の別のセッションへ移送され得るか否かを判断するステップを含み、
    前記1つ以上の移送基準が満たされている場合は、次に、
    前記ソースサーバが前記第1のセッションの前記第1のセッション状態を、前記第1のノードから前記複数のサーバのうちの宛先サーバである第2のノード上の第2のセッションへ転送するステップと、
    前記クライアントコンピュータ上の前記インタフェースコンポーネントが、前記マルチノードコンピュータシステム上の前記クライアントのための前記あるセッションとして前記第2のセッションを確立するステップとを含む、方法。
  2. 前記ソースサーバが前記第1のセッション状態を転送する前記ステップは、
    前記第1のノードが前記第1のセッション状態の一部のコピーを生成し、格納するステップと、
    前記第1のノードおよび前記第2のノード間に確立された接続を介して、前記第1のセッション状態の一部のコピーを前記第2のノードに送るステップとを含む、請求項1に記載の方法。
  3. 前記1つ以上の移送基準は、前記第1のセッションに関連付けられるトランザクションが終了したか否かに基づく、請求項1に記載の方法。
  4. 前記ソースサーバにより前記第1のノード上で実行される複数のソフトウェアコンポーネントの各コンポーネントは、前記第1のセッション状態の前記1つ以上の部分の各部分にアクセスし、
    前記1つ以上の移送基準が満たされるか否かを判断する前記ステップは、前記ソースサーバが、前記複数のソフトウェアコンポーネントの各前記コンポーネントについて、前記各コンポーネントの関数を呼び出すステップを含み、前記関数は、前記第1のセッション状態の前記各部分が別のノードへ転送され得るか否かを示す値を返し、
    前記1つ以上の移送基準は、前記複数のソフトウェアコンポーネントの各前記コンポーネントの前記関数によって返される値に基づく、請求項1に記載の方法。
  5. 前記ソースサーバが、前記クライアントに前記第2のセッションを生成させるために第1のメッセージを前記クライアントに送るステップと、
    前記クライアントが、前記第2のセッションが生成されたことを示す第2のメッセージを前記第1のノードに送るステップと、
    前記第2のメッセージを受け取ることに応答して、前記第1のノードが前記第1のセッション状態の転送を開始するステップとをさらに含む、請求項3に記載の方法。
  6. 前記第2のメッセージは前記第2のノードに接続を確立するための接続データを含み、
    前記第1のセッション状態を転送するステップは、前記接続を介して前記第1のセッション状態を前記ソースサーバから前記宛先サーバに転送するステップを含む、請求項5に記載の方法。
  7. 前記第1のノードから前記第1のメッセージを受け取ることに応答して、前記クライアントが、前記第2のセッションを生成するためのあるリクエストを前記第2のノードに送信するステップと、
    前記第2のセッションを生成した後、
    前記第2のノードが、前記第1のノードへの接続のためのポートを確立するステップと、
    前記第2のノードが、前記ポートへの接続を確立するための接続データを含むメッセージを前記クライアントに送信するステップとをさらに含む、請求項5に記載の方法。
  8. 前記クライアントが前記ポートへの前記接続を確立するための前記接続データのコピーを含むメッセージを前記第2のノードに送信するステップと、
    前記接続データのコピーを含む前記メッセージを受け取ることに応答して、前記第1のノードが前記接続データに基づいて接続を確立し、第1のセッション状態を転送する前記ステップを開始するステップとをさらに含む、請求項7に記載の方法。
  9. 前記ソースサーバが前記第1のセッション状態を転送した後、前記クライアントに前記第2のセッションを前記あるセッションとして使用させるために第3のメッセージを前記クライアントに送るステップとをさらに含む、請求項5に記載の方法。
  10. 前記ソースサーバが、前記第1のセッションを前記第2のノードに移送するためのリクエストを受け取るステップをさらに含む、請求項1に記載の方法。
  11. 前記ソースサーバが前記第1のセッションを移送する進捗をトラッキングするステップと、
    前記第1のセッションを移送する前記進捗および時間に基づいて、前記ソースサーバが、
    前記第1のセッションの移送を中止するステップと、
    前記第1のセッションの移送が試みられ、失敗したことを示すデータを生成するステップをさらに含む、請求項10に記載の方法。
  12. 前記クライアントアプリケーションは前記ソースサーバにコールを行い、
    前記第1のセッション状態を転送するステップと、前記第2のセッションを前記あるセッションとして確立するステップとは、前記コール内で実行される、請求項1に記載の方法。
  13. 前記ソースサーバである前記第1のノードが、前記第1のセッションを前記第2のノードに移送するためのリクエストを受け取るステップと、
    ある時間が経過したと判断した後、前記第1のノードが前記クライアントに前記第2のノード上でホストされるサーバへのコールを行なわせるステップと、
    前記第1のセッション状態を転送する前記ステップと、前記第2のセッションを前記あるセッションとして確立する前記ステップとは、前記コール内で実行される、請求項1に記載の方法。
  14. 前記第1のセッション状態を転送する前記ステップと、前記第2のセッションを確立する前記ステップとは、前記第1のセッションを前記第2のノードに移送する動作として実行され、
    前記ソースサーバが、移送障害イベントを検出することに応答して、さらに、
    前記第1のセッションの移送を中止するステップと、
    前記第1のセッションを移送するために割り当てられたリソースを放棄するステップと、
    前記第1のセッションの移送が試みられ、失敗したこと示すデータを生成するステップとを含む、請求項1に記載の方法。
  15. コンピュータシステムで実行される処理を含むプログラムであって、
    前記コンピュータシステムは、クライアントコンピュータと、複数のサーバを実行するマルチノードコンピュータシステムとを備え、前記クライアントコンピュータは、クライアントアプリケーションと前記複数のサーバとの間にインタフェースを与えるように構成されたインタフェースコンポーネントとを実行し、
    前記マルチノードコンピュータシステムが、前記クライアントコンピュータから、あるセッションを前記マルチノードコンピュータシステムのクライアントのために確立するためのリクエストを受け取るステップと、
    前記クライアントコンピュータ上の前記インタフェースコンポーネントが、前記あるセッションとして前記マルチノードコンピュータシステムの第1のノード上の第1のセッションを確立するステップとを含み、前記第1のノードは、前記複数のサーバのうちのソースサーバであり、
    前記ソースサーバが1つ以上の移送基準が満たされているか否かを判断するステップをさらに含み、
    前記1つ以上の移送基準が満たされているか否かを判断するステップは、前記第1のセッションの第1のセッション状態の1つ以上の部分が別のノード上の別のセッションへ移送され得るか否かを判断するステップを含み、
    前記1つ以上の移送基準が満たされている場合は、次に、
    前記ソースサーバが前記第1のセッションの前記第1のセッション状態を、前記第1のノードから前記複数のサーバのうちの宛先サーバである第2のノード上の第2のセッションへ転送するステップと、
    前記クライアントコンピュータ上の前記インタフェースコンポーネントが、前記マルチノードコンピュータシステム上の前記クライアントのための前記あるセッションとして前記第2のセッションを確立するステップとを、コンピュータに実行させる、プログラム。
JP2006523426A 2003-08-14 2004-08-13 サーバ間の透過的なセッション移送 Active JP4976128B2 (ja)

Applications Claiming Priority (19)

Application Number Priority Date Filing Date Title
US49536803P 2003-08-14 2003-08-14
US60/495,368 2003-08-14
US50009603P 2003-09-03 2003-09-03
US50005003P 2003-09-03 2003-09-03
US60/500,050 2003-09-03
US60/500,096 2003-09-03
US60134604P 2004-08-12 2004-08-12
US60125004P 2004-08-12 2004-08-12
US60125904P 2004-08-12 2004-08-12
US10/918,055 US7552171B2 (en) 2003-08-14 2004-08-12 Incremental run-time session balancing in a multi-node system
US60/601,346 2004-08-12
US60/601,259 2004-08-12
US10/917,953 US7552218B2 (en) 2003-08-14 2004-08-12 Transparent session migration across servers
US10/918,055 2004-08-12
US10/917,873 US7516221B2 (en) 2003-08-14 2004-08-12 Hierarchical management of the dynamic allocation of resources in a multi-node system
US10/917,873 2004-08-12
US10/917,953 2004-08-12
US60/601,250 2004-08-12
PCT/US2004/026445 WO2005017750A2 (en) 2003-08-14 2004-08-13 Transparent session migration across servers

Publications (2)

Publication Number Publication Date
JP2007511807A JP2007511807A (ja) 2007-05-10
JP4976128B2 true JP4976128B2 (ja) 2012-07-18

Family

ID=34199454

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006523426A Active JP4976128B2 (ja) 2003-08-14 2004-08-13 サーバ間の透過的なセッション移送

Country Status (7)

Country Link
EP (1) EP1654650B1 (ja)
JP (1) JP4976128B2 (ja)
AU (1) AU2004264626B2 (ja)
CA (1) CA2533773C (ja)
DE (1) DE602004025819D1 (ja)
HK (1) HK1086898A1 (ja)
WO (1) WO2005017750A2 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8909782B2 (en) * 2005-07-13 2014-12-09 International Business Machines Corporation Method and system for dynamically rebalancing client sessions within a cluster of servers connected to a network
EP2066101B1 (en) * 2007-11-28 2012-10-17 Alcatel Lucent System and method for an improved high availability component implementation
JP5169362B2 (ja) 2008-03-24 2013-03-27 富士通株式会社 セッション情報複製方法、前記方法を実行する呼制御サーバ及び前記方法のプログラム
JP2011180889A (ja) * 2010-03-02 2011-09-15 Nec Corp ネットワークリソース管理システム、装置、方法及びプログラム
US8300790B2 (en) * 2010-12-27 2012-10-30 Avaya Inc. Method and system for automatic conference call session migration
EP2665228B1 (en) 2011-04-07 2020-05-20 Huawei Technologies Co., Ltd. Method for adjusting resources dynamically and scheduling device
KR20150110103A (ko) 2014-03-24 2015-10-02 삼성전자주식회사 전송 경로 최적화를 위한 컨텐츠 서버 간 핸드오버 방법 및 장치
US10757224B2 (en) 2014-09-04 2020-08-25 Seiko Epson Corporation Data processing system, data processing method, and printer
EP3562118A1 (en) * 2018-04-23 2019-10-30 InterDigital CE Patent Holdings Method and device for migrating a stateful function

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5774668A (en) * 1995-06-07 1998-06-30 Microsoft Corporation System for on-line service in which gateway computer uses service map which includes loading condition of servers broadcasted by application servers for load balancing
JPH0950412A (ja) * 1995-08-10 1997-02-18 Hitachi Ltd 遠隔手続き呼び出し方法およびシステム
US6041357A (en) * 1997-02-06 2000-03-21 Electric Classified, Inc. Common session token system and protocol
JPH10312365A (ja) * 1997-05-13 1998-11-24 Nec Corp 負荷分散システム
US6088728A (en) * 1997-06-11 2000-07-11 Oracle Corporation System using session data stored in session data storage for associating and disassociating user identifiers for switching client sessions in a server
JPH1188373A (ja) * 1997-09-12 1999-03-30 Nec Corp コネクション振り分けによる負荷分散方式
JP2000163369A (ja) * 1998-11-30 2000-06-16 Nippon Telegr & Teleph Corp <Ntt> 処理結果分散管理方法及びシステム及び処理結果分散管理サーバ装置及び処理結果分散管理プログラムを格納した記憶媒体
US6601101B1 (en) * 2000-03-15 2003-07-29 3Com Corporation Transparent access to network attached devices
US7181492B2 (en) * 2000-10-17 2007-02-20 Concerto Software, Inc. Transfer of an internet chat session between servers
JP2002342078A (ja) * 2001-05-17 2002-11-29 Hitachi Ltd プログラム開発システム及び方法
AU2002329602B2 (en) * 2001-07-16 2008-05-22 Oracle International Corporation Method and apparatus for session replication and failover
US7409420B2 (en) * 2001-07-16 2008-08-05 Bea Systems, Inc. Method and apparatus for session replication and failover
JP2003122732A (ja) * 2001-10-16 2003-04-25 Nec Corp 情報通信システム

Also Published As

Publication number Publication date
WO2005017750A3 (en) 2005-10-13
JP2007511807A (ja) 2007-05-10
HK1086898A1 (en) 2006-09-29
AU2004264626A1 (en) 2005-02-24
CA2533773A1 (en) 2005-02-24
CA2533773C (en) 2011-09-27
WO2005017750A2 (en) 2005-02-24
DE602004025819D1 (de) 2010-04-15
EP1654650B1 (en) 2010-03-03
EP1654650A2 (en) 2006-05-10
AU2004264626B2 (en) 2010-02-04

Similar Documents

Publication Publication Date Title
US7415522B2 (en) Extensible framework for transferring session state
US9176772B2 (en) Suspending and resuming of sessions
US7415470B2 (en) Capturing and re-creating the state of a queue when migrating a session
US7082604B2 (en) Method and apparatus for breaking down computing tasks across a network of heterogeneous computer for parallel execution by utilizing autonomous mobile agents
US7634512B2 (en) Migrating temporary data of a session
US6237005B1 (en) Web server mechanism for processing multiple transactions in an interpreted language execution environment
US7503052B2 (en) Asynchronous database API
US7698359B2 (en) Remote system administration using command line environment
WO2001090886A2 (en) Local transaction management
WO2023046141A1 (zh) 一种数据库网络负载性能的加速框架、加速方法及设备
JP4976128B2 (ja) サーバ間の透過的なセッション移送
Mohamed et al. MidCloud: an agent‐based middleware for effective utilization of replicated Cloud services
US7945808B2 (en) Fanout connectivity structure for use in facilitating processing within a parallel computing environment
JP2000242608A (ja) コンピューティング装置、操作方法およびプログラム記憶装置
CN107465725A (zh) 基于客户信息控制系统的异构长事务处理系统及方法
US20100250684A1 (en) High availability method and apparatus for shared resources
EP1654858B1 (en) Transparent migration of stateless sessions across servers
Uthayopas et al. Sce: A fully integrated software tool for beowulf cluster system
US7346910B1 (en) Administration of groups of computer programs, data processing systems, or system resources
Sommers et al. Cluster-based computing with active, persistent objects on the web
KR20010036084A (ko) 분산환경하에서의 프로세스 관리 방법
Huang et al. Design of DMPI on DAWNING-3000

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070627

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100427

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100727

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100831

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120412

R150 Certificate of patent or registration of utility model

Ref document number: 4976128

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150420

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250