JP3853592B2 - 分散ウェブアプリケーションサーバ - Google Patents
分散ウェブアプリケーションサーバ Download PDFInfo
- Publication number
- JP3853592B2 JP3853592B2 JP2000519523A JP2000519523A JP3853592B2 JP 3853592 B2 JP3853592 B2 JP 3853592B2 JP 2000519523 A JP2000519523 A JP 2000519523A JP 2000519523 A JP2000519523 A JP 2000519523A JP 3853592 B2 JP3853592 B2 JP 3853592B2
- Authority
- JP
- Japan
- Prior art keywords
- instance
- cartridge
- dispatcher
- message
- request
- 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.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5055—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering software capabilities, i.e. software resources associated or available to the machine
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
- H04L69/322—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
- H04L69/329—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the application layer [OSI layer 7]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/40—Network security protocols
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
- Y10S707/99953—Recoverability
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer And Data Communications (AREA)
- Stored Programmes (AREA)
- Information Transfer Between Computers (AREA)
- Multi Processors (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Description
【発明の分野】
この発明はネットワーク接続されたコンピュータシステムにおけるサーバアーキテクチャに関し、より特定的には、種々のマシンを通じたユーザリクエストに対する動的処理を可能にするための分散アーキテクチャに関する。
【0002】
【発明の背景】
ワールド・ワイド・ウェブ(World Wide Web)はインターネット(Internet)上のサーバのネットワークを含み、その各々は1つ以上のHTML(Hypertext Markup Language:ハイパテキスト・マークアップ言語)ページに関連付けられている。サーバに関連付けられているHTMLページは、情報と、そのサーバおよび(通常は)他のサーバ上の他の文書へのハイパテキストリンクとを提供する。サーバはハイパテキスト・トランスファー・プロトコル(HTTP:Hypertext Transfer Protocol)を用いてクライアントと通信する。サーバはクライアントからのHTMLページに関するリクエストを聞くことから、多くの場合、「リスナ」と称される。
【0003】
ワールド・ワイド・ウェブのユーザはブラウザと呼ばれるクライアントプログラムを用いてリスナから情報をリクエストし、デコードし、表示する。ブラウザのユーザがあるHTMLページ上のリンクを選択すると、そのページを表示しているブラウザはそのリンク内で特定されるユニバーサル・リソース・ロケータ(URL:Universal Resource Locator)と関連付けられるリスナにインターネットを通じてリクエストを送る。そのリクエストに応答して、リスナはそのリクエストを発行したブラウザにリクエストされた情報を送信する。ブラウザは情報を受取り、受取った情報をユーザに示し、次のユーザリクエストを待つ。
【0004】
従来、リスナに蔵置される情報は静的HTMLページの形態である。静的HTMLページは、ウェブブラウザからのリクエストに先立ち作成されリスナに蔵置される。リクエストに応答して、静的HTMLページが単に記憶から読出され、リクエストを行なっているブラウザに送信される。現在、ブラウザリクエストに応答して動的オペレーションを行なうリスナを開発しようとする趨勢にある。たとえば、リスナはリクエストに応答する際にデータベースにクエリーを発行し、そのクエリーの結果を含むウェブページを動的に構成し、動的に構成されたHTMLページをリクエストを行なっているブラウザに送信してもよい。動的オペレーションを行なうために、リスナの機能性を向上または増強させなければならない。動的オペレーションをサポートするようリスナを拡張するためにさまざまなアプローチが開発されてきた。
【0005】
ウェブブラウザからのリクエストに応答して動的オペレーションをもたらす1つのアプローチでは共通ゲートウェイ・インターフェイス(CGI)を用いる。CGIはリスナとCGIプログラムとの間で情報を転送するための仕様である。CGIプログラムはCGI仕様に従った、データを受け、かつ返すよう設計されるプログラムであればどのようなものであってもよい。そのプログラムはC、PerlまたはVisual Basicを含むどんなプログラム言語で書かれたものであってもよい。
【0006】
CGIのアプローチでは、サーバが特定されたリクエストを受取るたびに別個のプロセス(CGIプログラムの別個のインスタンス)がイニシエートされるという不利な点がある。さらに、CGIプログラムはブラウザリクエストを受取ったリスナと同じマシン上で実行される。したがって、千ものこうしたリクエストを異なったユーザから受信すると、リスナを実行しているマシンで千ものプロセスがイニシエートされることとなり、サーバ上の使用可能なリソースを使い果たすこととなる。
【0007】
CGIアプローチの第2の不利な点は、各リクエストに対して別個のプロセスがイニシエートされ実行され終了されることである。すなわち、第1の組の10のリクエストの後に第2の組の10のリクエストが続く場合、その第1の組のリクエストに対して第1の組の10のプロセスがイニシエートされ終了され、その第2の組のリクエストに対して第2の組の10のプロセスがイニシエートされ終了されることとなる。CGIではプロセスのイニシエートに関連するオーバーヘッドを避けるため、第1の10のリクエストに対して用いられた10のプロセスと同じものを第2の10のリクエストを処理するのに用いることが許されていない。
【0008】
リクエストに対する動的な応答を行なうための代替的なアプローチは「プラグイン」拡張を用いることである。プラグイン拡張はサーバに送られたメッセージをさまざまな段階で代行受信して特定のユーザリクエストに対してアプリケーションに特有の処理を行なう。サーバ側のプラグインはリスナおよび他のすべてのサーバ側プラグインと同じアドレス空間において実行される。よって、プラグインを設計するアプリケーション開発者はリスナの下位レベルのオペレーションの詳細に精通していなければならない。さらに、リスナと同じアドレス空間でプラグインを実行することによりリスナを安全性および安定性の面で危険にさらすこととなる。障害のあるプラグインにより、他のプラグインまたはリスナそのものがクラッシュしたり、または予測できない態様で動作してしまうこともある。
【0009】
プラグインアプローチの第2の問題は、CGIアプローチと同様に、すべてのプラグインオペレーションがリスナを実行しているマシンと同じマシン上で実行されることである。プラグイン拡張によって実行されるタスクは他のマシンに負荷を転嫁することができないため、プラグインによるアプローチのスケーラビリティ(scalability)は大幅に制限される。
背景および、この発明の実施例により解決される課題についてのさらなる詳細は、ナイジェル・エドワーズ(Nigel Edwards)およびオーエン・リーズ(Owen Rees)による「安全性の高いウェブサーバおよびゲートウェイ」(“High security Web servers and gateways” COMPUTER NETWORKS AND ISDN SYSTEMS, 29, (1997) 927-938.)と題された論文に記載されている。
【0010】
【発明の概要】
分散ウェブアプリケーションサーバによりブラウザリクエストを処理するための方法およびシステムを提供する。分散環境により、ブラウザリクエスト内で特定されるオペレーションを実行するプロセス(「カートリッジインスタンス」)が、そのリクエストを受取るリスナおよびそのリクエストを発行するブラウザとは異なるマシン上で実行できる。カートリッジインスタンスがリスナとは異なるマシン上にあるため、リスナは障害のあるカートリッジインスタンスからよりよく隔離されることとなり、システムの信頼性および安全性が向上する。さらに、リスナが実行されるマシンと同じマシンでなく、数多くのマシン間でカートリッジインスタンスを実行する処理の負担を分散することによってシステムのスケーラビリティが大幅に増加する。複数のマシンにわたってカートリッジインスタンスの実行を分散できることから、いつどこで新しいカートリッジインスタンスを生じさせるかを決定するのに数多くのタイプの負荷の最適配分の技法を用いることができる。
【0011】
この発明の一局面によれば、第1のマシン上で実行されるディスパッチャと第2のマシン上で実行されるリソースマネージャとを用いてオペレーションが実行される。第1のメッセージがディスパッチャからリソースマネージャへ送られる。この第1のメッセージはオペレーションを行なうことのできるある特定のカートリッジを識別している。第2のメッセージがリソースマネージャからディスパッチャへ送られる。この第2のメッセージはそのある特定のカートリッジのある特定のインスタンスを特定している。このある特定のインスタンスは第3のマシン上で実行されている。
【0012】
ディスパッチャからの第3のメッセージはそのある特定のインスタンスに送られ、そのある特定のインスタンスにオペレーションを行なわせる。第1のマシン、第2のマシンおよび第3のマシンのうちの少なくとも2つは別個のマシンである。
【0013】
この発明の別の局面によれば、ブラウザリクエストに関連するオペレーションを行なうためのシステムが提供される。システムは複数のウェブリスナに結合される複数のディスパッチャを含む。その複数のディスパッチャの各ディスパッチャはその複数のウェブリスナの対応するウェブリスナからその対応するウェブリスナが受取ったブラウザリクエストを受取る。
【0014】
システムはさらに、仮想パスマネージャおよびリソースマネージャを含む。仮想パスマネージャはマシン間通信機構を介して複数のディスパッチャに結合される。仮想パスマネージャは、複数のカートリッジのうちのどれがそのブラウザリクエストと関連付けられているのかをディスパッチャに示す。リソースマネージャはマシン間通信機構を介して複数のディスパッチャに結合される。リソースマネージャは、ディスパッチャからインスタンスに対するリクエストを受取ったことに応答して、複数のディスパッチャの各々のディスパッチャに複数のカートリッジのうちのあるカートリッジのインスタンスを割当てるよう構成される。
【0015】
複数のディスパッチャは、リソースマネージャによってディスパッチャに割当てられるインスタンスへメッセージをマシン間通信機構を介して送るよう構成される。そのメッセージにより、インスタンスがブラウザリクエストに関連するオペレーションを行なうことになる。
【0016】
この発明は限定によってではなく例によって、添付の図面において例示され、添付の図面において類似の参照番号は類似の要素を指す。
【0017】
【好ましい実施例の詳細な説明】
ネットワークにわたってオペレーションを行なうための方法および装置を説明する。以下において説明のため、この発明の完全な理解をもたらすように数多くの特定の詳細事項を挙げている。しかしながら、当業者にはこの発明がこれらの特定の詳細事項がなくても実施できることが明らかになるであろう。場合によっては不必要にこの発明を曖昧にすることを避けるため周知の構造および装置をブロック図の形態で示している。
【0018】
ハードウェアの概観
図1は、この発明の実施例が実装され得るコンピュータシステム100を示すブロック図である。コンピュータシステム100は、バス102または情報を通信するための他の通信機構と、バス102に結合され情報を処理するためのプロセッサ104とを含む。コンピュータシステム100はまた、バス102に結合され情報およびプロセッサ104が実行すべき命令を蔵置するための、ランダムアクセスメモリ(RAM)または他の動的記憶装置などのメインメモリ106を含む。メインメモリ106はまた、プロセッサ104が実行すべき命令の実行の間に一時変数または他の中間情報を蔵置するのに用いられてもよい。コンピュータシステム100はさらに、バス102に結合され静的情報およびプロセッサ104に対する命令を蔵置するための読取専用メモリ(ROM)108または他の静的記憶装置を含む。磁気ディスクまたは光ディスクなどの記憶装置110が設けられ、バス102に結合されて情報および命令を蔵置する。
【0019】
コンピュータシステム100はバス102を介して、陰極線管(CRT)などの表示装置112に結合されコンピュータユーザに対して情報を表示してもよい。英数字および他のキーを含む入力装置114がバス102に結合され、情報およびコマンド選択をプロセッサ104に伝える。別のタイプのユーザ入力装置は、プロセッサ104に方向情報およびコマンド選択を伝え、かつ表示装置112上のカーソル移動を制御するためのマウス、トラックボールまたはカーソル方向キーなどのカーソル制御装置116である。この入力装置は典型的に2つの軸、すなわち第1の軸(たとえばx)および第2の軸(たとえばy)において2つの自由度を有し、これは装置が平面上の位置を特定できるようにする。
【0020】
この発明はコンピュータシステム100を用いてブラウザからのメッセージに応答して特定のオペレーションを行なうことに関する。この発明の一実施例によれば、プロセッサ104がメインメモリ106に含まれる1つ以上の命令の1つ以上のシーケンスを実行することに応答してコンピュータシステム100がオペレーションを行なう。このような命令は、記憶装置110などの別のコンピュータ可読媒体からメインメモリ106に読込んでもよい。メインメモリ106に含まれる命令のシーケンスを実行することにより、プロセッサ104がここに説明するプロセスステップを実行することとなる。代替の実施例では、ソフトウェア命令の代わりにまたはソフトウェア命令と併せて、結線回路を用いてこの発明を実現してもよい。すなわち、この発明の実施例はハードウェア回路およびソフトウェアの如何なる特定の組合せにも限定されない。
【0021】
「コンピュータ可読媒体」という用語はここでは、実行のためにプロセッサ104に命令を提供するのにかかわるすべての媒体を指して用いる。このような媒体は、不揮発性媒体、揮発性媒体および伝送媒体を含むが、これらに限定されない数多くの形態を取り得る。不揮発性媒体には、たとえば、記憶装置110などの光ディスクまたは磁気ディスクが含まれる。揮発性媒体には、メインメモリ106などのダイナミックメモリが含まれる。伝送媒体には、バス102を構成するワイヤを含む、同軸ケーブル、導線および光ファイバが含まれる。伝送媒体はまた、電波および赤外線データ通信において生成されるもののような音波または光波の形態を取ることもある。
【0022】
コンピュータ可読媒体の一般的な形態にはたとえば、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープまたは何らかの他の磁気媒体、CD−ROMおよび何らかの他の光媒体、パンチカード、せん孔テープおよび孔のパターンを有する何らかの他の物理的媒体、RAM、PROM、EPROM、FLASH−EPROMおよび何らかの他のメモリチップまたはカートリッジ、以下に説明するような搬送波、またはコンピュータが読むことのできるものであればどのような他の媒体でも含まれる。
【0023】
実行のために1つ以上の命令の1つ以上のシーケンスをプロセッサ104に与える上でさまざまな形態のコンピュータ可読媒体がかかわり得る。たとえば、命令は初めに遠隔コンピュータの磁気ディスク上に担持されてもよい。遠隔コンピュータは命令をそのダイナミックメモリにロードし、その命令をモデムを用いて電話回線を介して送ることができる。コンピュータシステム100がローカルに有するモデムが電話回線上でデータを受取り、赤外線送信機を用いてそのデータを赤外線信号に変換できる。バス102に結合される赤外線検出器は赤外線信号で運ばれるデータを受取り、そのデータをバス102上に出力することができる。バス102はそのデータをメインメモリ106へ運び、そこからプロセッサ104は命令を取出して実行する。メインメモリ106が受取った命令は場合により、プロセッサ104による実行の前または後に記憶装置110に蔵置されてもよい。
【0024】
コンピュータシステム100はまた、バス102に結合される通信インターフェイス118を含む。通信インターフェイス118はローカルネットワーク122に接続されるネットワークリンク120への両方向データ通信結合を提供する。たとえば、通信インターフェイス118は、対応するタイプの電話回線に対してデータ通信接続を提供するサービス統合デジタル網(ISDN)カードまたはモデムであってもよい。別の例としては、通信インターフェイス118は、互換性のあるローカル・エリア・ネットワーク(LAN)に対するデータ通信接続を提供するローカル・エリア・ネットワーク(LAN)カードであってもよい。また、無線リンクを実現してもよい。このような実現例のいずれにおいても、通信インターフェイス118はさまざまなタイプの情報を表わすデジタルデータストリームを運ぶ電気信号、電磁気信号または光信号を送受信する。
【0025】
ネットワークリンク120は典型的に1つ以上のネットワークを介して他のデータ装置へのデータ通信を提供する。たとえば、ネットワークリンク120はローカルネットワーク122を介してホストコンピュータ124または、インターネットサービスプロバイダ(ISP:Internet Service Provider)126により運用されるデータ装置に対する接続を提供してもよい。ISP126はこれを受けて、現在一般的に「インターネット」128と称される世界規模のパケットデータ通信網を介するデータ通信サービスを提供する。ローカルネットワーク122およびインターネット128はともに、デジタルデータストリームを運ぶ電気信号、電磁気信号または光信号を用いる。コンピュータシステム100へまたはコンピュータシステム100からデジタルデータを運ぶ、さまざまなネットワークを介する信号およびネットワークリンク120上の、通信インターネット118を介する信号は情報を運ぶ搬送波の典型的な形態である。
【0026】
コンピュータシステム100はネットワーク、ネットワークリンク120および通信インターネット118を介して、メッセージを送り、プログラムコードを含むデータを受取ることができる。インターネットの例では、サーバ130はインターネット128、ISP126、ローカルネットワーク122および通信インターネット118を介してアプリケーションプログラムに対するリクエストされたコードを送信するかもしれない。
【0027】
受取られたコードはそれが受取られると同時にプロセッサ104によって実行され、および/または後に実行するために記憶装置110または他の不揮発性記憶に蔵置されてもよい。このように、コンピュータシステム100は搬送波の形態でアプリケーションコードを得ることもある。
【0028】
アプリケーションサーバ機能の概要
図2は、この発明の一実施例に従って設計されたシステム200のブロック図である。システム200は、HTTPプロトコルに従ってインターネット208にわたって複数のリスナ210、216および222と通信する複数のブラウザ202、204および206を含む。ブラウザからのリクエストに応答して、リスナはウェブアプリケーションサーバ280にここでカートリッジと称するソフトウェアモジュールを呼出させる。例示の実施例では、ウェブアプリケーションサーバ280は3つのカートリッジ230、234および238の実行を開始している。
【0029】
ウェブアプリケーションサーバ280は、トランスポート・アダプタ212、218および224、ディスパッチャ214、220および226、認証サーバ252、仮想パスマネージャ250、リソースマネージャ254、コンフィギュレーションプロバイダ256および複数のカートリッジ実行エンジン228、232および236を含む、数多くの構成要素からなる。ウェブアプリケーションサーバ280のさまざまな構成要素について以下により詳しく説明する。
【0030】
重要なことであるが、ウェブアプリケーションサーバ280の数多くの構成要素はオブジェクトリクエストブローカ(Object Request Broker)282などのマシン間通信機構を介して通信する。マシン間通信機構を用いることにより、ブラウザリクエストにおいて特定されるオペレーションを実行するカートリッジインスタンスは、リクエストを受取るリスナおよびリクエストを発行するブラウザとは異なるマシン上で実行することができる。カートリッジインスタンスがリスナとは異なるマシン上にあるため、リスナは障害のあるカートリッジインスタンスからよりよく隔離されることとなり、システムの信頼性および安全性が向上する。さらに、リスナが実行されるマシンと同じマシンでなく、数多くのマシン間でカートリッジインスタンスを実行する処理の負担を分散することによってシステムのスケーラビリティが大幅に増加する。複数のマシンにわたってカートリッジインスタンスの実行を分散できることから、いつどこで新しいカートリッジインスタンスを生じさせるかを決定するのに数多くのタイプの負荷の最適配分の技法を用いることができる。
【0031】
システム200内の典型的なオペレーションには一般的に以下の段階が含まれる。
【0032】
ブラウザがインターネット208にわたってリクエストを送信する。
リスナがそのリクエストを受取ってトランスポートアダプタを介してディスパッチャに渡す。
【0033】
ディスパッチャは仮想パスマネージャ250と通信してそのリクエストを扱うのに適切なカートリッジを判定する。
【0034】
この時点で、ディスパッチャは2つの事柄のうち1つを行なう。ディスパッチャがそのカートリッジに関する使用されていないインスタンスのことを知っている場合、ディスパッチャはそのインスタンスにリクエストを送る。そのカートリッジに関して使用されていないカートリッジインスタンスがない場合、ディスパッチャはリソースマネージャ254に新しいカートリッジインスタンスを作るよう依頼する。そのインスタンスがうまく起動した後に、カートリッジはその存在をリソースマネージャに知らせる。リソースマネージャ254はそこで、ディスパッチャに新しいインスタンスのことを知らせる。ディスパッチャはブラウザリクエストに基づいて変更されたリクエストを作り、その変更されたリクエストを新しいインスタンスに送る。
【0035】
カートリッジインスタンスはその変更されたリクエストを処理して、ディスパッチャに応答を送る。
【0036】
ディスパッチャはその応答をリスナを介してクライアントに戻す。
これらの段階について以下により詳しく説明する。
【0037】
カートリッジ
カートリッジは特定のアプリケーションまたはシステム機能を行なうためのコードのモジュールである。カートリッジはシステム200における分散の基本単位を形成する。この発明の一実施例によれば、カートリッジはユニバーサル・リソース・ロケータ(URL)を用いて名付けられる。すなわち、カートリッジ名には2つの部分、すなわちカートリッジが存在するサーバのIPアドレスと、コンパイルされたカートリッジコードのサーバディレクトリ構造における仮想パスとがある。カートリッジはURLを用いて名付けられるため、カートリッジ名空間はグローバルであり、文書などの他のウェブリソースにアクセスするのに用いられるのと同じメッセージ通信技術を用いてカートリッジにアクセスすることができる。
【0038】
この発明の一実施例によれば、各カートリッジはすべてのカートリッジに対して共通の全体構造をもたらす標準インターフェイスを有する。この標準インターフェイスは、特定の条件の下でウェブアプリケーションサーバ280により呼出されるルーチンのインターフェイスを規定する。この発明の一実施例によれば、抽象カートリッジインターフェイスは以下のとおりである。
【0039】
【表1】
【0040】
init()ルーチンはカートリッジインスタンスを初期化する役割を果たす。このことには、いくつかのサブオブジェクトのコンストラクタを呼出すことと、スレッドを予め分岐させることと、他のすべての必要となる共用リソースを獲得することとが含まれ得る。
【0041】
shutdown()ルーチンはすべてのリソースを片付けカートリッジインスタンスをシャットダウンする役割を果たす。カートリッジインスタンスに対して一度shutdown()ルーチンが呼出されると、直ちにカートリッジインスタンスは後続のリクエストを処理するのに利用不可能となる。
【0042】
authenticate()ルーチンではカートリッジのサービスをリクエストしているクライアントがそのサービスを用いることを許可されているかどうかを検証する。
【0043】
exec()ルーチンはカートリッジに対してすべてのサービスリクエストをディスパッチする包括的なやり方である。
【0044】
例示的カートリッジ
各カートリッジは、明確に定義された機能を行なうカートリッジとして構成されるか、またはあるアプリケーションのためのインタプリタまたはルーチン環境として作用するプログラム可能なカートリッジとして構成される。プログラム可能なカートリッジの一例はPL/SQLランタイムであり、これは構造的問合せ言語(Structured Query Language)を用いるオラクルベースのプログラム言語(Oracle-based Programming Language)(PL/SQL)に従ってデータベースクエリーを処理するよう構成される。PL/SQLランタイムはデータベースクエリーを有するブラウザリクエストを実行する。PL/SQLランタイムは、たとえば、データリンクを介してカートリッジインスタンスと通信しているデータベースサーバにアクセスすることによってリクエストを処理する。
【0045】
プログラム可能なカートリッジの別の例はJAVAランタイムインタプリタである。JAVAランタイムインタプリタカートリッジのおかげで、ウェブアプリケーション開発者らはブラウザリクエストを処理するためのサーバ側のJAVAアプリケーションを書くことができる。同様に、たとえば第三者のサーバによって実行されるプロセスにアクセスするなどの動的オペレーションをもたらすために、カスタムサーバをカートリッジとして構成してもよい。
【0046】
ディスパッチャ
ディスパッチャは、リスナが受取ったリクエストを適当なカートリッジへ経路選択するよう構成されるソフトウェアモジュールである。この発明の一実施例によれば、ディスパッチャはサーバ側のプログラム拡張(すなわち、「プラグイン」)として実現される。そのため、ディスパッチャはそれらが属するリスナと同じアドレス空間にロードされそこで実行される。ディスパッチャはコンパイル時にリスナコードとリンクされてもよいし、実行時に動的にロードされてもよい。
【0047】
例示される実施例では、ディスパッチャ214、220および226はそれぞれ、リスナ210、216および222に関連付けられる。ディスパッチャ214、220および226は、リスナ210、216および222が受取ったブラウザリクエストをカートリッジへ選択的に経路制御する。
【0048】
たとえば、リスナ210がユニフォーム・リソース・ロケータ(URL:Uniform Resource Locator)の形態で運ばれるブラウザリクエストをインターネット208から受取ると仮定する。このブラウザリクエストは、たとえばHTMLページまたは実行すべきオペレーションであるウェブオブジェクトに対する識別子の役割を果たす。リスナ210はそのブラウザリクエストの解釈を全く試みることなくディスパッチャ214に受渡す。ブラウザリクエストを受取ると、ディスパッチャ214は、
(1) 仮想パスマネージャ250と通信してブラウザリクエストによって選択されるカートリッジを識別し、かつそのカートリッジが認証を要するかどうかを判定し、
(2) そのカートリッジが認証を必要とする場合、認証サーバ252と通信してブラウザがその選択されたカートリッジにアクセスすることが許されるかどうかを判定し、
(3) アクセスが許可された場合に、リソースマネージャと通信してブラウザリクエストを送るべき選択されたカートリッジの特定のインスタンスを定め、
(4) カートリッジの特定されたインスタンスによる実行のため、変更されたブラウザリクエストを作りかつディスパッチする。
【0049】
変更されたブラウザリクエストは元のブラウザリクエストで受取った情報を再パッケージする。変更されたブラウザリクエストはたとえば、カートリッジの正しいオペレーションに必要なデータを含むコンテキストオブジェクトを含んでいてもよい。カートリッジの正しいオペレーションに必要なデータには、たとえば、そのブラウザリクエストが関連付けられるトランザクションを識別するトランザクションIDが含まれる。
【0050】
カートリッジがリクエストに返答すると、そのカートリッジはディスパッチャにその返答を送り、ディスパッチャはこの返答をリスナに渡してそのリクエストを開始したブラウザへ送信されるようにする。
【0051】
コンフィギュレーションプロバイダ
この発明の一実施例によれば、ウェブアプリケーションサーバ280とともに用いるべきカートリッジはまずウェブアプリケーションサーバ280に登録される。登録プロセスの間、そのカートリッジに関する情報がコンフィギュレーションプロバイダ256に供給される。コンフィギュレーションプロバイダ256はその情報をメタデータ258として蔵置してウェブアプリケーションサーバ280の構成要素が後からアクセスできるようにする。
【0052】
メタデータ258はたとえば、
(1) カートリッジ名、
(2) 必要となるインスタンスの最小数、
(3) インスタンスの最大数、
(4) カートリッジを実装するコードの場所、
(5) コールバック機能(初期化、リクエストハンドラ、シャットダウン)を実行するためカートリッジ実行エンジンが用いるプログラムに依存した関数名、
(6) カートリッジを実行するためのマシンのリスト、
(7) カートリッジのためのアイドルタイム(カートリッジのインスタンスがシャットダウンされる前にアイドル状態でいることができる時間量)、
(8) オブジェクト識別子および
(9) もしあれば、カートリッジとともに用いるべき、認証サービスのタイプを示すデータ
を含んでいてもよい。
【0053】
オブジェクト識別子は、対応するカートリッジによるオペレーションの実行をリクエストするためにブラウザリクエストが供給しなければならないデータを特定する。オブジェクトタイプは特定のワードまたはURLであってもよく、または「/java」などの仮想パスを含んでいてもよい。
【0054】
一度コンフィギュレーションプロバイダ256が特定のカートリッジに対するコンフィギュレーション情報をメタデータ258内に蔵置すると、そのカートリッジはウェブアプリケーションサーバ280が起動される際に自動的に登録される。
【0055】
カートリッジがウェブアプリケーションサーバ280に登録された後、リソースマネージャ254はカートリッジに対する最小インスタンスをイニシエートする。一度最小数のインスタンスがイニシエートされると、ウェブアプリケーションサーバ280はブラウザリクエストを処理する準備が整う。
【0056】
仮想パスマネージャ
上に述べたように、ディスパッチャは仮想パスマネージャ250と通信して各々の変更されたブラウザリクエストをどこに経路選択するかを定める。特定的には、各ブラウザリクエストは典型的にURLを含む。ブラウザリクエストを受取ると、ディスパッチャはそのリクエスト内のURLを仮想パスマネージャ250に送る。仮想パスマネージャ250はこれに応答して、もしあれば、URLに関連付けられるカートリッジを識別するデータをディスパッチャに送る。
【0057】
必要とされる情報をディスパッチャに供給するため、仮想パスマネージャ250はURLをカートリッジにマッピングするメタデータ258を調べる。ブラウザリクエストを受取ったことに応答して、仮想パスマネージャ250はマッピングデータを用いて、もしあれば、ブラウザリクエストに含まれるURLに対応するカートリッジを判定する。
【0058】
たとえば、ブラウザリクエストが仮想パス「/java」で始まるURLリクエストである場合、マッピングにより、JAVAインタプリタカートリッジが仮想パス「/java」を有するリクエストを取扱うよう構成されていることが示されるかもしれない。
【0059】
この発明の一実施例によれば、仮想パスマネージャ250はまた、URLに関連付けられたカートリッジが認証を必要とするかどうかを判定する。カートリッジが認証を要する場合、仮想パスマネージャ250はディスパッチャに送る応答において、認証が必要であることを示す。認証が必要でない場合、ディスパッチャは認証サーバ252を呼出すことなく、カートリッジのインスタンスに対する変更されたブラウザリクエストを作って送る。認証が必要である場合、変更されたリクエストをカートリッジのインスタンスに送出してもよいことを認証サーバが示した後に初めてディスパッチャはそのカートリッジのインスタンスに変更されたリクエストを送る。
【0060】
リソースマネージャ
ウェブアプリケーションサーバ280のリソースマネージャ254は、カートリッジに対して予め定められた最小数のインスタンスをイニシエートし、各カートリッジのインスタンスの間で負荷の最適配分を行ない、所与のカートリッジの予め定められた最大数のインスタンスまで必要に応じてカートリッジの新しいインスタンスをイニシエートすることによってカートリッジの各々の実行を管理する。
【0061】
たとえば、ある特定のカートリッジ(C1)のためのメタデータが以下の情報を含んでいると仮定する。
【0062】
名称=C1
最小インスタンス=10
最大インスタンス=50
ホストマシン=M1、M2、M3
アイドルタイム=30秒
このメタデータに基づいて、カートリッジC1が初めに登録される際に、リソースマネージャ254はC1の10のインスタンスをイニシエートさせる。リソースマネージャ254はラベルM1、M2およびM3に関連付けられるマシン上の10のインスタンスをイニシエートすることになる。
【0063】
C1をアクセスするリクエストをディスパッチャから受取った際、リソースマネージャ254はC1のいずれかの既存のインスタンスが利用可能であるかどうかを判定する。リクエストを受取った際にC1のどのインスタンスも利用可能でない場合、リソースマネージャ254はC1の最大数のインスタンスが既に実行されているかどうかを判定する。C1の最大数のインスタンスが既に実行されていない場合、リソースマネージャ254は可能なホストマシンの1つの上でC1の新しいインスタンスをイニシエートし、リクエストを発行したディスパッチャにこの新しいインスタンスを識別するメッセージを送信する。C1の最大数のインスタンスが既に実行されている場合、リソースマネージャ254はリクエストを発行したディスパッチャに対し、その時点でそのリクエストを取扱うことができないことを示すメッセージを送る。
【0064】
負荷の最適配分
この発明の一実施例によれば、リソースマネージャ254は1組の負荷の最適配分の規則を適用して、2つ以上の可能なホストマシンがある中、カートリッジのインスタンスをどこでイニシエートするかを定める。すなわち、上の例では、M1、M2およびM3はすべてカートリッジC1のインスタンスを実行することが可能である。M1、M2およびM3が同じ処理能力を有する場合、インスタンスを3つのマシンにわたって均等に分散するのが望ましいであろう。しかしながら、M1がM2およびM3の10倍の処理力を有するなら、C1のインスタンスのすべてをある時点まではM1でイニシエートし、それからさらなるインスタンスをM1、M2およびM3の間で均等に分散させるのが望ましいであろう。
【0065】
可能なマシンの間で負荷の最適配分を如何に行なうかを定める上でリソースマネージャ254を助けるため、各カートリッジに対して蔵置されるメタデータはさらなる詳細を含んでいてもよい。たとえば、メタデータは各マシンに対してインスタンスの別個の最小および最大数を特定してもよい。その場合リソースマネージャ254は、最大インスタンスに対する実際のインスタンスの比が最も小さなマシンはどれかに基づいて、マシン間で新しいインスタンスを分配することができる。
【0066】
メタデータはまた、カートリッジを実行できるマシンのための順序を特定してもよい。その順序においてN+1の位置にあるマシンは、その順序においてN番目の位置にあるマシンが既にその最大数のインスタンスを実行している場合にだけカートリッジのインスタンスを実行するのに用いられる。
【0067】
カートリッジインスタンスステータスの管理
この発明の一実施例によれば、リソースマネージャ254は作られたカートリッジインスタンスを管理するためステート情報を維持する。ステート情報には、インスタンスを識別し、そのインスタンスを実行するマシンを識別し、そのインスタンスが割当てられたリスナを識別するデータが含まれる。
【0068】
図5には、このステート情報を蔵置するためリソースマネージャ254が維持し得る表500が示される。表500には、インスタンス列502、カートリッジ列504、リスナ列506およびマシン列508が含まれる。表500の各行は別個のカートリッジインスタンスに対応する。所与のカートリッジインスタンスに対する行内で、カートリッジ列504はカートリッジインスタンスに関連づけられるカートリッジを識別し、インスタンス列502はそのカートリッジインスタンスのインスタンス番号を示す。たとえば、行510はカートリッジC1のインスタンスに対応する。このため、行510のカートリッジ列504はカートリッジC1を示す。行510のインスタンス列502は行510に関連づけられるカートリッジインスタンスがカートリッジC1のインスタンス1であることを示す。
【0069】
リスナ列506は、ある行に関連づけられるカートリッジインスタンスが割当てられたリスナを示す。マシン列508は、ある行に関連づけられるカートリッジインスタンスが実行されているマシンを示す。たとえば、行510に関連づけられるカートリッジインスタンスはリスナ210に割当てられており、マシンM1上で実行されている。
【0070】
リソースマネージャ254と同様に、各ディスパッチャはそのディスパッチャが設けられているリスナに割当てられたカートリッジインスタンスに対するステート情報を維持する。このようなステート情報はたとえば、図4に示されるような表400において維持されてもよい。表500と同様に、表400にはそれぞれインスタンス番号およびカートリッジ識別子を保持するインスタンス列402およびカートリッジ列404が含まれる。しかしながら、表500ではリソースマネージャ254によって割当てられるすべてのカートリッジインスタンスに対して1つずつエントリが含まれるのに対し、表400では特定のリスナに割当てられたカートリッジインスタンスに対するエントリしか含まれない。たとえば、表400は、表500に列挙されたカートリッジインスタンスのうちリスナ200に割当てられたもののみに対するエントリを含む。
【0071】
インスタンス列402およびカートリッジ列404に加えて、表400にはステータス列406が含まれる。各行に対し、ステータス列406はその行に関連づけられるインスタンスのステータスを示す値を保持する。たとえば、行408のステータス列406はカートリッジC1にインスタンス1が現在ビジーであることを示している。例示される実施例では、ステータス列406はカートリッジインスタンスがBUSYまたはFREEのいずれかであることを示すフラグを保持する。カートリッジステータスの重要性について、リソースマネージャ254とディスパッチャ214および220とのオペレーションに関連して以下に説明する。
【0072】
ディスパッチャとリソースマネージャとの相互作用
上述のように、ディスパッチャは特定のカートリッジに変更されたブラウザリクエストを送る必要がある際にリソースマネージャ254と通信する。この発明の一実施例によれば、ディスパッチャはまず、適当なカートリッジのインスタンスが(1)これに既に割当てられているかどうか、また(2)新しい変更されたブラウザリクエストを処理するのに利用可能であるかどうかを判定する。適当なカートリッジインスタンスがディスパッチャに既に割当てられており新しい変更されたブラウザリクエストを処理するのに現在利用可能である場合、ディスパッチャはリソースマネージャ254とさらに通信することなく、変更されたブラウザリクエストをカートリッジインスタンスへ転送する。
【0073】
たとえば、仮想パスマネージャ250によればカートリッジC1が処理しなければならないブラウザリクエストをリスナ210が受取ったと仮定する。また、表400がリスナ210に割当てられたカートリッジインスタンスの現在のリストおよびステータスを反映すると仮定する。リスナ210からブラウザリクエストを受取ると、ディスパッチャ214は表400を調べてカートリッジC1のFREEインスタンスがあるか探す。例示される表400では、行410がカートリッジC1のインスタンス3が現在FREEであることを示している。したがって、ディスパッチャ214はさらにリソースマネージャ254と通信することなく変更されたブラウザリクエストを直接カートリッジC1のインスタンス3に転送する。変更されたブラウザリクエストを送ることに応答してディスパッチャ214は行410のステータス列406のステータス値をBUSYに変える。
【0074】
リスナに現在利用可能である適当なカートリッジインスタンスが既に割当てられていない場合、カートリッジに関連づけられるディスパッチャはリソースマネージャ254からのカートリッジインスタンスをリクエストする。必要とされるカートリッジのインスタンスが利用可能でなく、かつ必要とされるカートリッジの既存のインスタンスの数が最大数より下であることをリソースマネージャ254が判定した場合、リソースマネージャ254は新しいカートリッジをイニシエートする。新しいカートリッジをイニシエートする際に、リソースマネージャ254は表500に新しいカートリッジインスタンスのためのエントリを挿入する。
【0075】
たとえば、カートリッジC3が処理しなければならないブラウザリクエストをリスナ210が受取ったと仮定する。また、カートリッジC3のインスタンス3がまだイニシエートされていないものと仮定する。こうした条件の下では、ディスパッチャ214はリソースマネージャ254にカートリッジC3のインスタンスに対するハンドルを求めるリクエストを送る。このリクエストに応答して、リソースマネージャ254はマシンM3上でカートリッジC3のインスタンス3をイニシエートする。さらに、リソースマネージャ254は行512に見られるエントリを表500に挿入する。
【0076】
表500にカートリッジC3のインスタンス3のための行512を挿入した後、リソースマネージャ254はディスパッチャ214に新しく作られたインスタンスに対するハンドルを送り返す。このハンドルを受取ったことに応答して、ディスパッチャ214はそのステータス表400に新しいインスタンスのためのエントリ(行412)を挿入する。ディスパッチャ214はそこで、変更されたブラウザリクエストをカートリッジC3のインスタンス3に送信する。
【0077】
カートリッジインスタンスの解放
この発明の一実施例によれば、リスナはカートリッジインスタンスが未処理のブラウザリクエストに応答し終わった際にカートリッジインスタンスの所有権を自動的に解放することはない。たとえば、カートリッジC3のインスタンス3が変更されたブラウザリクエストを受取り、その変更されたブラウザリクエストを処理して、ディスパッチャ214に応答を送り返すと想定する。ディスパッチャ214はその応答をリスナ210に渡し、これがブラウザリクエストを発行したブラウザに送り返されるようにする。
【0078】
この時点で、リスナ210はカートリッジC3のインスタンス3の所有権をもはや必要としない。しかしながら、カートリッジC3のインスタンス3の所有権をリソースマネージャ254に戻す代わりに、ディスパッチャ214は単に行412のステータス列406をBUSYからFREEに変える。
【0079】
行412のステータス列406の値をFREEに変えることによって、カートリッジC3のインスタンス3がもはやリクエストを処理しておらず、よって後続のリクエストを処理する準備ができていることが示される。しかしながら、カートリッジC3のインスタンス3が利用可能であることを示す表400はディスパッチャ214によって局所的に維持されているため、カートリッジC3のインスタンス3はリスナ210に到達する後続のブラウザリクエストに対してだけ利用可能である。リソースマネージャ254が維持する表500の行512はカートリッジC3のインスタンス3をリスナ210が所有していることを引続き示す。
【0080】
リスナはリクエストが処理されるたびにカートリッジインスタンスを自動的に解放するわけではないため、リソースマネージャ254とさまざまなディスパッチャとの間での通信に関連するオーバーヘッドは大幅に減少される。たとえば、カートリッジC3に伝えなければならない10の連続したリクエストをリスナ210が受取るものと仮定する。10のリクエストの各々に対してリソースマネージャ254と通信するのではなく、ディスパッチャ214は最初のリクエストに応答してリソースマネージャ254と通信してもよい。ディスパッチャ214は後続の9つのリクエストをリソースマネージャ254と通信することなく処理することができるが、これはディスパッチャ214が最初のリクエストを処理するC3の同じインスタンスを用いて9つの後続のリクエストを処理するためである。
【0081】
各リクエストを処理する際にカートリッジインスタンスのリスナ所有権を自動的に解放しないことでウェブアプリケーションサーバ280の効率が向上されるとはいえ、リスナは無期限にカートリッジインスタンスの所有権を維持することはできない。たとえば、長い期間にわたって用いられなかったインスタンスはリソースマネージャ254に戻され、リソースを空けるためにその割当ての解除ができるようにすべきである。さらに、他のリスナがそのカートリッジのインスタンスを必要としているところに、1つのリスナが比較的長い時間使っていなかったカートリッジのインスタンスの所有権を維持することは効率的ではない。
【0082】
したがって、リソースマネージャ254は、リスナに渡される各カートリッジインスタンスのための最大アイドルタイムを各リスナに伝える。最大アイドルタイムとは、リスナがカートリッジインスタンスの所有権を解放しなければならなくなる前にそのカートリッジインスタンスが使用されない状態でいられる最大の時間を示すものである。たとえば、カートリッジC3のインスタンス3のための最大量のアイドルタイムが10分であることをリソースマネージャ254がリスナ210に示すものと仮定する。この情報に基づいて、リスナ210は、カートリッジC3のインスタンス3が10分より長い間アイドル状態またはFREEとならない限りにおいてカートリッジC3のインスタンス3を続けて用いてカートリッジC3に対するブラウザリクエストを処理することができる。
【0083】
カートリッジC3のインスタンス3が10分より長い間アイドル状態である場合、ディスパッチャ214は表400から行412を取除き、リスナ210がカートリッジC3のインスタンス3の所有権を解放することをリソースマネージャ254にメッセージを送って知らせる。このメッセージに応答して、リソースマネージャ254は行512を更新して、カートリッジC3のインスタンス3がいずれのリスナによっても所有されておらず、よって別のリスナに再割当てされるか終了され得ることを示す。
【0084】
代替の実施例では、カートリッジインスタンスのためのアイドルタイムが満了した際にもディスパッチャはカートリッジインスタンスを自動的に解放しない。代わりに、ディスパッチャはリソースマネージャ254にメッセージを送り、満了となったインスタンスを解放することを申し出る。リソースマネージャ254はこの申し出に応答して、リスナがカートリッジインスタンスを解放するようリクエストするか、またはリスナがその満了となったカートリッジインスタンスの所有権を持ち続けることを許可してもよい。
【0085】
この発明の一実施例によれば、リソースマネージャ254は直ちに処理することのできないリクエストのキューを維持する。キュー内のリクエストを処理することが可能となると、そのリクエストはキューから取除かれ処理される。
【0086】
たとえば、カートリッジC1が処理しなければならないブラウザリクエストをリスナ222が受取り、そのリスナ222にカートリッジC1のいずれのインスタンスも割当てられていなかったと仮定する。ディスパッチャ226はリソースマネージャ254にC1のインスタンスに対するリクエストを送る。さらに、C1の最大50のインスタンスが許容され、C1の50のインスタンスがリスナ210に割当てられたと仮定する。こうした条件の下では、リソースマネージャ254はリスナ222からのリクエストを処理することができない。このため、リソースマネージャ254はそのリクエストをキューにおく。リスナ210がC1のインスタンスを解放すると、リソースマネージャ254はリスナ222にC1のインスタンスが利用可能であることを伝える。
【0087】
ある特定の条件の下で、リソースマネージャ254は強制的にリスナにカートリッジインスタンスを解放させることがある。たとえば、リソースマネージャ254はシステムオーバロード状況を検出し、これに応答して1組のカートリッジインスタンスを終了することがあり、これはそのカートリッジインスタンスが終了されることになることをそのカートリッジインスタンスが現在割当てられているリスナに知らせる前または知らせた後に行なわれる。
【0088】
また、リソースマネージャ254はリスナの間での公平性の方針を実現するために強制的にリスナにカートリッジインスタンスを解放させることがある。たとえば、別のリスナが予め定められたしきい値より長い時間にわたってカートリッジのインスタンスを待っている場合、リソースマネージャ254は所与のカートリッジの最も多い数のインスタンスを保持するリスナにそのカートリッジのあるインスタンスを解放させてもよい。たとえば、リスナ210にカートリッジC1の50のインスタンスが割当てられ、C1は最大で50のインスタンスを有する場合、リソースマネージャ254は別のリスナからC1のインスタンスに対するリクエストを受取ってから10秒後にリスナ210にC1のあるインスタンスを解放させてもよい。
【0089】
カートリッジ実行エンジン
この発明の一実施例によれば、各カートリッジインスタンスはカートリッジ実行エンジンおよびカートリッジから構成される。カートリッジ実行エンジンは、ウェブアプリケーションサーバ280およびマシン間通信機構の複雑さからカートリッジを隔離するコードモジュールである。カートリッジは、関数テーブルにカートリッジ関数に対するポインタを蔵置することによってカートリッジ実行エンジンに利用可能となる。一実施例によれば、すべてのカートリッジが、上述の例示のカートリッジインターフェイスにおいて特定された関数を提供する。すべてのカートリッジが同じインターフェイスをサポートするようにさせることにより、単一の標準カートリッジ実行エンジンをすべてのカートリッジに対して用いることができる。
【0090】
この発明の一実施例によれば、カートリッジは共用ライブラリとして実装され、カートリッジ実行エンジンは標準カートリッジインターフェイスを用いて共用ライブラリ内のルーチンを呼出す実行可能なプログラムである。カートリッジ実行エンジンはカートリッジとディスパッチャとの間でインターフェイスをもたらし、カートリッジの制御のフローを指示し、カートリッジが用いるサービスを提供する。
【0091】
リソースマネージャ254が新しいカートリッジインスタンスの生成を必要とする場合、リソースマネージャ254はカートリッジ実行エンジンのインスタンスを生成させる。これに対し、このようにして作られたカートリッジ実行エンジンのインスタンスは適当なカートリッジのインスタンスを生成させる。リソースマネージャ254はたとえば、カートリッジが実行されるマシン上にある「カートリッジ実行エンジンファクトリ」と呼出すことによってカートリッジ実行エンジンのインスタンスを生成させることができる。カートリッジ実行エンジンのインスタンスはたとえば、そのカートリッジを構成する共用ライブラリ内のルーチンのうちの1つに呼出を行なうことによってカートリッジのインスタンスを生成させることができる。
【0092】
図2に示されるように、ウェブアプリケーションサーバ280はカートリッジ230、234および238の各々に対しカートリッジ実行エンジン228、232および236を含む。カートリッジ実行エンジンは標準のカートリッジインターフェイスを介してカートリッジへの呼出を行なうことにより対応するカートリッジのインスタンスの実行を制御する。カートリッジ実行エンジンとカートリッジとの間で基本的なコールバック機能を確立することにより、そのカートリッジをコールバック機能に応答するよう構成し、次にそのカートリッジをコンフィギュレーションプロバイダ256に登録することによってどんなカートリッジもウェブアプリケーションサーバ280に統合することができる。この事は以下に説明する。
【0093】
このように、PL/SQLランタイムカートリッジがリクエストを処理するのに適当なカートリッジであるとディスパッチャ214が判定すると、ディスパッチャ214はそのPL/SQLランタイムカートリッジに関連づけられるカートリッジ実行エンジンを含むカートリッジインスタンスにそのリクエストをディスパッチする。新しいインスタンスをイニシエートする必要がある場合、リソースマネージャ254は別個のアドレス空間においてPL/SQLランタイムカートリッジの新しいインスタンスを作り、その新しいインスタンスのカートリッジ実行エンジン228へそのリクエストをディスパッチする。プログラムのインスタンスを実行するのに用いられるアドレス空間は、ウェブアプリケーションサーバ280の構成要素の1つ以上が実行されているコンピュータシステムのメモリ内にあるか、または別のコンピュータシステム上にあってもよい。
【0094】
ディスパッチャからのメッセージに応答して、カートリッジ実行エンジンはカートリッジにリクエストハンドラコールバック機能を発行し、カートリッジにそのリクエストを処理させる。そのリクエストを処理するカートリッジはその結果をカートリッジ実行エンジンに返し、カートリッジ実行エンジンはその結果をディスパッチャに転送する。ウェブアプリケーションサーバ280がオペレーションにおいて障害を検出した場合にはカートリッジ実行エンジンはカートリッジのシャットダウン関数を発行する。
【0095】
このように、カートリッジ実行エンジンは、実行すべき予め定められたオペレーションを特定するウェブアプリケーションサーバ280へのアプリケーションプログラミングインターフェイスを提供する。標準のカートリッジインターフェイスを使用することにより、カートリッジのプログラマが、カートリッジがともに用いられることになる特定のウェブリスナが用いるプロトコルとは無関係に、各カートリッジをウェブアプリケーションサーバ280へ高レベルで統合化するよう構成することができる。
【0096】
トランスポートアダプタ
リスナは、サーバ側のプラグインが使用するためのプログラミングインターフェイスおよびプロトコルを提供することによってそのようなプラグインの使用を可能にする。残念なことに、リスナが提供するプログラミングインターフェイスおよびプロトコルはリスナごとに異なる。たとえば、ネットスケープ・サーバ・アプリケーション・プログラミング・インターフェイス(NSAPI:Netscape Server Application Programming Interface)、インターネット・サーバ・アプリケーション・プログラミング・インターフェイス(ISAPI:Internet Server Application Programming Interface)およびアプリケーション開発インターフェイス(ADI:Application Development Interface)は現在リスナによりもたらされる別個のプログラミングインターフェイスの3つの例である。
【0097】
トランスポートアダプタはウェブリスナが用いる私的プロトコルおよびインターフェイスからディスパッチャを隔離する。特定的には、各トランスポートアダプタはさまざまなリスナのプロトコルを認識し、リスナから受取ったブラウザリクエストを変換してリスナのプロトコルとは無関係の標準ディスパッチャプロトコルを有する変換されたブラウザリクエストを生じるよう構成される。同様に、トランスポートアダプタはディスパッチャからの返答をリスナのトランスポートプロトコルに変換する。
【0098】
このように、トランスポートアダプタにより、ウェブアプリケーションサーバ280を異なるベンダのリスナとともに用いることが可能となる。さらに、トランスポートアダプタは異なるサーバアーキテクチャおよびオペレーティングシステムに対応するよう構成されてもよい。
【0099】
ウェブアプリケーションサーバのオペレーション
図3Aおよび図3Bはこの発明の一実施例によるブラウザリクエストに応答する方法を示すフロー図である。ステップ350においてリスナがブラウザリクエストを受取る。説明のために、このブラウザリクエストはブラウザ202により発行されリスナ210により受取られるものと仮定する。
【0100】
ブラウザリクエストを受取ると、リスナ210はステップ352においてウェブアプリケーションサーバ280にそのリクエストを転送する。特定的には、リスナ210はリスナ210の私的プログラミングインターフェイスを用いてそのリクエストをトランスポートアダプタ212に渡す。トランスポートアダプタ212は、必要に応じてそのリクエストを標準ディスパッチャプログラミングインターフェイスを用いて変換しそのリクエストをディスパッチャ214に渡す。
【0101】
ディスパッチャ214は、仮想パスマネージャ250と通信することによって、ブラウザリクエストにより特定される仮想パスに基づいて、ステップ354においてブラウザリクエストに対応するリクエストオブジェクトタイプを識別する。ディスパッチャ214はステップ356において、そのリクエストオブジェクトタイプが識別可能なカートリッジに対応するかどうかを判定する。そのリクエストオブジェクトタイプが識別可能なカートリッジに対応していない場合、そのリクエストはステップ358においてリスナ210に戻される(図3Bを参照)。ステップ358においてそのリクエストが静的HTMLページに対するリクエストであることをリスナ210が認識すると、リスナはその静的HTMLページにアクセスし、そのHTMLページをステップ360においてブラウザ202に送る。ブラウザリクエストがリスナ210によって認識されない場合、ステップ360において返答がブラウザ202に送られそのリクエストが認識不可能であったことを示す。
【0102】
ステップ356において、(1)リクエストをカートリッジに送らなければならないことと、(2)リスナ210にそのカートリッジの現在FREEであるインスタンスが1つも割当てられていないこととをディスパッチャ214が判定すると、ディスパッチャ214は、そのブラウザリクエストを送ることのできるカートリッジ230のインスタンスが割当てられることになるリソースマネージャ254と通信する。図3Bに示されるステップ362では、リソースマネージャ254は、識別されたカートリッジのインスタンスが既存のインスタンスの数の中で利用可能である(所有されていない)かどうかを判定する。説明のため、このリクエストはカートリッジ230に関連づけられるものであり、カートリッジ230はPL/SQLランタイムカートリッジであると仮定する。
【0103】
ステップ362においてリソースマネージャが利用可能なインスタンス、たとえばPL/SQLランライム230のインスタンス260を識別すると、リソースマネージャ254はリクエストをインスタンス260に送るべきであることをディスパッチャ214に知らせる。ディスパッチャ214はそこで、変更されたブラウザリクエストを作りステップ368においてインスタンス260のカートリッジ実行エンジン228にその変更されたブラウザリクエストを送って、以下に説明するように利用可能なインスタンス260にそのリクエストを処理させる。
【0104】
しかしながら、ステップ362においてカートリッジ230のインスタンスが1つも利用可能でない場合、リソースマネージャ254はステップ364において、既存のインスタンスの数が最大所定数を超えるかどうかを判定する。ステップ364において既存のインスタンスの数が最大所定数を超える場合、リソースマネージャ254はその時点ではそのリクエストを処理できないことをディスパッチャ214に示す。これに応答して、ディスパッチャ214はステップ358においてそのリクエストをリスナ210に返し、その後に、ウェブリスナ210はステップ360においてネットワークを介してブラウザ202へ返答を送り、そのリクエストが処理されなかったことを示す。
【0105】
代わりに、カートリッジインスタンスがリクエストを処理するためにその現時点で利用可能でない場合、リスナ210はそのカートリッジインスタンスに対する待ちリストにそのリクエストを入れてもよい。カートリッジインスタンスが利用可能となると、変更されたブラウザリクエストが待ちリストから取除かれカートリッジインスタンスに転送される。変更されたブラウザリクエストが予め定められた時間より長い間待ちリストに残っている場合、リスナ210はそのリクエストを待ちリストから取除いてブラウザ202にメッセージを送りそのリクエストが処理できなかったことを示すようにしてもよい。
【0106】
ステップ364において既存のインスタンスの数が最大所定数を超えない場合、リソースマネージャ254は識別されたプログラムの新しいインスタンスをイニシエートし、ブラウザリクエストに基づく変更されたブラウザリクエストを新しいインスタンスに送るべきであることをディスパッチャ214に知らせる。そこでディスパッチャ214は変更されたブラウザリクエストをその新しいインスタンスのカートリッジ実行エンジンへディスパッチする。
【0107】
たとえば、リソースマネージャ254がブラウザリクエストに応答してインスタンス260をイニシエートしたと仮定する。その初期化の間、PL/SQLランタイムのための蔵置された命令シーケンスにアクセスが行なわれ、ディスパッチャ214が実行しているアドレス空間とは別個のアドレス空間においてカートリッジ230の新しいインスタンス260が作られる。一実施例によれば、初期化はカートリッジ実行エンジン228をロードし、そのカートリッジ実行エンジンにカートリッジ230内の初期化ルーチンを呼出させることによって行なわれる。
【0108】
一度新しいインスタンス260が実行されると、ディスパッチャ214はステップ368においてその新しいインスタンス260に関連づけられているカートリッジ実行エンジン228にリクエストをディスパッチする。カートリッジ実行エンジン228は新しいインスタンス260にコールバックメッセージを送りそのリクエストの実行を要求する。そのコールバックメッセージにおいて、カートリッジ実行エンジン228はそのリクエストを処理する上でインスタンス260が必要とする全てのパラメータを渡す。このようなパラメータにはたとえば、パスワード、データベース探索キー、またはインスタンス260が実行する動的オペレーションのための他のどんな引き数を含んでいてもよい。
【0109】
次にインスタンス260はリクエストを実行する。ステップ368におけるインスタンスによるリクエストの実行の間、ディスパッチャ214はステップ370においてインスタンスを監視して障害が発生するかどうかを判定する。ステップ370においてディスパッチャ214が障害を検出すると、ディスパッチャ214はステップ372において対応するカートリッジ実行エンジン228を呼出し、その障害を有するインスタンス260を打ち切る。これに対し対応するカートリッジ実行エンジン228はAPIを通して障害のあるインスタンスに対してシャットダウンコマンドを発行する。そのインスタンスはカートリッジ実行エンジン228によるシャットダウンコマンドに応答して、他のどんなアドレス空間における他のどんなプロセスにも影響を与えることなくシャットダウンする。
【0110】
ステップ370において障害が検出されない場合、ディスパッチャ214はステップ374において実行の完了の際にインスタンス260から返答を受取る。ステップ376においてディスパッチャ214はその返答をリスナ210に転送し、リスナ210は実行されたインスタンス260からの返答をもってブラウザに応答する。インスタンス260を実行した後、ステップ378においてディスパッチャ214はステップ378に示されるようにメモリ内にインスタンスを維持し、後続のリクエストの実行を可能にする。
【0111】
ウェブサーバの分散アーキテクチャ
重要なことであるが、ウェブアプリケーションサーバ280のさまざまな構成要素は、それら構成要素が同じアドレス空間において実行される必要がなく同じマシン上で実行されることさえ必要としない通信機構を用いて互いに通信する。例示される実施例では、ウェブアプリケーションサーバ280の構成要素はオブジェクトリクエストブローカ(ORB:Object Request Broker)282を介して通信するよう構成される。オブジェクトリクエストブローカは「共通オブジェクトリクエストブローカ:アーキテクチャおよび仕様(CORBA)」("Common Object Request Broker: Architecture and Specification (CORBA)")に詳しく記載されている。CORBAに関連するこのおよび他の文献はワールド・ワイド・ウェブのhttp://www.omg.orgにおいて見つけることができる。
【0112】
この発明の実施例はCORBAに従ったORBを介する通信に関連して説明するが、他のクロスプラットフォーム通信機構を用いてもよい。たとえば、ウェブアプリケーションサーバ280の構成要素は代わりに、遠隔手続き呼出(RPC:Remote Procedure Calls)、UNIXパイプ、Microsoft COMを用いて互いに通信してもよい。
【0113】
ウェブアプリケーションサーバ280のさまざまな構成要素がマシンから独立した通信機構を用いて互いに通信するため、構成要素が互いに対してどこに存在するかということに関して固有の制約はない。たとえば、リスナ210、216および222は同じマシン上で実行していてもよく、またはそれぞれがこのようなオペレーティングシステムを有する3つの完全に異なったマシン上で実行してもよい。同様に、認証サーバ252、仮想パスマネージャ250、リソースマネージャ254およびコンフィギュレーションプロバイダ256は同じマシン上で実行していてもよく、または4つの異なるマシン上で実行していてもよい。さらに、これらの4つの異なるマシンはリスナ210、216および222を実行する3つのマシンと少しも重複していなくてもよい。
【0114】
カートリッジ実行エンジン228、232および236は、オブジェクトリクエストブローカ282を介してウェブアプリケーションサーバ280の他の構成要素と通信するのに必要な論理のすべてを組込んでいる。したがって、カートリッジインスタンス自体の場所は通信機構によって本質的に制約されるものではない。すなわち、インスタンス260はこれがリクエストを受取るディスパッチャとは全く異なるマシンおよびオペレーティングシステムにおいて実行されてもよい。同様に、インスタンス260は、リソースマネージャ254、または同じウェブアプリケーションサーバ280によって管理される他のカートリッジのインスタンスを含む、ウェブアプリケーションサーバ280の他の構成要素のいずれとも異なるマシンおよびオペレーティングシステム上にあってもよい。
【0115】
重要なことだが、ウェブアプリケーションサーバ280が用いるカートリッジが享受する場所の独立性は、カートリッジそのものにおける何らかのカスタムプログラミングを介してではなくカートリッジ実行エンジンの通信論理を介して達成される。したがって、分散アプリケーションサーバ環境における実行のために特別にカートリッジを設計する必要がない。このように、カートリッジ設計者らは分散システムの複雑さから隔離され、カートリッジが作られる目的であるタスクと関連する論理に労力を集中させることができる。
【0116】
上述のように、異なるカートリッジの複数のインスタンスを管理してさまざまなユーザリクエストを処理するウェブアプリケーションサーバ280が提供される。各カートリッジインスタンスはリスナとは別個のメモリ空間において実行され、このためサーバ側のプラグインに関連のある安全性の問題を回避できる。さらに、リスナが受取ったブラウザリクエストを処理するのに用いられるカートリッジインスタンスはリスナとは全く異なるマシン上で実行されてもよい。このため、システムのスケーラビリティが向上すると同時に、いずれかの特定のマシンの負担が軽減される。
【0117】
さらに、ウェブアプリケーションサーバ280はまた、所与のカートリッジの各々に対するインスタンスの数を制御する。よって、サーバ側のリソースが制御され、インスタンスが制御不可能なほど生成されることによって多数のリクエストがいずれかのマシンを圧倒することがないことが確実となる。
【0118】
さらに、実行する準備の整ったインスタンスの最小数を維持することによって実行のスループットもまた向上する。単一の実行の後にインスタンスを終了して、それから後続のリクエストの実行のためにインスタンスを再び作るためにメモリにカートリッジを再ロードするのではなく、さらにインスタンスをイニシエートしてメモリ内に維持して後続のリクエストを実行するようにしてもよい。
【0119】
前述の明細書において、この発明をその特定の実施例に関連して説明した。しかしながら、この発明のより幅の広い範囲から逸脱することなくさまざまな修正および変更を行なうことができることが明らかになるであろう。したがって、明細書および図面は限定的な意味ではなく例示的な意味で考慮されるべきである。
【図面の簡単な説明】
【図1】 この発明の一実施例が実装され得るコンピュータシステムのブロック図である。
【図2】 この発明の一実施例による分散アプリケーションサーバのブロック図である。
【図3A】 この発明の一実施例によるブラウザリクエストを処理するためのステップを示すフローチャートの一部の図である。
【図3B】 この発明の一実施例によるブラウザリクエストを処理するためのステップを示すフローチャートの別の部分の図である。
【図4】 この発明の一実施例によるディスパッチャが維持する情報を含む表のブロック図である。
【図5】 この発明の一実施例によるリソースマネージャが維持する情報を含む表のブロック図である。
Claims (27)
- オペレーションを実行するための方法であって、ディスパッチャ(214)を第1のマシン上で実行するステップを含み、前記ディスパッチャ(214)は、クライアントからリクエストを受取り、かつ前記リクエストを実行することが可能であるカートリッジに前記リクエストを分散するよう構成されるエンティティであり、リソースマネージャ(254)を第2のマシン上で実行し、前記第1のマシンとは異なるマシン上で実行しているクライアント(202)から前記ディスパッチャ(214)においてリクエストを受取り、前記方法は
前記ディスパッチャ(214)が前記リクエストを受取ったことに応答して、第1のメッセージをディスパッチャ(214)からリソースマネージャ(254)へ送ることを特徴とし、第1のメッセージは前記オペレーションを行なうことのできるある特定のカートリッジタイプを識別し、さらに
第2のメッセージをリソースマネージャ(254)からディスパッチャ(214)へ送ることを特徴とし、第2のメッセージはある特定のカートリッジのある特定のインスタンスを識別し、ある特定のインスタンスは第3のマシン上で実行されており、さらに
第3のメッセージをディスパッチャ(214)からある特定のインスタンスに送り、ある特定のインスタンスにオペレーションを実行させることを特徴とし、
第1のマシン、第2のマシンおよび第3のマシンのうちの少なくとも2つは別個のマシンである、方法。 - ブラウザがブラウザリクエストをウェブリスナ(210)に送るステップと、
ウェブリスナ(210)がブラウザリクエストをディスパッチャ(214)に渡すステップとをさらに含み、
ディスパッチャ(214)はウェブリスナ(210)からブラウザリクエストを受取ったことに応答して第1のメッセージを送る、請求項1に記載の方法。 - 第1のマシンおよび第2のマシンは別個のマシンであり、
第1のメッセージをディスパッチャ(214)からリソースマネージャ(254)へ送る前記ステップは、第1のメッセージをディスパッチャ(214)からリソースマネージャ(254)へオブジェクトリクエストブローカを介して送ることによって行なわれ、
第2のメッセージをリソースマネージャ(254)からディスパッチャ(214)へ送る前記ステップは、第2のメッセージをリソースマネージャ(254)からディスパッチャ(214)へオブジェクトリクエストブローカを介して送ることによって行なわれる、請求項1に記載の方法。 - 第2のマシンおよび第3のマシンは別個のマシンであり、
リソースマネージャ(254)が第1のメッセージを受取ったことに応答してリソースマネージャ(254)がある特定のインスタンスに第3のマシン上での実行を開始させるステップを含む、請求項1に記載の方法。 - リソースマネージャ(254)は、第1のメッセージを受取ったことに応答して以下のステップを行なうことによってどのある特定のインスタンスがオペレーションを行なうべきであるかを定め、前記以下のステップは
ある特定のカートリッジ(260)のインスタンスで現在実行されており割当てされていないものがあるかどうかを判定するステップと、
ある特定のカートリッジ(260)のインスタンスのどれかが現在実行されており割当てされていない場合、現在実行されており割当てされていないインスタンスを前記第2のメッセージにおいて特定するステップと、
第1のメッセージにおいて特定されるある特定のカートリッジ(260)のインスタンスで現在実行されており割当てされていないものがない場合、ある特定のカートリッジの新しいインスタンスをイニシエートして前記新しいインスタンスを前記第2のメッセージにおいて特定するステップとを含む、請求項1に記載の方法。 - 新しいインスタンスをイニシエートする前に、リソースマネージャ(254)は
メタデータ(256)を調べて、前記ある特定のカートリッジを実行することのできる、前記第3のマシンを含む1組のマシンを定めるステップと、
前記第3のマシンを選択して前記ある特定のカートリッジの前記新しいインスタンスを実行するステップとを行なう、請求項5に記載の方法。 - 前記ディスパッチャ(214)に割当てられたインスタンスのリストを前記ディスパッチャに維持させるステップと、
前記第2のメッセージを受取ったことに応答して、前記ディスパッチャ(214)にインスタンスの前記リストを更新させて前記ある特定のインスタンスに対するエントリを含むようにさせるステップとをさらに含む、請求項1に記載の方法。 - インスタンスのリストは、前記リストにおけるインスタンスが現在ビジーであるかどうかを示すデータを含み、
前記第2のメッセージを送ることに応答して、ディスパッチャ(214)は前記ある特定のインスタンスに対する前記エントリにおいて前記ある特定のインスタンスがビジーであることを示し、
前記方法はさらに、ディスパッチャ(214)が前記第3のメッセージに応答して前記ある特定のインスタンスから第4のメッセージを受取るステップを含み、
前記第4のメッセージを受取ったことに応答して、ディスパッチャ(214)は前記エントリを更新して前記ある特定のインスタンスが現在ビジーでないことを示す、請求項7に記載の方法。 - 方法であって、
前記ディスパッチャ(214)においてリクエストを受取る前記ステップは、ディスパッチャ(214)が前記カートリッジによって行なうべき第1のオペレーションを特定する第1のブラウザリクエストを受取るステップを含み、前記方法はさらに
ディスパッチャ(214)が、第2のカートリッジによって行なうべき第2のオペレーションを特定する第2のブラウザリクエストを受取るステップと、
ディスパッチャ(214)がインスタンスの前記リストを調べてリストが現在ビジーではない前記第2のカートリッジのインスタンスに対するエントリを含むかどうかを判定するステップと、
リストが現在ビジーではない前記第2のカートリッジのインスタンスに対するエントリを含む場合、
ディスパッチャ(214)が前記第2のブラウザリクエストに応答して前記ある特定のインスタンスへ第5のメッセージを送り、前記ある特定のインスタンスに前記第2のオペレーションを行なわせるステップと、
前記エントリを更新して前記ある特定のインスタンスが現在ビジーであることを示すステップとを行なうステップと、
リストが現在ビジーではない前記第2のカートリッジのインスタンスに対するエントリを含んでいない場合、第6のメッセージを前記リソースマネージャ(254)へ送り、前記リソースマネージャ(254)に前記第2のオペレーションを行なうための前記第2のカートリッジのインスタンスを示すようにさせるステップとをさらに含む、請求項8に記載の方法。 - 前記ある特定のインスタンスが予め定められた長さの時間より長い間アイドル状態であった場合これを判定するステップと、
前記ある特定のインスタンスが予め定められた長さの時間より長い間アイドル状態であった場合に、前記ディスパッチャ(214)が前記ある特定のインスタンスを前記リソースマネージャ(254)に解放するステップとをさらに含む、請求項8に記載の方法。 - オペレーションを実行するためのプログラムを記録したコンピュータ可読媒体であって、
前記プログラムは、第1のコンピュータにディスパッチャ(214)の機能を実現させ、前記ディスパッチャ(214)は、クライアントからリクエストを受取り、かつ前記リクエストを実行することが可能であるカートリッジに前記リクエストを分配するよう構成されたエンティティであり、
前記プログラムは、さらに第2のコンピュータに、リソースマネージャ(254)の機能を実現させ、
前記ディスパッチャ(214)は、前記第1のコンピュータとは異なるコンピュータ上で実行しているクライアント(202)からリクエストを受ける機能と、
前記リクエストを受取ったことに応答して、第1のメッセージをリソースマネージャ(254)へ送る機能とを含み、当該第1のメッセージは前記オペレーションを行なうことのできるある特定のカートリッジタイプを特定し、
前記リソースマネージャは、第2のメッセージをディスパッチャ(214)へ送る機能を含み、当該第2のメッセージはある特定のカートリッジのある特定のインスタンスを特定し、当該ある特定のインスタンスは前記第3のコンピュータ上で実行しており、
前記ディスパッチャは、第3のメッセージを前記ある特定のインスタンスへ送り、前記ある特定のインスタンスにオペレーションを実行させる機能を含み、
前記第1のコンピュータ、前記第2のコンピュータおよび前記第3のコンピュータのうちの少なくとも2つは別個のコンピュータである、コンピュータ可読媒体。 - 前記プログラムは、さらに第4のコンピュータに、ウェブリスナ(210)の機能を実現させ、
前記ウェブリスナ(210)は、ブラウザから受取ったブラウザリクエストを前記ディスパッチャ(214)へ渡す機能を含み、
前記ディスパッチャ(214)は、前記ウェブリスナ(210)から前記ブラウザリクエストを受取ったことに応答して前記第1のメッセージを送る機能を含む、請求項11に記載のコンピュータ可読媒体。 - 前記第1のコンピュータおよび前記第2のコンピュータは別個のコンピュータであり、
前記ディスパッチャ(214)による第1のメッセージを前記リソースマネージャ(254)へ送る前記機能は、前記第1のメッセージを前記リソースマネージャ(254)へオブジェクトリクエストブローカを介して送ることによって行なわれ、
前記リソースマネージャ(254)による第2のメッセージを前記ディスパッチャ(214)へ送る前記機能は、前記第2のメッセージを前記ディスパッチャ(214)へ前記オブジェクトリクエストブローカを介して送ることによって行なわれる、請求項11に記載のコンピュータ可読媒体。 - 前記第2のコンピュータおよび前記第3のコンピュータは別個のコンピュータであり、
前記リソースマネージャは、前記第1のメッセージを受取ったことに応答して前記ある特定のインスタンスに前記第3のコンピュータ上で実行を開始させる機能を含む、請求項11に記載のコンピュータ可読媒体。 - 前記リソースマネージャ(254)は、前記第1のメッセージを受取ったことに応答して以下の機能を行なうことによってどのある特定のインスタンスがオペレーションを行なうべきであるかを判定し、前記以下の機能は
前記ある特定のカートリッジ(260)のインスタンスで現在実行されており割当てされていないものがあるかどうかを判定する機能と、
前記ある特定のカートリッジ(260)のインスタンスで現在実行されており割当てされていないものがある場合、前記第2のメッセージにおいて、現在実行されており割当てされていないインスタンスを特定する機能と、
前記第1のメッセージにおいて特定される、前記ある特定のカートリッジ(260)のインスタンスで現在実行されており割当てされていないものがない場合、前記ある特定のカートリッジの新しいインスタンスをイニシエートして前記新しいインスタンスを前記第2のメッセージにおいて特定する機能とを含む、請求項11に記載のコンピュータ可読媒体。 - 前記リソースマネージャ(254)は、前記新しいインスタンスをイニシエートする前に、メタデータ(256)を調べて、前記ある特定のカートリッジを実行することのできる、前記第3のコンピュータを含む1組のコンピュータを定める機能と、
前記ある特定のカートリッジの前記新しいインスタンスを実行するために前記第3のコンピュータを選択する機能とを含む、請求項15に記載のコンピュータ可読媒体。 - 前記ディスパッチャ(214)は、前記ディスパッチャに割当てられたインスタンスのリストを維持する機能と、
前記第2のメッセージを受取ったことに応答して、インスタンスの前記リストを更新して前記ある特定のインスタンスに対するエントリを含むようにする機能とを含む、請求項11に記載のコンピュータ可読媒体。 - インスタンスのリストは、前記リスト内のインスタンスが現在ビジーであるかどうかを示すデータを含んでおり、
前記ディスパッチャ(214)は、前記第2のメッセージを送ることに応答して、前記ある特定のインスタンスに対する前記エントリにおいて前記ある特定のインスタンスがビジーであることを指示する機能と、
前記第3のメッセージに応答して前記ある特定のインスタンスから第4のメッセージを受取る機能と、
前記第4のメッセージを受取ったことに応答して、前記エントリを更新して前記ある特定のインスタンスが現在ビジーではないことを指示する機能とを含む、請求項17に記載のコンピュータ可読媒体。 - 前記ディスパッチャ(214)によってリクエストを受取る前記機能は、前記カートリッジによって行なうべき第1のオペレーションを特定する第1のブラウザリクエストを受取る機能を含み、
前記ディスパッチャ(214)は、
第2のカートリッジによって行なうべき第2のオペレーションを特定する第2のブラウザリクエストを受取る機能と、
インスタンスの前記リストを調べて、リストが現在ビジーではない前記第2のカートリッジのインスタンスに対するエントリを含んでいるかどうかを判定する機能とを含み、
前記ディスパッチャ(214)は、
リストが現在ビジーではない前記第2のカートリッジのインスタンスに対するエントリ
を含んでいる場合、前記第2のブラウザリクエストに応答して前記ある特定のインスタンスへ第5のメッセージを送り、前記ある特定のインスタンスに前記第2のオペレーションを行なわせ、前記エントリを更新して前記ある特定のインスタンスが現在ビジーであることを指示する機能と、
リストが現在ビジーではない前記第2のカートリッジのインスタンスに対するエントリを含んでいない場合、第6のメッセージを前記リソースマネージャ(254)に送り、前記リソースマネージャ(254)に前記第2のオペレーションを行なうべき前記第2のカートリッジのインスタンスを指示させる機能とを含む、請求項18に記載のコンピュータ可読媒体。 - 前記ディスパッチャ(214)は、前記ある特定のインスタンスが予め定められた長さの時間より長い間アイドル状態であった場合これを判定する機能と、
前記ある特定のインスタンスが予め定められた長さの時間より長い間アイドル状態であった場合に、前記ある特定のインスタンスを前記リソースマネージャ(254)に解放する機能とを含む、請求項18に記載のコンピュータ可読媒体。 - ブラウザリクエストに関連のあるオペレーションを行なうためのシステムであって、複数のウェブリスナに結合される複数のディスパッチャを含み、前記複数のディスパッチャの各ディスパッチャは前記複数のウェブリスナの対応するウェブリスナから前記対応するウェブリスナが受取ったブラウザリクエストを受取り、前記システムは
マシン間通信機構を介して前記複数のディスパッチャに結合されるリソースマネージャ(254)を特徴とし、前記マシン間通信機構は前記複数のディスパッチャが存在するマシンにかかわらず前記リソースマネージャ(254)が前記複数のディスパッチャと通信できるようにし、前記リソースマネージャ(254)は、前記ディスパッチャ(214)からインスタンスに対するリクエストを受取ったことに応答して前記複数のディスパッチャの各ディスパッチャに前記複数のカートリッジのうちのあるカートリッジ(260)のインスタンスを割当てるよう構成されており、リクエストはある特定のオペレーションを行なうことができるある特定のカートリッジタイプを識別しており、
前記複数のディスパッチャは、前記リソースマネージャ(254)によって前記ディスパッチャに割当てられるインスタンスへメッセージを前記マシン間通信機構を介して送るよう構成されており、前記マシン間通信機構により、前記インスタンスが存在するマシンにかかわらず前記複数のディスパッチャが前記インスタンスと通信することができ、前記メッセージは前記インスタンスに前記ブラウザリクエストと関連するオペレーションを行なわせる、システム。 - 前記マシン間通信機構を介して前記複数のディスパッチャに結合される仮想パスマネージャ(250)をさらに含み、前記仮想パスマネージャ(250)は複数のカートリッジのどれが前記ブラウザリクエストに関連付けられているかを前記ディスパッチャに示す、請求項21に記載のシステム。
- 前記マシン間通信機構はオブジェクトリクエストブローカである、請求項21に記載のシステム。
- リソースマネージャ(254)はさらに、前記ディスパッチャからのメッセージに応答してカートリッジの新しいインスタンスをイニシエートするよう構成されている、請求項21に記載のシステム。
- 各カートリッジに対して、前記リソースマネージャ(254)は、実行しているインスタンスの数を予め定められた最小数と予め定められた最大数との間で維持するよう構成される、請求項24に記載のシステム。
- 前記複数のディスパッチャの各ディスパッチャは、前記リソースマネージャ(254)によって前記ディスパッチャ(214)に割当てられているインスタンスのリストを維持するよう構成される、請求項21に記載のシステム。
- 前記複数のディスパッチャのうちのあるディスパッチャ(214)がある特定のカートリッジに関連付けられるブラウザリクエストを受取り、かつそのディスパッチャ(214)が維持するインスタンスのリストが、そのある特定のカートリッジ(260)のインスタンスが現在利用可能であることを示している場合、ディスパッチャ(214)はリソースマネージャ(254)からのブラウザリクエストに対するインスタンスをリクエストすることなくインスタンスにメッセージを送る、請求項21に記載のシステム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/962,485 US6247056B1 (en) | 1997-02-03 | 1997-10-31 | Method and apparatus for handling client request with a distributed web application server |
US08/962,485 | 1997-10-31 | ||
PCT/US1998/022656 WO1999023784A2 (en) | 1997-10-31 | 1998-10-26 | Distributed web application server |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001522113A JP2001522113A (ja) | 2001-11-13 |
JP3853592B2 true JP3853592B2 (ja) | 2006-12-06 |
Family
ID=25505934
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000519523A Expired - Lifetime JP3853592B2 (ja) | 1997-10-31 | 1998-10-26 | 分散ウェブアプリケーションサーバ |
Country Status (8)
Country | Link |
---|---|
US (1) | US6247056B1 (ja) |
EP (1) | EP1027796B1 (ja) |
JP (1) | JP3853592B2 (ja) |
AU (1) | AU742156B2 (ja) |
CA (1) | CA2308782C (ja) |
DE (1) | DE69824879T2 (ja) |
HK (1) | HK1029686A1 (ja) |
WO (1) | WO1999023784A2 (ja) |
Families Citing this family (99)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6760746B1 (en) * | 1999-09-01 | 2004-07-06 | Eric Schneider | Method, product, and apparatus for processing a data request |
JP4634547B2 (ja) * | 1998-06-30 | 2011-02-16 | 株式会社東芝 | リアルタイム情報配信方法 |
US6163794A (en) * | 1998-10-23 | 2000-12-19 | General Magic | Network system extensible by users |
US6353846B1 (en) * | 1998-11-02 | 2002-03-05 | Harris Corporation | Property based resource manager system |
US6691165B1 (en) * | 1998-11-10 | 2004-02-10 | Rainfinity, Inc. | Distributed server cluster for controlling network traffic |
US6687900B1 (en) * | 1998-11-19 | 2004-02-03 | X/Net Associates, Inc. | Method and system for loading instructions into an executing process |
US6631512B1 (en) * | 1999-01-15 | 2003-10-07 | Gillis E Onyeabor | Method and system for database-driven, scalable web page development, deployment-download, and execution |
US6463459B1 (en) * | 1999-01-22 | 2002-10-08 | Wall Data Incorporated | System and method for executing commands associated with specific virtual desktop |
US9141717B2 (en) | 1999-03-22 | 2015-09-22 | Esdr Network Solutions Llc | Methods, systems, products, and devices for processing DNS friendly identifiers |
US6801949B1 (en) | 1999-04-12 | 2004-10-05 | Rainfinity, Inc. | Distributed server cluster with graphical user interface |
US6970933B1 (en) | 1999-07-15 | 2005-11-29 | F5 Networks, Inc. | Enabling application level persistence between a server and another resource over a network |
US7287084B1 (en) | 1999-07-15 | 2007-10-23 | F5 Networks, Inc. | Enabling encryption of application level persistence between a server and a client |
US7346695B1 (en) | 2002-10-28 | 2008-03-18 | F5 Networks, Inc. | System and method for performing application level persistence |
US6941362B2 (en) * | 2000-04-28 | 2005-09-06 | Sheer Networks Inc. | Root cause analysis in a distributed network management architecture |
CA2368627A1 (en) * | 2000-04-28 | 2001-11-08 | Sharon Barkai | Network management method and system |
US7337209B1 (en) | 2000-04-28 | 2008-02-26 | Sheer Networks, Inc. | Large-scale network management using distributed autonomous agents |
WO2001093038A2 (en) * | 2000-05-30 | 2001-12-06 | Compaq Computer Corporation | Scalable java servers for network server applications |
AU2001280685B2 (en) * | 2000-07-24 | 2007-08-02 | Trendium, Inc. | Network models, methods, and computer program products for managing a service independent of the underlying network technology |
IL144709A (en) | 2000-08-03 | 2010-11-30 | Cisco Tech Inc | Path discovery in a distributed network management architecture |
US7032002B1 (en) * | 2000-09-06 | 2006-04-18 | Xanboo, Inc. | Service broker for processing data from a data network |
US7814198B2 (en) * | 2007-10-26 | 2010-10-12 | Microsoft Corporation | Model-driven, repository-based application monitoring system |
US6609126B1 (en) | 2000-11-15 | 2003-08-19 | Appfluent Technology, Inc. | System and method for routing database requests to a database and a cache |
US7657590B2 (en) * | 2001-02-07 | 2010-02-02 | Ubs Ag | Load balancing system and method |
US7000008B2 (en) * | 2001-04-16 | 2006-02-14 | Sun Microsystems, Inc. | Method, system, and program for providing data updates to a page including multiple regions of dynamic content |
US20030208527A1 (en) * | 2001-07-20 | 2003-11-06 | Lino Lglesais | Method for smart device network application infrastructure (SDNA) |
US7444410B1 (en) | 2002-02-15 | 2008-10-28 | Oracle International Corporation | Application platform execution environment |
US7194473B1 (en) | 2002-02-15 | 2007-03-20 | Oracle International Corporation | Application platform development environment |
US8020162B2 (en) * | 2002-07-19 | 2011-09-13 | International Business Machines Corporation | Employing a resource broker in managing workloads of a peer-to-peer computing environment |
US7430755B1 (en) | 2002-09-03 | 2008-09-30 | Fs Networks, Inc. | Method and system for providing persistence in a secure network access |
AU2003272404A1 (en) * | 2002-09-16 | 2004-04-30 | Clearcube Technology, Inc. | Distributed computing infrastructure |
US7860957B1 (en) * | 2002-12-20 | 2010-12-28 | Cisco Technology, Inc. | System and method for managing network services in a distributed system |
US7171470B2 (en) * | 2003-02-20 | 2007-01-30 | International Business Machines Corporation | Grid service scheduling of related services using heuristics |
US7516195B2 (en) * | 2003-04-29 | 2009-04-07 | International Business Machines Corporation | Method of handling a web service call |
US7568025B2 (en) * | 2003-06-27 | 2009-07-28 | Bank Of America Corporation | System and method to monitor performance of different domains associated with a computer system or network |
US8307112B2 (en) | 2003-07-31 | 2012-11-06 | Cloudsoft Corporation Limited | Mediated information flow |
US9525566B2 (en) * | 2003-07-31 | 2016-12-20 | Cloudsoft Corporation Limited | Self-managed mediated information flow |
US7543041B2 (en) * | 2003-11-12 | 2009-06-02 | International Business Machines Corporation | Pattern based web services using caching |
US7289989B2 (en) * | 2003-11-12 | 2007-10-30 | International Business Machines Corporation | Pattern based web services |
US7404189B2 (en) | 2003-12-30 | 2008-07-22 | International Business Machines Corporation | Scheduler supporting web service invocation |
EP1569106B1 (en) | 2003-12-30 | 2015-12-30 | International Business Machines Corporation | A scheduler supporting web service invocation |
WO2005091136A1 (en) | 2004-03-13 | 2005-09-29 | Cluster Resources, Inc. | System and method for a self-optimizing reservation in time of compute resources |
US8782654B2 (en) | 2004-03-13 | 2014-07-15 | Adaptive Computing Enterprises, Inc. | Co-allocating a reservation spanning different compute resources types |
US20070266388A1 (en) | 2004-06-18 | 2007-11-15 | Cluster Resources, Inc. | System and method for providing advanced reservations in a compute environment |
US8176490B1 (en) | 2004-08-20 | 2012-05-08 | Adaptive Computing Enterprises, Inc. | System and method of interfacing a workload manager and scheduler with an identity manager |
US7490105B2 (en) * | 2004-09-15 | 2009-02-10 | International Business Machines Corporation | Externalized selection middleware for variability management |
US20060080273A1 (en) * | 2004-10-12 | 2006-04-13 | International Business Machines Corporation | Middleware for externally applied partitioning of applications |
CA2586763C (en) | 2004-11-08 | 2013-12-17 | Cluster Resources, Inc. | System and method of providing system jobs within a compute environment |
US20060168268A1 (en) * | 2004-12-02 | 2006-07-27 | International Business Machines Corporation | Specific method of setting transport-specific properties from transport-agnostic clients |
US7711693B2 (en) * | 2004-12-03 | 2010-05-04 | Oracle International Corporation | Deployment of life-cycle model for LDAP applications |
WO2006059852A1 (en) * | 2004-12-04 | 2006-06-08 | Electronics And Telecommunications Research Institute | Method and system for providing resources by using virtual path |
US8370448B2 (en) | 2004-12-28 | 2013-02-05 | Sap Ag | API for worker node retrieval of session request |
US7694065B2 (en) | 2004-12-28 | 2010-04-06 | Sap Ag | Distributed cache architecture |
US7539821B2 (en) | 2004-12-28 | 2009-05-26 | Sap Ag | First in first out eviction implementation |
US20060143256A1 (en) | 2004-12-28 | 2006-06-29 | Galin Galchev | Cache region concept |
US8204931B2 (en) | 2004-12-28 | 2012-06-19 | Sap Ag | Session management within a multi-tiered enterprise network |
US7971001B2 (en) | 2004-12-28 | 2011-06-28 | Sap Ag | Least recently used eviction implementation |
US8863143B2 (en) | 2006-03-16 | 2014-10-14 | Adaptive Computing Enterprises, Inc. | System and method for managing a hybrid compute environment |
US8631130B2 (en) | 2005-03-16 | 2014-01-14 | Adaptive Computing Enterprises, Inc. | Reserving resources in an on-demand compute environment from a local compute environment |
US9015324B2 (en) | 2005-03-16 | 2015-04-21 | Adaptive Computing Enterprises, Inc. | System and method of brokering cloud computing resources |
US9231886B2 (en) | 2005-03-16 | 2016-01-05 | Adaptive Computing Enterprises, Inc. | Simple integration of an on-demand compute environment |
US20060224773A1 (en) * | 2005-03-31 | 2006-10-05 | International Business Machines Corporation | Systems and methods for content-aware load balancing |
WO2006108187A2 (en) | 2005-04-07 | 2006-10-12 | Cluster Resources, Inc. | On-demand access to compute resources |
US8782120B2 (en) | 2005-04-07 | 2014-07-15 | Adaptive Computing Enterprises, Inc. | Elastic management of compute resources between a web server and an on-demand compute environment |
US8589562B2 (en) | 2005-04-29 | 2013-11-19 | Sap Ag | Flexible failover configuration |
GB2426161A (en) * | 2005-05-13 | 2006-11-15 | Onshare Ltd | Networking via a communication layer |
US7689660B2 (en) | 2005-06-09 | 2010-03-30 | Sap Ag | Application server architecture |
US7966412B2 (en) | 2005-07-19 | 2011-06-21 | Sap Ag | System and method for a pluggable protocol handler |
US20070078927A1 (en) * | 2005-09-12 | 2007-04-05 | Microsoft Corporation | Server-side service framework |
US8707323B2 (en) | 2005-12-30 | 2014-04-22 | Sap Ag | Load balancing algorithm for servicing client requests |
US20070156907A1 (en) * | 2005-12-30 | 2007-07-05 | Galin Galchev | Session handling based on shared session information |
WO2007144611A1 (en) * | 2006-06-12 | 2007-12-21 | Enigmatec Corporation | Self-managed distributed mediation networks |
US8566452B1 (en) | 2006-08-03 | 2013-10-22 | F5 Networks, Inc. | Intelligent HTTP based load-balancing, persistence, and application traffic management of SSL VPN tunnels |
US8020149B2 (en) * | 2006-08-04 | 2011-09-13 | Apple Inc. | System and method for mitigating repeated crashes of an application resulting from supplemental code |
GB0619644D0 (en) * | 2006-10-05 | 2006-11-15 | Ibm | Data processing system and method of handling requests |
US8024396B2 (en) * | 2007-04-26 | 2011-09-20 | Microsoft Corporation | Distributed behavior controlled execution of modeled applications |
US7970892B2 (en) * | 2007-06-29 | 2011-06-28 | Microsoft Corporation | Tuning and optimizing distributed systems with declarative models |
US8239505B2 (en) * | 2007-06-29 | 2012-08-07 | Microsoft Corporation | Progressively implementing declarative models in distributed systems |
US8230386B2 (en) * | 2007-08-23 | 2012-07-24 | Microsoft Corporation | Monitoring distributed applications |
US8041773B2 (en) | 2007-09-24 | 2011-10-18 | The Research Foundation Of State University Of New York | Automatic clustering for self-organizing grids |
US8225308B2 (en) * | 2007-10-26 | 2012-07-17 | Microsoft Corporation | Managing software lifecycle |
US8099720B2 (en) | 2007-10-26 | 2012-01-17 | Microsoft Corporation | Translating declarative models |
US7974939B2 (en) * | 2007-10-26 | 2011-07-05 | Microsoft Corporation | Processing model-based commands for distributed applications |
US20090113292A1 (en) * | 2007-10-26 | 2009-04-30 | Microsoft Corporation | Flexibly editing heterogeneous documents |
US20090112932A1 (en) * | 2007-10-26 | 2009-04-30 | Microsoft Corporation | Visualizing key performance indicators for model-based applications |
US7926070B2 (en) * | 2007-10-26 | 2011-04-12 | Microsoft Corporation | Performing requested commands for model-based applications |
US8181151B2 (en) * | 2007-10-26 | 2012-05-15 | Microsoft Corporation | Modeling and managing heterogeneous applications |
US20090177986A1 (en) * | 2008-01-07 | 2009-07-09 | Microsoft Corporation | Third party in-page application platform |
US8112771B2 (en) * | 2008-01-30 | 2012-02-07 | Microsoft Corporation | Managing component programs within a service application |
TW201009698A (en) * | 2008-08-19 | 2010-03-01 | Arcadyan Technology Corp | Method for improving the accessing efficiency of embedded web page |
US8291418B2 (en) | 2008-10-02 | 2012-10-16 | International Business Machines Corporation | Sub-dispatching application server |
US10877695B2 (en) | 2009-10-30 | 2020-12-29 | Iii Holdings 2, Llc | Memcached server functionality in a cluster of data processing nodes |
US11720290B2 (en) | 2009-10-30 | 2023-08-08 | Iii Holdings 2, Llc | Memcached server functionality in a cluster of data processing nodes |
US8966020B2 (en) | 2010-11-02 | 2015-02-24 | International Business Machines Corporation | Integration of heterogeneous computing systems into a hybrid computing system |
US9253016B2 (en) | 2010-11-02 | 2016-02-02 | International Business Machines Corporation | Management of a data network of a computing environment |
US9081613B2 (en) | 2010-11-02 | 2015-07-14 | International Business Machines Corporation | Unified resource manager providing a single point of control |
US8984109B2 (en) | 2010-11-02 | 2015-03-17 | International Business Machines Corporation | Ensemble having one or more computing systems and a controller thereof |
US8959220B2 (en) | 2010-11-02 | 2015-02-17 | International Business Machines Corporation | Managing a workload of a plurality of virtual servers of a computing environment |
WO2019143808A1 (en) * | 2018-01-18 | 2019-07-25 | Bevara Technologies, Llc | Browser navigation for facilitating data access |
US11734058B2 (en) * | 2020-10-27 | 2023-08-22 | Salesforce, Inc. | Systems and methods of a virtualized management operation engine of a distributed system |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5361350A (en) | 1991-12-12 | 1994-11-01 | International Business Machines Corporation | Object oriented method management system and software for managing class method names in a computer system |
EP0648354B1 (en) | 1992-07-01 | 2000-10-18 | Telefonaktiebolaget Lm Ericsson | Method and system for implementation-independent interface specification |
JP3365576B2 (ja) | 1993-06-14 | 2003-01-14 | インターナショナル・ビジネス・マシーンズ・コーポレーション | オブジェクトの実行方法および装置 |
AU681433B2 (en) | 1993-08-03 | 1997-08-28 | Sun Microsystems, Inc. | Flexible multi-platform partitioning for computer applications |
US5715314A (en) | 1994-10-24 | 1998-02-03 | Open Market, Inc. | Network sales system |
US5623656A (en) | 1994-12-15 | 1997-04-22 | Lucent Technologies Inc. | Script-based data communication system and method utilizing state memory |
US5822585A (en) | 1995-02-21 | 1998-10-13 | Compuware Corporation | System and method for cooperative processing using object-oriented framework |
US5907675A (en) | 1995-03-22 | 1999-05-25 | Sun Microsystems, Inc. | Methods and apparatus for managing deactivation and shutdown of a server |
US5761684A (en) | 1995-05-30 | 1998-06-02 | International Business Machines Corporation | Method and reusable object for scheduling script execution in a compound document |
US5737592A (en) | 1995-06-19 | 1998-04-07 | International Business Machines Corporation | Accessing a relational database over the Internet using macro language files |
US5737607A (en) | 1995-09-28 | 1998-04-07 | Sun Microsystems, Inc. | Method and apparatus for allowing generic stubs to marshal and unmarshal data in object reference specific data formats |
US5774670A (en) | 1995-10-06 | 1998-06-30 | Netscape Communications Corporation | Persistent client state in a hypertext transfer protocol based client-server system |
US5706442A (en) | 1995-12-20 | 1998-01-06 | Block Financial Corporation | System for on-line financial services using distributed objects |
US5745681A (en) | 1996-01-11 | 1998-04-28 | Sun Microsystems, Inc. | Stateless shopping cart for the web |
US5761673A (en) | 1996-01-31 | 1998-06-02 | Oracle Corporation | Method and apparatus for generating dynamic web pages by invoking a predefined procedural package stored in a database |
US5859971A (en) | 1996-02-15 | 1999-01-12 | International Business Machines Corp. | Differencing client/server communication system for use with CGI forms |
US5862325A (en) | 1996-02-29 | 1999-01-19 | Intermind Corporation | Computer-based communication system and method using metadata defining a control structure |
WO1997040457A2 (en) | 1996-04-19 | 1997-10-30 | Intergraph Corporation | System and method for data access |
US5835712A (en) | 1996-05-03 | 1998-11-10 | Webmate Technologies, Inc. | Client-server system using embedded hypertext tags for application and database development |
US5859972A (en) | 1996-05-10 | 1999-01-12 | The Board Of Trustees Of The University Of Illinois | Multiple server repository and multiple server remote application virtual client computer |
US5864871A (en) | 1996-06-04 | 1999-01-26 | Multex Systems | Information delivery system and method including on-line entitlements |
US5848246A (en) | 1996-07-01 | 1998-12-08 | Sun Microsystems, Inc. | Object-oriented system, method and article of manufacture for a client-server session manager in an interprise computing framework system |
US5857191A (en) | 1996-07-08 | 1999-01-05 | Gradient Technologies, Inc. | Web application server with secure common gateway interface |
US5860072A (en) | 1996-07-11 | 1999-01-12 | Tandem Computers Incorporated | Method and apparatus for transporting interface definition language-defined data structures between heterogeneous systems |
US5897622A (en) | 1996-10-16 | 1999-04-27 | Microsoft Corporation | Electronic shopping and merchandising system |
US5796393A (en) | 1996-11-08 | 1998-08-18 | Compuserve Incorporated | System for intergrating an on-line service community with a foreign service |
US5826239A (en) | 1996-12-17 | 1998-10-20 | Hewlett-Packard Company | Distributed workflow resource management system and method |
US5864866A (en) | 1997-03-26 | 1999-01-26 | International Business Machines Corporation | Apparatus and method for providing externalization in an object-oriented environment |
-
1997
- 1997-10-31 US US08/962,485 patent/US6247056B1/en not_active Expired - Lifetime
-
1998
- 1998-10-26 CA CA002308782A patent/CA2308782C/en not_active Expired - Lifetime
- 1998-10-26 DE DE69824879T patent/DE69824879T2/de not_active Expired - Lifetime
- 1998-10-26 JP JP2000519523A patent/JP3853592B2/ja not_active Expired - Lifetime
- 1998-10-26 EP EP98956211A patent/EP1027796B1/en not_active Expired - Lifetime
- 1998-10-26 AU AU12789/99A patent/AU742156B2/en not_active Expired
- 1998-10-26 WO PCT/US1998/022656 patent/WO1999023784A2/en active IP Right Grant
-
2002
- 2002-01-18 HK HK01100437A patent/HK1029686A1/xx not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
AU742156B2 (en) | 2001-12-20 |
EP1027796B1 (en) | 2004-06-30 |
EP1027796A2 (en) | 2000-08-16 |
AU1278999A (en) | 1999-05-24 |
US6247056B1 (en) | 2001-06-12 |
CA2308782C (en) | 2009-06-23 |
WO1999023784B1 (en) | 1999-08-26 |
WO1999023784A9 (en) | 2000-07-20 |
DE69824879T2 (de) | 2005-08-25 |
CA2308782A1 (en) | 1999-05-14 |
WO1999023784A3 (en) | 1999-07-15 |
JP2001522113A (ja) | 2001-11-13 |
DE69824879D1 (de) | 2004-08-05 |
HK1029686A1 (en) | 2001-04-06 |
WO1999023784A2 (en) | 1999-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3853592B2 (ja) | 分散ウェブアプリケーションサーバ | |
JP3853593B2 (ja) | ウェブアプリケーションサーバにおいて拡張可能な認証機構を実現するための方法および装置 | |
US6026404A (en) | Method and system for executing and operation in a distributed environment | |
JP4729172B2 (ja) | 宣言型パラダイムをサポートするステートレスなウェブ環境におけるトランザクションを実行するための方法および装置 | |
US6845505B1 (en) | Web request broker controlling multiple processes | |
US6405367B1 (en) | Apparatus and method for increasing the performance of Java programs running on a server | |
US20020016790A1 (en) | Apparatus and method for dynamically verifying information in a distributed system | |
US20020198895A1 (en) | Apparatus and method for dynamically verifying information in a distributed system | |
JP2002505463A (ja) | 分散システム内の遠隔処理呼出に関連する処理をおこなうためのダウンロード可能なスマートプロキシ | |
Guide | Unicenter® SOLVE: CPT™ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20050913 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051122 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20060217 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20060224 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060425 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060829 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060906 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100915 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110915 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120915 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130915 Year of fee payment: 7 |
|
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 |
|
EXPY | Cancellation because of completion of term |