(57)【特許請求の範囲】
【請求項１】
第１のコンピュータシステムがメモリ内オブジェクトを含み、第２のコンピュータシステムが前記メモリ内オブジェクトのレプリカステートを含むクラスタ化データ処理システムにおいて、前記メモリ内オブジェクトの現在のステートを複製するためのシステムは、
前記メモリ内オブジェクトに対する修正がなされたか否かを判定する判定ロジックと、
前記第１のコンピュータシステムで維持される前記メモリ内オブジェクトの以前に複製されたステートと、
前記メモリ内オブジェクトに対する修正がなされたと判定されるたびに、前記現在のステートと前記以前に複製されたステートとの間の差分値を判定するための差分ロジックと、
前記レプリカステートを前記差分値で修正するために前記差分値を前記第２のコンピュータシステムに送信するための通信ロジックとを含む、システム。
【請求項２】
前記差分値と関連付けられ、前記第２のコンピュータシステムにどのようにレプリカステートを修正すべきかを命令する複製命令を生成するためのエンコーディングロジックをさらに含む、請求項１に記載のシステム。
【請求項３】
前記メモリ内オブジェクトの前記現在のステートをシリアル化するデータシリアライザを有する複製ロジックをさらに含む、請求項１または２に記載のシステム。
【請求項４】
前記以前に複製されたステートは１つ以上のバイトアレイに記憶される、請求項１から３のいずれか１項に記載のシステム。
【請求項５】
前記システムは、コンピュータ読み取り可能な記録媒体に記憶されるコンピュータ実行可能命令として実現される、請求項１から４のいずれか１項に記載のシステム。
【請求項６】
前記メモリ内オブジェクトは、エンタープライズアプリケーション中のオブジェクトである、請求項１から５のいずれか１項に記載のシステム。
【請求項７】
オブジェクトデータの現在のステートを複製するためのクラスタ化コンピュータシステムで用いるためのコンピュータ読み取り可能な記録媒体であって、前記オブジェクトデータは１つ以上の修正によって以前のステートから変更され、前記コンピュータ読み取り可能な記録媒体は、
コンピュータに、前記オブジェクトデータに対する修正がなされたか否かを判定させるための第１のコンピュータ実行可能命令と、
コンピュータに、前記オブジェクトデータに対する修正がなされたと判定されるたびに、前記オブジェクトデータの前記現在のステートと前記以前のステートとの間の差分を判定させるための第２のコンピュータ実行可能命令と、
コンピュータに、別のコンピュータに命令するための１つ以上の複製命令を生成させて、前記差分に基づいて前記以前のステートから前記オブジェクトデータの前記現在のステートを複製するための第３のコンピュータ実行可能命令とを含む、コンピュータ読み取り可能な記録媒体。
【請求項８】
コンピュータに、前記オブジェクトデータを前記現在のステートにシリアル化させるための第４のコンピュータ実行可能命令をさらに含む、請求項７に記載のコンピュータ読み取り可能な記録媒体。
【請求項９】
コンピュータに、前記以前のステートをシリアル化された形態に維持させるための第５のコンピュータ実行可能命令をさらに含む、請求項７または８に記載のコンピュータ読み取り可能な記録媒体。
【請求項１０】
前記第２のコンピュータ実行可能命令は、差分アルゴリズムを適用して前記現在のステートと前記以前のステートとの間の前記差分を判定する命令を含む、請求項７から９のいずれか１項に記載のコンピュータ読み取り可能な記録媒体。
【請求項１１】
前記差分アルゴリズムは最長共通部分列アルゴリズムに基づく、請求項１０に記載のコンピュータ読み取り可能な記録媒体。
【請求項１２】
前記オブジェクトデータの前記現在のステートを受信せずに前記オブジェクトデータを１つ以上のコンピュータにおいて複製し得るように、コンピュータに、前記複製命令および前記差分を、ともにクラスタ化された１つ以上のコンピュータへ送信させるための第６のコンピュータ実行可能命令をさらに含む、請求項７から１１のいずれか１項に記載のコンピュータ読み取り可能な記録媒体。
【請求項１３】
第１のコンピュータシステムと１つ以上の第２のコンピュータシステムとを含むクラスタ化データ処理システムにおいてコンピュータシステム間でオブジェクトデータを通信する方法であって、
前記第１のコンピュータシステムが、当該第１のコンピュータシステムのメモリの中にある前記オブジェクトデータに対する修正がなされたか否かを判定するステップと、
前記第１のコンピュータシステムが、当該メモリの中に前記オブジェクトデータの現在のステートを維持するステップと、
前記第１のコンピュータシステムが、前記オブジェクトデータの一部分が修正されたと判定されるたびに、修正された部分を判定するステップと、
前記第１のコンピュータシステムが、前記オブジェクトデータの現在のステートを複製するために前記１つ以上の第２のコンピュータに前記修正された部分を送信するステップとを含む、方法。
【請求項１４】
前記第１のコンピュータシステムが、前記修正された部分とともに送信されるべき命令コードを生成するステップをさらに含み、前記命令コードは、前記１つ以上の第２のコンピュータに前記現在のステートをどのように複製すべきかを命令する、請求項１３に記載の方法。
【請求項１５】
前記第１のコンピュータシステムが、前記送信するステップの前に前記オブジェクトデータをシリアル化するステップをさらに含む、請求項１３または１４に記載の方法。
【請求項１６】
前記第１のコンピュータシステムが、前記オブジェクトデータの前記現在のステートをシリアル化するステップと、
前記第１のコンピュータシステムが、前記部分が修正された後に前記オブジェクトデータの修正されたステートをシリアル化するステップと、
前記第１のコンピュータシステムが、前記修正された部分を判定するように、シリアル化されたステート間の差分アルゴリズムを適用するステップとをさらに含む、請求項１５に記載の方法。
【請求項１７】
前記適用するステップは、最長共通部分列アルゴリズムを適用するステップを含む、請求項１６に記載の方法。
【請求項１８】
クラスタ化データ処理システムであって、
通信ネットワークの中のクラスタ化された複数のノードを含み、前記ノードの各々は、
メモリ内オブジェクトを１つ以上の他のノードに複製するための複製ロジックと、
前記複製ロジックによって維持される前記メモリ内オブジェクトの以前に複製されたステートとを含み、前記以前に複製されたステートは、前記１つ以上の他のノードに複製されたステートであり、さらに前記ノードの各々は
前記メモリ内オブジェクトの現在のオブジェクトのステートと、
前記メモリ内オブジェクトに対する修正がなされたか否かを判定する判定ロジックと、
前記メモリ内オブジェクトに対する修正がなされたと判定されるたびに、前記現在のオブジェクトのステートと前記以前に複製されたステートとの間の差分を判定するための差分ロジックと、
前記差分に基づいて複製コードを生成するためのエンコーディングロジックとを含み、前記１つ以上の他のノードは、前記現在のオブジェクトのステートを受信せずに前記複製コードを用いて前記現在のオブジェクトのステートを複製することができる、クラスタ化データ処理システム。
【請求項１９】
レプリカステートを作成するため、複数のノード間で前記複製コードを送受信するための通信ロジックをさらに含む、請求項１８に記載のクラスタ化データ処理システム。
【請求項２０】
前記現在のオブジェクトのステートおよび前記以前に複製されたステートは前記メモリ内オブジェクトのシリアル化された形態である、請求項１８または１９に記載のクラスタ化データ処理システム。
【請求項２１】
前記複製ロジックは、前記現在のオブジェクトのステートおよび前記以前に複製されたステートをシリアル化するためのロジックを含む、請求項２０に記載のクラスタ化データ処理システム。
【請求項２２】
前記差分ロジックは差分アルゴリズムを適用するためのロジックを含む、請求項１８から２１のいずれか１項に記載のクラスタ化データ処理システム。
【請求項２３】
前記複製コードをデコードして前記差分に基づいてレプリカステートを作成するためのデコードロジックをさらに含む、請求項１８から２２のいずれか１項に記載のクラスタ化データ処理システム。
【請求項２４】
前記複製ロジックは前記メモリ内オブジェクトを複製するための手段を含む、請求項１８から２３のいずれか１項に記載のクラスタ化データ処理システム。
【請求項２５】
前記クラスタ化データ処理システムはクラスタ化エンタープライズアプリケーションを含む、請求項１８から２４のいずれか１項に記載のクラスタ化データ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本願は、発明者ケビン・ケイ・チャン（Kevin K. Chang）、代理人管理番号２７２５２−０８、２００２年１１月１９日出願、連続番号未知、本譲受人に譲渡され、「クラスタ化システムのためのデータ複製システムおよび方法」と題された同時係属中の米国特許出願に関連し、ここに引用により援用されている。
【０００２】
発明の分野
この発明は、クラスタ化コンピュータシステムの技術に関する。これは、データ複製システムおよび方法を有するクラスタ化システムへの特定の適用例を見出す。
【背景技術】
【０００３】
背景
クラスタは、独立したサーバ上で走り、単一のインスタンスが提供できるよりも大きなスケーラビリティおよびアベイラビリティを与えるようにともに働くように構成されたアプリケーションサーバインスタンスのセットである。単一のアプリケーションサーバインスタンスが単一のホストのオペレーティングリソースを強化することしかできない一方で、クラスタは複数のホストにまたがり、より多くのＣＰＵに対してアプリケーション実行を分散することができる。単一のアプリケーションサーバインスタンスはそのホストおよびオペレーティングシステムの障害の影響を受けやすいが、クラスタは、オペレーティングシステムまたはホストが失われても機能し続けて、いずれのそのような障害もクライアントから隠すことができる。
【０００４】
クラスタ化されるエンタープライズアプリケーションでは、サーバはメモリ内複製のためにステート（セッション）をマルチキャストするように構成される。このことにより、１つのサーバがダウンした場合に、クライアントがすべての他のステートをバックアップするサーバに即時にリダイレクトされることが確実になる。これにより、トランザクションは中断せずに継続する。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
先行技術のシステムでは、メモリ内複製は、１つのサーバから別のサーバにステートおよびオブジェクト全体を複製することによって行なわれた。エンタープライズジャバビーンズ（Enterprise Java Beans）（ＥＪＢ）エンドオブコール複製構成の場合、オブジェクトが変更されるたびに、その内容全体がマルチキャストを介してネットワークにブロードキャストされ、別のサーバによって複製される。これは小さなオブジェクトの複製には問題を生じないかもしれないが、オブジェクトが大きいアプリケーションについてはネットワークの輻輳を引き起こし得る。ネットワークトラフィックは、マルチキャストプロトコルがメッセージをドロップする傾向にあるためにさらに増加し得る。メッセージがドロップすると、それらを再送する必要が生じ、さらにアクセス待ち時間が増大する。このように送信されるデータの量が増大すると、ドロップされたメッセージの確率が増大し、さらなるデータ再送信が発生してしまう。
【０００６】
この発明は、上記課題に対処する、オブジェクト複製の新規でかつ有用な方法およびシステムを提供する。
【課題を解決するための手段】
【０００７】
概要
１つの実施例では、第１のコンピュータシステムがメモリ内オブジェクトを含み、第２のコンピュータシステムがメモリ内オブジェクトのレプリカステートを含むクラスタ化データ処理システムにおいて、メモリ内オブジェクトの現在のステートを複製するためのシステムが提供される。このシステムは、第１のコンピュータシステムに維持されるメモリ内オブジェクトの以前に複製されたステートを含む。差分ロジックは、現在のステートと以前に複製されたステートとの間の差分値を判定する。通信ロジックは、差分値を用いてレプリカステートを修正するため、差分値を第２のコンピュータシステムに送信することができる。
【０００８】
別の実施例に従うと、クラスタ化データ処理システムにおいてノード間でオブジェクトデータを通信する方法が提供される。この方法は、クラスタ化データ処理システムの中の第１のノードのメモリの中にオブジェクトデータの現在のステートを維持するステップを含む。オブジェクトデータの一部分が修正された後、修正された部分が判定される。修正された部分は次にクラスタ化データ処理システムの１つ以上の他のノードに送信され、オブジェクトデータの現在のステートを複製する。
【０００９】
明細書に組入れられかつ明細書の一部を構成する添付の図面において、システムおよび方法の実施例が図示される。これらは、以下に与えられる詳細な説明とともに、システムおよび方法の例示的な実施例を記載する働きをする。図面に図示される要素の境界（たとえばボックスまたはボックス群）は境界の１つの例を表わすことが理解されるであろう。当業者は、１つの要素が複数の要素として設計されたり、または複数の要素が１つの要素として設計されたりし得ることを理解するであろう。別の要素の内部コンポーネントとして示される要素は、外部コンポーネントとして実現され得、またその逆も当てはまり得る。
【発明を実施するための最良の形態】
【００１０】
図示される実施例の詳細な説明
以下は、本開示を通じて用いられる選択された用語の定義を含む。すべての用語の単数形および複数形の両者ともが各々の意味の範囲内に入る。
【００１１】
本明細書中で用いられるような「コンピュータ読出可能媒体」は、命令および／またはデータを実行のためにプロセッサに直接にまたは間接的に与えるのに参加するいずれの媒体も指す。そのような媒体は、不揮発性媒体、揮発性媒体および送信媒体を含むがそれらに限定されない多くの形態をとり得る。不揮発性媒体は、たとえば、光学または磁気ディスクを含み得る。揮発性媒体はダイナミックメモリを含み得る。送信媒体は、同軸ケーブル、銅線、および光ファイバケーブルを含み得る。送信媒体は、無線および赤外線データ通信の間に発生するものなどの音波または光波の形態もとり得る。コンピュータ読出可能媒体の一般的な形態は、たとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープもしくはいずれの他の磁気媒体、ＣＤ−ＲＯＭ、いずれの他の光学媒体、穿孔カード、紙テープ、孔のパターンを有するいずれの他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、いずれの他のメモリチップもしくはカートリッジ、搬送波／搬送波パルス、またはコンピュータが読出すことができるいずれの他の媒体も含む。
【００１２】
本明細書中で用いられるような「ロジック」は、ファンクションもしくはアクションを行なう、および／またはファンクションもしくはアクションを別のコンポーネントから引き起こす、ハードウェア、ファームウェア、ソフトウェアおよび／または各々の組合せを含むがそれらに限定されない。たとえば、所望の適用例または必要性に基づいて、ロジッ
クは、ソフトウェア制御マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）などの離散ロジック、または他のプログラムされたロジックデバイスを含み得る。ロジックはソフトウェアとして完全に実現されてもよい。
【００１３】
本明細書中で用いられるような「信号」は、１つ以上の電気信号、アナログもしくはデジタル信号、１つ以上のコンピュータ命令、メッセージ、ビットもしくはビットストリーム、または受信、送信および／もしくは検出され得るその他の手段を含むがそれらに限定されない。
【００１４】
本明細書中で用いられるような「ソフトウェア」は、コンピュータまたは他の電子デバイスにファンクション、アクションを行なわせおよび／または所望の態様で挙動させる１つ以上のコンピュータ読出可能および／または実行可能命令を含むがそれらに限定されない。命令は、ダイナミックにリンクされたライブラリからの別個のアプリケーションまたはコードを含むルーチン、アルゴリズム、モジュールまたはプログラムなどのさまざまな形態で実現され得る。ソフトウェアは、スタンドアローンプログラム、ファンクションコール、サーブレット、アプレット、メモリに記憶される命令、オペレーティングシステムの一部、または他のタイプの実行可能命令などのさまざまな形態で実現されてもよい。当業者には、ソフトウェアの形態は、たとえば、所望のアプリケーションの要件、それが走る環境、および／または設計者／プログラマーの好みなどに依存することが理解されるであろう。
【００１５】
本明細書中で用いられるような「ユーザ」は、１人以上の人、ソフトウェア、コンピュータもしくはその他のデバイス、またはそれらの組合せを含むがそれらに限定されない。
【００１６】
図１には、クラスタ化処理システム１００の１つの実施例が図示される。各ノード１０５は、オブジェクト全体よりもむしろ複製命令を送信することによってメモリ内オブジェクトを他のノードに複製する複製システムを含む。一般的に、クラスタは、単一のシステムとして協働する独立したサーバまたはノード１０５の群である。クラスタコンポーネントは、サーバ１−ｎなどの１つ以上のプロセッサノード、ノード−ノード通信を提供するクラスタ配線（プライベートネットワーク）、および１つ以上のデータ記憶装置上に共有データファイルを維持する記憶サブシステム（図示せず）を含み得る。サーバは、共有データファイルを管理するリソースおよびディスクアクセスを共有し得る。各ノード１０５は、それ自身の専用のシステムメモリならびにそれ自身のオペレーティングシステムおよびアプリケーションソフトウェアを備えた独立したコンピュータシステムであり得る。異なる数のノード１０５をクラスタの中で用いて、それらを異なる構成でクラスタ化し、各ノードが他のノードとは異なる構成を有してもよいことが理解されるであろう。クラスタは、単一の対称マルチプロセッサシステムよりも改良された耐故障性およびモジュール追加式システム成長を提供することができる。サブシステムの障害の場合は、クラスタ化により高いアベイラビリティが保証される。付加ノード、配線、および共有ディスクなどの冗長ハードウェアコンポーネントはより高いアベイラビリティを提供する。そのような冗長ハードウェアアーキテクチャは単一障害箇所を回避し、耐故障性を提供する。
【００１７】
１つの実施例では、１つ以上のクライアント／ユーザは、クライアントリクエストをクラスタ１００のノード１０５のどのアプリケーションサーバにも送るようにプログラムされるロードバランサ（図示せず）を通してクラスタ１００にアクセスし得る。ロードバランサは、１つ以上のノード１０５内の別個のサーバまたはソフトウェアサブシステムであり得る。クライアントは、インターネット、イントラネットまたは他の通信ネットワークを介してクラスタにアクセスし得る。
【００１８】
図１をさらに参照すると、データ複製システムを有するノード１０５の簡略化された例
示的な構成が示される。この例では、ノード１０５は、ジャバ２エンタープライズエディション（Java 2 Enterprise Edition）（Ｊ２ＥＥ）プラットフォーム、マイクロソフト．ＮＥＴプラットフォームまたは別の所望のプラットフォームなどのビジネスエンタープライズアプリケーションを実行するように構成され得る。したがって、クラスタ化システム１００は、選択されたプラットフォームのクラスタ化エンタープライズアプリケーションを含む。以下の説明はＪ２ＥＥプラットフォームに基づく。当然ながら、他のタイプのソフトウェア製品およびアプリケーションをビジネスエンタープライズアプリケーションの代わりに用いてもよい。システムはクラスタ化データベースシステムも含み得る。システムは、ＵＮＩＸ（登録商標）、ウインドウズ（登録商標）、リナックス（登録商標）またはその他の利用可能なシステムなどのさまざまなオペレーティングシステム上で実現されてもよい。
【００１９】
各ノード１０５は、ソフトウェアによって構成されかつプログラムされて典型的にはＪ２ＥＥ用コンテナと称されるＪ２ＥＥ環境を与えるアプリケーションサーバであり得る。１つの例はジャバ用オラクルコンテナ（Oracle Container for Java）（ＯＣ４Ｊ）ソフトウェアである。１つ以上のコンテナインスタンスを有し得るコンテナはジャバでプログラムされ、標準ジャバ開発キット（Java Development Kit）（ＪＤＫ）バーチャルマシン上で実行する。これは、ジャバサーバページ（Java Server Page）（ＪＳＰ）トランスレータ、サーブレットエンジン、エンタープライズジャバビーンズ（ＥＪＢ）コンテナ、ならびにＪＮＤＩ、ジャバデータベースコネクティビティ（Java Database Connectivity）（ＪＤＢＣ）、ジャバメッセージサービス（Java Message Service）（ＪＭＳ）などの他のＪ２ＥＥサービスなどのさまざまな特徴を含み得るＪ２ＥＥ環境を与える。
【００２０】
ノード１０５は、アプリケーションコンテナ内に存在し得るオブジェクトの複製を制御する複製ロジック１１５を含む。データをクラスタの中の別のノードに複製するとフェイルオーバー（failover）インスタンスが作成されるので、処理が何らかの理由で中断した場合でも処理が継続することができる。オブジェクトと称されるサーバインスタンス１０５のいずれかの部分は、サーバインスタンス１０５、いずれかのコンテナインスタンス、１つ以上のコンテナプロセスおよびこれらの組合せのステート全体を含んで複製され得る。オブジェクト内のデータは一般にオブジェクトデータまたはインスタンスデータと称される。
【００２１】
図１をさらに参照して、オブジェクト１１０はサーバ１のアプリケーションコンテナによってメモリの中に維持される。オブジェクト１１０は、たとえば、金融トランザクションデータ、ショッピングカートデータおよび履歴、ユーザの嗜好などの能動的な処理のためのデータを維持する。ユーザがデータを変更すると、オブジェクト１１０は修正されてそのステートを変更する。クラスタシステム１００においてフェイルオーバー能力を提供するため、オブジェクト１１０の現在のステートはクラスタの中の他のサーバに複製されてバックアップとして働く。オブジェクトデータはいずれの所望の時間または頻度で複製されてもよいが、典型的には、オブジェクトデータはそのステートが変化するたびに複製される。ステートを複製するため、複製ロジック１１５はオブジェクト１１０からデータを収集し、現在のステートと以前に複製されたステートとの間の差分を判定する。差分は差分値または差分データと称される。
【００２２】
これは、オブジェクトのステートが以前に複製され、記憶されていることを仮定する。次に差分はクラスタの中の他のサーバに送信され、そこで各々は差分によってそのレプリカステートのバージョンを更新する。各々のサーバは複製を行なう複製ロジック１１５も含む。差分の送信はネットワークトラフィックを低減し得る。なぜならオブジェクトのステート全体を送らないからである。このことは、大きなオブジェクトのステートのデータの小さな部分しか変化しない場合に最も注目される。
【００２３】
他のサーバがレプリカステートを適切に生成できるようにするため、複製ロジック１１５ａも１つ以上の複製命令１２５を生成してもよい。これらの命令は差分データと関連付けられて送信される。命令は、たとえば、受信ノード１０５の複製ロジック１１５ｂ−ｎに、そのレプリカステート１２０ｂ−ｎが現在のオブジェクトのステート１２０ａの同一のレプリカとなるようにするにはどのように修正されまたは更新されるべきかを命令する。このように、複製の間にオブジェクトのステート１２０ａ全体を送信する必要はない。複製命令は各々の修正された部分の場所、修正されたデータの内容、レプリカステート１２０ｂ−ｎからデータを追加／削除する命令、および／またはレプリカステート１２０ｂ−ｎを修正するその他の命令を含み得る。現在のオブジェクトのステート１２０ａの修正データのみを送信することにより、ネットワークトラフィックおよびシステム待ち時間が低減される。
【００２４】
図２には、クラスタ化処理システムにおいてメモリ内オブジェクト２０５を複製するのに用いられる複製システム２００の別の実施例が図示される。クラスタ化システム中の各々のサーバは、各々のサーバがそれ自身のメモリ内オブジェクトを他のサーバに複製し、他のサーバからレプリカステートを受信し得るように、複製システム２００または同様の実施体を有するであろう。送信されたデータのフォーマットは、各々の複製ロジックがデータを正しく処理するように予め定められることが理解されるであろう。そのようなフォーマットの例を以下に記載する。
【００２５】
Ｊ２ＥＥ環境において、エンタープライズジャバビーンズ（ＥＪＢ）オブジェクトなどのオブジェクトは、ポインタ、アドレスおよび／またはオブジェクトに属するデータを識別する他のデータ構造コンポーネントを含む論理的または抽象的データとして維持される。データは別個の複数の場所に物理的に記憶されてもよい。現在の通信プロトコルは典型的に、データがこのタイプの論理形式で送信されることを許さない。むしろ、オブジェクトデータ２０５は、１つ以上のバイトアレイなどの送信可能な形態に変換される。たとえば、メモリ内オブジェクト２０５が複製されるたびに、シリアル化ロジックはデータをシリアル化し、シリアル化された形態を現在のオブジェクトのステート２１５として記憶する。シリアル化ロジックは複製ロジック２１０の一部であってもよく、またはロジックの別個の部分としてそこから呼出されてもよい。
【００２６】
現在のオブジェクトのステート２１５とともに、オブジェクト２０５の以前に複製されたステート２２０も維持される。換言すると、ステート２２０は、他のサーバに複製された以前のステートを表わす。当然ながら、オブジェクト２０５が最初に複製される際は、以前に複製されたステート２２０は存在しないかまたは空白であろう。前述のように、複製システムは、デルタオブジェクトと称され得る、オブジェクト２０５に対してなされた変更データを送信することによって、クラスタ中の他のノードに複製されるデータの量を低減する。この実施例では、オブジェクト２０５に対してなされた変更は、オブジェクトの現在のステート２１５とその以前のステート２２０との差分を判定することによって識別される。
【００２７】
現在のオブジェクトのステート２１５の修正部分またはデルタオブジェクトを判定するため、差分ロジック２２５は、現在のステート２１５と以前に複製されたステート２２０との間でデータを分析する。ステート間の差分の判定はさまざまな方法で行なわれ得る。たとえば１つの実施例では、差分ロジック２２５はビットごとに各々のステートのデータを比較して何が変化したかを判定することができる。別の実施例では、以前のおよび現在のオブジェクトのステートに差分アルゴリズムを適用して、より効率的な差分を判定することができる。そのようなアルゴリズムは、最長共通部分列（longest common subsequences）アルゴリズム、リビジョン管理システムまたはデータ間の差分を判定するその他の
アルゴリズムを含んでもよい。以前のステート２２０と現在のステート２１５との間の差分は、差分データ２３５のセットとして識別されかつコピーされ、これはクラスタ中の他のノードに複製のために送信される。このことはネットワークに対する負荷を低減する。たとえば、オブジェクトステートアレイ中の１ビットが修正されれば、複製のためにアレイ全体を送信する必要はない。むしろ、クラスタ中のノードが一旦アレイの以前のレプリカステートを含めば、ノードは修正されたビットを受信することによってレプリカステートを更新することができる。
【００２８】
図２をさらに参照して、エンコード／デコードロジック２３０は、新しい差分データ２３５を用いてそのレプリカステートをどのように修正するかについて受信ノードに命令する、差分データ２３５とともに送信される命令を生成する。説明の目的のため、他のノード上での複製のために送信されるデータを示すのに複製データという用語を用いる。このデータは差分データ２３５を含み、ヘッダ情報、レプリカステートを更新するための複製命令および／または用いられる通信プロトコルに必要であろう他のデータなどの付加的な情報を含み得る。このように、ノードが複製データを受信すると、その内部エンコード／デコードロジックはデータをデコードして、どの差分データがおよびどの複製命令が差分データと関連付けられるかを判定する。複製命令に従い、そのノード内の既存のレプリカステートは差分データで更新され、これによりオブジェクト２０５の現在のステートが複製される。オブジェクトステートのシリアル化された形態から、オブジェクト２０５はその論理形式に再作成されるので、これをフェイルオーバーオブジェクトとして用いることができる。
【００２９】
例として、オブジェクトｓ１が以下のように設定されるとする：String s1[]=new String[2]; s1[0]=“abcde”。たとえばジャバのObjectOutputStreamを用いてオブジェクトをバイトアレイ表示にシリアル化するとArray1のようになるであろう：
-84 -19 0 5 u r 0 19 91 L j a v a 46 l a n g 46 S t r i n g 59 -83 -46 V -25 -23 29 123 G 2 0 0 x p 0 0 0 2 t 0 5 a b c d e p
バイトアレイの末尾近くで、「t 0 5」は、以下が、「a b c d e」である「０５」文字を従えたテキスト「ｔ」ストリングであることを意味するジャバコードである。以下の変更、すなわちｓ２［１］＝“１２３”を行なうと、新たなバイトアレイ表示はArray2のようになるであろう。
【００３０】
-84 -19 0 5 u r 0 19 91 L j a v a 46 1 a n g 46 S t r i n g 59 -83 -46 V -25 -23 29 123 G 2 0 0 x p 0 0 0 2 t 0 5 a b c d e t 0 3 1 2 3
バイトアレイの末尾が「t 0 3」を示すが、これは後続の３文字がテキストであることを示す。複製のためにネットワークを介して更新されたオブジェクトを送ることは、６１バイトのデータであろう。しかし上述のように差分ロジック２２５アルゴリズムを走らせることは、Array1とArray2との間の差分を判定し、複製命令を生成することであろう。たとえば、複製命令は“Change byte 55 (p) to 55-60 (t 0 3 1 2 3)”であろう。これは擬似コードフォーマットを用いて、値が「ｐ」であるバイト場所５５をバイト場所５５−６０である「t 0 3 1 2 3」に変更すべきであることを示す。当然ながら、人間可読コード、機械可読コードまたはその組合せなどの他のフォーマットの命令コードを用いることが可能である。ノードが受信すると、ノードは、Array1であろうオブジェクトのその既存のステートをオブジェクトの新たなステートであるArray2を得るための命令に基づいて修正するであろう。任意のフォーマットに複製命令をエンコードすることは１０バイト未満であり、これはArray2全体を送信するよりもネットワーク上でのかなりの節約になる。
【００３１】
クラスタ中のノード間の通信を制御するため、各ノードは、ノード間でデータを送受信する役割を担う通信ロジック２４０を含む。さまざまな通信プロトコル、たとえばネットワーク中のすべてのノードにデータをブロードキャストするマルチキャストプロトコルを
用いることができる。データは、データが送られるべきそのアドレスまたは他のネットワーク識別子を識別することにより、指定されたノードに送信され得る。
【００３２】
図３には、クラスタ化システムにおいてオブジェクトの複製と関連付けられる方法３００の１つの実施例が図示される。図示される要素は「処理ブロック」を示し、コンピュータにアクションを行なわせおよび／または決定を行なわせるコンピュータソフトウェア命令または命令群を表わす。これに代えて、処理ブロックは、デジタル信号プロセッサ回路、特定用途向け集積回路（ＡＳＩＣ）または他のロジックデバイスなどの機能的に等価な回路によって行なわれるファンクションおよび／またはアクションを表わしてもよい。図面およびその他の図示される図面はいずれの特定のプログラミング言語の構文を示すものでもない。むしろ図面は、当業者が回路を作製し、コンピュータソフトウェアを生成し、またはハードウェアおよびソフトウェアの組合せを用いて図示される処理を行なうのに用い得る機能的な情報を図示する。図示されるブロックが示されるものとは異なる他のシーケンスで実行され得るように、および／またはブロックが組合される、もしくは複数のコンポーネントに分離され得るように、電子およびソフトウェアアプリケーションは、ダイナミックかつ柔軟なプロセスを含み得ることが理解されるであろう。それらは機械語、手続言語（procedural）、オブジェクト指向および／または人工知能技術などのさまざまなプログラミング方策を用いて実現されてもよい。以上のことは本明細書中に記載されるすべての方法に当てはまる。
【００３３】
図３は、サーバ内に含まれるオブジェクトを複製しているサーバ上で実行される１つの方法３００を図示する。この例では、プロセスは、オブジェクトが修正されるたびにオブジェクトの現在のステートを複製する構成に基づいて説明される。トリガリングイベントが発生すると、プロセスが開始する（ブロック３０５）。当然ながら、時間間隔、あるイベントの発生、またはその他の所望の時間などの他のトリガリングイベントを用いることができる。オブジェクトデータが、直接に送信不可能な抽象的または論理的構成にある場合、オブジェクトデータはネットワークを介して転送可能な形態にシリアル化される（ブロック３１０）。これはオブジェクトデータを１つ以上のバイトアレイにシリアル化するステップを含み得る。
【００３４】
次に、現在のオブジェクトのステートと以前に複製されたステートとの間の差分が判定される（ブロック３１５）。これは、以前に複製されたステートがノード上に作成されかつ維持されていることを仮定する。オブジェクトが初めて複製される場合、以前に複製されたステートは存在しないかまたは空白であり、その場合は、シリアル化されたオブジェクトのステート全体が複製のために他のノードに送信されるであろう。前述のように、差分は、ビットごとの比較または他のタイプの差分アルゴリズムを含むさまざまな方法で判定され得る。次に、複製データは、差分に対応するいずれかの複製命令を有する差分をエンコードすることによって生成される（ブロック３２０）。複製命令は、差分データが配置されるレプリカステート内の場所を示すコードを含み得る。次に、エンコードされた複製データはクラスタの中の他のサーバに送信される（ブロック３２５）。複製が成功すると、現在のサーバ内の以前に複製されたステートは現在のオブジェクトのステートで置換えられ、これにより現在のオブジェクトのステートが以前に複製されたステートになる（ブロック３３０）。オブジェクトが複製されるたびにこのプロセスが繰返される。
【００３５】
図４には、複製データを受信して、異なるサーバが維持するオブジェクトの複製ステートを作成するノードで実行され得る方法４００の１つの実施例が図示される。複製プロセスは、別のノードから複製データを受信すると開始する（ブロック４０５）。データは、パーシングなどによってデコードされて、レプリカステートを更新すべき差分データおよび複製命令を抽出する（ブロック４１０）。次に、レプリカステートは、命令に基づいて差分データでその内容を変更することによって修正される（ブロック４１５）。これは、
レプリカステートの中の既存の値を修正するステップ、新しい値を加えるステップ、または値を削除するステップを含み得る。データが正確に受信され複製されれば、ノードはソースノードに肯定応答（acknowledgement）を送り得る（ブロック４２０）。複製データが受信されるたびにこのプロセスが繰返される。
【００３６】
このシステムおよび方法のさまざまなコンポーネントを実現するのに好適なソフトウェアは本明細書中に提示された教示、ならびにジャバ（登録商標）、Pascal、Ｃ＋＋、Ｃ、ＣＧＩ、Perl、ＳＱＬ、ＡＰＩｓ、ＳＤＫｓ、アセンブリ、ファームウェア、マイクロコードなどのプログラミング言語およびツール、ならびに／または他の言語およびツールを用いて当業者によって容易に提供される。ソフトウェアとして実現されるコンポーネントは、コンピュータに所定の態様で挙動させるコンピュータ読出可能／実行可能命令を含む。システム全体またはシステムのコンポーネントのいずれであっても、どのソフトウェアも製造品として実現されてもよく、および／または以前に定義されたようにコンピュータ読出可能媒体に記憶されてもよい。本明細書中に記載されたコンポーネントは別個のコンポーネントとして実現されてもよく、またはともに組合されてもよいことが理解されるであろう。たとえば、図２に示される複製ロジック２１０、差分ロジック２２５、およびエンコード／デコードロジック２３０が１つのコンポーネントとして実現されてもよい。
【００３７】
本発明はその実施例の説明によって図示され、実施例はかなり詳細に説明されたが、そのような詳細に添付の請求項の範囲を制限したりまたはいかなる態様でも限定することは出願人の意図ではない。さらなる利点および修正例が当業者には容易に想到されるであろう。したがって、この発明は、そのより広い局面において、示され説明された特定の詳細、代表的な装置、および図示される例に限定されるものではない。したがって、出願人の一般的発明概念の精神または範囲から逸脱することなくそのような詳細からの逸脱がなされてもよい。
【図面の簡単な説明】
【００３８】
【図１】この発明に従う複製システムを有するクラスタ化システムの１つの実施例の例示的なシステム図である。
【図２】クラスタノード内の複製システムの別の実施例の図である。
【図３】データをフェイルオーバーノードに複製する例示的な方法の図である。
【図４】データをフェイルオーバーノード内に複製する例示的な方法の図である。
【図１】
0004653495.tif 000002
【図２】
0004653495.tif 000003
【図３】
0004653495.tif 000004
【図４】
0004653495.tif 000005