【文献】
正野 勇嗣 Yuji SHONO,mixi、ニコニコ動画、livedoor 実例から学ぶ memcached ベストプラクティス,WEB+DB PRESS Vol.47 初版,日本,(株)技術評論社,第47巻
(58)【調査した分野】(Int.Cl.,DB名)
アプリケーションサーバコアに関連付けられたサービスキャッシング論理をさらに含み、前記サービスキャッシング論理は、結果がキャッシュにおいて既に存在しているかどうかに基づいて、前記結果を前記キャッシュから検索すべきか、または、新しい結果を生成するようにサービスを呼出すべきかどうかを判断する、請求項1または2に記載のシステム。
前記アプリケーションサーバコアは、要求データから生成されたキーと、前記キャッシュされたデータに関連付けられたキーとに基づいて前記判断を行なう、請求項4に記載のシステム。
各々のキーは、単純な連続ストリング、サービス名から構成されるストリング、前記要求データから構成されるストリング、ならびに、前記サービス名および前記要求データから構成されるストリング、のうちの1つである、請求項5に記載のシステム。
トランザクション処理環境における分散型キャッシングシステムにおいてサービス結果をキャッシュするための1セットの命令を格納するプログラムであって、前記命令は、1つ以上のプロセッサによって実行されると、前記1つ以上のプロセッサに以下のステップを実行させ、前記以下のステップは、
1つ以上のマイクロプロセッサを含むコンピュータ上で実行されるとともに、キャッシング機能を提供する複数の層を含むトランザクション処理環境を設けるステップと、
キャッシュされたデータを格納するように構成されたキャッシングプロバイダを設けるステップと、
前記トランザクション処理環境のために構成ファイルを設けるステップとを含み、前記構成ファイルは、サービスのために戻された結果をキャッシュするためにどのキャッシュを使用すべきかと、前記キャッシュされた結果を識別する際に使用されるキーを如何に生成すべきかとを記述するエントリを含むキャッシングセクションを含む、プログラム。
【発明を実施するための形態】
【0008】
詳細な説明:
トランザクション処理環境(たとえば、Tuxedoサーバ環境)においては、メッセージが1つのプロセスから別のプロセスに送信可能になる前にバッファが割当てられる必要がある。このような環境における複雑なアプリケーションは、さまざまなプロトコルを用いて複数のネットワークを介して通信する異種システムにインストールすることができる。そのため、異なるタイプのバッファが必要となり、各々のバッファタイプは、メッセージを初期化し、送信し、受信し、かつデータを符号化し、復号化するためのさまざまなルーチンを必要とする。
【0009】
典型的には、ユーザ(たとえば、アプリケーション開発者)が性能向上のために分散型キャッシングシステムに型付きバッファをキャッシュする場合、ユーザは、特定の型付きバッファ用にカスタマイズされたコードを書込む必要がある。さらに、アプリケーションの開発が完成した後に異なるキャッシングプロバイダが用いられる場合、キャッシングプロバイダの変更に対応するために、コードを付加的に変更する必要がある。
【0010】
分散型キャッシングシステム
一実施形態に従うと、トランザクション処理環境において分散型キャッシングを提供するためのシステムおよび方法がこの明細書中に記載される。最上層は、キャッシングシステムと対話させるためにクライアントをキャッシュすることによってアプリケーションプログラミングインターフェイス(API)をエクスポーズして使用できるようにすることができ、複数のバッファタイプと、各バッファタイプに対する1つ以上のコールバック機能とを登録することができる。共通のキャッシング層は、共通のデータ構造をサポートすることができ、最上層からキャッシング要求を受取ると、そこにあるコールバック機能を用いて、キャッシング要求に関連付けられた特定のバッファタイプと共通のデータ構造との間で変換を行なうことができる。共通のキャッシング層は、キャッシング関連のAPIを提供するために1組の共通のAPIを定義し、キーおよび値データのシリアライゼーション/デシリアライゼーションなどの複数のインプリメンテーションについての共通の挙動を定義することができる。プロバイダスイッチおよび関連するAPIを用いて、インプリメンテーション層からプロバイダスイッチの特定のインプリメンテーションをロードすることができる。プロバイダスイッチは、特定のキャッシングプロバイダによって提供されるキャッシング動作を指し示すポインタを含み得る。構成ファイルは、データコーディングと、キャッシングシステムのためにどのキャッシングプロバイダを使用するべきかとを指定するのに用いることができる。
【0011】
階層化されたキャッシングシステムは、ユーザと下層のキャッシングプロバイダとの間を分離させることができ、これにより、システムが使いやすくなり、その拡張が容易になる。
【0012】
たとえば、キャッシングシステムは、複数のキャッシングプロバイダとともに用いることができ、ユーザのアプリケーションを変更する必要なしに、複数のデータタイプをキャ
ッシュすることができる。開発者がどんなバッファタイプをキャッシュする必要があるかどうかにかかわらず、かつ、そのキャッシングシステムのためにどのキャッシングプロバイダが構成されるべきであるかにかかわらず、ユーザは、同じセットのAPIを用いてキャッシング動作を実行することができる。
【0013】
一実施形態に従うと、分散型キャッシングシステムは、アクセス回数および更新回数を減らすことができ、各々がキーによって識別されている複数のタイプのバッファをキャッシュすることができ、複製アクセス、非複製アクセス、ローカルアクセスおよびリモートアクセスを提供することができる。
【0014】
図1は、一実施形態に従った、トランザクション処理環境において使用される分散型キャッシングを提供するためのシステムを示す。
【0015】
図1に示されるように、分散型キャッシングシステム105は、キャッシュにデータを格納する(106)かまたはキャッシュからデータを検索する(107)ために、キャッシング・クライアント(たとえば、Tuxedoクライアントまたはサーバ)101によって使用されるトランザクション処理システム(たとえば、Tuxedoサーバ環境)100において、提供され得る。
【0016】
図1においてさらに示されるように、分散型キャッシングシステムは、複数の層、たとえば、バッファベースの分散型キャッシング(buffer-based distributed caching:BDC)層109、共通の分散型キャッシング(common distributed caching:CDC)層125、分散型キャッシングのインプリメンテーション(implementation of distributed caching:IDC)層141、および、従属型サードパーティベンダー(dependent third-party vendor:DTV)層149を含み得る。構成ファイル103は、BDC層、CD
C層およびIDC層の挙動を定義するために用いることができる。
【0017】
一実施形態に従うと、BCD層は、キャッシング・クライアントに対する最上層であり、複数の型付きバッファを処理することができ、型付きバッファをCDCによってサポートされる共通の型付きバッファに変換した後、キャッシング・クライアントからCDC層にキャッシング要件を転送することができる。最上層の主要な機能は、さまざまな型付きバッファのシリアライゼーションおよびデシリアライゼーションである。
【0018】
図1においてさらに示されるように、BDC層は、キャッシングシステムと通信するためにキャッシング・クライアントによって使用される1組の外部API121をエクスポーズすることができる。たとえば、外部APIは、データをキャッシュするかまたはデータをキャッシュから検索するために、アプリケーションにおいて直接用いることができる。
【0019】
以下の表1は、一実施形態に従った外部APIの例示的なインターフェイスのリストを示す。
【0021】
表1に示されるように、一実施形態に従うと、外部APIは、キャッシュに対するハンドルを取得し、キャッシュにバッファを入れ、バッファをキーに関連付け、バッファをキャッシュから削除して検索する際にアプリケーションが使用するべき方法を含み得る。
【0022】
たとえば、ユーザは、Tuxedoキャッシュハンドルを得るために方法「tpgetcache」を用いることができる。方法のパラメータ「名」は、取得すべきキャッシュのタイプを指定することができる。方法についての戻された結果は、構造名TCACHEを指し示すポインタであり得る。「tpcacheput/tpcacheget」はデータをキャッシュに入れる/キャ
ッシュから入手するために用いることができる。「tpcacheremove/tpcachemremove/tpcacheremoveall」は、キャッシュからアイテムを削除するために用いることができる。
【0023】
一実施形態に従うと、BDC層は、キャッシングシステムにおいてキャッシュすることができるデータタイプとして複数の型付きバッファ130を登録することができる。たとえば、複数の型付きバッファは、ストリング(一連の文字)、carray(文字配列)、ptr(バッファを指すポインタ)、FML型付きバッファおよびVIEW型バッファを含み得る。他のデータタイプも、それらのデータタイプがBDC層に登録されていれば、キャッシングのためにサポートされ得る。
【0024】
図1に示されるように、各々の登録された型付きバッファは、型付きバッファを記述するメタデータ(たとえば、型付きバッファメタデータ132)と、符号化および暗号化ならびにシリアライゼーションおよびデシリアライゼーションを含むバッファ上での複数の動作を定義する1つ以上のコールバック機能131と、に関連付けることができる。
【0025】
一実施形態に従うと、BDC層は、各々の登録されたデータタイプ毎に、メタデータおよびコールバック機能を提供するスイッチ(データ構造)を含み得る。
【0026】
以下のリスト1は、一実施形態に従った例示的なスイッチを示す。
【0028】
リスト1に示されるように、スイッチは、バッファのタイプ、サブタイプおよびサイズ、シリアライゼーション動作「presend」および「presend2」、デシリアライゼーション
動作「postrecv」、ならびに符号化/暗号化動作「encdec」を記述するメタデータを含み得る。
【0029】
一実施形態に従うと、CDC層は、キャッシング関連のAPIを提供するために1組の共通のAPI(たとえば、キャッシングAPI127)を含み得るとともに、名前/キー値ペアを含むデータのシリアライゼーション/デシリアライゼーションなどの複数のインプリメンテーションについての共通の挙動を定義し得る。CDC層は、シリアライゼーション/デシリアライゼーションのインプリメンテーションのためのコールバック登録をサポートすることによって、複数のタイプのデータをシリアライズ/デシリアライズすることができる。
【0030】
一実施形態に従うと、共通のデータ構造(たとえば、共通の型付きバッファ)133は、キャッシュされるべき型付きバッファのシリアライズされたバイトを格納するために、CDC層によってサポートすることができる。BDC層に登録される登録済みの型付きバッファまたは他のデータタイプの各々は、シリアライズされ、共通のデータ構造に格納され得る。
【0031】
一実施形態に従うと、CDC層は実際のキャッシング動作を実行せず、必要なインターフェイスを定義する。これらのインターフェイスは、キャッシング動作の特定のインプリメンテーションに依拠しない。構成に基づいて、これらのインターフェイスの特定のインプリメンテーションは、IDC層から動的にロードすることができる。
【0032】
一実施形態に従うと、キャッシングプロバイダスイッチ143および特定の方法はCDC層に提供されて、プロバイダスイッチの特定のインプリメンテーションを検索するのに使用され得る。プロバイダスイッチは、キャッシングプロバイダによって提供されるキャッシング動作を指し示す複数のポインタを含み得る。プロバイダスイッチの各インプリメ
ンテーションのロードは、BDC層からのキャッシング要求に応じて、キャッシングAPIによって開始され得る(128)。以下のリスト2は、一実施形態に従った例示的なプロバイダスイッチを示す。
【0034】
リスト2に示されるように、プロバイダスイッチは、「入れる(put)」、「入手する
(get)」および「削除する(remove)」などのキャッシング動作を示すポインタを含み
得る。方法「TMTDCGetCachingProviderSW」は、構成ファイルによって定義されるように、キャッシングインターフェイスの特定のインプリメンテーションを検索するために用いられる特定の方法である。
【0035】
再び
図1を参照すると、IDC層は、実際のキャッシング動作を提供することができ、各キャッシングプロバイダ毎にクライアントおよびサーバを含み得る。上述のとおり、各々のクライアントは、プロバイダスイッチのインプリメンテーションであってもよく、CDC層によって使用されるべく提供することができる。クライアントは、1つ以上のダイナミックライブラリによって提供することができ、このため、クライアントの各々を動的にCDC層にロードすることができる。サーバは、実際のキャッシングサーバまたはプロバイダとしてサードパーティアプリケーションを用いることができる。各々のキャッシングプロバイダは、それ自体のIDCインプリメンテーションを有することができ、これにより、ユーザが、アプリケーションコード変更のない構成によってIDCインプリメンテーションを変更することが可能となる。
【0036】
一実施形態に従うと、DTV層は、複数のサードパーティキャッシングプロバイダ(たとえば、CoherenceおよびCloudStore)を含み得る。
【0037】
一実施形態に従うと、BDC層およびCDC層は、トランザクション処理環境に対するクライアントアプリケーションとそこにあるサーバ(たとえば、TuxedoクライアントおよびTuxedoサーバ)との両方に存在し得るとともに、IDC層およびDTV層はサーバ上にのみ存在し得る。
【0038】
一実施形態に従うと、構成ファイルは単純な行指向型フォーマットのファイルであり得る。構成ファイルにおけるプロパティは、行の観点から処理することができるため、新しく導入されたプロパティがファイルのローディングプロセスに影響を与えることはない。表2は、構成ファイルにおけるプロパティのサンプルリストを示す。
【0040】
一実施形態に従うと、階層化されたキャッシングシステムは、ユーザと下層にあるキャッシングプロバイダとの間を分離し得るとともに、ユーザがシステム上でキャッシング動作を実行するために同じセットのインターフェイスを用いることを可能にし得る。
【0041】
具体例として、BDC層が型付きバッファをキャッシュするようにとのキャッシング要求をキャッシング・クライアントから受取ると、BDC層は、CDC層にキャッシング要求を転送する(123)ことができ、これにより、型付きバッファをシリアライズするためにBDC層における対応するコールバック機能を呼出す(137)ことができ、シリアライズされたバイトを共通のデータ構造に格納する(138)ことができる。CDC層は、共通セットのインターフェイスを用いて、構成ファイルによって指定される特定のキャッシングプロバイダからキャッシング動作にアクセスして、キャッシング動作を実行することができる。
【0042】
図2は、一実施形態に従った、トランザクション処理環境において使用される分散型キャッシングを提供するためのシステムをさらに示す。
【0043】
図2に示されるように、CDC層におけるキャッシングAPIはさらに、共通のキャッシングインターフェイスおよび他の共通の挙動、たとえばシリアライゼーションおよびデシリアライゼーションなど、を定義する複数のオブジェクトを含み得る。ユーザにエクスポーズされる外部APIとは異なり、上述のとおり、キャッシングAPIは、キャッシングシステムによって使用されるべく提供される。
【0044】
一実施形態に従うと、キャッシングAPIは、外部APIのユーザによって取得されるキャッシュを表わし得るキャッシュオブジェクト223を含み得る。このキャッシュは、キャッシュ関連の動作をすべて提供することができ、外部APIからキャッシング動作を受取ることができる。キャッシュは、たとえば、構成ファイルの「tdc.cache」プロパテ
ィによって指定されるキャッシュ名によって識別され得る。
【0045】
図2に示されるように、キャッシュオブジェクトは、キャッシュキーオブジェクト225およびキャッシュ値オブジェクト227に関連付けることができる。キャッシュキーオブジェクトは、キャッシュのためのキーを生成および検索するための方法を含み得るとともに、キャッシュ値オブジェクトは、シリアライゼーションインターフェイスを含み得る。
【0046】
一実施形態に従うと、キャッシングプロバイダ229は、構成ファイルにおいて、プロパティcache.providerによって指定されるように、プロバイダ名によって識別される1組のキャッシング動作を定義することができる。プロセスレベルコンテキスト(TUXP)において維持されるグローバルなキャッシュプロバイダコンテナ230は、すべてのキャッシングプロバイダを暗黙的に維持することができる。キャッシュマネージャ224は、トランザクション処理環境においてキャッシュを管理するために用いることができる。キャッシュマネージャは、ユーザが直接キャッシュを作成するべき場合に暗黙的に作成することができるものであるが、単一のキャッシングプロバイダに関連付けることができる。キャッシュマネージャが作成されたとき、キャッシングプロバイダが存在していなければ、関連付けられたキャッシングプロバイダを内部に作成することができる。グローバルなキャッシュマネージャコンテナ228は、スレッド内で暗黙的に作成されたマネージャを管理するためにスレッドレベル・コンテキスト(TUXT)において維持することができる。
【0047】
図3は、一実施形態に従ったキャッシングAPIの詳細なクラス図を示す。
図4は、一実施形態に従った、トランザクション処理環境において使用される分散型キャッシングを提供するための方法を示す。
【0048】
図4に示されるように、ステップ411において、分散型キャッシングシステムは、ト
ランザクション処理環境において提供することができる。分散型キャッシングシステムは、キャッシング・クライアントからキャッシング要件を受取るためのBDC層と、共通セットのキャッシングインターフェイスを提供するためのCDC層と、共通セットのキャッシングインターフェイスのインプリメンテーションを提供するためのIDC層と、実際のキャッシングプロバイダを提供するためのDTV層とを含み得る。
【0049】
ステップ413において、分散型キャッシングシステムのBDC層は、キャッシング・クライアントからキャッシング要求を受取ることができる。キャッシング要求は、BDC層によってエクスポーズされるAPIを用いて開始することができる。
【0050】
ステップ415において、BDC層はCDC層にキャッシング要求を転送することができる。キャッシング要求に関連付けられた型付きバッファは、BDC層において定義されるコールバック機能を用いて、共通のデータ構造に変換することができる。
【0051】
ステップ417において、CDC層は、インプリメンテーション層から共通セットのキャッシングインターフェイスの特定のインプリメンテーションをロードし、特定のインプリメンテーションを用いてキャッシング動作を実行することができる。
【0052】
シリアライゼーションサポート
上述のとおり、CDC層は、型付きバッファ上でシリアライゼーション動作/デシリアライゼーション動作を呼出すために、コールバック機能のための登録機能を定義することができる。
【0053】
一実施形態に従うと、型付きバッファまたは別のデータタイプは、登録機能を用いて、シリアライゼーション・ハンドラ/デシリアライゼーション・ハンドラに登録される必要がある。登録機能の例は以下のとおりであり得る。
【0055】
上述の登録機能においては、シリアライゼーションコールバック機能(cb1)およびデ
シリアライゼーション機能(cb2)が登録される。これらのコールバック機能は、上述の
とおり、BDC層において定義することができ、以下のリスト3に例示することができる。
【0057】
リスト3に示されるように、登録された型付きバッファまたは別のユーザ定義型データタイプはシリアライズされたストリームに変換され、キャッシュに格納され得る。その後
、シリアライズされたストリームは、キャッシュから検索された後、変換されてユーザ定義型データバッファに戻され得る。
【0058】
分散型キャッシングシステムにおいて使用される型付きバッファを含むさまざまなデータタイプをサポートするために、これらのデータタイプのシリアライズされたストリームを格納するための共通のデータ構造を提供することができる。
【0059】
一実施形態に従うと、分散型キャッシングシステムによって使用されるデータシリアライゼーションをサポートするためのシステムおよび方法がこの明細書中に記載される。データシリアライゼーションシステムは、複数のデータタイプのシリアライズされたストリーム/バイトを格納するために用いることができる共通のデータ構造を含み得る。データ構造は、キャッシュセッターのアーキテクチャを記述する情報を含むヘッダを含み得る。異なるアーキテクチャ上で使用するために、キャッシュされたデータが検索される場合、ヘッダ内のアーキテクチャ情報を用いて、この異なるアーキテクチャ上で使用できるようにデータを変換することができる。キャッシュされたデータが同じアーキテクチャ上で検索される場合、キャッシュされたデータは、変換されずに用いることができる。データ構造は、付加的に、メモリを効率的に使用できるようにするために可変長をもつボディ、後方互換性についてのバージョン情報、および、拡張用のオプション特徴のためのフィールドを含み得る。
【0060】
図5は、一実施形態に従った例示的な型付きバッファを示す。
図5に示されるように、型付きバッファ(たとえば、Tuxedo型バッファ)511は、フレキシブル・メッセージ・ヘッダ(flexible message header:FML)513、
およびユーザ型付きコンテナモジュール(user typed container module:TCM)51
7を含み得る。TCMはさらに、型付きコンテナヘッダー(typed container header:TCH)519および型付きコンテナボディ(typed container body:TCB)521を含み得る。TCBはT_BUFFER523およびユーザデータ529を含み得る。T_BUFFERは、型付きバッファのタイプ525およびサブタイプ527を格納するために用いることができる。型付きバッファは、他のバッファに格納することができるいくつかの非ユーザTCMを有し得る。
【0061】
図6は、一実施形態に従った、分散型キャッシングシステムによって使用されるデータシリアライゼーションをサポートするためのシステムを示す。
【0062】
図6に示されるように、データ構造はCDC層によってサポートされる共通の型付きバッファ133であってもよい。データ構造はヘッダ611およびボディ613を含み得る。ヘッダは、4バイトで位置合わせされる必要があり、複数のフィールド、たとえば、マジックフィールド615、メジャーバージョンフィールド617、マイナーバージョンフィールド618、長さフィールド619、vdataフィールド622、exlenフィールド623、タイプフィールド625、およびフラグフィールド621を含み得る。
【0063】
一実施形態に従うと、ボディは、ボディのサイズを示すための長さのフィールド629と、ソース型付きバッファのタイプ631およびサブタイプ633を格納するために用いられるT_Bufferのフィールド626と、ユーザデータフィールド635とを含み得る。
【0064】
一実施形態に従うと、「マジック」のフィールドは、ヘッダを区別するために用いられるcharであり得るとともに、長さのフィールドは、ヘッダのサイズを示し得る。フラグのフィールドは、メジャーバージョンのフィールドにおける状態を示し得るかまたはオプション特徴を制御し得る。メジャーバージョンのフィールドは、データ構造における構造の
変更を示すことができる。たとえば、新しいフィールド/メンバが追加もしくは削除されるか、または、フィールドの意味が変更される。マイナーバージョンのフィールドは、メジャーバージョン内の変更を示すために用いることができる。たとえば、新しいビット・フラグがフラグのフィールドに投入される。
【0065】
一実施形態に従うと、exlenのフィールドは、一般的にはヘッダに含まれないであろう
いずれの余分なヘッダデータ(たとえば、オプションの特徴)をも記述し得る。「exlen
」がゼロでなければ、プレースホルダ「vdata」から始まる最初の「exlen」*4バイトが
ヘッダデータの一部になり得る。余分なヘッダデータは、さまざまなフィールドを有し得る。各々のフィールドは、4バイトで位置合わせされたアドレスから始まり得るとともに、そのタイプを示すunsigned shortとしてfirst shortを用い、フィールドのデータの長
さ(バイト)を示すunsigned shortとしてsecond shortを用い得るとともに、シリアライズされ得る。
【0066】
一実施形態に従うと、vdataのフィールドは、余分なヘッダデータおよびボディを含む
可変データを示すためのプレースホルダであり得る。ヘッダのうち最初の4バイトは、他の用途のために変更される可能性はなく、ヘッダにおけるメンバは、ビッグエンディアンを用いることができる(vdataは含まれていない)。ヘッダのサイズは可変データを含ん
でおらず、そのため、長さのフィールドに影響を与えることはない。
【0067】
一実施形態に従うと、メジャーバージョン、長さおよびフラグのそれぞれのフィールドは、メジャーバージョン間でのプロトコル互換性をサポートするために用いることができる。加えて、フラグのフィールドは、符号化されていないデータ、符号化されたデータおよび自己記述型データのうちの1つであり得るデータの状態を示すことができる。
【0068】
一実施形態に従うと、データが符号化されていない場合、シリアライゼーション中にどの動作も実行されず、ボディは、型付きバッファにおける元のユーザTCMと同じであり得る。キャッシュセッター(たとえば、キャッシュにデータを格納するアプリケーション)と同じアーキテクチャ(たとえば、同じ文字符号化または同じエンディアン)のマシンに存在するキャッシュゲッター(たとえば、キャッシュされたデータを検索するアプリケーション)は、キャッシュされたデータを検索して用いることができる。
【0069】
一実施形態に従うと、データが符号化されると、型付きバッファにおける元のユーザTCMが特定の符号化機構を用いてシリアライズされるため、キャッシュゲッターがデータをデシリアライズするために適切な対応機構を用いていれば、如何なるプラットフォーム上のキャッシュゲッターでもデータを正確に取得することができるようになる。
【0070】
一実施形態に従うと、この明細書中に記載されるデータ構造は「自己記述型」モードまたは状態を提供することができ、これにより、データ構造のボディを、型付きバッファにおいて、たとえば、「符号化されていない」状態で、元のユーザTCMと同じ状態にすることが可能になる。さらに、キャッシュセッターの元のアーキテクチャについての追加情報は、データ構造のヘッダに含めることができる。異なるアーキテクチャに位置するキャッシュゲッターがキャッシュされたデータを入手する場合、追加情報を用いて、異なるアーキテクチャにおいて使用できるようにデータを変換することができる。キャッシュゲッターがキャッシュセッターと同じアーキテクチャに位置する場合、データは、変換されずに直接用いられ得る。
【0071】
一実施形態に従うと、データ構造は依然として「符号化された」モードをサポートすることができ、このため、Tuxedo符号化アルゴリズムをサポートする他のプロダクトとデータを共有することができるようになる。シナリオの例として、Tuxedoアプリ
ケーションがキャッシュセッターとして機能するとともに、JATMIパッケージを用いるWeblogicアプリケーションがキャッシュゲッターとして機能する例を挙げることができる。
【0072】
一実施形態に従うと、アーキテクチャは、以下のうち1つ以上によって異種となり得る。すなわち、1)異なるエンディアン(バイトオーダー、リトルエンディアンまたはビッグエンディアン);2)異なる文字集合(ASCII、EBCDICなど);および、3)異なるサ
イズを有するタイプ(たとえば、長さが4バイトまたは8バイトであり得る)。
【0073】
一実施形態に従うと、「自己記述」状態が用いられる場合、構造上の相違についての情報を、データ構造のヘッダにおいて指定することができる。異種環境においては、「自己記述」モードは、符号化モードと比べて2つの利点を有する。すなわち、1)キャッシュセッターについて、「符号化されていない(unencoded)」場合と同じ性能;および、2
)ゲッターがキャッシュゲッターと同じアーキテクチャに位置する場合、キャッシュゲッターについて、「符号化されていない(unencoded)」場合と同じ性能を有する。
【0074】
具体例として、キャッシュセッターはデータ構造を用いて、シリアライズされたバイトをそれら自体のフォーマット(たとえば、ビッグエンディアンまたはリトルエンディアン)でキャッシュに格納することができ、かつ、データがどの「エンディアン」にあるかを指定する追加情報を格納することができる。キャッシュゲッターは、データを検索すると、追加情報を用いて、データをローカルフォーマットに変換することができる。
【0075】
一実施形態に従うと、異種環境においては、ライブラリは各々のマシンに提供することができ、このため、受取るマシンは、キャッシュセッターのマシンのアーキテクチャにかかわらず、ライブラリを用いて、キャッシュされたデータを変換することができる。
【0076】
そのため、データ構造は、キャッシングシステムの性能を向上させることができ、Tuxedo型付きバッファを含むさまざまなデータタイプのシリアライズされたバイトを格納することができる。
【0077】
一実施形態に従うと、型付きバッファのユーザTCMをシリアライズするために2つのステップを実行することができる。第1のステップは表示することであり、第2のステップは符号化することである。上述のとおり、シリアライゼーションおよびデシリアライゼーションのための機能はBDC層におけるコールバック機能において実現される。
【0078】
一実施形態に従うと、型付きバッファのユーザTCMをシリアライズすることができるものの、不必要なデータを減らすために型付きバッファのユーザデータおよびT−バッファだけがキャッシュされる必要があり、型付きバッファの残りはキャッシュされる必要がない。
【0079】
リスト4は、一実施形態に従った型付きバッファの例示的なヘッダを示す。
【0081】
図7は、一実施形態に従った、分散型キャッシングシステムによって使用されるデータシリアライゼーションをサポートするための方法を示す。
【0082】
図7に示されるように、ステップ711において、分散型キャッシングシステムがトランザクション処理環境において提供され得る。
【0083】
ステップ713において、複数のデータタイプのシリアライズされたストリーム/バイトを格納するために用いられるデータ構造が提供され得る。データ構造は、キャッシュ設定アプリケーションを実行するシステムアーキテクチャについての情報を含むヘッダを含む。
【0084】
ステップ715において、異なるシステムアーキテクチャ上で実行されるキャッシュ入手アプリケーションはキャッシュされたデータを検索し、ソースシステムアーキテクチャについての情報を用いて、異なるアーキテクチャ上で使用できるようにデータを変換する。
【0085】
Coherenceとの統合
一実施形態に従うと、キャッシングプロバイダ(たとえば、CoherenceまたはCloudStore)は構成によってキャッシングプロバイダとして用いることができる。
【0086】
一実施形態に従うと、分散型インメモリ・データグリッド(たとえば、Coherence)を
、キャッシングプロバイダとしての分散型キャッシングシステムに統合するためのシステムおよび方法がこの明細書中に記載される。分散型キャッシングシステムにおけるプロキシサーバは分散型インメモリ・データグリッドに対するクライアントとして機能し得るとともに、IDCクライアントから転送されたキャッシング要求を受取り得る。始動時に、プロキシサーバは、キャッシング・システム・キャッシュを定義する構成ファイルと、分散型インメモリ・データグリッドキャッシュにキャッシュするマップとをロードすることができ、キャッシング・システム・キャッシュの名前を用いて、サービスをアドバタイズすることができる。要求されたサービスを指定するキャッシング要求をキャッシング・クライアントから受取ると、プロキシサーバは、要求されたサービスに基づいてアクセスするために、分散型インメモリ・データグリッドにおける対応するキャッシュを決定することができる。
【0087】
一実施形態に従うと、キャッシュされるべきデータはシリアライズされてから、プロキシサーバに転送することができ、このプロキシサーバは、シリアライズされたデータを対応するインメモリ・データグリッドキャッシュに格納することができる。キャッシュされたデータが、シリアライズされたバイトとして対応するインメモリ・データグリッドキャッシュから検索されて、キャッシング・クライアントに送り返されると、キャッシング・クライアントは、データを元のデータにデシリアライズすることができる。
【0088】
図8は、一実施形態に従った、キャッシングプロバイダとしての分散型キャッシングシステムに分散型インメモリ・データグリッドを統合するためのシステムを示す。
【0089】
図8に示されるように、複数のコンピュータノード(たとえば、ノードA805およびノードB807)は、トランザクション処理環境(たとえば、Tuxedoサーバ環境)におけるクラスタまたはドメインにおいて機能するように構成することができる。各々のコンピュータノードはアプリケーションサーバ(たとえば、アプリケーションサーバA811およびアプリケーションサーバB813)を含み得る。
【0090】
図8にさらに示されるように、分散型インメモリ・データグリッドクラスタ(たとえば、Coherence)831は、複数のコンピュータノード上でサポートされ得る。分散型イン
メモリ・データグリッドは、複数のコンピュータノードにわたって分散された複数のメンバを含み得る。たとえば、CoherenceメンバA819およびCoherenceメンバC823は、コンピュータノードA上に存在し得るとともに、CoherenceメンバB821およびCoherenceメンバD825はコンピュータノードB上に存在し得る。
【0091】
一実施形態に従うと、1つ以上のプロキシサーバは、ロードバランシングおよび性能向上のために各々のコンピュータノード上に設けることができる。たとえば、Coherenceの
ためのプロキシサーバ815および817は、それぞれ、コンピュータノードAおよびコンピュータノードB上に設けられる。
【0092】
一実施形態に従うと、各々のプロキシサーバは、Tuxedo Java(登録商標)サーバによって実現することができ、分散型キャッシングシステムにおいてサーバとして機能し得る。キャッシング・クライアント(たとえば、Tuxedoクライアントまたはサーバ)からのキャッシング要求は、トランザクション手順を呼出すことによって各々のプロキシサーバに転送され得る。各々のプロキシは、その後、1つ以上のキャッシング要求を分散型インメモリ・データグリッドに転送して、対応する応答を受取ることができる。
【0093】
一実施形態に従うと、各々のプロキシサーバは、分散型インメモリ・データグリッドに対するJava(登録商標)クライアントとして、直接、機能し得る。構成ファイルは、分散型インメモリ・データグリッドに如何にアクセスするかを指定することができ、たとえば、1つ以上の分散されたキャッシュまたは複製されたキャッシュにアクセスするべきかどうかを指定することができる。読取りのアクセスが高く、および書込みのアクセスが低い場合、複製されたキャッシュをアクセス用に構成することができる。
【0094】
図9は、一実施形態に従った、キャッシングプロバイダとしての分散型キャッシングシステムに分散型インメモリ・データグリッドを統合するためのシステムをさらに示す。
【0095】
図9に示されるように、プロキシサーバ930は、Coherenceのためのキャッシングプ
ロバイダスイッチインプリメンテーション943からトランザクション手順の呼出し929を受取るために、CDC層に存在し得る。トランザクション手順の呼出しは、キャッシング・クライアントから分散型キャッシングシステムへのキャッシング要求を受取った後
、キャッシングプロバイダ・スイッチ・インプリメンテーションをホストしているサーバによって生成することができる。トランザクション手順の呼出しは、共通の型付きバッファから(928)のシリアライズされたバイトを含み得る。
【0096】
一実施形態に従うと、Coherenceのためのキャッシングプロバイダ・インプリメンテー
ションは、IDC層からCDC層に提供されるIDCクライアントであり得る。Coherence932はデフォルトのキャッシングプロバイダとなるように構成することができる。こ
のため、プロバイダスイッチのインプリメンテーションと、プロバイダスイッチインプリメンテーションをロードするのに用いられる方法とが、Tuxedoダイナミックライブラリlibtuxおよびlibwsに統合され得る。この場合、前者はTuxedoサーバおよび固
有のクライアントによって使用され得るとともに、後者はTuxedo/WSクライアントのために使用され得る。
【0097】
一実施形態に従うと、Coherenceに基づいたプロバイダスイッチ・インプリメンテーシ
ョンまたはIDCクライアントは、tpcallによってプロキシサーバにキャッシング要求を転送することができる。不必要なコピーを減じるようにとの要求のタイプに基づいて、さまざまなバッファタイプを用いることができる。表3は、キャッシング要求のタイプに基づいて用いることができる型付きバッファのサンプルリストを示す。
【0099】
一実施形態に従うと、プロキシサーバは、始動されると、構成ファイルから構成プロパティをロードすることができる。この場合、構成プロパティが定義することができる提供されたTuxedoキャッシュは、分散型キャッシングシステムにおける、構成された論理キャッシュまたは物理キャッシュであり得る。プロキシサーバは、Tuxedoキャッシュ名を用いて、サービスをアドバタイズすることができる。構成ファイルからのプロパティのリストの例を以下のリスト5に示すことができる。
【0101】
一実施形態に従うと、上述のプロパティであれば、プロキシサーバは、「tc」という名のTuxedoサービスをアドバタイズすることができる。IDCクライアントは、tpcallによってプロキシサーバがアドバタイズしたサービス「tc」に対し、キャッシュ「tc」についての要求を転送することができる。リスト3に示されるように、プロパティは、分散型キャッシングシステムにおいて構成されたキャッシュについての、マップされたCoherenceキャッシュを指定することができる。キャッシング・クライアントがコマンド「getcache」によってキャッシュを取得する必要がある場合、プロキシサーバは、このキャッ
シュのために必要なすべてのプロパティ(たとえば、プロパティoptions.encoding)をキャッシング・クライアントに送り返すことができる。
【0102】
一実施形態に従うと、要求されたサービスの名前が、構成ファイルによってCoherence
キャッシュにマッピングされたTuxedoキャッシュの名前と同じであり得る場合、プロキシサーバは、要求されたサービスに基づいてCoherenceキャッシュ名を決定すること
ができる。
【0103】
一実施形態に従うと、プロキシサーバはCoherenceのクライアントとして機能すること
ができる。プロキシサーバは、プロキシサーバによって用いられるCoherence構成ファイ
ルによって定義されるように、固有のクライアント(Coherenceクラスタのメンバ)また
はリモートクライアントであり得る。
【0104】
一実施形態に従うと、Coherenceキャッシュは、アプリケーションの要件によって決定
されるように、分散型キャッシュ、ローカルキャッシュまたは他の任意のタイプのキャッシュであり得る。
【0105】
一実施形態に従うと、キャッシュにデータを格納するために、たとえば「入れる(put
)」というコマンドがアプリケーションにおいて呼出されると、データはシリアライズされてからプロキシサーバに転送され得る。プロキシサーバがバイト[]のタイプであり得るシリアライズされたデータを受取ると、プロキシサーバはシリアライズされたデータをCoherenceに格納することができる。
【0106】
同様に、データをキャッシュから検索するために、たとえば「入手する(get)」とい
うコマンドがアプリケーションにおいて呼出されると、キャッシュされたデータは、バイト[]のタイプを備えたCoherenceから検索されて、さらにキャッシング・クライアント
に送り返され、このキャッシング・クライアントが、データをその元のフォーマットにデシリアライズすることができる。
【0107】
図10は、一実施形態に従った、キャッシングプロバイダとしての分散型キャッシングシステムに分散型インメモリ・データグリッドを統合するための方法を示す。
【0108】
図10に示されるように、ステップ1011において、プロキシサーバは、トランザクション処理環境において分散型キャッシングシステムに提供することができる。プロキシサーバは、キャッシング・システム・キャッシュを定義する構成ファイルと、分散型インメモリ・データグリッドキャッシュにキャッシュするマップとをロードし、キャッシング・システム・キャッシュの名前を用いてサービスをアドバタイズすることができる。
【0109】
ステップ1013において、プロキシサーバは、キャッシング要求を受取ることができる。キャッシング要求は、分散型キャッシングシステムのIDCクライアントからのトランザクション手順の呼出しの際に転送される。
【0110】
ステップ1015において、プロキシサーバは、トランザクション手順の呼出しの際に、要求されたサービスに基づいてアクセスするために、分散型インメモリ・データグリッドにおける対応するキャッシュを決定することができる。
【0111】
サービスキャッシング
上述の分散型キャッシングシステムは以下のキャッシング特徴を提供することができる。すなわち、アクセス回数および更新回数が極めて少なく、キーによって識別されたTuxedoバッファをキャッシュすることができ、複製アクセス、非複製アクセス、ローカルアクセスおよびリモートアクセスを含む調整可能な品質サービスを提供する、というキャッシング特徴を提供することができる。
【0112】
一実施形態に従うと、トランザクション処理環境において分散型キャッシングシステムを用いて、サービスから戻された結果をキャッシュするためのシステムおよび方法がこの明細書中に記載される。構成ファイルは、サービスから戻された結果をキャッシュするのにどのキャッシュを用いるべきかと、キャッシュされた結果を識別する際に使用されるキーを如何に生成するかとを記述するエントリを含むキャッシングセクションを含み得る。サービスについての要求がクライアントから受取られると、トランザクション処理環境のアプリケーションサーバコアは、関連するキャッシュされたデータが、構成ファイルを用いて生成されたキーによって識別されるキャッシュに存在しているかどうかを判断することができる。存在している場合、アプリケーションサーバコアは、サービスを呼出す代わりに、キャッシュされたデータを直接戻すことができる。他の場合、アプリケーションサーバコアは、サービスを呼出し、生成されたキーを用いて、構成ファイルによって指定されるキャッシュにデータをキャッシュし、クライアントに結果を戻すことができる。
【0113】
一実施形態に従うと、キャッシュされるべきサービスについて戻された結果は、サービス要求における入力キーワードに基づいた、データベースからの検索結果であり得る。
【0114】
サービス(たとえば、Tuxedoサービス)が、或る期間内で特定の要求に応じて、同じ結果を戻すのに比較的長い時間を費やし得る場合、サービスキャッシング特徴により、システム性能を著しく向上させることができる。加えて、このキャッシング特徴は、ユーザが、既存のコードを変更することなく、サービスから戻された結果をキャッシュすることを可能にする。
【0115】
一実施形態に従うと、構成ファイルは、キャッシュされた結果を識別するために用いら
れるべきキーを如何に生成するかを指定することができる。このような識別用途のキーは、単純な連続ストリング(simple solid string)、サービス名から構成されるストリン
グ、要求データから構成されるストリング、ならびに、サービス名および要求データから構成されるストリング、のうちの1つであり得る。
【0116】
一実施形態に従うと、要求データがキーを生成するために用いられるべき場合、要求データ全体またはデータの一部を、要求データを含んでいる型付きバッファに従ってキーの一部として用いることができる。ユーザは以下を用いることができる。
【0117】
1)開始インジケータ/終了インジケータによって識別されるSTRIGN/CARRAYバッファの一部;
2)VIEW/VIEW32バッファのうちの1つのフィールドもしくはいくつかのフィールド;
3)FML/FML32バッファのうちの1つのフィールドもしくはいくつかのフィールド;または、
4)XMLバッファのうちの1つのフィールドもしくはいくつかのフィールド。
【0118】
一実施形態に従うと、トランザクション処理環境においては、FML型バッファなどの型付きバッファは、複数セットの名前値ペアを含み得る。型付きバッファは、クライアントからサーバに要求を送信し、サーバからクライアントに結果を戻すために用いることができる。キャッシュされたサービス結果は、特定のキャッシング要求についての外部からのデータを含み得る複数セットの名前値ペアを含み得る。たとえば、キャッシュされた名前値ペアのうちのいくつかは特定の要求のために必要とされないかもしれないが、但し、これらの名前値ペアは後続のキャッシング要求のために必要とされるかもしれない。
【0119】
そのため、一実施形態に従うと、要求データから生成されたキーを用いることにより、クライアントアプリケーションが、必要なデータを正確に示し、それらのデータだけを検索することが可能となり、これにより、アクセス時間を減らし、性能を増強させることができる。
【0120】
図11は、一実施形態に従った、トランザクション処理環境において分散型キャッシングシステムを用いて、サービスから戻された結果をキャッシュするためのシステムを示す。
【0121】
図11に示されるように、分散型キャッシングシステムは、分散されたかまたは複製された複数のキャッシュ(たとえば、キャッシュA1121およびキャッシュB1123)を含み得るキャッシングプロバイダ1119としてCoherenceを用いるように構成するこ
とができる。
【0122】
さらに図示されるように、トランザクション処理環境のための構成ファイル1104は、分散型キャッシングシステムを如何に用いるかを記述するエントリを含み得るサービスキャッシングセクション1107を含み得る。
【0123】
たとえば、キャッシングセクションは、サービスAのためのキャッシュA1110およびサービスBのためのキャッシュB1111によって例示されるように、特定のサービスから戻されたものをキャッシュするためにどのキャッシュを使用すべきかを記述することができる。
【0124】
一実施形態に従うと、セクションにおける追加のエントリは、サービスAのためのキーを生成するための方法1113、およびサービスBのためのキーを生成するための方法1
115によって示されるように、特定のサービスからのキャッシュ済み結果を識別する際に使用すべきキーを如何に生成するかを記述することができる。上述のとおり、キー生成方法は、要求データを含むバッファのタイプに基づいて、キーを生成する際に、要求におけるデータのうちどのフィールドを使用すべきかを定義することができる。
【0125】
図11を参照して、アプリケーションサーバコア(たとえば、Tuxedoコア)1114は、戻された結果をサービス1102からクライアントアプリケーション(たとえば、Tuxedoクライアント)1101に渡すために提供することができる。アプリケーションサーバコアは、複数のサービス(たとえば、サービスA1105およびサービスB1109)を実行することができるアプリケーションサーバA(たとえば、Tuxedoサーバ)1117に関連付けることができる。アプリケーションサーバコアはまた、結果についての特定のサービスを呼出すべきか、またはキャッシュにキャッシュされた結果を用いるべきかどうかを判断する際に使用されるサービスキャッシング論理1128にも関連付けることができる。
【0126】
具体例として、サービスA1125についての要求がアプリケーションサーバによって受取られると、それに関連付けられたアプリケーションサーバコアは、サービスAのために構成されたキャッシュをチェックして、構成ファイルにおけるサービスについての関連するエントリに従って生成されたキー1127によって識別されるような、関連するキャッシュデータがキャッシュに存在するかどうかを判断することができる。存在する場合、アプリケーションサーバは、サービスAを呼出す代わりに、直接、キャッシュされたデータを戻すことができる。存在しない場合、アプリケーションサーバコアはサービスAを呼出し(1108)、クライアントアプリケーションに結果を戻すことができる。クライアントアプリケーションに結果を転送し返す前に、アプリケーションサーバコアは、生成されたキーを用いるデータを、サービスAによって使用されるように構成されたキャッシュにキャッシュすることができる。
【0127】
図12は、一実施形態に従った、トランザクション処理環境において分散型キャッシングシステムを用いて、サービスから戻された結果をキャッシュするための方法を示す。
【0128】
図12に示されるように、ステップ1211において、分散型キャッシングシステムは、特定のサービスのために戻された結果をキャッシュするためにどのキャッシュを使用すべきかと、キャッシュされた結果を識別する際に使用されるキーを如何に生成すべきかとを記述しているエントリを備えた構成ファイルを含み得るトランザクション処理環境において提供することができる。
【0129】
ステップ1213において、アプリケーションサーバに関連付けられたアプリケーションサーバコアは、サービスについての要求が、サービスをホストしているアプリケーションサーバに対してクライアントアプリケーションから送信されていることを検出することができ、関連するキャッシュされたデータが構成ファイルを用いて生成されたキーによって識別されるキャッシュに存在しているかどうかを判断することができる。
【0130】
テップ1215において、関連するキャッシュされたデータがキャッシュに存在している場合、アプリケーションサーバコアはサービスを呼出す代わりに、キャッシュされたデータを直接戻すことができる。他の場合、アプリケーションサーバコアは、サービスを呼出し、構成ファイルによって指定されたキャッシュに、生成されたキーを用いるデータをキャッシュし、クライアントに結果を戻すことができる。
【0131】
この発明は、この開示の教示に従ってプログラミングされた1つ以上のプロセッサ、メモリおよび/またはコンピュータ読取り可能記憶媒体を含む、1つ以上の従来の汎用また
は特化型デジタルコンピュータ、コンピューティング装置、マシン、またはマイクロプロセッサを使用して都合よく実現されてもよい。ソフトウェア技術の当業者には明らかであるように、この開示の教示に基づいて、適切なソフトウェアコーディングが、熟練したプログラマによって容易に準備され得る。
【0132】
実施形態によっては、本発明は、本発明のプロセスのうちいずれかを実行するためにコンピュータをプログラムするのに使用できる命令が格納された非一時的な記憶媒体または(1つもしくは複数の)コンピュータ読取り可能な媒体であるコンピュータプログラムプロダクトを含む。この記憶媒体は、フロッピー(登録商標)ディスク、光ディスク、DVD、CD−ROM、マイクロドライブ、および光磁気ディスクを含む、任意の種類のディスク、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、フラッシュメモリデバイス、磁気もしくは光カード、ナノシステム(分子メモリICを含む)、または、命令および/もしくはデータを格納するのに適した任意の種類の媒体もしくはデバイスを含み得るものの、これらに限定されない。
【0133】
本発明のこれまでの記載は例示および説明を目的として提供されている。すべてを網羅するかまたは本発明を開示された形態そのものに限定することは意図されていない。当業者には数多くの変更および変形が明らかであろう。実施形態は、本発明の原理およびその実際の応用を最もうまく説明することによって他の当業者がさまざまな実施形態および意図している特定の用途に適したさまざまな変形を理解できるようにするために、選択され説明されている。本発明の範囲は添付の特許請求の範囲およびそれらの同等例によって規定されるものと意図されている。