(57)【特許請求の範囲】
【請求項１】
複数のサーバにわたるアプリケーション同期を実行するための同期化スナップショット・サーバが前記アプリケーション同期化する方法であって、
前記同期化スナップショット・サーバが、複数のサーバ上で実行されているアプリケーションに関連するデータのバックアップを実行するリクエストを受信するステップと、
前記同期化スナップショット・サーバが、前記サーバとの通信に基づき時間値を計算するステップであって、前記時間値の計算は、前記通信のうちの少なくとも１つのレイテンシ、および前記同期化スナップショット・サーバに基づく参照時間のクロック値と、前記サーバのうちの少なくとも１つの時間のクロック値との間の時間差、を含む、前記ステップと、
前記同期化スナップショット・サーバが、前記データに対する連係バックアップ動作を同じスタート時間に開始するよう、前記サーバ上のＩ／Ｏハンドラと通信するステップと、
を含む方法。
【請求項２】
前記アプリケーションのインスタンスと、それに関連するデータ・ストレージ・ボリュームとの間の通信を、前記バックアップ動作を開始する間延長するよう前記Ｉ／Ｏハンドラに命令するステップをさらに含む、請求項１に記載の方法。
【請求項３】
Ｉ／Ｏハンドラは、前記延長の間にＩ／Ｏ動作を処理し、前記延長が終了された後にＩ／Ｏ動作を完了する、請求項２に記載の方法。
【請求項４】
前記延長は、前記スタート時間マイナス前記時間値から開始される、請求項２または３のいずれかに記載の方法。
【請求項５】
前記延長は、前記スタート時間プラス前記時間値後に終了される、請求項２〜４のいずれか１項に記載の方法。
【請求項６】
前記Ｉ／Ｏハンドラが前記バックアップ動作を開始したという確認を受信するステップと、前記Ｉ／Ｏハンドラが前記バックアップ動作を開始したという前記確認を受信した後に、通常の動作を再開するよう前記Ｉ／Ｏハンドラに命令するステップとをさらに含む、請求項２〜５のいずれか１項に記載の方法。
【請求項７】
前記時間値は、前記サーバが同期するための時間の最大偏差を表す、請求項１〜６のいずれか１項に記載の方法。
【請求項８】
前記バックアップ動作を開始する間、前記Ｉ／Ｏハンドラは、前記アプリケーションのインスタンスと、それに関連するデータ・ストレージ・ボリュームとの間の通信を凍結しない、請求項１〜７のいずれか１項に記載の方法。
【請求項９】
前記バックアップ動作は、前記データのスナップショットである、請求項１〜８のいずれか１項に記載の方法。
【請求項１０】
前記バックアップ動作は、前記アプリケーションとの通信なしに開始される、請求項１〜９のいずれか１項に記載の方法。
【請求項１１】
前記方法は、前記バックアップ動作を開始する間書き込み動作を延長するよう前記Ｉ／Ｏハンドラに命令するステップをさらに含み、読み取り動作は通常通り提供される、請求項１〜１０のいずれか１項に記載の方法。
【請求項１２】
複数のサーバにわたるアプリケーション同期を実行するための同期化スナップショット・サーバが前記アプリケーション同期化する方法であって、
前記同期化スナップショット・サーバが、複数のサーバ上で実行されているアプリケーションに関連するデータのバックアップを実行するリクエストを受信するステップと、
前記同期化スナップショット・サーバが、前記サーバとの通信に基づき時間値を計算するステップであって、前記時間値の計算は、前記通信のうちの少なくとも１つのレイテンシ、および前記同期化スナップショット・サーバに基づく参照時間のクロック値と、前記サーバのうちの少なくとも１つの時間のクロック値との間の時間差を含み、前記時間値は、前記サーバが同期するための時間の最大偏差を表す、前記ステップと、  前記データに対する連係バックアップ動作を同じスタート時間に開始するよう、前記サーバ上のＩ／Ｏハンドラに命令するステップと、
を含む方法であって、
前記Ｉ／Ｏハンドラは、前記アプリケーションのインスタンスと、それに関連するデータ・ストレージ・ボリュームとの間の通信を、前記バックアップ動作を開始する間延長する、方法。
【請求項１３】
前記延長は、前記スタート時間マイナス前記時間値から開始される、請求項１２に記載の方法。
【請求項１４】
前記延長は、前記スタート時間プラス前記時間値後に終了される、請求項１２または１３のいずれかに記載の方法。
【請求項１５】
前記Ｉ／Ｏハンドラが前記バックアップ動作を開始したという確認を受信するステップと、前記Ｉ／Ｏハンドラが前記バックアップ動作を開始したという前記確認を受信した後に、通常の動作を再開するよう前記Ｉ／Ｏハンドラに命令するステップとをさらに含む、請求項１２〜１４のいずれか１項に記載の方法。
【請求項１６】
前記バックアップ動作を開始する間、前記Ｉ／Ｏハンドラは、前記アプリケーションのインスタンスと、それに関連するデータ・ストレージ・ボリュームとの間の通信を凍結しない、請求項１２〜１５のいずれか１項に記載の方法。
【請求項１７】
Ｉ／Ｏハンドラは、前記延長の間にＩ／Ｏ動作を処理し、前記延長が終了された後にＩ／Ｏ動作を完了する、請求項１２〜１５のいずれか１項に記載の方法。
【請求項１８】
前記バックアップ動作は、前記アプリケーションとの通信なしに開始される、請求項１２〜１７のいずれか１項に記載の方法。
【請求項１９】
複数のサーバにわたるアプリケーション同期を実行するためのコンピュータ・プログラムであって、
前記サーバとの通信に基づき時間値を計算するステップであって、前記時間値の計算は、前記通信のうちの少なくとも１つのレイテンシ、および同期化スナップショット・サーバに基づく参照時間のクロック値と、前記サーバのうちの少なくとも１つの時間のクロック値との間の時間差とを含む、前記ステップと、
データに対する連係バックアップ動作を同じスタート時間に開始するよう、前記サーバ上のＩ／Ｏハンドラと通信するステップと、
を前記同期化スナップショット・サーバに実行させるコンピュータ・プログラム。
【請求項２０】
前記アプリケーションのインスタンスと、それに関連するデータ・ストレージ・ボリュームとの間の通信を、前記バックアップ動作を開始する間延長するよう前記Ｉ／Ｏハンドラに命令するステップを更に実行させる、請求項１９に記載のコンピュータ・プログラム。
【請求項２１】
前記時間値は、前記サーバが、同期化スナップショット・サーバと同期するための時間の最大偏差を表し、バックアップ・サーバは、前記データに対する前記連係バックアップ動作を同じ同期ウィンドウ内で開始するよう、前記サーバ上のＩ／Ｏハンドラとほぼ非同期的に通信する、請求項１９または２０のいずれかに記載のコンピュータ・プログラム。
【請求項２２】
前記バックアップ動作を開始する間、前記Ｉ／Ｏハンドラは、前記アプリケーションのインスタンスと、それに関連するデータ・ストレージ・ボリュームとの間の通信を凍結しない、請求項１９〜２１のいずれか１項に記載のコンピュータ・プログラム。
【請求項２３】
複数のサーバにわたるアプリケーション同期を実行するためのシステムであって、
前記サーバとの通信に基づき時間値を計算することであって、前記時間値の計算は、前記通信のうちの少なくとも１つのレイテンシ、および同期化スナップショット・サーバに基づく参照時間のクロック値と、前記サーバのうちの少なくとも１つの時間のクロック値との間の時間差を含む、前記計算することと、
データに対する連係バックアップ動作を同じスタート時間に開始するよう、前記サーバ上のＩ／Ｏハンドラと通信することと、
を実行するシステム。
【請求項２４】
複数のサーバ上の時間同期モジュールと通信する時間同期サーバであって、それ自体と、前記時間同期モジュールとの間の通信に基づき時間値を計算し、前記通信のうちの少なくとも１つのレイテンシ、および前記時間同期サーバに基づく参照時間のクロック値と、前記サーバのうちの少なくとも１つの時間のクロック値との間の時間差を含むように計算する、前記時間同期サーバと、
前記サーバ上で実行されているアプリケーションに関連するデータの同期化バックアップ動作を同じポイント・イン・タイムに開始するよう、前記サーバ上のＩ／Ｏハンドラと通信するバックアップ・サーバであって、前記同期化バックアップ動作のスタート時間は、前記時間同期サーバによって計算された前記時間に少なくとも部分的に基づく、前記バックアップ・サーバと、
を含むシステム。
【請求項２５】
前記バックアップ動作は、前記アプリケーションに関連する前記データのスナップショットである、請求項２４に記載のシステム。
【請求項２６】
前記バックアップ・サーバは、前記アプリケーションのインスタンスと、それに関連するデータ・ストレージ・ボリュームとの間の通信を、前記バックアップ動作を開始する間延長するよう前記Ｉ／Ｏハンドラに命令するコンピュータ・コードを含む、請求項２４または２５のいずれかに記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、全般的に、改善されたデータ処理システムおよび方法に関し、特に、複数のサーバにわたるアプリケーション同期を使用して、業務データを保護する方法に関する。
【背景技術】
【０００２】
業務データの保護は、現代の情報技術（ＩＴ：Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｅｃｈｎｏｌｏｇｙ）運用の重要な役割である。業務データは多数の形式で生じ、データベース、ファイル・システム、電子メール・アプリケーション、オンライン・トランザクション・システムなどを含む様々な業務アプリケーションにより管理される。この業務データおよび当該データを管理する業務アプリケーションを保護する、多岐にわたるデータ保護システム、方法および技法がある。データ保護のためのこうしたシステム、方法および技法には、従来のファイル・バックアップ、イメージ・バックアップ技法、ストレージ・ハードウェア・レプリケーション機能、スナップショット、継続的データ保護、ミラーリング、および同様のものが含まれる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
現代の業務アプリケーションおよびそれに関連する業務データは、複数のサーバにわたって分散して、アプリケーションの拡張性およびパフォーマンスのさらなる向上を可能にすることが増えている。現代のアプリケーション・アーキテクチャでは、こうしたアプリケーションおよびデータはさらに、局所、地域、国家、または場合によっては地球規模の距離にまでもわたって分散することもある。これは、データ保護の非常に大きな課題を、既存のシステム、方法および技法に対してもたらす。これがもたらす最も大きな課題の１つは、アプリケーションおよびそのデータの一貫性のあるビューを持つデータ・コピーを得るために、アプリケーションの様々なコンポーネントおよびその関連するデータを同期させることである。あるポイント・イン・タイム（ｐｏｉｎｔ  ｉｎ  ｔｉｍｅ）におけるアプリケーションおよびデータの一貫性のあるビューがなければ、ある程度のアプリケーションまたはデータの破損なしにはアプリケーションおよびそのデータを回復することができなくなる危険性がある。これは、例えば、完了していないインフライト・トランザクション（ｉｎｆｌｉｇｈｔ  ｔｒａｎｓａｃｔｉｏｎ）が原因であることが多い。これは、どのようなアプリケーションにも関連し、単一サーバ・アプリケーションにさえも関連する問題である。複数のボリュームおよび複数のサーバに、特に距離を隔ててまたがるアプリケーションは、さらに困難な課題をもたらす。
【０００４】
この分野の一連の従来技術は、ボリュームのハードウェアまたはソフトウェア・スナップショット、およびグループとして共に複製されてその同期が保証される整合性グループ（ｃｏｎｓｉｓｔｅｎｃｙ  ｇｒｏｕｐ）へのボリュームのグループ化を使用することである。ハードウェア・スナップショット・ソリューションの手法に関連する重要な問題の１つは、ソリューションが、ストレージ・ハードウェアまたはストレージ・ネットワーク・レベルで実装されるため、必要とされるいかなるアプリケーション親和性（ａｐｐｌｉｃａｔｉｏｎ  ａｆｆｉｎｉｔｙ）も認識しないということである。さらに、ソフトウェア・スナップショット・ソリューションは、下記のように、アプリケーションとのさらなる同期を必要とする。
【０００５】
したがって、当該技術分野では、前述の問題に対処する必要がある。
【課題を解決するための手段】
【０００６】
ストレージ・ハードウェア、ソフトウェア、およびアプリケーション・ベースのスナップショット技術の利点を結集するソリューションは、有利であると考えられる。アプリケーションおよびアプリケーション・データの効率的で一貫性のあるスナップショットを、単一または複数のサーバにわたる複数のストレージ・デバイスにわたってもとることができ、アプリケーション認識およびダウンタイムを最小限に抑えるかまたはなくし、一部のアプリケーション・インターフェース特有の効率の悪さを一部回避する形で実行することができるソリューションが追求される。
【０００７】
一実施形態による方法は、複数のサーバ上で実行されているアプリケーションに関連するデータのバックアップを実行するリクエストを受信するステップと、サーバとの通信に基づき時間値を計算するステップであって、時間値の計算は、通信のうちの少なくとも１つのレイテンシ、および参照時間クロック値と、サーバのうちの少なくとも１つの時間クロック値との間の差のうちの少なくとも１つを含む、該ステップと、データに対する連係バックアップ動作（ｃｏｏｒｄｉｎａｔｅｄ  ｂａｃｋｕｐ  ｏｐｅｒａｔｉｏｎ）をほぼ同じスタート時間に開始するよう、サーバ上のＩ／Ｏハンドラと通信するステップとを含む。
【０００８】
別の実施形態による方法は、複数のサーバ上で実行されているアプリケーションに関連するデータのバックアップを実行するリクエストを受信するステップと、サーバとの通信に基づき時間値を計算するステップであって、時間値の計算は、通信のうちの少なくとも１つのレイテンシ、および参照時間クロック値と、サーバのうちの少なくとも１つの時間クロック値との間の差のうちの少なくとも１つを含み、時間値は、サーバが同期するための時間の最大偏差（ｍａｘｉｍｕｍ  ｄｅｖｉａｔｉｏｎ）を表す、該ステップと、データに対する連係バックアップ動作をほぼ同じスタート時間に開始するよう、サーバ上のＩ／Ｏハンドラに命令するステップとを含み、Ｉ／Ｏハンドラは、アプリケーションのインスタンスと、それに関連するデータ・ストレージ・ボリュームとの間の通信を、バックアップ動作を開始する間延長（ｓｔｒｅｔｃｈ）する。
【０００９】
さらに別の実施形態によるコンピュータ・プログラム製品は、コンピュータ使用可能媒体により具現化されたコンピュータ使用可能プログラム・コードを有する、該コンピュータ使用可能媒体を含む。コンピュータ使用可能プログラム・コードは、複数のサーバとの通信に基づく時間値の計算であって、時間値の計算は、通信のうちの少なくとも１つのレイテンシ、および参照時間クロック値と、サーバのうちの少なくとも１つの時間クロック値との間の差のうちの少なくとも１つを含む、該計算を行うために構成されたコンピュータ使用可能プログラム・コードと、データに対する連係バックアップ動作をほぼ同じスタート時間に開始するよう、サーバ上のＩ／Ｏハンドラと通信するために構成されたコンピュータ使用可能プログラム・コードとを含む。
【００１０】
一実施形態によるシステムは、プロセッサおよびコンピュータ使用可能媒体を含み、コンピュータ使用可能媒体は、それにより具現化されたコンピュータ使用可能プログラム・コードを有し、コンピュータ使用可能プログラム・コードは、プロセッサによって実行されると、プロセッサに、サーバとの通信に基づき時間値を計算することであって、時間値の計算は、通信のうちの少なくとも１つのレイテンシ、および参照時間クロック値と、サーバのうちの少なくとも１つの時間クロック値との間の差のうちの少なくとも１つを含む、該計算すること、ならびに、データに対する連係バックアップ動作をほぼ同じスタート時間に開始するよう、サーバ上のＩ／Ｏハンドラと通信することを行わせる。
【００１１】
別の実施形態によるシステムは、複数のサーバ上の時間同期モジュール（ｔｉｍｅ  ｓｙｎｃｈｒｏｎｉｚｅｒ  ｍｏｄｕｌｅ）と通信する時間同期サーバ（ｔｉｍｅ  ｓｙｎｃｈｒｏｎｉｚｅｒ  ｓｅｒｖｅｒ）であって、それ自体と、時間同期モジュールとの間の時間差同期（ｔｉｍｅ  ｄｉｆｆｅｒｅｎｃｅ  ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ）を計算する、該時間同期サーバと、サーバ上で実行されているアプリケーションに関連するデータの同期化バックアップ動作（ｓｙｎｃｈｒｏｎｉｚｅｄ  ｂａｃｋｕｐ  ｏｐｅｒａｔｉｏｎ）をほぼ同じポイント・イン・タイムに開始するよう、サーバ上のＩ／Ｏハンドラと通信するバックアップ・サーバであって、同期化バックアップ動作のスタート時間は、時間同期サーバによって計算された時間差同期に少なくとも部分的に基づく、該バックアップ・サーバとを含む。
【００１２】
これらの実施形態の任意のものが、例えばソリッド・ステート・ドライブ（ＳＳＤ：ｓｏｌｉｄ  ｓｔａｔｅ  ｄｒｉｖｅ）、フラッシュ・メモリ、テープ・ドライブ・システムなどの磁気データ・ストレージ・システム、光学デバイス、ネットワーク・ストレージ・デバイス、仮想化ストレージ・デバイスなど、任意のストレージ・デバイスにおいて実装され得る。
【００１３】
本発明の他の側面および実施形態が、以下の詳細な説明から明らかになる。詳細な説明は、図面と併せて理解されることで、本発明の原理を例として示す。
【００１４】
以下、本発明について、下記の図面に示されている好適な実施形態を参照して、単なる例として記載する。
【図面の簡単な説明】
【００１５】
【図１】一実施形態による、マルチサーバ・アプリケーションの一貫性のあるデータ保護のためのシステムの簡略図である。
【図２】一実施形態による方法のフローチャートを示す。
【発明を実施するための形態】
【００１６】
以下の説明は、本発明の全般的な原理を示すように構成されており、本願明細書において請求される発明概念を限定することは意図されていない。さらに、本願明細書に記載される特定の特徴は、様々な可能な組み合わせおよび置換それぞれにおいて、記載されている他の特徴と組み合わせて使用可能である。
【００１７】
本願明細書で明確に他の定義がない限り、すべての用語には、明細書が暗示する意味、ならびに当業者により理解される意味または辞書、論文などで定義されている意味あるいはその両方を含め、その最大限広範な解釈が与えられるものとする。
【００１８】
なお、さらに、本明細書および添付の特許請求の範囲で使用される単数形の「ａ」、「ａｎ」および「ｔｈｅ」は、他の指定がない限り複数の指示対象を含む。
【００１９】
アプリケーションによって提供される、複数のサーバにわたる同期は、他の者も試みてきたが、こうした手法は、アプリケーション・レベルで実装され、アプリケーション特有であって他のアプリケーションには適用されず、典型的にはアプリケーションＡＰＩへの書き込みを必要とし、通常はパフォーマンス・コストを伴うという点において、不完全である。さらに、ホスト・ベースのボリューム・レプリケーション・ソリューションが存在するが、複数のシステム上の複数のボリュームにわたってレプリケーションを同期させるものではない。
【００２０】
この分野への関心にもかかわらず、アプリケーションの単一サーバ実装でさえも、同期チェックポイントおよびインターフェースが有効なアプリケーションはほとんどない。アプリケーションの複数サーバ実装に関しては、効果的かつ効率的な同期チェックポイント・インターフェースがあることはさらにまれである。場合によっては、従来技術では、アプリケーションの完全シャットダウン、それに続くアプリケーションの完全バックアップ、それに続くアプリケーションの再起動が必要である。これは、業務に不可欠な環境の多くで容認できないことである。さらに、複数のサーバにわたってこれを行うことは非常に困難である。さらに、アプリケーションが同期を可能にし、データ保護ソリューションが当該インターフェースを使用する場合でも、やはりこの手法は効率がかなり悪い。例えば、データ保護スキームは、アプリケーションが当該インターフェースを提供することに依存するが、当該インターフェースは利用できないことが多く、利用できても非常に非効率的である（例えば実行が遅い）ことが多い。最後に、ハードウェア・ミラーリングおよびレプリケーション・ソリューションは、典型的には、継続的な業務運営に焦点を当てており、以前のポイント・イン・タイムへの回復を必要とする破損問題からの回復は不可能である。
【００２１】
本発明の実施形態は、前述の欠点を克服する。
【００２２】
以下の説明は、単一または複数のサーバにわたる複数のストレージ・デバイスにわたるアプリケーション同期を使用して、業務データまたは他のタイプのデータあるいはその両方を保護するシステムおよび方法を開示する。
【００２３】
本願明細書で使用される「Ｉ／Ｏハンドラ」は、任意のボリューム・ドライバ、ディスク・ドライバ、Ｉ／Ｏフィルタ・ドライバなどであればよく、入出力動作を効果的に凍結（ｆｒｅｅｚｅ）または延長することができ、Ｉ／Ｏハンドラの関連するすべてのボリューム、ディスク、ドライブなどのデータのバックアップ動作を開始することができる。
【００２４】
本願明細書で使用される「アプリケーション」は、１つ以上のマシン、サーバなどで実行されているいくつかのアプリケーション・インスタンスから構成されるとよく、各アプリケーション・インスタンスは、それが管理するデータ間の何らかのデータ整合性を保ち、すべてのアプリケーション・インスタンスの組み合わせが全体でアプリケーションを構成する。さらに、アプリケーションは、多数の異なる動作、部分またはアクティビティ、あるいはそのいずれかの組み合わせ（例えば索引付け、データベース、およびウェブ・インターフェースなど）を有することもでき、各部分、動作、またはアクティビティ、あるいはそのいずれかの組み合わせが、異なるマシンから機能することもできる。こうしたアプリケーションの部分、動作、またはアクティビティ、あるいはそのいずれかの組み合わせのすべてが、全体でアプリケーションを構成する。
【００２５】
本願明細書で使用される「スナップショット」は、ハードウェア・スナップショット、ソフトウェア・スナップショット、またはその他任意のポイント・イン・タイム・バックアップ・メカニズムから作られるポイント・イン・タイム・バックアップなど、任意のポイント・イン・タイム・バックアップを指す。
【００２６】
概略の一実施形態において、方法が提供される。動作中、複数のサーバ上で実行されているアプリケーションに関連するデータのバックアップを実行するリクエストが受信される。さらに、サーバとの通信に基づく時間値が計算され、時間値の計算は、通信のうちの少なくとも１つのレイテンシ、および参照時間クロック値と、サーバのうちの少なくとも１つの時間クロック値との間の差のうちの少なくとも１つを含む。さらに、データに対する連係バックアップ動作をほぼ同じスタート時間に開始するよう、各サーバ上のＩ／Ｏハンドラとの通信が行われる。
【００２７】
別の概略の実施形態において、方法が提供される。動作中、複数のサーバ上で実行されているアプリケーションに関連するデータのバックアップを実行するリクエストが受信される。さらに、サーバとの通信に基づき時間値が計算され、時間値の計算は、通信のうちの少なくとも１つのレイテンシ、および参照時間クロック値と、サーバのうちの少なくとも１つの時間クロック値との間の差のうちの少なくとも１つを含み、時間値は、サーバが同期するための時間の最大偏差を表す。さらに、サーバ上のＩ／Ｏハンドラが、データに対する連係バックアップ動作をほぼ同じスタート時間に開始するよう命令され、Ｉ／Ｏハンドラは、バックアップ動作を開始する間、アプリケーションのインスタンスと、それに関連するデータ・ストレージ・ボリュームとの間の通信を延長する。
【００２８】
別の概略の実施形態において、コンピュータ・プログラム製品が提供される。コンピュータ・プログラム製品は、コンピュータ使用可能媒体により具現化されたコンピュータ使用可能プログラム・コードを有する、該コンピュータ使用可能媒体を含み、コンピュータ使用可能プログラム・コードは、複数のサーバとの通信に基づき時間値を計算するために構成されたコンピュータ使用可能プログラム・コードを含み、時間値の計算は、通信のうちの少なくとも１つのレイテンシ、および参照時間クロック値と、サーバのうちの少なくとも１つの時間クロック値との間の差のうちの少なくとも１つを含む。コンピュータ使用可能プログラム・コードはさらに、データに対する連係バックアップ動作をほぼ同じスタート時間に開始するよう、サーバ上のＩ／Ｏハンドラと通信するために構成されたコンピュータ使用可能プログラム・コードを含む。
【００２９】
別の概略の実施形態において、システムが提供される。システムは、プロセッサおよびコンピュータ使用可能媒体を含み、コンピュータ使用可能媒体は、それにより具現化されたコンピュータ使用可能プログラム・コードを有する。コンピュータ使用可能プログラム・コードは、プロセッサによって実行されると、プロセッサに、サーバとの通信に基づき時間値を計算することであって、時間値の計算は、通信のうちの少なくとも１つのレイテンシ、および参照時間クロック値と、サーバのうちの少なくとも１つの時間クロック値との間の差のうちの少なくとも１つを含む、該計算すること、ならびに、データに対する連係バックアップ動作をほぼ同じスタート時間に開始するよう、サーバ上のＩ／Ｏハンドラと通信することを行わせる。
【００３０】
別の概略の実施形態において、システムが提供される。システムは、複数のサーバ上の時間同期モジュールと通信する時間同期サーバを含み、時間同期サーバは、それ自体と、時間同期モジュールとの間の時間差同期を計算する。さらに、システムは、サーバ上で実行されているアプリケーションに関連するデータの同期化バックアップ動作をほぼ同じポイント・イン・タイムに開始するよう、サーバ上のＩ／Ｏハンドラと通信するバックアップ・サーバを含み、同期化バックアップ動作のスタート時間は、時間同期サーバによって計算された時間差同期に少なくとも部分的に基づく。
【００３１】
当業者であれば当然のことであるが、本発明は、システム、方法またはコンピュータ・プログラム製品として具現化され得る。したがって、本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、または本願明細書においてすべて一般に「回路」、「モジュール」または「システム」と呼ばれ得る、ソフトウェアおよびハードウェアの側面を兼ね備えた実施形態の形態をとり得る。さらに、本発明は、任意の有形の表現媒体において具現化されたコンピュータ使用可能プログラム・コードを有する該媒体において具現化されたコンピュータ・プログラム製品の形態をとることもできる。
【００３２】
１つ以上のコンピュータ使用可能またはコンピュータ可読媒体（単数または複数）の任意の組み合わせが利用され得る。コンピュータ使用可能またはコンピュータ可読媒体は、例えば、次に限定はされないが、電子、磁気、光学、電磁気、赤外線、もしくは半導体システム、装置、デバイス、または伝播媒体とされ得る。コンピュータ可読媒体のより具体的な例（包括的でないリスト）には、１つ以上のワイヤを有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）すなわちフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、光学式ストレージ・デバイス、インターネットもしくはイントラネットをサポートする伝送媒体などの伝送媒体、または磁気ストレージ・デバイスが含まれるであろう。なお、プログラムは、例えば紙または他の媒体の光学式走査により電子的に獲得され、続いて必要に応じコンパイル、解釈、または適切な方法により別の形で処理され、続いてコンピュータ・メモリに記憶されることが可能なため、コンピュータ使用可能またはコンピュータ可読媒体は、プログラムが印刷される紙または別の適切な媒体とすることさえもできる。この文書の文脈では、コンピュータ使用可能またはコンピュータ可読媒体は、命令実行システム、装置もしくはデバイスによって、もしくはそれに関連して使用されるプログラムを含むこと、記憶すること、伝達すること、伝播させること、または搬送することができる任意の媒体であればよい。コンピュータ使用可能媒体は、ベースバンドにおいて、または搬送波の一部として伝播データ信号により具現化されたコンピュータ使用可能プログラム・コードを備える該伝播データ信号を含むこともできる。コンピュータ使用可能プログラム・コードは、次に限定はされないが、無線、有線、光ファイバ・ケーブル、ＲＦなどを含め、任意の適切な媒体を使用して伝送されることもできる。
【００３３】
本発明の動作を実行するコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋または同様のものなどのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語もしくは同様のプログラミング言語などの従来の手続きプログラミング言語を含む、１つ以上のプログラミング言語の任意の組み合わせで書かれることもできる。プログラム・コードは、スタンド・アロン・ソフトウェア・パッケージとして、完全にユーザのコンピュータ上で実行されること、部分的にユーザのコンピュータ上で実行されること、または部分的にユーザのコンピュータ上で、かつ部分的にリモート・コンピュータ上で実行されること、または完全にリモート・コンピュータもしくはサーバ上で実行されることもできる。後者のシナリオでは、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）、もしくは広域ネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）を含む任意のタイプのネットワークを介してリモート・コンピュータがユーザのコンピュータに接続されてもよく、または、外部コンピュータに対する接続が行われてもよい（例えば、インターネット・サービス・プロバイダを使用しインターネットを介して）。
【００３４】
本発明の好適な実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフローチャート図またはブロック図、あるいはその両方を参照して、本発明について以下に記載する。当然のことながら、フローチャート図またはブロック図、あるいはその両方の各ブロック、およびフローチャート図またはブロック図、あるいはその両方の複数ブロックの組み合わせは、コンピュータ・プログラム命令により実装されることが可能である。マシンを生じるよう、当該コンピュータ・プログラム命令が、汎用コンピュータ、専用コンピュータ、またはその他のプログラム可能データ処理装置のプロセッサに提供されて、この命令が、コンピュータまたはその他のプログラム可能データ処理装置のプロセッサにより実行されて、フローチャートまたはブロック図あるいはその両方のブロックもしくは複数ブロックにおいて指定された機能／動作を実装する手段を作り出すようにすることもできる。
【００３５】
さらに、特定の形で機能するようコンピュータまたはその他のプログラム可能データ処理装置に指示することができる当該コンピュータ・プログラム命令は、コンピュータ可読媒体に記憶されて、コンピュータ可読媒体に記憶されたこの命令が、フローチャートまたはブロック図あるいはその両方のブロックもしくは複数ブロックにおいて指定された機能／動作を実装する命令手段を含む製品を生じるようにすることもできる。
【００３６】
さらに、コンピュータ・プログラム命令は、コンピュータまたはその他のプログラム可能データ処理装置にロードされて、コンピュータまたはその他のプログラム可能装置上で一連の動作ステップが実行されるようにしてコンピュータに実装されるプロセスを生じさせ、コンピュータまたはその他のプログラム可能装置上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックもしくは複数ブロックにおいて指定された機能／動作を実装するためのプロセスを提供するようにすることもできる。
【００３７】
新たなブロックおよび変更されたブロックの効率的なコピー、およびボリューム・ドライバ、ディスク・ドライバ、Ｉ／Ｏフィルタ・ドライバなどのＩ／Ｏハンドラを使用する、複数のサーバにわたるアプリケーション同期の新規な方法の使用により、スナップショットを実行する方法が開示される。
【００３８】
具体的には、アプリケーション統合を用いない、複数のストレージ・デバイスおよび複数のサーバにわたるアプリケーション・データの一貫性のある同期のための、種々のプロダクション・サーバ上で実行されている複数のＩ／ＯハンドラにわたるＩ／Ｏレベルのポイント・イン・タイム同期を含む、データ保護システムおよび方法を含んだいくつかの実施形態が、本願明細書に開示される。
【００３９】
別の実施形態は、Ｉ／Ｏの凍結を必要とすることなく、複数のストレージ・デバイスおよび複数のサーバにわたって実行されているアプリケーションの一貫性のあるバックアップを実現するために、時間同期モジュールを備える種々のプロダクション・サーバ上で実行されている多数のＩ／Ｏハンドラを連係させるデータ保護システムおよび方法を含む。
【００４０】
さらに別の実施形態は、マルチサーバ・レベルでアプリケーションとインターフェースをとることなく、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）の距離を介する複数のストレージ・デバイスおよび複数のサーバにわたってとられる、アプリケーション・データの一貫性のあるポイント・イン・タイム・スナップショットを含む。
【００４１】
別の手法は、ローカル接続ディスク、直接接続ディスク、およびストレージ・エリア・ネットワーク（ＳＡＮ：Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）接続ディスクを含め、複数のサーバにわたる複数のストレージ・デバイスにわたってとられるアプリケーション・データの一貫性のあるポイント・イン・タイム・スナップショットを含む。
【００４２】
さらに別の手法は、通信レイテンシを含む時間問い合わせの分析によって２つの異なるサーバ間の時間差の程度を判断する方法を含む。
【００４３】
さらなる実施形態は、ホストのグループおよびこれらのホストが生成するＩ／Ｏリクエストの間の、見込まれる最大の時間差および通信レイテンシの間での同期方法を含む。
【００４４】
各図面のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法およびコンピュータ・プログラム製品の考えられる実装のアーキテクチャ、機能性および動作を示す。この関連で、フローチャートまたはブロック図内の各ブロックは、指定の論理機能（単数または複数）を実装する１つ以上の実行可能命令を含むモジュール、セグメント、またはコードの一部を表すこともできる。なお、さらに、いくつかの代わりの実装では、ブロック内に示されている機能が、図面に示されているのとは異なる順序で生じてもよい。例えば、関連する機能性次第で、連続して示されている２つのブロックが実際には事実上同時に実行されてもよく、または、各ブロックが逆順で実行されることがあってもよい。なお、さらに、ブロック図またはフローチャート図、あるいはその両方の各ブロック、およびブロック図またはフローチャート図、あるいはその両方の複数ブロックの組み合わせは、指定の機能または動作を実行する専用ハードウェア・ベース・システム、または専用ハードウェアおよびコンピュータ命令の組み合わせにより実装することができる。
【００４５】
一部の好適な実施形態では、マルチサーバ・アプリケーションを保護する新規なシステム、方法、およびコンピュータ製品が、一貫性のある形で実装され得る。図１を参照する。マルチサーバ業務アプリケーション１０２は、複数のアプリケーション・インスタンス１０４から成るとよく、各インスタンスが、別々のプロダクション・サーバ１０８または仮想サーバ上、あるいはその両方で実行されている。アプリケーション・インスタンス１０４は、関連のある従来技術の当業者には既知であるように、ピア・ツー・ピア、マスタ・スレーブ、またはその他のアーキテクチャによって共に連係して、マルチサーバ業務アプリケーション１０２を形成するとよい。同期化スナップショット・サーバ１１６は、マルチサーバ業務アプリケーション１０２のスナップショットを実行するリクエストを受信するとよく、一貫性のあるスナップショットを実行するよう１つ以上のＩ／Ｏハンドラ１１０を連係させるとよい。
【００４６】
Ｉ／Ｏハンドラ１１０は、マルチサーバ業務アプリケーション１０２と、データ・ストレージ・デバイス１０６またはボリュームあるいはその両方との間のＩ／Ｏ動作を実行することを許可する、可能にする、または他の形で支援する任意のドライバ、ソフトウェア、ハードウェアなどのモジュールであればよい。
【００４７】
好適な実施形態では、ソリューションは、図１に示されているモジュールを使用するとよい。アプリケーション・インスタンス（単数または複数）１０４が実行されている全部または一部のプロダクション・サーバ１０８に、時間同期モジュール１１４が存在するとよい。時間同期モジュール１１４は、所定のアプリケーションに関連する２つ以上のサーバ間の時間を同期させるための、時間同期サーバ１１２からのリクエスト（単数または複数）に応答するとよい。さらに、時間同期モジュール１１４は、それら自体の間で、どのサーバからも独立して時間を同期させてもよい。
【００４８】
Ｉ／Ｏハンドラ１１０は、アプリケーション・インスタンス（単数または複数）１０４が実行されている、それぞれの実もしくは仮想プロダクション・サーバ１０８、またはいくつかの実もしくは仮想プロダクション・サーバ１０８、または１つの実もしくは仮想プロダクション・サーバ１０８に存在するとよい。Ｉ／Ｏハンドラ１１０は、１つ以上のアプリケーション・インスタンス１０４からのＩ／Ｏ動作（例えばＩ／Ｏリクエスト、データ転送など）を傍受する能力を有するとよい。Ｉ／Ｏハンドラ１１０はさらに、要求に応じて、または特定のイベントがあると、すべての待ち状態のＩ／Ｏ動作を凍結し、Ｉ／Ｏ動作を凍結解除（ｔｈａｗ）するようリクエストされるか、または別の特定のイベントが発生するまで、Ｉ／Ｏ動作を凍結状態にしておくことができる。Ｉ／Ｏ動作の凍結は、あらゆる待ち状態のＩ／Ｏ動作または指定のディスクに送信されるあらゆるＩ／Ｏ動作が、凍結解除まで遅延させられるか、または拒否されるということを意味する。さらに、これらのＩ／Ｏハンドラは、Ｉ／Ｏ動作が、処理はされるがある指定の期間後まで完了を許可されないように、Ｉ／Ｏ動作を延長することができる。これらのＩ／Ｏハンドラ１１０は、複数のサーバにわたって同期化データ保護動作を連係させるよう、新規な形で利用されるとよい。
【００４９】
同期化スナップショット・サーバ１１６は、別個のホスト上に存在するとよく、このホストは、プロダクション・サーバ１０８のうちの１つであっても、そうでなくてもよい。このサーバは、時間同期モジュール１１４またはＩ／Ｏハンドラ１１０あるいはその両方のインスタンス（単数または複数）の全部、一部、または１つ、あるいはそのいずれかの組み合わせと通信できる。同期化スナップショット・サーバ１１６は、時間同期サーバ１１２を用いて時間値を得るとよく、時間値は、一部の実施形態では、所定のアプリケーションに関連するすべてのサーバの間の最大時間差分（ｍａｘｉｍｕｍ  ｔｉｍｅ  ｄｅｌｔａ）である。さらに、同期化スナップショット・サーバ１１６は、この時間値を、マルチボリューム、マルチサーバ業務アプリケーション１０２の、同期化されたＩ／Ｏレベルの一貫性のあるスナップショットの実行において使用するとよい。
【００５０】
時間同期サーバ１１２は、同期化スナップショット・サーバ１１６内で実行されるとよく、所定のアプリケーションに関連するサーバ（単数または複数）１０８のうちの全部、一部、または１つ、あるいはそのいずれかの組み合わせの間の最大時間差分などの時間値を判断するために、リクエストに応じて、それ自体と、時間同期モジュール１１４の全部、一部、または１つ、あるいはそのいずれかの組み合わせとの間の時間差同期を促進するとよい。
【００５１】
特に好適な実施形態では、本アプリケーション・ボリューム同期方法は、複数のストレージ・デバイスおよび複数のサーバにわたって同期を実現するために、いかなるアプリケーション・インターフェースとの統合も必要としない。一方、同期を開始するのにより望ましく効率的な、何らかの時またはデータ管理ポイントがあることもある（例えば、複数のＩ／Ｏ動作を含み得るアプリケーション・トランザクション完了の後）。こうしたポイントのうち、どれが同期の実行に最も有益かは、アプリケーションのみに分かることもあり得る。この好適な実施形態は、それ自体の新規な同期と併せて、アプリケーション特有のインターフェースと統合し、アプリケーションからの入力に基づき（すなわちアプリケーションの観点から）最適なポイント・イン・タイムに同期が生じることを保証することもできる。
【００５２】
引き続き図１を参照する。同期化スナップショット・サーバ１１６は、そのドメイン内のすべてのＩ／Ｏハンドラ１１０を継続的に追跡するとよい。同期化スナップショット・サーバ１１６はさらに、これらのＩ／Ｏハンドラ１１０のうちどれが任意のマルチサーバ業務アプリケーション１０２に関連するかを認識するとよい。この認識は、関連のある従来技術の当業者には既知であるように、手入力によって、または自動アプリケーション・リソース発見によって、あるいはその両方によって実現されるとよい。さらに、任意の関連するオペレーティング・システムおよび構成情報（例えば、Ｍｉｃｒｏｓｏｆｔ（Ｒ）の、関係のあるＷｉｎｄｏｗｓ（Ｒ）レジストリ・キー・データ、デバイス構成など）、ならびにアプリケーションに関与するストレージ・デバイス１０６と、サーバ１０８との間の接続の全部、一部、または１つ、あるいはそのいずれかの組み合わせが、同期および保存されるとよい。（ＭｉｃｒｏｓｏｆｔおよびＷｉｎｄｏｗｓは、米国、その他の国々、または両方における、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎの商標である）。
【００５３】
同期は、アプリケーションに関連する１つ以上のストレージ・デバイス１０６またはボリュームに対するＩ／Ｏ動作の全部、一部、または１つ、あるいはそのいずれかの組み合わせを凍結するようＩ／Ｏハンドラ１１０にリクエストすることによって、Ｉ／Ｏハンドラ１１０の全部、一部、または１つ、あるいはそのいずれかの組み合わせにわたって実現可能である。しかし、各Ｉ／Ｏハンドラ１１０が、同期およびスナップショット開始プロセスの持続期間全体にわたって他のすべてのＩ／Ｏハンドラ１１０を待たなければならず、この持続期間全体の間、すべてのＩ／Ｏ動作がブロックされ得るため、この同期の方法はパフォーマンス上の問題をもたらすこともある。この問題は、時間同期オブジェクトを追加すること、およびＩ／Ｏ動作を凍結させるのではなく延長することによって、以下の新規な方法で解決可能である。
【００５４】
一部の実施形態では、本願明細書において開示される方法は、システムに含まれるとよい。このシステムは、プロセッサおよびコンピュータ可読媒体を含むとよく、コンピュータ可読媒体は、それにより具現化されたコンピュータ使用可能プログラム・コードを有し、コンピュータ使用可能プログラム・コードは、プロセッサによって実行されると、プロセッサに、サーバとの通信に基づき時間値を計算することであって、時間値の計算は、通信のうちの少なくとも１つのレイテンシ、および参照時間クロック値と、サーバのうちの少なくとも１つの時間クロック値との間の差のうちの少なくとも１つを含む、該計算すること、ならびに、データに対する連係バックアップ動作をほぼ同じスタート時間に開始するようサーバ上のＩ／Ｏハンドラと通信することを行わせる。
【００５５】
他の実施形態では、本願明細書において開示される方法は、別のシステムに含まれるとよい。システムは、複数のサーバ上の時間同期モジュールと通信する時間同期サーバを含むとよく、時間同期サーバは、時間同期サーバと、時間同期モジュールとの間の時間差同期を計算する。さらに、システムは、サーバ上で実行されているアプリケーションに関連するデータの同期化バックアップ動作をほぼ同じポイント・イン・タイムに開始するよう、サーバ上のＩ／Ｏハンドラと通信するバックアップ・サーバ（例えば同期化スナップショット・サーバ）を含むとよく、同期化バックアップ動作のスタート時間は、時間同期サーバによって計算された時間差同期に少なくとも部分的に基づく。なお、時間同期サーバおよびバックアップ・サーバは、同じホストまたは異なるホストに存在し得る。さらに、時間同期サーバは、バックアップ・サーバのサブコンポーネントであってもよい。
【００５６】
以下、図２を参照する。Ｉ／Ｏ動作を延長することにより、アプリケーションに関連する複数のストレージ・デバイスおよび複数のサーバにわたって同期を実現し、一貫性のあるバックアップを実行するプロセス・フローチャートが示されている。この方法２００は、図１の機能性を背景として実行されるとよい。当然、方法２００は、任意の所望の環境において実行されてもよく、図１に関係しての使用に限定はされない。
【００５７】
図２に示されている動作は、説明のみを目的としており、追加の、またはより少ない動作が、任意の実施形態に含まれ得る。さらに、所望の結果に応じて、一部の動作が、除外、変更または改変されてもよい。例えば、一部の実施形態では、動作２０２および２１０が、データのスナップショットを得る十分に動作可能かつ有効な方法を構成し得る。
【００５８】
動作２０２において、同期化スナップショット・サーバが、マルチデバイス、マルチサーバ業務アプリケーションの同期化データ・バックアップを実行するリクエストを受信するとよい。一部の実施形態によれば、バックアップ動作はデータのスナップショットであるとよく、簡潔性のために、本願明細書に記載されるバックアップ動作はスナップショットと呼ばれることもある。なお、これは、データのバックアップおよびデータのスナップショットを行う能力を含む本発明の範囲を限定するものではない。リクエストが開始され得るのは、ユーザ入力によって、スケジューリング・モジュールから、所定のイベントの発生によって、所定の時間の経過によって、前のスナップショット試行が失敗に終わることによってなどである。
【００５９】
一部の実施形態では、バックアップ動作は、マルチサーバ業務アプリケーションとの通信なしに開始されてもよい。
【００６０】
動作２０４において、同期化スナップショット・サーバは、指定のアプリケーションに関連するすべてのデバイスおよびサーバにわたる同期に使用する時間値、すなわちｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａなどの時間値を得るよう、時間同期サーバに問い合わせるとよい。一部の実施形態によれば、時間値は、関与するサーバすべてが同期するために必要とされる時間の最大偏差を表すよう、アプリケーションに関連するすべてのサーバの時間クロックの差およびレイテンシの正規化値であるとよい。時間値は、下記の「時間値の判断」セクションに記載されるように計算されるとよい。
【００６１】
動作２０６において、同期化スナップショット・サーバは、すべてのＩ／Ｏハンドラが、Ｔ１などの指定の時間に、Ｉ／Ｏ動作を延長することによって同期化アプリケーション・インスタンス・スナップショットを実行することをリクエストするとよい。このスナップショットは、Ｉｎｉｔｉａｔｅ＿Ｓｔｒｅｔｃｈ＿ＩＯ＿Ｓｎａｐｓｈｏｔコマンドなどの非同期のコマンドを、アプリケーションに関連する全部、一部、または１つのＩ／Ｏハンドラに送信することによって実行されるとよい。Ｔ１、時間値、スナップショットをとるディスクまたはボリュームあるいはその両方のリスト、およびその他の適切なデータが、非同期のコマンドと共に各Ｉ／Ｏハンドラに渡されるとよい。
【００６２】
一部の実施形態では、Ｉ／Ｏハンドラ以外の何らかのオブジェクトが、Ｉ／Ｏハンドラに関連するアプリケーション・インスタンスのスナップショットを開始してもよい。他の実施形態では、Ｉ／Ｏ動作を凍結または延長したＩ／Ｏハンドラが、そのアプリケーション・インスタンスに対するスナップショットを開始してもよい。
【００６３】
例えば、ハード・ディスク・ドライブがアクセスされず、リクエストされたデータを求めて探索が行われないように、ハード・ディスク・ドライブのデータにアクセスするリクエストが、凍結プロセスによって割り込みおよび中断されるとよい。別の例では、文書がプリンタへ出力されないように、プリンタ・キューへ文書を出力するリクエストが割り込みされ、凍結プロセスの間保留されてもよく、ただし凍結プロセスが完了した後、続いてその文書が印刷されるようプリンタ・キューへ送られるとよい。
【００６４】
延長プロセスの一例としては、ファイルをハード・ディスクに書き込むリクエストが受信される場合が考えられ、この場合書き込みの開始は許可され、ファイルの相当な部分がハード・ディスクに書き込まれることができるが、その完了は延長プロセスの完了後まで許可されない。延長プロセスが完了すると、ファイルの残りがハード・ディスクに書き込まれるとよく、その結果、新たなファイルの存在を反映することができる。別の例としては、データをＣＤ−ＲＯＭからハード・ディスク上にコピーするリクエストが受信される場合が考えられ、この場合、延長プロセスの間データはＣＤ−ＲＯＭから読み出されてもよいが、延長プロセスの終了後までハード・ディスクに書き込まれてはならない。
【００６５】
さらに多くの凍結および延長の実施形態があり得、前述の例は、本発明をいかなる形でも限定することは意図されておらず、例としてのみ提示されている。
【００６６】
動作２０８において、各Ｉ／Ｏハンドラが、それ自体のサーバの時間クロックに従って、Ｔ１マイナス時間値などの所定時間に、Ｉ／Ｏハンドラが制御しており保護対象のアプリケーションに関連する任意のボリュームまたはディスクあるいはその両方に関して受信する、あらゆるＩ／Ｏ動作に関する通信を、延長し始めるとよい。一部の実施形態では、Ｉ／Ｏハンドラは、バックアップ動作を開始する間、マルチサーバ業務アプリケーションのインスタンスと、それに関連するデータ・ストレージ・ボリュームまたはディスクとの間の通信を延長するとよい。他の実施形態では、Ｉ／Ｏハンドラは、バックアップ動作を開始する間、アプリケーション・インスタンスと、それに関連するデータ・ストレージ・ボリュームまたはディスクあるいはその両方との間の通信を凍結してはならない。
【００６７】
一部の実施形態では、延長Ｉ／Ｏプロセスは、Ｉ／Ｏ動作が開始することは許可してもよいが、延長期間が終わるまでＩ／Ｏ動作の終了を許可してはならない。延長Ｉ／Ｏプロセスは、式１に示されているように、Ｉ／Ｏ延長時間が時間値の２倍以上になるよう、Ｔ１プラス時間値（一部の実施形態によれば最大時間差分とするとよい）までの時間など、特定の時間が経過するまで継続するとよい。
【００６８】
（ＩＯ＿ｅｎｄ＿ｔｉｍｅ−ＩＯ＿ｓｔａｒｔ＿ｔｉｍｅ）≧（２＊ｔｉｍｅ＿ｖａｌｕｅ）          式１
【００６９】
一部の実施形態によれば、時間値は、任意の２つのサーバ間で同期するための「最悪」差時間とするとよい。最も早いサーバがその延長Ｉ／Ｏプロセスを始める時であるＩＯ＿ｓｔａｒｔ＿ｔｉｍｅから、最も遅いサーバがその延長Ｉ／Ｏプロセスを終える時であるｒｅｌｅａｓｅ＿ｔｉｍｅまでの時間の長さが、最大時間差分（ｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａ）などの時間値の２倍であるとよい。Ｉ／Ｏ動作を（２＊ｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａ）延長することによって、すべての関与するサーバにわたるすべてのＩ／Ｏ動作にわたり、アプリケーション・データの一貫性のあるイメージを伴う、サーバ間の一貫性のある状態が実現され得る。Ｉ／Ｏハンドラはさらに、延長Ｉ／Ｏ期間の間に受信されるすべてのＩ／Ｏ動作にタグ付け（ＩＯ＿ｓｔａｒｔ＿ｔｉｍｅを用いて）するとよく、それを監視するとよい。Ｉ／Ｏハンドラは、続いて、式２に示されているように別の時点で、個々のＩ／Ｏ動作を解放する（すなわち、当該のＩ／Ｏ動作の延長を中断し、その完了を許可する）ことができる。
【００７０】
ｒｅｌｅａｓｅ＿ｔｉｍｅ＝ＩＯ＿ｓｔａｒｔ＿ｔｉｍｅ＋（２＊ｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａ）          式２
【００７１】
ｒｅｌｅａｓｅ＿ｔｉｍｅに達するまでの期間延長を実行することによって、個々のＩ／Ｏレベルで、すべてのサーバにわたる同期がかなり確実に実現され得る。
【００７２】
一部の手法では、延長は、ほぼスタート時間（例えばＩＯ＿ｓｔａｒｔ＿ｔｉｍｅ）マイナス時間値（例えばｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａ）から開始されるとよい。さらなる手法では、延長は、ほぼスタート時間プラス時間値後に終了されるとよい。
【００７３】
動作２１０において、Ｔ１などの所定時間に、すべてのＩ／Ｏハンドラが、アプリケーションに関連しＩ／Ｏハンドラが制御するいずれかまたはすべてのボリュームに対するスナップショットを開始するとよい。開始が完了すると、すべてのＩ／Ｏハンドラが、スナップショットの開始が完了したという報告を同期化スナップショット・サーバに返すとよい。一部の好適な実施形態では、各Ｉ／Ｏハンドラが、同じ同期ウィンドウ（ｗｉｎｄｏｗ  ｏｆ  ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ）内でバックアップ動作を開始するとよく、例えば、各サーバにおけるバックアップ動作は、非常に短い時間差の中で開始されるとよい。
【００７４】
動作２１２において、同期化スナップショット・サーバは、すべてのＩ／Ｏハンドラがスナップショットの開始の完了が実現されたという報告を返すのを待つとよい。同期化スナップショット・サーバは、何らかの通信喪失またはその他Ｉ／Ｏハンドラに関する障害の場合に待ち状態のままとなることを防ぐ、タイム・アウト値を有するとよい。
【００７５】
動作２１４において、アプリケーションに関連するいずれかまたはすべてのＩ／Ｏハンドラですべてのスナップショットの開始が完了すると、同期化スナップショット・サーバは、通常の動作を再開するとよい。さらに、すべてのＩ／Ｏハンドラが、式２において定義されたｒｅｌｅａｓｅ＿ｔｉｍｅにおいて、通常のＩ／Ｏ動作を再開するとよい。一部の実施形態によれば、動作全体を通じてどのＩ／Ｏ動作も中断されず、代わりにＩ／Ｏ動作は延長されたのみであることが分かる。さらに、他の実施形態では、Ｉ／Ｏハンドラは、延長期間の間にＩ／Ｏ動作を処理して、ｒｅｌｅａｓｅ＿ｔｉｍｅ後までＩ／Ｏ完了のみを遅らせるとよい。これは、延長されたＩ／Ｏ動作の、ｒｅｌｅａｓｅ＿ｔｉｍｅにおける非常に高速なＩ／Ｏ完了を可能にすることによって、さらなる効率性を提供する。
【００７６】
動作２１６において、Ｉ／Ｏハンドラのいずれかが、アプリケーション・インスタンス・スナップショットの開始が発生したことを報告していなければ、同期化スナップショット・サーバは、スナップショットの開始が発生したという報告をすべてのＩ／Ｏハンドラが返すのを待つとよい。タイム・アウト値に達すると、同期化スナップショット・サーバは、それ以上は待たずに動作２１８に進むとよい。
【００７７】
動作２１８において、時間同期サーバは、最悪時間差（ｗｏｒｓｔ  ｃａｓｅ  ｔｉｍｅ  ｄｉｆｆｅｒｅｎｃｅ）がｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａなどの時間値よりも大きいかどうかを判断するとよい。大きくなければ、方法２００は動作２１２に戻る。最悪時間差が時間値よりも大きければ、その結果、方法２００は動作２２０に進み、現在のスナップショット・プロセスは中止されるとよく、スナップショット・プロセスは動作２０２において再び開始される。
【００７８】
時間値の判断
一部の好適な実施形態の一側面は、所定のアプリケーションに関連する様々なサーバすべての間の時間の差を表す時間値の判断である。一手法による、適切な時間値を判断する一方法が本願明細書に記載される。簡潔にするために、時間値を変数ｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａと呼ぶことにするが、これは決して本発明の範囲を限定せず、時間値の変数名の例としてのみ含まれている。時間値を判断する他の適切な実装が、本発明の範囲を狭めることなく使用され得る。
【００７９】
リクエストに応じて、または所定のイベントが発生した後、時間同期サーバは、すべてのサーバ間のｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａを判断するとよい。ｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａに組み込まれる３つの要素がある：１）同期される、所定のアプリケーションに関連するサーバ間の時間クロックの差、２）そのサーバ間の通信レイテンシ、および３）下記のファクタＫ。なお、一部の実施形態によれば、ｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａの判断は、サーバ間の時間クロックの差およびレイテンシの問題を必ずしも解決する必要はない。ｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａが表すものは、時間クロックの差およびレイテンシの問題を所与とし、複数のサーバにわたるデータ同期が時間値内で達成できる、該時間値であればよい。
【００８０】
アプリケーションに関連するいずれかまたはすべてのサーバ上の時間同期モジュールとの協働によって、所定のアプリケーションのｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａを判断する時間同期サーバが、同期化スナップショット・サーバ内にあるとよい。
【００８１】
一部の実施形態では、時間同期サーバは、それ自体のサーバのクロックに時刻Ｔ０の問い合わせを行うとよい。この時間は、典型的には、１／１００秒またはさらに小さい単位まで得られる。ｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａの計算はすべて、時間同期サーバ上のサーバ・クロックに基づき判断されるとよい。他の実施形態は、ｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａを、他の何らかのサーバ・クロック基準またはその他の手段に基づき判断するとよい。
【００８２】
時間同期サーバは、Ｔｉｍｅ＿Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ＿Ｃｈｅｃｋなどの時間同期確認リクエスト（ｔｉｍｅ  ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  ｃｈｅｃｋ  ｒｅｑｕｅｓｔ）を、所定のアプリケーションに関連するすべてのサーバ上のいずれかまたはすべての時間同期モジュールに送信するとよい。時間同期確認リクエストは、後からの参照用にＴ０を含むとよい。時間同期サーバはさらに、時間同期モジュールからのレスポンスを待つとよい。
【００８３】
各時間同期モジュールは、時間同期確認リクエストを受信し、即座にそれ自体のサーバのクロックに時刻Ｔｘの問い合わせを行うとよく、この時間を時間同期サーバへ返すとよい。時間同期モジュールがレスポンスを返すと、時間同期サーバはそれを処理するとよい。ほぼすぐに、時間同期サーバは、再びそれ自体のサーバのクロックに時刻Ｔ１の問い合わせを行うとよい。次に、式３に従って、その特定の時間同期モジュールの総レイテンシＬｘが計算されるとよい。
【００８４】
Ｌｘ＝Ｔ１−Ｔ０          式３
【００８５】
サーバとこのモジュールとの間のレイテンシのより正確な表現は、上記のプロセスを反復プロセスにおいて多数（「ｎ」）回行い、観測されたレイテンシを式４に従って平均することによって実現可能である。
【００８６】
Ｌ＿Ａｖｅｘ＝（Ｓ１−ｎＬＸ）／ｎ          式４
【００８７】
当該の時間同期モジュールと、時間同期サーバとの間のＴＤ＿ＡｖｅＸなどの平均時間差は、２つの時間差ＴＤｘ１およびＴＤｘ２の平均を使用しても計算され得る。これらの時間は、式５に従って、２つのサーバの時刻クロック問い合わせ間の差の絶対値として計算されてもよい。
【００８８】
ＴＤｘ１＝｜Ｔｘ−Ｔ０｜およびＴＤｘ２＝｜Ｔ１−Ｔｘ｜          式５
【００８９】
これらの時間差は、本質的に、時間同期サーバと、当該の時間同期モジュールとの間の部分的なレイテンシ（すなわち、片方向通信）を含み得る。次に、２つの時間差が式６に従って平均されるとよい。
【００９０】
ＴＤ＿Ａｖｅｘ＝（ＴＤｘ１＋ＴＤｘ２）／２          式６
【００９１】
差の絶対値は、時間同期サーバおよび時間同期モジュール上のサーバ・クロックがわずかに同期ずれしている（例えば、ＴｘがＴ０より前の時間であるかのようである）可能性を補償すると見なされるとよい。総時間差（例えば、時刻クロックが不正確にセットされている）は、ある妥当なクロック差よりも大きなＴＤｘ値を拒否することによって処理されてもよい。時間同期モジュールからの時間と、時間同期サーバの開始および終了時間とを比較することによって、２つのサーバ間のクロック差を正規化するために平均がとられるとよい。
【００９２】
アプリケーションに関連するすべての時間同期モジュールに関してＴＤｘ１およびＴＤｘ２を計算する間、時間同期サーバは、ｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａを追跡するとよい。任意の時点の最大のｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａが、最悪時間差値として使用されるとよく、これは、明確にするためにｗｏｒｓｔ＿ｃａｓｅ＿ｔｉｍｅ＿ｄｉｆｆｅｒｅｎｃｅと表現できる。これらの値をさらに評価することによって、２つの異なるサーバの時間クロックがどの程度近いかについて、より正確に判断が下され得る。これは、２つのサーバ上の２つの時間クロックが完全に同期されていれば、Ｔ０プラスＴＤ＿ＡｖｅＸがＴｘに非常に近くなるであろうことに注目することによって可能となると考えられる。この関係が分かっていれば、それらの間の時間の差を観測できる。これを何度も計算して時間の差を反復して平均することによって、２つのサーバ間の時間差を概算することができる。
【００９３】
すべての時間同期モジュールが報告を返すと、時間同期サーバは、モジュールのいずれかに関して計算され得る、最悪時間差値ｗｏｒｓｔ＿ｃａｓｅ＿ｔｉｍｅ＿ｄｉｆｆｅｒｅｎｃｅを使用するとよい。上記のように、この最悪時間差は、通信レイテンシおよび関与するすべてのサーバ間の時間差の両方を正規化するとよく、この値を、複数サーバにわたって同期を実現するために必要な最大同期期間として表すとよい。本方法は、あらゆる場合に有効であるが、通信レイテンシに突然の予期しない大幅な増加がある場合は別である。この状況は、例えば、Ｉ／Ｏハンドラが時間（Ｔ１−ｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａ）後までＩ／Ｏを延長する命令を受信しないという結果になる可能性があるであろう。この状況は、ｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａが、最悪時間差を掛けたファクタＫと等しくなるよう調節されるように、追加のファクタＫを導入することによって対処され得る。
【００９４】
ファクタＫは、アプリケーションの寿命中、手動で、または動的に調節されるとよい。次に、ｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａが、スナップショット・プロセスの開始において使用されるよう、時間同期サーバによって同期化スナップショット・サーバに返されるとよい。なお、時間同期サーバは、スナップショット開始期間全体にわたってｗｏｒｓｔ＿ｃａｓｅ＿ｔｉｍｅ＿ｄｉｆｆｅｒｅｎｃｅの値を監視し続けてもよい。Ｉ／Ｏハンドラが、Ｉ／Ｏを延長して同期化スナップショットを実行する間、時間同期サーバは、時間同期モジュールと協働し続けて、ｗｏｒｓｔ＿ｃａｓｅ＿ｔｉｍｅ＿ｄｉｆｆｅｒｅｎｃｅを継続的に確認してもよい。スナップショット開始プロセスの間の任意の時点で、ｗｏｒｓｔ＿ｃａｓｅ＿ｔｉｍｅ＿ｄｉｆｆｅｒｅｎｃｅがｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａ、すなわち現在のスナップショット同期プロセスで使用されているｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａよりも大きくなれば、これは、同期を損なう可能性がある何らかの新たな大きなレイテンシがあり得るということを示す。この場合には、時間同期サーバが同期化スナップショット・サーバに、スナップショットが再び開始されるべきであることを通知するとよく、同期化スナップショット・サーバは、現在のスナップショットを中止し、より新しいｗｏｒｓｔ＿ｃａｓｅ＿ｔｉｍｅ＿ｄｉｆｆｅｒｅｎｃｅを用いて計算されたｍａｘ＿ｔｉｍｅ＿ｄｅｌｔａを用いて、スナップショットを再び開始するとよい。
【００９５】
様々な実施形態を上記に記載したが、当然のことながら、それらは限定ではなく単なる例として提示された。したがって、好適な実施形態の幅および範囲は、上記の例示の実施形態のいずれによっても限定されてはならず、以下の特許請求の範囲およびその等価物に従ってのみ定義されるべきである。
【図１】
0005647624.tif 000002
【図２】
0005647624.tif 000003