(57)【特許請求の範囲】
【請求項１】
少なくとも１つのコンピュータプロセッサ上で、アプリケーションを迅速に実行する方法であって、
前記少なくとも１つのコンピュータプロセッサ上でアプリケーションの複数のインスタンスを同時に実行することであって、
‐各インスタンスは、前記複数のインスタンスの他の全てのインスタンスをコンパイルするために用いられる各コンパイラオプションとは異なるそれぞれのコンパイラオプションによってコンパイルされ、
‐前記アプリケーションは、その実行に際して、第１の一連の結果を生成するよう構成され、
‐各インスタンスは、同一の前記第１の一連の結果を生成するようコンパイルされる、
複数のインスタンスを同時に実行することと、
前記アプリケーションによって生成される前記第１の一連の結果のうち各結果について、
前記結果に対応する、各インスタンスによって生成されるそれぞれの出力を監視することと、
前記監視された出力から最も早く発生する出力を前記結果に対応する前記アプリケーションの出力としてラベリングし、他の全ての出力を複製としてラベリングすることとによって、少なくとも１つのコンピュータプロセッサの演算性能の速度を向上させることと
を含む方法。
【請求項２】
前記複数のインスタンスは、第１のインスタンス及び第２のインスタンスを含み、
前記第１のインスタンスのためのコンパイラオプションは、事前（ＡＯＴ：ahead-of-time）コンパイルを含み、
前記第２のインスタンスのためのコンパイラオプションは、ジャストインタイム（ＪＩＴ：just-in-time）コンパイルを含み、前記ＪＩＴコンパイルは、少なくとも部分的に、前記第２のインスタンスの少なくとも１つの以前の実行から得られるランタイム情報に基づいている、請求項１記載の方法。
【請求項３】
前記複数のインスタンスは、第１のインスタンスを含み、
前記第１のインスタンスのためのコンパイラオプションは、無制約のメモリ使用、メモリ使用の最小化、並列演算の最大化、及び演算の制約された同時並列性からなるグループから選択される、請求項１記載の方法。
【請求項４】
前記複数のインスタンスから１つのインスタンスをプライマリインスタンスとしてラベリングすることと、
他の全てのインスタンスをセカンダリインスタンスとしてラベリングすることと、
前記結果に対応する、前記アプリケーションの各インスタンスによって出力される第２の一連の結果からの各結果について、前記セカンダリインスタンスからの各出力を抑制することと
を更に含む請求項１記載の方法。
【請求項５】
ｋ≧１として、前記第２の一連の結果からｋ個の結果を生成した後に、前記プライマリインスタンスの失敗を認識することと、
前記プライマリインスタンスを失敗したインスタンスとしてラベリングすることと、
前記ｋ個の結果の各計算に関連するロジックを実行したセカンダリインスタンスを選択することと、
前記選択されたセカンダリインスタンスを前記プライマリインスタンスとして再ラベリングすることによって、前記再ラベリングされたプライマリインスタンスが（ｋ＋１）番目の結果を生成することと
を更に含む請求項４記載の方法。
【請求項６】
前記アプリケーションの少なくとも一部のソースコードは、少なくとも部分的にインタープリットされるプログラミング言語を用いて特定される、請求項１記載の方法。
【請求項７】
ソフトウェアアプリケーションのフェイルオーバを可能にする方法であって、
前記ソフトウェアアプリケーションは、その実行に際して、一連の結果を生成するよう構成され、
前記ソフトウェアアプリケーションの、何れのインスタンスの実行も、同一の前記一連の結果を出力し、
前記方法は、
プロセッサベースのコントローラによって、（ｉ）ソフトウェアアプリケーションのプライマリインスタンスであって、第１のコンパイラオプションによってコンパイルされているプライマリインスタンス及び（ｉｉ）アプリケーションの第１のセカンダリインスタンスであって、前記第１のコンパイラオプションとは異なるコンパイラオプションによってコンパイルされている第１のセカンダリインスタンスの同時の実行を監視することと、  ｋ≧１として、ソフトウェアアプリケーションの一連の結果からのｋ個の結果の生成の後、プライマリインスタンスの失敗を検出することと、
前記第１のセカンダリインスタンスが、ｋ番目の結果を算出するために必要な演算を完了していることを確認することと、
前記第１のセカンダリインスタンスをプライマリインスタンスとしてラベリングすることと
を含む方法。
【請求項８】
前記コントローラは、前記ｋ個の結果に対応する前記第１のセカンダリインスタンスの出力を抑制する、請求項７記載の方法。
【請求項９】
前記第１のコンパイラオプションは、ジャストインタイム（ＪＩＴ：just-in-time）コンパイルであり、前記第１のセカンダリインスタンスのために使用されるコンパイラオプションは、事前（ＡＯＴ：ahead-of-time）コンパイルである、請求項７記載の方法。
【請求項１０】
前記コントローラによって、（ｉｉｉ）前記アプリケーションの第２のセカンダリインスタンスであって、前記第１のコンパイラオプション及び前記第１のセカンダリインスタンスをコンパイルするために使用されるコンパイラオプションの両方と異なるコンパイラオプションによってコンパイルされている第２のセカンダリインスタンスの同時の実行を監視することと、
前記第１のセカンダリインスタンスが前記ｋ番目の結果を算出するために必要な演算を完了していることが確認されない場合、
前記第２のセカンダリインスタンスが前記ｋ番目の結果を算出するために必要な演算を完了していることを確認することと、
前記第２のセカンダリインスタンスをプライマリインスタンスとしてラベリングすることと
を含む請求項７記載の方法。
【請求項１１】
少なくとも１つのコンピュータプロセッサ上で、アプリケーションを迅速に実行するシステムであって、
第１のプロセッサと、
前記第１のプロセッサと電気的に通信する第１のメモリであって、前記第１のメモリは、前記第１のプロセッサ及び第２のプロセッサの少なくとも１つを含む処理ユニットによって実行されると、前記処理ユニットをプログラムする命令を含み、この命令により前記処理ユニットは、
前記少なくとも１つのコンピュータプロセッサ上でアプリケーションの複数のインスタンスを同時に実行し、各インスタンスは、前記複数のインスタンスの他の全てのインスタンスをコンパイルするために用いられる各コンパイラオプションとは異なるそれぞれのコンパイラオプションによってコンパイルし、前記アプリケーションは、その実行に際して、第１の一連の結果を生成するよう構成され、各インスタンスは、同一の前記第１の一連の結果を生成するようコンパイルされ、
前記アプリケーションによって生成される前記第１の一連の結果のうち各結果について、
前記結果に対応する、各インスタンスによって生成されるそれぞれの出力を監視し、
前記監視された出力から最も早く発生する出力を前記結果に対応する前記アプリケーションの出力としてラベリングし、他の全ての出力を複製としてラベリングすることとによって、少なくとも１つのコンピュータプロセッサの演算性能の速度を向上させる、システム。
【請求項１２】
前記複数のインスタンスは、第１のインスタンス及び第２のインスタンスを含み、
前記第１のインスタンスのためのコンパイラオプションは、事前（ＡＯＴ：ahead-of-time）コンパイルを含み、
前記第２のインスタンスのためのコンパイラオプションは、ジャストインタイム（ＪＩＴ：just-in-time）コンパイルを含み、前記ＪＩＴコンパイルは、少なくとも部分的に、前記第２のインスタンスの少なくとも１つの以前の実行から得られるランタイム情報に基づいている、請求項１１記載のシステム。
【請求項１３】
前記複数のインスタンスは、第１のインスタンスを含み、
前記第１のインスタンスのためのコンパイラオプションは、無制約のメモリ使用、メモリ使用の最小化、並列演算の最大化、及び演算の制約された同時並列性からなるグループから選択される、請求項１１記載のシステム。
【請求項１４】
前記命令は、前記処理ユニットが、
前記複数のインスタンスから１つのインスタンスをプライマリインスタンスとしてラベリングし、
他の全てのインスタンスをセカンダリインスタンスとしてラベリングし、
前記結果に対応する、前記アプリケーションの各インスタンスによって出力される第２の一連の結果からの各結果について、前記セカンダリインスタンスからの各出力を抑制する
ように更にプログラムされている、請求項１１記載のシステム。
【請求項１５】
前記命令は、前記処理ユニットが、
ｋ≧１として、前記第２の一連の結果からｋ個の結果を生成した後に、前記プライマリインスタンスの失敗を認識し、
前記プライマリインスタンスを失敗したインスタンスとしてラベリングし、
前記ｋ個の結果の各計算に関連するロジックを実行したセカンダリインスタンスを選択し、
前記選択されたセカンダリインスタンスを前記プライマリインスタンスとして再ラベリングすることによって、前記再ラベリングされたプライマリインスタンスが（ｋ＋１）番目の結果を生成する
ように更にプログラムされている、請求項１４記載のシステム。
【請求項１６】
前記アプリケーションの少なくとも一部のソースコードは、少なくとも部分的にインタープリットされるプログラミング言語を用いて特定される、請求項１１記載のシステム。
【請求項１７】
ソフトウェアアプリケーションのフェイルオーバのためのシステムであって、
前記ソフトウェアアプリケーションは、その実行に際して、一連の結果を生成するよう構成され、
前記ソフトウェアアプリケーションの、何れのインスタンスの実行も、同一の前記一連の結果を出力し、
前記システムは、
第１のプロセッサと、
前記第１のプロセッサと電気的に通信する第１のメモリであって、前記第１のメモリは、前記第１のプロセッサ及び第２のプロセッサの少なくとも１つからなる処理ユニットによって実行されると、前記処理ユニットをプログラムする命令を含み、この命令により前記処理ユニットは、
（ｉ）ソフトウェアアプリケーションのプライマリインスタンスであって、第１のコンパイラオプションによってコンパイルされているプライマリインスタンス及び（ｉｉ）アプリケーションの第１のセカンダリインスタンスであって、前記第１のコンパイラオプションとは異なるコンパイラオプションによってコンパイルされている第１のセカンダリインスタンスの同時の実行を監視し、
ｋ≧１として、ソフトウェアアプリケーションの一連の結果からのｋ個の結果の生成の後、プライマリインスタンスの失敗を検出し、
前記第１のセカンダリインスタンスが、ｋ番目の結果を算出するために必要な演算を完了していることを確認し、
前記第１のセカンダリインスタンスをプライマリインスタンスとしてラベリングする、システム。
【請求項１８】
前記命令は、前記処理ユニットが、前記ｋ個の結果に対応する前記第１のセカンダリインスタンスの出力を抑制するように更にプログラムされている、請求項１７記載のシステム。
【請求項１９】
前記第１のコンパイラオプションは、ジャストインタイム（ＪＩＴ：just-in-time）コンパイルであり、前記第１のセカンダリインスタンスのために使用されるコンパイラオプションは、事前（ＡＯＴ：ahead-of-time）コンパイルである、請求項１７記載のシステム。
【請求項２０】
前記命令は、前記処理ユニットが、
（ｉｉｉ）前記アプリケーションの第２のセカンダリインスタンスであって、前記第１のコンパイラオプション及び前記第１のセカンダリインスタンスをコンパイルするために使用されるコンパイラオプションの両方と異なるコンパイラオプションによってコンパイルされている第２のセカンダリインスタンスの同時の実行を監視し、
前記第１のセカンダリインスタンスが前記ｋ番目の結果を算出するために必要な演算を完了していることが確認されない場合、
前記第２のセカンダリインスタンスが前記ｋ番目の結果を算出するために必要な演算を完了していることを確認し、
前記第２のセカンダリインスタンスをプライマリインスタンスとしてラベリングする
ように更にプログラムされている、請求項１７記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願への相互参照
本出願は、２０１４年３月１１日に出願された米国の仮出願番号第６１／９５１，３７４号、発明の名称「Data Synchronization and Failover Management Apparatuses, Methods and Systems」の優先権を主張する。また、本出願は、同じ発明の名称で２０１５年３月１１日に出願された米国特許出願番号第１４／６４４，６７４号の優先権を主張する。本出願の主題は、（ａ）２０１４年３月１１日に出願された米国仮出願番号第６１／９５１，３６４号、及び（ｂ）２０１４年３月１１日に出願された米国仮出願番号第６１／９５１，３９０号の優先権を主張して２０１５年３月１１日に出願された同時に継続中の米国特許出願番号第１４／６４４，６０６号に関連する。また、本出願の主題は、２０１３年９月１２日に出願されたＰＣＴ国際出願番号ＰＣＴ／ＵＳ２０１３／０５９５５８に関連する。上述した各関連出願の全体は、参照によって本願に援用される。
発明の分野
本開示は、包括的には、ソフトウェアアプリケーションの実行のためのランタイム環境に関し、詳しくは、ソフトウェアアプリケーションの性能及び信頼性を向上させる技術に関する。
【背景技術】
【０００２】
通常、ソフトウェアアプリケーション又はアプリケーションと呼ばれるソフトウェアプログラム及びシステムは、例えば、医療システムのモニタリング及び制御、金融取引、産業的製造のモニタリング及び制御等の様々な分野において、ミッションクリティカルタスク（mission critical task）を行うことが多い。アプリケーションは、例えば、ソフトウェアエラーのために、クリティカルタスクの実行に失敗することがある。コード解析、テスト及びコードの訂正によって、ソフトウェアエラーを回避又は少なくとも最小化できる。しかしながら、ソフトウェアアプリケーションの実行は、ソフトウェアエラーのためではなく、アプリケーションが実行される環境内のイベントのために失敗することがある。例えば、アプリケーションがデータにアクセスするためのディスク又は他のメモリに障害が生じることもあり、アプリケーションの１つ以上のコンポーネント及び／又は要求されたデータにアクセスするためのネットワークリンクに障害が生じることもある。このような環境障害は、ソフトウェアアプリケーションに障害を生じさせる原因となることがある。
【０００３】
上述したような様々な分野において、ソフトウェアアプリケーションは、例えば、要求された演算結果を可能な限り速やかに生成するといった高い性能を期待されるだけではなく、これらの結果を高い信頼度で提供することを期待される。ソフトウェアエラーは、上述したように、回避又は少なくとも最小化できるが、環境因子及び／又はハードウェア故障に起因するエラーは、予測できない傾向がある。そこで、ソフトウェアアプリケーションの信頼性を改善する１つの手法は、ソフトウェアアプリケーションの２つのインスタンスを同時に実行することである。一方のインスタンスが環境イベントのために失敗したとしても、この時点で、又はこの時点の近くで、他方のインスタンスの環境において、そのインスタンスを同様に失敗させる原因となるイベントが発生する可能性は非常に低い。したがって、バックアップインスタンスとも呼ばれる他方のインスタンスは、要求された演算タスクの実行を継続できる。
【０００４】
しかしながら、この冗長性ベースの手法には、幾つかの課題がある。第１に、ソフトウェアアプリケーションの２つのインスタンスを実行させることによって、通常、例えば、プロセッサ、サーバ、メモリ、ネットワークインターフェース等の要求されるリソースに関するソフトウェアアプリケーションの実行のコストが高くなる。第２に、バックアップインスタンスの失敗を引き起こす他方の環境イベントが発生する可能性があるため、この手法は、スケーラビリティが低い。冗長性及び信頼性を更に高めるために、２つ以上のバックアップインスタンスを同時に実行してもよいが、この場合、ソフトウェアアプリケーションを実行するためのコストが更に高くなる。
【０００５】
ソフトウェアアプリケーションの効率的な実行のために、インタープリットされたコンピュータ言語は、コンパイルされた同等の表現に対して、例えば、異なるコンピュータアーキテクチャに亘る携帯性の向上といった幾つかの利益を提供する。しかしながら、インタープリタ内のコードの実行は、プロセッサのネイティブのマシン言語にコンパイルされた同じコードの実行に比べて、著しく遅くなる。この不利益を克服するために、多くのインタープリタは、インタープリタの少なくとも一部のバイトコードをプロセッサのネイティブコードにコンパイルするジャストインタイム（just-in-time：ＪＩＴ）コンパイルを含むことによって、性能を向上させることができる。これにより、インタープリタは、このプログラムの部分について、バイトコードをインタープリットする代わりに、ネイティブコードを実行することができる。この特徴は、Ｊａｖａ仮想マシン（Java Virtual Machine：ＪＶＭ）の標準的なＨｏｔＳｐｏｔインプリメンテーション及びマイクロソフトの共通言語ランタイム（Common Language Runtime：．ＮＥＴとして知られる）を含む幾つかのインタープリタランタイムにおいて提供され、事前に（ahead-of-time：ＡＯＴ）コンパイルされた言語と同等の性能を提供する。
【０００６】
ＪＩＴコンパイル言語による他の性能改善も可能であり、この場合、インタープリタが特定のバイトコード（又は他の中間的表現又はソースコード）を実行するので、インタープリタは、実行されたコード又は少なくともその一部について、プロファイリング情報を収集でき、これにより、コード又はその一部がコンパイルされる際に、より高度な最適化を行うことができる。この適応型最適化（adaptive optimization）は、ＨｏｔＳｐｏｔＪＶＭにおいて実現され、事前コンパイルコードより高い性能を提供できる。この技術の１つの大きな短所は、コンパイルを最適化するために十分なプロファイリング情報を収集するために、インタープリタを用いてコード又はその一部を何度も（例えば、数十回、数百回、数千回以上）実行する必要がある点である。プロファイリングフェーズの間、ソフトウェアアプリケーションは、例えば、ＡＩＴコンパイル等の従来のコンパイル技術を用いてコンパイルされたコンパイルバージョンに比べて、動作が遅くなる。適応型ＪＩＴが強化された性能を提供できるのは、コードのプロファイリングが完了した後のみである。
【発明の概要】
【課題を解決するための手段】
【０００７】
ここに開示するシステム及び方法の実施形態は、ソフトウェアアプリケーションの複数の同一ではないインスタンスの同時実行を可能にすることによってソフトウェアアプリケーションの信頼性を向上させるデータ同期及びフェイルオーバ管理（Data Synchronization and Failover Management：ＤＳＦＭ）を特徴とする。これにより、単に冗長性のみに基づく技術と比べて、ソフトウェアアプリケーションの実行のコストが高くなるが、同一ではないインスタンスは、機能強化を提供することができる。詳しくは、各インスタンスを生成して、例えば、メモリ、ネットワークインターフェース、処理能力、利用できるプロセッサの数等のうち１つ以上のリソースの指定された制約に基づき、例えば、最大化、最小化又は使用等のそれぞれの異なる目標を最適化することができる。幾つかのインスタンスは、先の実行から入手できるランタイム情報を使用して、及び／又はジャストインタイム（ＪＩＴ）コンパイルを使用して、実行のために最適化してもよい。このようなインスタンスは、例えば、上述したような１つ以上の指定された目標を最適化することができる異なるコンパイラを使用して及び／又は異なるコンパイラオプションを使用してソフトウェアアプリケーションのソースコードをコンパイルすることによって生成することができる。
【０００８】
各インスタンスは、実質的に同じソースコードに由来するので、各インスタンスは、他の何れのインスタンスとも実質的に同じ結果を生成し、すなわち、各インスタンスは、ソフトウェアアプリケーションが生成することを期待される結果と同じ結果を生成する可能性が高い。しかしながら、異なるインスタンスは、別様に最適化されてもよく、したがって、ソフトウェアアプリケーションの様々なインスタンスの実行が同時又は略同時に開始されても、これらのそれぞれの実行の間の異なる時刻において、一連の結果として１つ以上の結果を出力することがある。ソフトウェアアプリケーションが一連の結果を生成することを期待されている場合、各結果について、ＤＳＦＭシステムの実装（implementation）は、他の全てのインスタンスより先に出力を生成したインスタンスからの対応する出力を、要求された結果として指定（designate）／ラベリングし、他のインスタンスからの出力を複製として破棄してもよい。通常、異なるインスタンスは、最初に、異なる結果を出力することがある。最も早く生成された各出力をソフトウェアアプリケーションの連続した結果として指定／ラベリングすることによって、ＤＳＦＭシステムの実装は、ソフトウェアアプリケーションの全体的な性能を向上させることができる。
【０００９】
ＤＳＦＭシステムの実装が特定のインスタンスの特定の出力をソフトウェアアプリケーションの特定の結果として指定／ラベリング又は選択したか否かにかかわらず、各インスタンスは、この結果を生成するために必要な全ての演算を実行する。幾つかのインスタンスは、それぞれの異なる最適化のために、特定の結果を生成するために必要ではない追加の演算を実行していることがあるため、これらのインスタンスは、異なる状態を有することがある。これにもかかわらず、全てのインスタンスが特定の結果を生成するために必要な演算を完了すると、ＤＳＦＭシステムの実装は、これらのインスタンスが同期されている又は同期中であるとみなす。
【００１０】
ＤＳＦＭシステムの実装は、これらのインスタンスの１つをプライマリインスタンスとして指定／ラベリングしてもよい。オプションとして、ＤＳＦＭシステムの１つの実装は、プライマリインスタンスの出力をソフトウェアアプリケーションの結果として指定／ラベリングし、他の１つ以上のインスタンスの出力をセカンダリインスタンスとして指定／ラベリングして破棄してもよい。上述したように、全てのインスタンスによって全体的に、又はプライマリインスタンスのみによって、ｋ個の結果が生成された後に、プライマリインスタンスが失敗した場合、上述したように、ｋ個の結果が生成された後に、これらのインスタンスの全ては、同一の状態でなくとも、同期しているので、ＤＳＦＭシステムの実装は、セカンダリインスタンスの１つを新しいプライマリインスタンスとして指定／ラベリングすることができる。（ｋ＋１）番目及びこれ以降の結果は、新しいプライマリインスタンスとして再指定／再ラベリングされたセカンダリインスタンスによって生成してもよい。
【００１１】
新しく指定／ラベリングされたプライマリインスタンスが後に、例えば、ｎ個の結果の計算後に失敗した場合、更に他のセカンダリインスタンスが同期しており、ＤＳＦＭシステムの実装は、この他のセカンダリインスタンスを新しいプライマリインスタンスとして再指定／再ラベリングしてもよい。ソフトウェアアプリケーションを実行するためのコストは、通常、インスタンスの数に応じて高くなるが、異なるインスタンスは、それぞれ異なる最適化のために、異なる結果の生成に関連する異なる性能を有することがあり、最も早い出力の選択によって、ソフトウェアアプリケーションの全体的な性能を向上させることができる。様々なインスタンスが同一ではなくても、ＤＳＦＭシステムの幾つかの実装は、様々なインスタンスが同期しているインスタンスを判定することができ、したがって、生成される結果に影響を及ぼすことなく、１つのインスタンスから、失敗したインスタンスの状態とは状態が異なる可能性が高い他の異なるインスタンスへのフェイルオーバを実現し、したがって、ソフトウェアアプリケーションの信頼性を高めることができる。
【００１２】
したがって、一側面として、少なくとも１つのコンピュータプロセッサ上で、アプリケーションを迅速に実行する方法を提供する。方法は、１つ以上のコンピュータプロセッサ上でソフトウェアアプリケーションの複数のインスタンスを同時に実行することを含み、各インスタンスは、複数のインスタンスの他の全てのインスタンスをコンパイルするために用いられる各コンパイラオプションとは異なるそれぞれのコンパイラオプションによってコンパイルされる。アプリケーションによって生成される第１の複数の結果のそれぞれについて、方法は、結果に対応する、各インスタンスによって生成されるそれぞれの出力を監視することを含む。アプリケーションによって生成される結果の第１のセットのそれぞれについて、方法は、監視された出力から最も早く発生する出力を結果に対応するアプリケーションの出力としてラベリングし、他の全ての出力を複製としてラベリングすることを含む。これにより、他の全てのインスタンスより先に特定の結果を生成したインスタンスからの結果の第１のセットのそれぞれが取得され、これによって、ソフトウェアアプリケーションを実行する際の１つ以上のコンピュータプロセッサの演算性能の速度を向上させることができる。
【００１３】
幾つかの実施形態においては、複数のインスタンスは、第１のインスタンス及び第２のインスタンスを含み、第１のインスタンスのためのコンパイラオプションは、事前（ＡＩＴ）コンパイルを含む。例えば、第１のインスタンスは、ＡＩＴコンパイルを使用してコンパイルしてもよい。第２のインスタンスのためのコンパイラオプションは、ジャストインタイム（just-in-time：ＪＩＴ）コンパイルを含んでいてもよい。ＪＩＴコンパイルは、少なくとも部分的に、第２のインスタンスの少なくとも１つの以前の実行から得られるランタイム情報に基づいていてもよい。ソフトウェアアプリケーションの少なくとも一部のソースコードは、少なくとも部分的にインタープリットされるプログラミング言語を使用して特定してもよい。
【００１４】
幾つかの実施形態においては、複数のインスタンスは、第１のインスタンスを含み、第１のインスタンスのためのコンパイラオプションは、無制約のメモリ使用、メモリ使用の最小化、並列演算（concurrent operation）の最大化、及び演算の制約された同時並列性（concurrency）のうちの１つ以上であってもよい。これにより、一具体例では、第１のインスタンスは、無制約メモリ使用を利用して、並列処理を最大化することができる。他の具体例では、第１のインスタンスは、例えば、メモリ使用を最小化してもよい。
【００１５】
幾つかの実施形態においては、方法は、更に、複数のインスタンスから１つのインスタンスをプライマリインスタンスとしてラベリングすることと、他の全てのインスタンスをセカンダリインスタンスとしてラベリングすることとを含む。方法は、更に、結果に対応する、アプリケーションによって生成される第２の複数の結果からの各結果について、セカンダリインスタンスからの各出力を抑制することを含む。また、方法は、ｋ≧１として、第２の複数の結果からｋ個の結果を生成した後に、プライマリインスタンスの失敗を認識する（identify）ことを含んでいてもよい。プライマリインスタンスは、失敗したインスタンスとしてラベリングしてもよい。方法は、更に、ｋ個の結果の各計算に関連するロジックを実行したセカンダリインスタンスを選択することと、選択されたセカンダリインスタンスをプライマリインスタンスとして再ラベリングすることによって、再ラベリングされたプライマリインスタンスが（ｋ＋１）番目の結果を生成することとを含んでいてもよい。選択されたセカンダリインスタンスは、ｋ個の結果の各計算に関係するロジックを実行しているので、選択されたセカンダリインスタンスは、プライマリインスタンスの失敗の前にプライマリインスタンスと同期している可能性が高い。このように、２つ以上のインスタンスによるアプリケーションの実行によって、通常、実質的な遅延（例えば、アプリケーションを再開することによる遅延等）及び／又はエラーを導入することなく、１つのインスタンスから他のインスタンスへのフェイルオーバを行うことができる。
【００１６】
他の側面として、ソフトウェアアプリケーションのフェイルオーバを可能にする方法を提供する。方法は、プロセッサベースのコントローラによって、ソフトウェアアプリケーションのプライマリインスタンス及びアプリケーションの第１のセカンダリインスタンスの同時の実行を監視することを含む。プライマリインスタンスは、第１のコンパイラオプションによってコンパイルされており、第１のセカンダリインスタンスは、第１のコンパイラオプションとは異なるコンパイラオプションによってコンパイルされている。また、方法は、ｋ≧１として、ソフトウェアアプリケーションのｋ個の結果の生成の後、プライマリインスタンスの失敗を検出することを含む。更に、方法は、第１のセカンダリインスタンスが、ｋ番目の結果を算出するために必要な演算を完了していることを確認することと、第１のセカンダリインスタンスをプライマリインスタンスとしてラベリングすることとを含む。第１のセカンダリインスタンスは、ｋ個の結果のそれぞれを算出するために必要な演算を行っているので、第１のセカンダリインスタンスは、プライマリインスタンスの失敗の前にプライマリインスタンスと同期している可能性が高い。このように、２つ以上のインスタンスによるアプリケーションの実行によって、通常、実質的な遅延（例えば、アプリケーションを再開することによる遅延等）及び／又はエラーを導入することなく、１つのインスタンスから他のインスタンスへのフェイルオーバを行うことができる。
【００１７】
コントローラは、プライマリインスタンスとしてラベリングされたインスタンスの失敗の前に、ｋ個の結果に対応する第１のセカンダリインスタンスの出力を抑制してもよい。第１のコンパイラオプションは、ジャストインタイム（ＪＩＴ）コンパイルを含んでいてもよく、第１のセカンダリインスタンスのために使用されるコンパイラオプションは、事前（ＡＩＴ）コンパイルを含んでいてもよい。幾つかの実施形態においては、方法は、更に、コントローラによって、アプリケーションの第２のセカンダリインスタンスの同時の実行を監視することを含む。第２のセカンダリインスタンスは、第１のコンパイラオプション及び第１のセカンダリインスタンスをコンパイルするために使用されるコンパイラオプションの両方と異なるコンパイラオプションによってコンパイルされている。この方法によって、第１のセカンダリインスタンスがｋ番目の結果を算出するために必要な演算を完了していることが確認されない場合、この方法は、第２のセカンダリインスタンスがｋ番目の結果を算出するために必要な演算を完了していることを確認することを含んでもよい。そして、この第２のセカンダリインスタンスをプライマリインスタンスとしてラベリングしてもよく、以前にプライマリインスタンスとされていたインスタンスから、プライマリインスタンスとして再ラベリングされた第２のセカンダリインスタンスへの効率的でエラーのないフェイルオーバが実現する。
【００１８】
他の側面として、少なくとも１つのコンピュータプロセッサ上で、アプリケーションを迅速に実行するシステムは、第１のプロセッサと、第１のプロセッサと電気的に通信する第１のメモリとを含む。第１のメモリは、例えば、第１のプロセッサ及び／又は第２のプロセッサを含む処理ユニットによって実行されると、処理ユニットをプログラムする命令を含み、この命令により、処理ユニットは、１つ以上のコンピュータプロセッサ上でソフトウェアアプリケーションの幾つかのインスタンスを同時に実行する。各インスタンスは、複数のインスタンスの他の全てのインスタンスをコンパイルするために用いられる各コンパイラオプションとは異なるそれぞれのコンパイラオプションによってコンパイルされる。アプリケーションによって生成される第１の複数の結果のそれぞれについて、命令は、処理ユニットをプログラムして、結果に対応する、各インスタンスによって生成されるそれぞれの出力を監視する。アプリケーションによって生成される結果の第１のセットのそれぞれについて、命令は、処理ユニットをプログラムし、監視された出力から最も早く発生する出力を結果に対応するアプリケーションの出力としてラベリングし、他の全ての出力を複製としてラベリングする。これにより、他の全てのインスタンスより先に特定の結果を生成したインスタンスからの結果の第１のセットのそれぞれが取得され、これによって、ソフトウェアアプリケーションを実行する際の１つ以上のコンピュータプロセッサの演算性能の速度を向上させることができる。様々な実施形態において、命令は、処理ユニットが上述の方法ステップの１つ以上を実行するようにプログラムすることができる。
【００１９】
他の側面として、ソフトウェアアプリケーションのためのフェイルオーバを可能にするシステムは、第１のプロセッサと、第１のプロセッサと電気的に通信する第１のメモリとを含む。第１のメモリは、例えば、第１のプロセッサ及び／又は第２のプロセッサを含む処理ユニットによって実行されると、処理ユニットをプログラムする命令を含み、この命令により、処理ユニットは、ソフトウェアアプリケーションのプライマリインスタンス及びアプリケーションの第１のセカンダリインスタンスの同時の実行を監視する。プライマリインスタンスは、第１のコンパイラオプションによってコンパイルされており、第１のセカンダリインスタンスは、第１のコンパイラオプションとは異なるコンパイラオプションによってコンパイルされている。更に、命令は、処理ユニットをプログラムし、ｋ≧１として、ソフトウェアアプリケーションのｋ個の結果の生成の後、プライマリインスタンスの失敗を検出する。更に、命令は、処理ユニットをプログラムし、第１のセカンダリインスタンスが、ｋ番目の結果を算出するために必要な演算を完了していることを確認し、第１のセカンダリインスタンスをプライマリインスタンスとしてラベリングする。このように、２つ以上のインスタンスによるアプリケーションの実行によって、通常、実質的な遅延（例えば、アプリケーションを再開することによる遅延等）及び／又はエラーを導入することなく、１つのインスタンスから他のインスタンスへのフェイルオーバを行うことができる。様々な実施形態において、命令は、処理ユニットが上述の方法ステップの１つ以上を実行するようにプログラムすることができる。
【００２０】
他の側面として、メモリと電子的に通信する処理ユニットによって実行されると、１つ以上のコンピュータプロセッサ上でソフトウェアアプリケーションの幾つかのインスタンスを実行するように処理ユニットをプログラムする命令を格納する非一時的なストレージ媒体を含む製品を提供する。各インスタンスは、複数のインスタンスの他の全てのインスタンスをコンパイルするために用いられる各コンパイラオプションとは異なるそれぞれのコンパイラオプションによってコンパイルされる。アプリケーションによって生成される結果の第１のセットのそれぞれについて、命令は、処理ユニットをプログラムして、結果に対応する、各インスタンスによって生成されるそれぞれの出力を監視する。アプリケーションによって生成される結果の第１のセットのそれぞれについて、命令は、処理ユニットをプログラムし、監視された出力から最も早く発生する出力を、結果に対応するアプリケーションの出力としてラベリングし、他の全ての出力を複製としてラベリングする。様々な実施形態において、命令は、処理ユニットが上述の方法ステップの１つ以上を実行するようにプログラムすることができる。
【００２１】
他の側面として、メモリと電子的に通信する処理ユニットによって実行されると、ソフトウェアアプリケーションのプライマリインスタンス及びアプリケーションの第１のセカンダリインスタンスの同時の実行を監視するように処理ユニットをプログラムする命令を格納する非一時的なストレージ媒体を含む製品を提供する。プライマリインスタンスは、第１のコンパイラオプションによってコンパイルされており、第１のセカンダリインスタンスは、第１のコンパイラオプションとは異なるコンパイラオプションによってコンパイルされている。更に、命令は、処理ユニットをプログラムし、ｋ≧１として、ソフトウェアアプリケーションのｋ個の結果の生成の後、プライマリインスタンスの失敗を検出する。更に、命令は、処理ユニットをプログラムし、第１のセカンダリインスタンスが、ｋ番目の結果を算出するために必要な演算を完了していることを確認し、第１のセカンダリインスタンスをプライマリインスタンスとしてラベリングする。様々な実施形態において、命令は、処理ユニットが上述の方法ステップの１つ以上を実行するようにプログラムすることができる。
【００２２】
本発明の様々な実施形態の１つの技術的な効果は、結果に対応する出力を同時に生成する複数のインスタンスから各結果について最も早い出力を選択することによって、一連の結果を生成することが期待されるソフトウェアアプリケーションの全体的な性能を高めることができることである。異なるインスタンスをコンパイルする手法の違いのために、異なるインスタンスが特定の結果に対応する出力を生成する時刻は、異なることがある。幾つかのインスタンスは、初期的には、出力の生成が他の幾つかのインスタンスより遅く、後に、これらのインスタンスより早く出力を生成するようになることがある。各結果について最も早い出力を効果的に選択することによって、ソフトウェアアプリケーションは、それぞれが異なる結果に対応する出力を最も早く生成したインスタンスによって実行され、これによって、全体的なソフトウェアアプリケーションの実行の速度を向上させることができる。
【００２３】
本発明の様々な実施形態の他の技術的な効果は、上述したように、性能を向上させると共に、ソフトウェアアプリケーションによって生成される一連の結果のそれぞれの計算において、異なるインスタンスを、正確に同じ状態ではなくとも、同期した状態に維持できることである。したがって、１つのインスタンスが１つ以上の結果の生成の後に失敗した場合、失敗していないインスタンスのうち、次の結果を最も早く生成する可能性が高い他のインスタンスを用いて、次の結果を生成することができる。このようにして、ソフトウェアアプリケーションの全体的な性能を向上させながら、例えば、アプリケーションの再開に関連するような過度の遅延を引き起こすことなく、安全な、すなわち、包括的にエラーがないフェイルオーバが達成される。
【００２４】
ここに開示した実施形態の利点及び特徴と共に、これらの及びこの他の目的は、以下の説明、添付の図面及び特許請求の範囲によって、より明らかとなる。更に、ここに記述する様々な実施形態の特徴は、互いに排他的なものではなく、様々な順列及び組合せで実現できる。
【００２５】
図面において、同様の参照符号は、異なる図でも同様の部分を指している。また、図面は、必ずしも実際の縮尺に対応しておらず、本発明の原理を説明する部分を強調している。以下の説明では、以下の図面を参照して、本発明の様々な実施形態を記述する。
【図面の簡単な説明】
【００２６】
【図１】ＤＳＦＭシステムの様々な実施形態の使用を説明する図である。
【図２】ＤＳＦＭシステムの実施形態を用いたソフトウェアアプリケーションのプライマリインスタンスからセカンダリインスタンスへのフェイルオーバを例示するデータ図である。
【図３】ＤＳＦＭシステムの実施形態を用いたソフトウェアアプリケーションの１つのインスタンスから他のインスタンスへの移行を例示するロジックフロー図である。
【図４】ＤＳＦＭシステムの実施形態を用いたソフトウェアアプリケーションの機能向上を図式的に説明する図である。
【図５】ＤＳＦＭシステムの実施形態を用いたソフトウェアアプリケーションの機能向上を図式的に説明する図である。
【図６】一実施形態に基づくＤＳＦＭコントローラを図式的に示す図である。
【発明を実施するための形態】
【００２７】
図１に示すように、ユーザ１０１は、特定のソフトウェアアプリケーションの実行を望む。データ同期及びフェイルオーバ管理（ＤＳＦＭ）システム１０２は、一方がプライマリインスタンス（primary instance）として指定／ラベリングされ、他方がセカンダリインスタンス（secondary instance）として指定／ラベリングされるソフトウェアアプリケーションの２つのインスタンスを実行することができる。プライマリインスタンスは、例えば、ハードウェア故障、ネットワークエラー等のために失敗することがあり、実行は、（バックアップインスタンスとも呼ばれる）セカンダリインスタンスに転送することができる。幾つかの実施形態においては、例えば、プライマリインスタンス及びセカンダリインスタンスが同一のソースコードに由来するものであっても、２つのインスタンスを別様にコンパイルしてもよいため、セカンダリインスタンスは、プライマリインスタンスと正確に同じ状態でないことがある。したがって、セカンダリインスタンスは、プライマリインスタンスと同じコード経路を辿らないことがある。したがって、セカンダリインスタンスの実行は、プライマリインスタンスの実行と比較して異なることがあり、例えば、実行速度に関して、異なる及び／又は潜在的に劣る結果を生じることがある。
【００２８】
例えば、プライマリインスタンス及びセカンダリインスタンスは、開始時には同じ状態であったとしても、実行の間にドリフトして離れ、同期されていたとしても、すなわち、包括的に同じ全体的なロジックをインプリメントしていたとしても、２つのインスタンスは、必ずしも正確に同じ状態にならないことがある。例えば、インタープリットされた又は部分的にインタープリットされた言語、例えば、以下に限定されるわけではないが、Ｊａｖａに符号化された幾つかのソフトウェアシステムでは、ジャストインタイム（ＪＩＴ）コンパイルは、実行の間、辿るべき最適コード経路を検索しながら、バイトコードをマシンコードに翻訳することができる。ＪＩＴコンパイルを使用して、プライマリインスタンス又はセカンダリインスタンスの一方のみを生成する場合、特定の時刻に、プライマリインスタンス及びセカンダリインスタンスは、必ずしも同じ命令を実行しないことがある。例えば、以下のようなコードセグメントを検討する。
If (eval(condition) == true)
x = f1(A);
else
x = f2(A);
output (x); 
１つのコンパイラを使用してコンパイルされたこのコードセグメントの１つのインスタンス（インスタンスＡとする。）は、最初に、条件を評価し、条件が真であるかを判定し、これに応じてｆ１又はｆ２を計算して、結果ｘを生成する。
【００２９】
同じコンパイラ又は他のコンパイラは、通常、条件の評価に長い時間がかかり（例えば、数ミリ秒）、ｆ１及びｆ２の評価にも、かなりの時間がかかるが（例えば、数ミリ秒）、この３つの計算の全ては、互いに依存していないといった知識を有することができる。したがって、他のコンパイラ又は同じコンパイラの異なるオプションを用いて、実行時間についての知識を使用してコンパイルされた同じコードセグメントの他のインスタンス（インスタンスＢとする）は、条件の評価が行われている間に、ｆ１及びｆ２の両方を計算することができる。評価が完了した後、インスタンスＢは、ｆ１及びｆ２の結果を選択してもよく、これによって、インスタンスＡより早く出力を生成することができる。このように、特定の時刻において、コードセグメントのインスタンスＡは、条件のみを評価し、この間に、インスタンスＢは、更にｆ１及びｆ２を計算してもよい。
【００３０】
更に他の例では、コードセグメントの他のインスタンス（インスタンスＣとする）を生成するために使用されるコンパイラは、条件が少なからず偽になるという知識を有していてもよい。したがって、インスタンスＣは、条件の評価が行われている間、ｆ１ではなくｆ２のみを計算し、条件が真であると判定された場合にのみ、ｆ１を計算してもよい。これにより、追加的な知識を使用することなく、コンパイルされたインスタンスＡの場合と比べて、全ての状況ではないが、大多数の状況において、ｘの計算の速度を上げることができる。特定の時刻において、インスタンスＡは、条件のみを評価し、この間、インスタンスＣは、条件及びｆ２を評価してもよい。このように、インスタンスＡ、Ｂ及びＣは、コードセグメントによって特定される包括的に同じロジックをインプリメントしていても、特定の時刻において、これらのインスタンスのそれぞれは、異なる命令を実行できる。
【００３１】
異なるコンパイル技術、異なるコンパイラ及び／又は異なるコンパイラオプションを使用してコンパイルされたこのような２つ以上のインスタンスが同時に実行される場合、通常、他のインスタンスに比べて、アプリケーションの結果の生成が遅れる１つ以上のインスタンスは、例えば、結果の重複を回避するために、これらのそれぞれの出力を抑制するように構成されてもよい。例えば、実行の間、プライマリインスタンス（例えば、インスタンスＢ）が特定の出力（例えば、結果ｘ）を生成してもよく、したがって、セカンダリインスタンス（例えば、インスタンスＡ又はＣ）は、インスタンスＡ及びＣがこの出力を生成するために必要な計算を実行したとしても、この出力の複製を生成しないようにしてもよい。幾つかの実施形態においては、アプリケーションの結果としてその出力を生成するように指定／ラベリングされたインスタンスをプライマリインスタンス（例えば、インスタンスＢ）と呼んでもよく、他の１つ以上のインスタンス（例えば、インスタンスＡ及びインスタンスＣ）をセカンダリインスタンスと呼んでもよい。アプリケーションが生成する各結果に関係する演算をセカンダリインスタンスにも実行させ、セカンダリインスタンスの出力のみを抑制することによって、セカンダリインスタンスは、プライマリインスタンスの状態と可能な限り近い状態で、プライマリインスタンスとの同期が維持される。
【００３２】
幾つかの実装では、プライマリインスタンス及びセカンダリインスタンスのためのＪＩＴコンパイルは、上述したように、例示的なコードセグメントを使用して、プライマリインスタンス及びセカンダリインスタンスのための異なる命令によって、異なるコード経路を生成してもよい。幾つかの実装では、異なる種類のコンパイラ（例えばＪＩＴ及び事前（ＡＩＴ））を使用してプライマリインスタンス及びセカンダリインスタンスがコンパイルされるために、プライマリインスタンス及びセカンダリインスタンスが異なるコード経路を有することがある。幾つかの実装では、同じコンパイラを使用してプライマリインスタンス及びセカンダリインスタンスをコンパイルするが、それぞれのコンパイルの間に異なるコンパイラオプションを使用してもよい。コンパイラオプションの例は、以下に限定されるわけではないが、メモリ使用の最小化、無制約のメモリ使用、（例えば、並列プロセッサ、複数のスレッド等を用いる）並列及び／又は部分的に重なり合う演算の最大化、並列及び／又は部分的に重なり合う演算の数の指定された限度への制限を含む。幾つかの実装では、プライマリインスタンスが失敗したことが検出されると、実行がセカンダリインスタンスに切り替えられる。例えば、１０４に示すように、セカンダリインスタンスの実行は、異なるコード経路を辿ってもよく、したがって、セカンダリインスタンスの性能及び効率は、プライマリインスタンスの性能及び効率に一致しなくてもよい。
【００３３】
ここに記述するＤＳＦＭシステムの様々な実施形態は、幾つかのＪＩＴランタイムにおけるオプションの利益を享受でき、これを用いて、プログラム全体を事前にコンパイルしてもよい。例えば、ＨｏｔＳｐｏｔＪＶＭでは、−Ｘｃｏｍｐコマンドラインオプションにより、ランタイムは、メソッドに比較的遅いインタープリット及びプロファイリングフェーズを適用するのではなく、全ての実行されたメソッドをコンパイルする。．ＮＥＴでは、ＮＧｅｎユーティリティは、プログラムの実行時の各時点ではなく、インストール時にバイトコードプログラムをネイティブコードにコンパイルすることができる。これらのオプションは、動作が異なっていても、包括的には、ＪＩＴを事前コンパイルに変換する同じ効果を有している。
【００３４】
幾つかの実施形態においては、単一のバイトコードプログラムの２つのインスタンスが同時に実行される。ここで、同時とは、包括的に、実行の各時刻における少なくとも部分的な重なりを意味する。第２のインスタンスが標準的な適応型ＪＩＴランタイムによって実行されている間、第１のインスタンスは、オプションの事前コンパイルを使用する。両方のインスタンスは、同一の入力が供給され、異なる速度で同一の出力を生成してもよい。通常、第２のインスタンスがインタープリタ内でコードのプロファイルを継続している間、初期的には、第１のインスタンスは、コンパイルされたコードを使用するので、第２のインスタンスより大幅に速い。第２のインスタンスがプログラムを徐々にコンパイルすると、通常、その性能は、向上し、部分的に、適応型ＪＩＴコンパイラによって利用できる高度な最適化のために、最終的に、第１のインスタンスの性能を超えることもある。
【００３５】
２つのインスタンスの異なる実行は、ソフトウェアアプリケーションの単一の実行として表現することができる。このために、２つのインスタンスのそれぞれの出力は、フィルタ処理によってマージされてもよい。幾つかの実施形態においては、フィルタ処理は、２つのインスタンスから出力メッセージを収集し、マージされたメッセージのうちの第１の又は先に生成されたメッセージに応じて出力メッセージのみを発行し、すなわち、より速いインスタンスによって生成されたメッセージのみを発行し、他の比較的遅いインスタンスによって生成された複製メッセージは、破棄される。各インスタンスは、同じ出力メッセージを同じ順序で生成することが予想されるので、フィルタは、２つのインスタンスのうちのより速い１つのインスタンスからメッセージを効率的に発行することができる。実質的には、２つのインスタンスとフィルタの組合せは、初期における事前コンパイルのより速い性能及び長期的な適応型ＪＩＴのより速い性能の両方によって、１つのインスタンスとして動作する。この技術は、例えば、図４及び図５に関して後述するように、３つ以上のインスタンスに拡張することができる。
【００３６】
図２を参照して説明すると、幾つかの実装では、ユーザ／クライアント２０１は、例えば、２０５として示すように、例えば、所与のシステム上でコードを実行することによって、アプリケーションの実行を要求することができる。幾つかの実装は、例えば、２０２として示すように、アプリケーションの１つのインスタンスをプライマリ２０３とし、残りのインスタンスをセカンダリ２０４として指定／ラベリングする構成を有していてもよい。幾つかの実施形態においては、コード実行の異なるインスタンス（例えば、プライマリ及びセカンダリ）の間で正確に同じ記録を維持するために、バックアップアプリケーションは、プライマリインスタンスと同じコード経路を使用する。また、幾つかの実施形態においては、実行における幾つかのステップは、僅かに異なっていてもよい。例えば、２０７として示すように、プライマリインスタンスは、実行の後に出力を生成するが、例えば、２０８として示すように、セカンダリインスタンスは、出力を生成しない点を除き、プライマリインスタンス及びセカンダリインスタンスは、正確に同じコード経路を辿ってもよい。幾つかの実施形態において、バックアップアプリケーションによる出力生成処理は、出力を発行する時点まで、但しこの時点を含まず、プライマリインスタンスの完全な実行経路を通過し、これにより、プライマリインスタンス及びセカンダリインスタンスは、可能な限り高い同一性を維持する。但し、幾つかの実施形態においては、プライマリインスタンス及びセカンダリインスタンスは、正確に同一の状態では終了しない。例えば、ｊａｖａで符号化されたシステムでは、プライマリインスタンス及びセカンダリインスタンスが、メッセージを発行する時点まで、但しこの時点を含まず、正確に同じコード実行経路を辿る場合、これらは、共通の完全なメッセージストリームを有し、互いに同期することができるが、正確に同じ状態にはならない。例えば、プライマリインスタンスへの実行要求２０６ａは、最終的な出力を生成する必要があることを指定してもよい。例えば、実行要求２０６ａ及び２０６ｂは、ＸＭＬに準拠してフォーマットされたデータの形式で、「出力書込」要求を含む（セキュア）ハイパーテキストトランスファプロトコル（Hypertext Transfer Protocol：ＨＴＴＰ）ＰＯＳＴメッセージであってもよい。ＸＭＬフォーマットデータを含む、実質的にＨＴＴＰ  ＰＯＳＴメッセージの形式のアプリケーション実行要求２０６ａ及び２０６ｂのインスタンスリストを以下に示す。
POST /execute_request.php HTTP/1.1
Host: www.primary.com
Content-Type: Application/XML
Content-Length: 867
<?XML version = "1.0" encoding = "UTF-8"?>
<execute_request>
<request_id> fdgsbv633dg </instruct_id>
<timestamp> 2015-05-13 15:43:44</timestamp>
<application_type> primary </application_type>
<prmry_id> PRMRY_1 </prmry_id>
//<application_type> backup </application_type>
//<backup_size> n=7 <backup_size>
//<backup_id> SCNDRY_1 </backup_id>
//<backup_id> SCNDRY_2 </backup_id>
…
<application_inputs>
<init_val_1> … </init_val_1>
<init_val_2> … </init_val_2>
…
</application_inputs>
<application_name> trading_analytics.exe </application_name>
<Output_msg> TRUE </output_msg>
//<Output_msg> FALSE </output_msg>
<application_output>
<format> … </format>
…
</application_output>
</execute_request>
【００３７】
幾つかの実装では、コードのランタイム性能を向上させるために、ジャストインタイム（ＪＩＴ）コンパイルシステム能力を利用し、及びコードをマシンコードに変換してもよい。幾つかの実装では、ＪＩＴコンパイラは、コンパイルの一部として、例えば、２０７として示すようにプライマリである、又は例えば、２０８として示すようにセカンダリであるコードの最適化を開始してもよい。例えば、ＪＩＴコンパイルは、複製コードラインを簡潔なラインに統合し及び／又は余分なコード経路を取り除いて、最も使用される経路をより効率的に最適化する。例えば、幾つかの実施形態においては、コード経路が所定の及び／又は動的に判定される回数の閾値を超えて使用されている場合、この経路に高い優先度を付与し、使用頻度がより少ない他のコード経路より優先させる。幾つかの実施形態においては、出力を発行する時点までのプライマリインスタンスの完全な実行経路を通って実行されるセカンダリインスタンスは、プライマリインスタンスのコード経路とは異なるコード経路を有することがあり、これは、発行の時点までに至るセカンダリインスタンスのコードは、プライマリインスタンスの対応するコードと同様には最適化されていないことがあるためである。
【００３８】
幾つかの実施形態においては、元のプライマリ及び／又はアクティブなアプリケーションが失敗したと判定されると、セカンダリ及び／又は待機アプリケーションがプライマリインスタンスになることがある。例えば、サーバ２０４は、例えば、２０９として示すように、プライマリインスタンスの性能を監視し、第１のプライマリインスタンスの一部でシステム及び／又はアプリケーション障害を検出したとき、アプリケーションフェイルオーバを開始してもよい。幾つかの実施形態においては、例えば、２１０として示すように、第１のプライマリインスタンスが失敗したと判定されると、サーバは、アプリケーションのセカンダリインスタンスを新しいプライマリインスタンスに指定／ラベリングし、実行のためのコードを新しいプライマリインスタンスに供給してもよい。例えば、セカンダリサーバ２０４は、ＸＭＬに準拠してフォーマットされたデータの形式で切替命令を含む（セキュア）ハイパーテキストトランスファプロトコル（ＨＴＴＰ）ＰＯＳＴメッセージを生成してもよい。ＸＭＬフォーマットデータを含む、実質的にＨＴＴＰ  ＰＯＳＴメッセージの形式のフェイルオーバ命令２１０のインスタンスリストを以下に示す。
POST /switch_instruction.php HTTP/1.1
Host: www.switch.com
Content-Type: Application/XML
Content-Length: 867
<?XML version = "1.0" encoding = "UTF-8"?>
<routing_instruct>
<instruct_id> 25jh23jlu0s </instruct_id>
<timestamp> 2015-02-22 15:22:44</timestamp>
<instructor_id> SCNDRY_2 </instructor_id>
<switch_reason> PRMRY_NO_RSPNS </switch_reason>
…
<designation_instr>
<switch> primary = SCNDRY_2 </switch>
<duration> INDFNT </duration>
//<duration> PRMRY_MSG </duration>
…
</designation_instr>
…
</routing_instruct>
【００３９】
幾つかの実施形態においては、例えば、２１１として示すように、命令の後、最適なコード経路によってコード実行がアプリケーションに供給され、ここで、アプリケーションの「発行（publish）」又は、「書込（write）」コードは、コールド（cold）であり、すなわち、最適化されていない。例えば、コード実行要求２１１は、図２に関して上述したように、ＸＭＬに準拠してフォーマットされたデータの形式で「書込出力」命令を含む（セキュア）ハイパーテキストトランスファプロトコル（「ＨＴＴＰ」）ＰＯＳＴメッセージであってもよい。幾つかの実施形態においては、このコード実行は、コード経路の幾つかの部分が最適化されていないため、以前のプライマリインスタンスに比べて劣っている場合がある。例えば、ｊａｖａで符号化されたシステムでは、例えば、２１２として示すように、コールド「書込」コードを有するコード経路によるセカンダリインスタンスへの切替えが行われた後、ｊａｖａは、所定の及び／又は動的に判定される繰返し回数、コード経路の「書込」コードを実行して、コード経路を最適化、すなわち、「ワームアップ（warm up）」し、このプロセスでは、ワームアップ期間において、アプリケーションが遅くなり、この結果、切替え前のプライマリインスタンスと比べて、性能が低下する。
【００４０】
幾つかの実装では、ＤＳＦＭシステムによって、セカンダリ及び／又は待機アプリケーションは、コードのメッセージ出力の発行を含む完全なコード経路の終わりまでを実行してもよい。幾つかの実装では、これにより、プライマリインスタンス及びセカンダリインスタンスは、同一の状態を維持することができ、プライマリインスタンスに障害が生じた場合、例えば、２１３として示すように、セカンダリインスタンスが、以前にプライマリインスタンスが辿っていたものと同じ最適化されたコード経路に沿って、コード実行に進み、これを継続してもよく、したがって、性能の劣化が生じないようにすることができる。例えば、セカンダリインスタンスは、メッセージ処理経路にｊａｖａセグメントの最後を実行させ、ｊａｖａ書込メッセージを次のステップに出力し、次のステップが開始される前に、経路を中止してもよい。これらの実施形態では、プライマリアプリケーション及びバックアップアプリケーションの両方によって完全なｊａｖａ経路が実行され、両方のアプリケーションが同一の状態を維持することができる。幾つかの実施形態においては、プライマリインスタンスがセカンダリインスタンスにフェイルオーバする必要がある場合、プライマリインスタンスは、処理を引き渡し、セカンダリインスタンスが、直ちに処理を引き受けてもよく、セカンダリインスタンスは、ｊａｖａ及び「ワームアップ」をプライマリインスタンスと同様に最適化しているため、性能の劣化は生じない。
【００４１】
図３は、ＤＳＦＭコンポーネントの実施形態によって、アプリケーション実行のための要求をアプリケーションの最適化された効率的な実行に変換するロジックフロー図である。幾つかの実施形態においては、例えば、３０１として示すように、ユーザは、アプリケーションの実行を望み、アプリケーションのコードを実行することによって、実行を開始する。幾つかの実装では、これは、例えば、３０２として示すように、コードの実行の第１のインスタンスであってもよく、コードのコンパイルを保証してもよい。例えば、３０３として示すように、バイトコードに変換されるｊａｖａソースコードは、ＪＩＴコンパイラによってマシンコードにコンパイルしてもよい。幾つかの実施形態においては、コンパイルは、動的に行ってもよく及び／又は完全なコードの一部（例えば、呼び出されたコードのメソッド）のみについて行ってもよい。例えば、３０４として示すように、アプリケーションが実行を開始すると、幾つかの実施形態においては、ｊａｖａは、例えば、３０５として示すように、コードの実行の監視を開始して、実行を最適化してもよい。例えば、ｊａｖａは、「ホットスポット」として頻繁に呼び出され及び／又は使用されるメソッド、関数等を特定する前に、例えば、３０６として示すように、数回の繰り返しを待ってもよい。幾つかの実装では、これらのホットスポットを判定するために十分な回数、アプリケーションが実行されると、例えば、３０９として示すように、更なる最適化のためにホットスポットを選出してもよい。例えば、これらのメソッド、関数等は、コマンドを統合すること、コード要素を削減すること等によって、より効率的なものにでき、これによって、アプリケーションの実行の効率及び速度を向上させることができる。幾つかの実装では、例えば、３０７として示すように、頻繁に使用されるコード経路を特定する前に、ｊａｖａは、何回かの繰り返しを待ってもよく、例えば、３１０として示すように、頻繁に使用されない余分なコード経路を取り除くことによって、効率を高めるためにアプリケーションを最適化／「準備（prime）」してもよい。例えば、経路が１０，０００回実行された後、この経路に高い優先度を与え、より高い優先度を有する経路を優先して、頻繁に使用されていない他の経路は、削除してもよい。幾つかの実装では、例えば、３１１として示すように、ホットスポットが最適化されると、高優先度コード経路が特定され、アプリケーションの実行をより効率的にできる。
【００４２】
図４は、アプリケーションプロセスの冗長性によって、アプリケーション最適化、同期及びフェイルオーバを提供する例示的なＤＳＦＭシステムのブロック図である。幾つかの実装では、アプリケーションを実行する要求に応じて、ＤＳＦＭシステムは、アプリケーションの少なくとも２つのインスタンス、例えば、４０１ａ〜ｎ（２つ以上の同一のアプリケーションと等価）の実行を開始する。幾つかの実施形態においては、これらのアプリケーションのインスタンスは、何れもプライマリ及びセカンダリ／バックアップとして状態指定／ラベリングされておらず、各アプリケーションインスタンスは、独立して実行され、同一又は略同一のメッセージ出力を生成し、メッセージングバス／ワイヤ４０６に書き込まれる。幾つかの実施形態においては、システム処理（例えば、ソフトウェア、ハードウェア等）における僅かな変化によって、同じアプリケーションの２つ以上のインスタンス（すなわち、同一のアプリケーション）によって生成されるこれらのメッセージ出力４０２は、非同時的にワイヤに書き込まれることがある。幾つかの実装では、シーケンサが、到着するメッセージを処理し、１つの出力をアプリケーションのメッセージ出力として分類し、残りの出力を複製として分類する。例えば、シーケンサ４０３は、アプリケーションの２つ以上のインスタンスの１つによってワイヤに書き込まれる１つのメッセージ出力を、維持すべきアプリケーションのメッセージ出力として指定／ラベリングし、アプリケーションのより遅いインスタンスに由来する残りのメッセージ出力を、複製としてラベリング（したがって、例えば、除外）してもよい。幾つかの実施形態においては、シーケンサは、どのメッセージを維持し、どのメッセージを複製としてラベリングするかを選択するためにメッセージの到着の時刻を基準として使用する。例えば、４０４として示すように、シーケンサは、ワイヤに書き込まれる第１のメッセージをアプリケーションのメッセージ出力として選択し、この他を除外してもよい。幾つかの実装では、シーケンサは、到着の時刻に代えて又はこれと組合せて他の基準を使用して、アプリケーションのメッセージ出力として維持されるメッセージを決定してもよい。例えば、幾つかの実施形態においては、この基準は、メッセージの到着の時刻、メッセージのサイズ等を含んでいてもよい。例えば、シーケンサは、アプリケーションの出力として維持されるメッセージを、サイズが閾値バイト数より小さい最初に到着したメッセージ（及び／又はサイズが最も小さいメッセージ等）とする基準を使用してもよい。
【００４３】
幾つかの実施形態では、２つ以上の同一又は略同一のアプリケーションによる実行のうち、シーケンサが維持するメッセージは、異なるアプリケーションに由来することがあり、メッセージの書込に「勝ち抜く」アプリケーションは、メッセージ毎に異なる。例えば、図５に示すように、アプリケーションの実行の最後のメッセージ出力は、シーケンサによって、複数の同一又は略同一のアプリケーションのメッセージ出力を組み合わせてもよい。例えば、Ｎ個のアプリケーションが実行されているとき、例えば、５０１として示すように、Ｎ個メッセージの第１のバッチから、アプリケーションＤのメッセージが最初に到着してもよい。また、例えば、５０２として示すように、Ｎ個のメッセージの第２のバッチでは、他のアプリケーション（例えば、アプリケーションＫ）のメッセージがシーケンサに最初に到着してもよい。このような実施形態においては、例えば、５０５として示すように、シーケンサ５０４は、第１のバッチのアプリケーションＤからのメッセージに、第２のバッチのアプリケーションＫからからのメッセージを続け、このようにして、アプリケーションの最後のメッセージ出力までメッセージを組み合わせてもよい。
【００４４】
このような実装において、複数の同一又は略同一のアプリケーションを実行させると、冗長性がメッセージングバス／ワイヤ上でメッセージトラフィックを生じさせることがある。例えば、Ｎ個の同一又は略同一のアプリケーションが実行されている場合、Ｎ個の同一又は略同一のメッセージ出力があり、この結果、ワイヤ上のメッセージトラフィックが増加する。逆に、上述したように、システムは、最速のアプリケーションからメッセージ出力を取得する利益を享受するので、冗長性は、性能最適化のために利用できる。幾つかの実装では、例えば、４０５として示すように、１つ以上のアプリケーションが失敗した場合、冗長性によって、フェイルセーフメカニズム（fail safe mechanism）を提供できる。このような実装では、例えば、４０６として示すように、１つ以上の他のアプリケーションが実行されており、メッセージ出力は、これらの１つ以上のアプリケーションから取得できるため、手動による及び／又は自動的な介入の必要がない。
【００４５】
このように、ここに記述する様々な実施形態は、例えば、オプションのジャストインタイムの（ＪＩＴ）コンパイルされたランタイムによって、インタープリットされた言語及び／又は他の言語のコードの性能を向上させる。適応型ＪＩＴコンパイラは、初期の期間の性能が遅いというコストがあるが、後のコンパイル段階では、コードがインタープリット及びプロファイルされて強化され、事前の及び／又は単純なＪＩＴコンパイラと比べて、長期的性能を向上させることができる。２つ以上のランタイム上で、２つ以上の非同一なインスタンスとして、同じコードを並列に実行することによって、初期の性能を犠牲にすることなく、インタープリット段階における最適化されたＪＩＴコンパイルの利益を享受できる。
【００４６】
ＤＳＦＭコントローラ
図６は、ＤＳＦＭコントローラ６０１を例示するブロック図である。この実装では、ＤＳＦＭコントローラ６０１は、様々な技術及び／又は他の関連するデータによって、コンピュータとのインタラクションを集計し、処理し、保存し、検索し、取り扱い、識別し、命令し、生成し、照合し及び／又は促進する能力を提供する。
【００４７】
ユーザ、例えば、ユーザ６３３ａは、人間及び／又は他のシステムであってもよく、情報技術システム（例えば、コンピュータ）に情報処理を実行させる。次に、コンピュータは、プロセッサを用いて情報を処理し、このようなプロセッサ６０３は、中央演算処理装置（central processing unit：ＣＰＵ）とも呼ばれる。プロセッサの１つの形式は、マイクロプロセッサと呼ばれる。ＣＰＵは、通信回路を用いて、命令として作用するバイナリ符号化信号を渡し、様々な動作を実現する。これらの命令は、プロセッサがアクセス可能及び使用可能なメモリ６２９（例えば、レジスタ、キャッシュメモリ、ランダムアクセスメモリ等）の様々な領域内の他の命令及びデータを含み及び／又は参照する演算命令及び／又はデータ命令であってもよい。このような通信命令は、所望の演算を実現するために、プログラム及び／又はデータコンポーネントとして、バッチ（例えば、命令のバッチ）で保存及び／又は送信してもよい。これらの保存された命令コード（例えば、プログラム）は、ＣＰＵ回路部品及び他の（マザー）ボード及び／又はシステムコンポーネントに所望の演算を実行させることができる。プログラムの１つのタイプは、コンピュータオペレーティングシステムであり、これは、コンピュータ上のＣＰＵによって実行してもよく、オペレーティングシステムによって、ユーザは、コンピュータ情報技術及びリソースにアクセスし、これらを操作することができる。情報技術システム内で採用できる幾つかのリソースには、コンピュータにデータを渡し、コンピュータからデータを受け取るための入出力（Ｉ／Ｏ）メカニズム、データを保存できるメモリストレージ、及び情報を処理するプロセッサ等が含まれる。これらの情報技術システムを使用して、後の検索、解析及び操作のためにデータを収集してもよく、これはデータベースプログラムによって行ってもよい。これらの情報技術システムは、ユーザが様々なシステムコンポーネントにアクセスし、操作するためのインターフェースを提供する。
【００４８】
一実施形態においては、ＤＳＦＭコントローラ６０１は、例えば、以下に限定されるわけではないが、ユーザ入力デバイス６１１からの１人以上のユーザ、周辺装置６１２、オプションの暗号プロセッサデバイス６２８及び／又は通信ネットワーク６１３等のエンティティに接続され及び／又はエンティティと通信する。例えば、ＤＳＦＭコントローラ６０１は、ユーザ、例えば、ユーザ６３３ａに接続し及び／又はこれと通信してもよく、稼働中のクライアントデバイス、例えば、クライアントデバイス６３３ｂに接続し及び／又はこれと通信してもよく、クライアントデバイスは、以下に限定されるわけではないが、パーソナルコンピュータ、サーバ、様々なモバイル機器、例えば、以下に限定されるわけではないが、携帯電話、スマートフォン（例えば、ｉＰｈｏｎｅ（商標）、ブラックベリー（商標）、ＡｎｄｒｏｉｄＯＳベースの電話機等）、タブレット型コンピュータ（例えば、アップルｉＰａｄ（商標）ＨＰ  Ｓｌａｔｅ（商標）、モトローラＸｏｏｍ（商標）等）、電子書籍リーダ（例えば、アマゾンキンドル（Amazon Kindle：商標）、バーンズ・アンド・ノーブルのＮｏｏｋ（Barnes and Noble's Nook：商標）ｅＲｅａｄｅｒ等）、ラップトップコンピュータ、ノートブック、ネットブック、ゲーム機器（例えば、ＸＢＯＸライブ（商標）、任天堂ＤＳ（商標）、ソニープレイステーションポータブル等）、携帯用スキャナ及び／又はこれらに類する機器を含む。
【００４９】
ネットワークは、一般的に、グラフトポロジ内のクライアント、サーバ及び中間ノードの相互接続及び相互運用を含むと考えられる。なお、本明細書において「サーバ」という用語は、包括的に、通信ネットワークを介して、リモートユーザの要求を処理及び応答するコンピュータ、他の機器、プログラム又はこれらの組合せを意味する。サーバは、その情報を要求側の「クライアント」に提供する。ここで用いる「クライアント」という用語は、包括的に、要求を処理及び作成し、通信ネットワークを介して、サーバからの何らかの応答を取得及び処理する能力を有するコンピュータ、プログラム、他の機器、ユーザ及び／又はこれらの組合せを意味する。情報及び要求の処理を補助し及び／又はソースユーザから宛先ユーザへの情報の引き渡しを中継するコンピュータ、他のデバイス、プログラム又はこれらの組合せは、包括的に「ノード」と呼ばれる。ネットワークは、通常、ソースから宛先への情報の転送を補助するものとみなされる。特にソースから宛先への情報の引き渡しを担うノードは、通常、「ルータ」と呼ばれる。ネットワークには、例えば、ローカルエリアネットワーク（Local Area Network：ＬＡＮ）、ピコネットワーク、ワイドエリアネットワーク（Wide Area Network：ＷＡＮ）、無線ネットワーク（Wireless Network：ＷＬＡＮ）等の多くの形式がある。例えば、インターネットは、多数のネットワークの相互接続として一般的に認知されており、これによって、リモートクライアント及びサーバは、互いにアクセスし、相互運用される。
【００５０】
ＤＳＦＭコントローラ６０１は、コンピュータシステムに基づいていてもよく、コンピュータシステムは、以下に限定されるわけではないが、メモリ６２９に接続されたコンピュータシステム６０２を含むことができる。
【００５１】
コンピュータシステム６０２は、通常、クロック６３０、中央演算処理装置（「ＣＰＵ」及び／又は「プロセッサ」（本開示において、特段の言及がない限り、これらの用語は交換可能に使用される））６０３、メモリ６２９（例えば、読出専用メモリ（read only memory：ＲＯＭ）６０６、ランダムアクセスメモリ（random access memory：ＲＡＭ）６０５等）及び／又はインターフェースバス６０７を含み、これらは、多くの場合、必ずしも必要ではないが、全てが相互接続され及び／又は１つ以上の（マザー）ボード６０２上のシステムバス６０４を介して通信を行い、システムバス６０４は、導電性を有する及び／又は伝達可能な回路経路を有し、ここを介して、通信、演算、ストレージ等を実現するために命令（例えば、バイナリ符合化された信号）を伝達することができる。コンピュータシステムは、電源６８６に接続してもよく、例えば、オプションとして、電源は内部電源であってもよい。オプションとして、暗号プロセッサ６２６及び／又はトランシーバ（例えば、ＩＣ）６７４をシステムバスに接続してもよい。他の実施形態においては、暗号プロセッサ及び／又はトランシーバは、インターフェースバスＩ／Ｏを介して、内部及び／又は外部周辺デバイス６１２として接続してもよい。次に、トランシーバは、アンテナ６７５に接続してもよく、これによって、様々な通信及び／又はセンサプロトコルの無線送信及び受信が実現され、例えば、アンテナは、テキサスインスツルメンツ（Texas Instruments）ＷｉＬｉｎｋＷＬ１２８３トランシーバチップ（例えば、８０２．１１ｎ、ブルートゥース３．０、ＦＭ、グローバルポジショニングシステム（global positioning system：ＧＰＳ）（これによってＤＳＦＭコントローラがその位置を判定できる。）を提供する。）、ＢｒｏａｄｃｏｍＢＣＭ４３２９ＦＫＵＢＧトランシーバチップ（例えば、８０２．１１ｎ、ブルートゥース２．１ＥＤＲ、ＦＭ等を提供する。）、ＢＣＭ２８１５０（ＨＳＰＡ）及びＢＣＭ２０７６（ブルートゥース４．０、ＧＰＳ等）、ＢｒｏａｄｃｏｍＢＣＭ４７５０ＩＵＢ８レシーバチップ（例えば、ＧＰＳ）、インフィニオンテクノロージーズ（Infineon Technologies）Ｘ−Ｇｏｌｄ６１８−ＰＭＢ９８００（例えば、２Ｇ／３ＧＨＳＤＰＡ／ＨＳＵＰＡ通信を提供する。）、インテルＸＭＭ７１６０（ＬＴＥ及びＤＣＨＳＰＡ）、クアルコム（Qualcom）ＣＤＭＡ（２０００）、モバイルデータ／ステーションモデム、スナップドラゴン（Snapdragon）等に接続してもよい。システムクロックは、水晶発振器を備えていてもよく、コンピュータシステムの回路経路へのベース信号を生成する。クロックは、システムバス及び様々なクロックマルチプライヤに接続してもよく、クロックマルチプライヤは、コンピュータシステム内で相互接続されている他のコンポーネントのためのベース動作周波数を上昇又は低下させる。コンピュータシステム内のクロック及び様々なコンポーネントは、システムを介して伝達される情報を表す信号を駆動する。このような、コンピュータシステムを介する、情報を表す命令の送信及び受信は、通信と呼ばれることがある。これらの通信命令は、更に、インスタントコンピュータシステムを越えて、通信ネットワーク、入力デバイス���他のコンピュータシステム、周辺デバイス等に送信され、これらから受信され、応答及び／又は戻り通信を引き起こす。なお、他の実施形態においては、上述したコンポーネントの何れも、互いに直接的に接続してもよく、ＣＰＵに接続してもよく、及び／又は、例えば、様々なコンピュータシステムによって採用されているように、多数の変形例によって組織化してもよい。
【００５２】
ＣＰＵは、プログラムコンポーネントを実行して、ユーザ及び／又はシステムが生成した要求の実行に適する少なくとも１つの高速データプロセッサを含んでいてもよい。多くの場合、プロセッサ自体には、様々な専用処理ユニットが組み込まれており、これらには、以下に限定されるわけではないが、浮動小数点ユニット、整数処理ユニット、統合システム（バス）コントローラ、ロジック演算ユニット、メモリ管理制御ユニット等が含まれ、更に、グラフィックス処理ユニット、デジタル信号処理ユニット等の専用処理サブユニットも含まれる。更に、プロセッサは、内部高速アクセスアドレス指定可能メモリを含んでいてもよく、プロセッサ自体を越えてメモリ６２９をマッピング及びアドレッシングする能力を有し、内部メモリは、以下に限定されるわけではないが、高速レジスタ、様々なレベルのキャッシュメモリ（例えば、レベル１、２、３等）、ＲＡＭ等を含むことができる。プロセッサは、プロセッサが構築及びデコードできる命令アドレスを介してアクセス可能なメモリアドレス空間を用いて、このメモリにアクセスすることができ、これによって、メモリ状態／値を有する特定のメモリアドレス空間への回路経路にアクセスすることができる。ＣＰＵは、マイクロプロセッサ、例えば、ＡＭＤのＡｔｈｌｏｎ、Ｄｕｒｏｎ及び／又はＯｐｔｅｒｏｎ、ＡＲＭのクラシック（例えば、ＡＲＭ７／９／１１）、埋め込み（Ｃｏｒｅｔｘ−Ｍ／Ｒ）、アプリケーション（Cortex−Ａ）、及びセキュアプロセッサ、ＩＢＭ及び／又はモトローラのＤｒａｇｏｎＢａｌｌ及びＰｏｗｅｒＰＣ、ＩＢＭ及びソニーのＣｅｌｌプロセッサ、インテルのＡｔｏｍ、Ｃｅｌｅｒｏｎ（モバイル）、Ｃｏｒｅ（２／Ｄｕｏ／ｉ３／ｉ５／ｉ７）、Ｉｔａｎｉｕｍ、Ｐｅｎｔｉｕｍ、Ｘｅｏｎ及び／又はＸＳｃａｌｅ、及び／又はこれらに類する他プロセッサであってもよい。ＣＰＵは、導電性及び／又は伝達可能な導体（例えば、（プリントされた）電子及び／又は光回路）を通過する命令を介してメモリとインタラクトし、保存された命令（すなわち、プログラムコード）を実行する。このような命令の伝達によって、ＤＳＦＭコントローラ内の及び様々なインターフェースを介する通信が実現する。処理条件がより高い速度及び／又は能力を要求する場合、同様に、分散型プロセッサ（例えば、分散型ＤＳＦＭシステム／コントローラ）、メインフレーム、マルチコア、配列及び／又はスーパコンピュータアーキテクチャを使用してもよい。これに代えて、実用条件がより高い携帯性を要求する場合、より小さなモバイル機器（例えば、スマートフォン、個人情報端末（Personal Digital Assistant：ＰＤＡ）等）を使用してもよい。
【００５３】
特定の実装では、ＤＳＦＭシステムの特徴は、マイクロコントローラ、例えば、ＣＡＳＴのＲ８０５１ＸＣ２マイクロコントローラ、インテルのＭＣＳ５１（すなわち、８０５１マイクロコントローラ）及び／又はこれらに類するマイクロコントローラをインプリメントすることによって達成される。また、ＤＳＦＭシステムの特定の特徴をインプリメントするために、幾つかの特徴は、埋込型部品、例えば、特定用途向け集積回路（Application-Specific Integrated Circuit：ＡＳＩＣ）、デジタル信号処理（Digital Signal Processing：ＤＳＰ）、フィールドプログラマブルゲートアレイ（Field Programmable Gate Array：ＦＰＧＡ）、及び／又はこの他の埋込技術を用いて実現してもよい。例えば、ＤＳＦＭコンポーネントの集合体（分散していても、この他の形式で存在してもよく、例えば、ＩＭＡＳ３４１等）及び／又は特徴は、マイクロプロセッサ及び／又は埋込型部品、例えば、ＡＳＩＣ、コプロセッサ、ＤＳＰ、ＦＰＧＡによってインプリメントしてもよい。これに代えて、ＤＳＦＭシステムの幾つかの実装は、様々な特徴又は信号処理を達成するために構成及び使用される埋込型部品によって実現してもよい。
【００５４】
特定の実装では、埋込型部品は、ソフトウェアソリューション、ハードウェアソリューション及び／又はハードウェア／ソフトウェアソリューションの何らかの組合せを含んでいてもよい。例えば、ここに説明するＤＳＦＭシステムの特徴は、「ロジックブロック」と呼ばれるプログラム可能なロジックコンポーネントを含む半導体デバイスであるＦＰＧＡ、並びにプログラム可能な内部接続、例えば、高性能ＦＰＧＡＶｉｒｔｅｘシリーズ及び／又はＸｉｌｉｎｘによって製造される低コストＳｐａｒｔａｎシリーズを用いてインプリメントしてもよい。ロジックブロック及び内部接続は、ＦＰＧＡが製造された後に、ＤＳＦＭシステム機能の何れかをインプリメントするように、顧客又は設計者によってプログラムしてもよい。プログラム可能な内部接続の階層により、１−チップのプログラマブルボードと同様に、ＤＳＦＭシステム設計者／管理者の要求に応じて、ロジックブロックを相互接続することができる。ＦＰＧＡのロジックブロックは、基本的な論理ゲート、例えば、ＡＮＤ及びＸＯＲの演算、又はより複雑な組合せの演算子、例えば、デコーダ又は単純数値演算を実行するようにプログラムしてもよい。大部分のＦＰＧＡでは、ロジックブロックは、メモリ素子も含み、これは、フリップフロップ又はより完全なメモリのブロックであってもよい。幾つかの状況では、ＤＳＦＭシステムは、通常のＦＰＧＡ上で開発し、ＡＳＩＣ実装とより似た、固定されたバージョンに移し替えてもよい。代替となる又は共存する実装では、ＦＰＧＡに代えて又はこれに加えて、最終的なＡＳＩＣに１つ以上のＤＳＦＭコントローラ特徴を移し替えてもよい。実装に応じて、上述した埋込型部品及びマイクロプロセッサの全ては、ＤＳＦＭシステムのための「ＣＰＵ」及び／又は「プロセッサ」とみなすことができる。
【００５５】
電源６８６は、小型電子回路基板デバイスに電源を供給する如何なる標準的な形式を有していてもよく、例えば、アルカリ、水素化リチウム、リチウムイオン、リチウムポリマ、ニッケルカドミウム、太陽電池等の電池であってもよい。他のタイプのＡＣ又はＤＣ電源も同様に使用することができる。１つの実施形態において、太陽電池の場合、太陽電池が光エネルギを捕捉するための開口をケースに設けてもよい。電池６８６は、ＤＳＦＭシステムの相互接続された後段のコンポーネントの少なくとも１つに接続され、これによって、これらに相互接続された全ての部品に電流を提供する。ある例では、電源６８６は、システムバスコンポーネント６０４に接続される。他の実施形態においては、Ｉ／Ｏ６０８インターフェースに接続された外部電源６８６が設けられる。例えば、ＵＳＢ及び／又はＩＥＥＥ１３９４接続は、接続を介してデータ及び電力の両方を伝送し、したがって、適切な電源となる。
【００５６】
インターフェースバス６０７は、必ずしも必須ではないが、多くの場合、アダプタカードの形式である幾つかのインターフェースアダプタを受け入れ、これに接続し及び／又はこれと通信するものであってよく、ここで、インターフェースアダプタは、以下に限定されるわけではないが、入出力インターフェース（Ｉ／Ｏ）６０８、ストレージインターフェース６０９、ネットワークインターフェース６１０等を含む。オプションとして、暗号プロセッサインターフェース６２７も同様にインターフェースバスに接続してもよい。インターフェースバスは、インターフェースアダプタの相互の及びコンピュータシステムの他のコンポーネントとの通信を提供する。インターフェースアダプタは、インターフェースバスに互換性を有している。インターフェースアダプタは、拡張及び／又はスロットアーキテクチャによってインターフェースバスに接続してもよい。使用できる様々な拡張及び／又はスロットアーキテクチャは、例えば、以下に限定されるわけではないが、アクセラレーテッドグラフィックポート（Accelerated Graphics Port：ＡＧＰ）、カードバス、ＥｘｐｒｅｓｓＣａｒｄ、（拡張：Extended）業界標準アーキテクチャ（Industry Standard Architecture：（Ｅ）ＩＳＡ）、マイクロチャネルアーキテクチャ（Micro Channel Architecture：ＭＣＡ）、ＮｕＢｕｓ、周辺コンポーネントインターコネクト（拡張）（Peripheral Component Interconnect （Extended）Peripheral Component Interconnect：ＰＣＩ（Ｘ））、ＰＣＩＥｘｐｒｅｓｓ、ＰＣＭＣＩＡ（Personal Computer Memory Card International Association）、Ｔｈｕｎｄｅｒｂｏｌｔ等を含む。
【００５７】
ストレージインターフェース６０９は、例えば、以下に限定されるわけではないが、ストレージデバイス６１４、リムーバブルディスクデバイス等の幾つかのストレージデバイスを受け入れ、これに接続し及び／又はこれと通信するものであってもよい。ストレージインターフェースは、例えば、以下に限定されるわけではないが、（ウルトラ）（シリアル）アドバンスドテクノロジアタッチメント（パケットインターフェース）（（ウルトラ）（シリアル）ＡＴＡ（ＰＩ））、（拡張）統合ドライブエレクトロニクス（Integrated Drive Electronics：（Ｅ）ＩＤＥ）、電気電子技術者協会（Institute of Electrical and Electronics Engineers：ＩＥＥＥ）１３９４、イーサネット、ファイバチャネル、スモールコンピュータシステムインターフェース（Small Computer Systems Interface：ＳＣＳＩ）、Ｔｈｕｎｄｅｒｂｏｌｔ、ユニバーサルシリアルバス（Universal Serial Bus：ＵＳＢ）等の接続プロトコルを使用してもよい。
【００５８】
ネットワークインターフェース６１０は、通信ネットワーク６１３を受け入れ、これに接続し及び／又はこれと通信するものであってもよい。通信ネットワーク６１３を介して、ユーザ６３３ａは、リモートクライアント６３３ｂ（例えば、ウェブブラウザを有するコンピュータ）を介してＤＳＦＭコントローラにアクセスできる。ネットワークインターフェースは、例えば、以下に限定されるわけではないが、直接接続、イーサネット、（シック、シン、ツイステッドペア１０／１００／１０００ベースＴ等）、トークンリング、無線接続、例えば、ＩＥＥＥ８０２．１１ａ−ｘ等の接続プロトコルを使用してもよい。処理条件がより高い速度及び／又は能力を要求する場合、分散型ネットワークコントローラ（例えば、分散型ＤＳＦＭシステム）アーキテクチャを同様に使用して、ＤＳＦＭコントローラが要求する通信帯域幅を確保し、負荷のバランスを取り及び／又は通信帯域幅を広げてもよい。通信ネットワークは、直接的な相互接続、インターネット、ローカルエリアネットワーク（Local Area Network：ＬＡＮ）、メトロポリタンエリアネットワーク（Metropolitan Area Network：ＭＡＮ）、インターネット上のノードとしてのオペレーティングミッション（Operating Missions as Nodes on the Internet：ＯＭＮＩ）、高信頼カスタムコネクション、ワイドエリアネットワーク（Wide Area Network：ＷＡＮ）、（例えば、以下に限定されるわけではないが、無線アプリケーションプロトコル（Wireless Application Protocol：ＷＡＰ）、Ｉ−ｍｏｄｅ等のプロトコルを採用する）無線ネットワーク等のうちの１つ又は任意の組合せであってもよい。ネットワークインターフェースは、入出力（Ｉ／Ｏ）インターフェースの特化された形式とみなすことができる。更に、複数のネットワークインターフェース６１０を使用して、様々な通信ネットワークタイプ６１３に接続することができる。例えば、複数のネットワークインターフェースを使用して、ブロードキャスト、マルチキャスト及び／又はユニキャストネットワークを介して通信を実現することができる。
【００５９】
入出力インターフェース（Ｉ／Ｏ）６０８は、ユーザ入力デバイス６１１、周辺デバイス６１２、暗号プロセッサデバイス６２８等を受け入れ、これらと通信し、及び／又はこれらに接続することができる。Ｉ／Ｏは、以下に限定されるわけではないが、アナログ、デジタル、モノラル、ＲＣＡ、ステレオ等の音声、アップルデスクトップバス（Apple Desktop Bus：ＡＤＢ）、ブルートゥース、ＩＥＥＥ１３９４ａ−ｂ、シリアル、ユニバーサルシリアルバス（universal serial bus：ＵＳＢ）、赤外線、ジョイスティック、キーボード、ＭＩＤＩ、光、ＰＣ  ＡＴ、ＰＳ／２、パラレル、ラジオ等のデータ、アップルデスクトップコネクタ（Apple Desktop Connector：ＡＤＣ）、ＢＮＣ、コアキシャル、コンポーネント、コンポジット、デジタル、ＤｉｓｐｌａｙＰｏｒｔ、デジタルビジュアルインターフェース（Digital Visual Interface：ＤＶＩ）、高精細度マルチメディアインターフェース（high-definition multimedia interface：ＨＤＭＩ）、ＲＣＡ、ＲＦアンテナ、Ｓ−Ｖｉｄｅｏ、ＶＧＡ等のビデオインターフェース、８０２．１１ａ／ｂ／ｇ／ｎ／ｘ、ブルートゥース、セルラ（例えば、符号分割多元接続（code division multiple access：ＣＤＭＡ）、高速パケットアクセス（high speed packet access：ＨＳＰＡ（＋））、高速ダウンリンクパケットアクセス（high-speed downlink packet access：ＨＳＤＰＡ）、移動体通信のためのグローバルシステム（global system for mobile communications：ＧＳＭ）、ロングタームエボリューション（long term evolution：ＬＴＥ）、ＷｉＭａｘ等）の無線トランシーバ等の接続プロトコルを使用することができる。１つの出力デバイスは、ビデオディスプレイであってもよく、これは、ビデオインターフェースから信号を受け取るためのインターフェース（例えば、ＶＧＡ、ＤＶＩ回路及びケーブル）を備える陰極線管（Cathode Ray Tube：ＣＲＴ）、液晶ディスプレイ（Liquid Crystal Display：ＬＣＤ）、発光ダイオード（Light Emitting Diode：ＬＥＤ）、有機発光ダイオード（Organic Light Emitting Diode：ＯＬＥＤ）、プラズマ等に基づくモニタであってもよい。ビデオインターフェースは、コンピュータシステムによって生成された情報を合成し、ビデオメモリフレーム内の合成された情報に基づいてビデオ信号を生成する。他の出力デバイスは、ビデオインターフェースから信号を受け取るテレビジョン受像機である。多くの場合、ビデオインターフェースは、ビデオディスプレイインターフェースを受け入れるビデオ接続インターフェース（例えば、ＲＣＡコンポジットビデオケーブルを受け入れるＲＣＡコンポジットビデオコネクタ、ＤＶＩディスプレイケーブルを受け入れるＤＶＩコネクタ、ＨＤＭＩ等）を介して、合成されたビデオ情報を提供する。
【００６０】
ユーザ入力デバイス６１１は、多くの場合、ある種の周辺デバイス６１２（後述）であり、例えば、カードリーダ、ドングル、指紋リーダ、グローブ、グラフィックスタブレット、ジョイスティック、キーボード、マイク、マウス、リモートコントローラ、網膜リーダ、タッチスクリーン（例えば、静電容量方式、 抵抗膜方式等）、トラックボール、トラックパッド、センサ（例えば、加速度計、環境光、ＧＰＳ、ジャイロスコープ、近接センサ等）、スタイラス等を含むことができる。
【００６１】
周辺デバイス６１２は、例えば、ネットワークインターフェース、ストレージインターフェース、インターフェースバスへの直接接続、システムバス、ＣＰＵ等のＩ／Ｏ及び／又は他の同様の設備に接続し及び／又はこれらと通信してもよい。周辺デバイスは、外部であっても内部であってもよく及び／又はＤＳＦＭコントローラの一部であってもよい。周辺デバイスは、アンテナ、音声デバイス（例えば、ラインイン、ラインアウト、マイク入力、スピーカ等）、カメラ（例えば、スチール、ビデオ、ウェブカメラ等）、ドングル（例えば、デジタル署名及び／又はこれに類するものによって、安全なトランザクションを保証するコピー保護を目的とする。）、外部プロセッサ（能力を追加することを目的とする、例えば、暗号デバイス６２８）、力フィードバック装置（例えば、振動モータ）、近距離無線通信（near field communication：ＮＦＣ）デバイス、ネットワークインターフェース、プリンタ、無線周波数識別子（radio frequency identifier：ＲＦＩＤ）、スキャナ、ストレージデバイス、トランシーバ（例えば、セルラ、ＧＰＳ等）、ビデオデバイス（例えば、ゴーグル、モニタ等）、ビデオソース、バイザ等を含んでいてもよい。周辺デバイスは、多くの場合、複数のタイプの入力デバイス（例えば、マイク、カメラ等）を含んでいる。
【００６２】
なお、ユーザ入力デバイス及び周辺デバイスを使用してもよいが、ＤＳＦＭコントローラは、ネットワークインターフェース接続を介してアクセスが提供される埋込型、専用及び／又はモニタなし（すなわち、ヘッドレス）デバイスであってもよい。
【００６３】
暗号ユニット、例えば、以下に限定されるわけではないが、マイクロコントローラ、プロセッサ６２６、インターフェース６２７及び／又はデバイス６２８は、ＤＳＦＭコントローラに接続され及び／又はＤＳＦＭコントローラと通信することができる。暗号ユニットのために及び／又は暗号ユニットの内部で、モトローラ社（Motorola Inc.）によって製造されているＭＣ６８ＨＣ１６マイクロコントローラを使用してもよい。ＭＣ６８ＨＣ１６マイクロコントローラは、１６ＭＨｚの構成において１６ビット積和（multiply-and-accumulate）命令を利用し、１秒以内に５１２ビットのＲＳＡ秘密鍵演算を実行する。暗号ユニットは、インタラクトするエージェントからの通信の認証をサポートすると共に、匿名のトランザクションを可能にする。暗号ユニットは、ＣＰＵの一部として構成してもよい。同等のマイクロコントローラ及び／又はプロセッサを使用してもよい。他の市販の専門暗号プロセッサは、ＢｒｏａｄｃｏｍのＣｒｙｐｔｏＮｅｔＸ及び他のセキュリティプロセッサ、ｎＣｉｐｈｅｒのｎＳｈｉｅｌｄ（例えば、Ｓｏｌｏ、Ｃｏｎｎｅｃｔ等）、ＳａｆｅＮｅｔのＬｕｎａ  ＰＣＩ（例えば、７１００）シリーズ、Ｓｅｍａｐｈｏｒｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓの４０ＭＨｚのＲｏａｄｒｕｎｎｅｒ１８４、ｓＭＩＰ（例えば、２０８９５６）、Ｓｕｎの暗号アクセラレータ（例えば、アクセラレータ６０００ＰＣＩｅボード、アクセラレータ５００ドーターカード）、５００＋ＭＢ／ｓの暗号命令を実行する能力を有する／（例えば、Ｌ２１００、Ｌ２２００、Ｕ２４００）ライン、ＶＬＳＩ  Ｔｅｃｈｎｏｌｏｇｙの３３ＭＨｚ６８６８等を含む。
【００６４】
包括的には、プロセッサが情報の保存及び／又は読出を行うことができるあらゆる機械及び／又は実施形態がメモリ６２９とみなされる。但し、メモリは、代替可能な技術及びリソースであり、したがって、互いに代えて又は互いと共に、幾つのメモリ実施形態を採用してもよい。ＤＳＦＭコントローラ及び／又はコンピュータシステムが様々な形式のメモリ６２９を使用できることは、明らかである。例えば、コンピュータシステムは、オンチップＣＰＵメモリ（例えば、レジスタ）、ＲＡＭ、ＲＯＭ及び他の何らかのストレージデバイスの動作を紙穿孔テープ又は紙穿孔カード機構によって提供するように構成してもよいが、このような実施形態は、動作速度が非常に遅くなる。一構成においては、メモリ６２９は、ＲＯＭ６０６、ＲＡＭ６０５及びメモリデバイス６１４を含む。ストレージデバイス６１４は、幾つのコンピュータストレージデバイス／システムを採用してもよい。ストレージデバイスは、ドラム、（固定及び／又はリムーバブル）磁気ディスクドライブ、光磁気ドライブ、光ドライブ（すなわち、ブルーレイ、ＣＤ−ＲＯＭ／ＲＡＭ／Ｒｅｃｏｒｄａｂｌｅ（Ｒ）／ＲｅＷｒｉｔａｂｌｅ（ＲＷ）、ＤＶＤＲ／ＲＷ、ＨＤ  ＤＶＤＲ／ＲＷ等）、デバイスのアレイ（例えば、独立ディスクの冗長アレイ（Redundant Array of Independent Disks：ＲＡＩＤ））、半導体メモリデバイス（ＵＳＢメモリ、ソリッドステートドライブ（solid state drive：ＳＳＤ）等）、他のプロセッサが読取可能なメモリ媒体等を含んでいてもよい、このように、コンピュータシステムは、通常、メモリを要求し、利用する。
【００６５】
メモリ６２９は、プログラム及び／又はデータベースコンポーネント及び／又はデータの集合体を含んでいてもよく、これらには、例えば、以下に限定されるわけではないが、オペレーティングシステムコンポーネント６１５（オペレーティングシステム）、情報サーバコンポーネント６１６（情報サーバ）、ユーザインターフェースコンポーネント６１７（ユーザインターフェース）、ウェブブラウザコンポーネント６１８（ウェブブラウザ）、データベース６１９、メールサーバコンポーネント６２１、メールクライアントコンポーネント６２２、暗号サーバコンポーネント６２０（暗号サーバ）、ＤＳＦＭコンポーネント６３５等（すなわち、集合的にコンポーネント集合体）が含まれる。これらのコンポーネントは、ストレージデバイスによって保存され及びストレージデバイスからアクセスしてもよく、及び／又はストレージデバイスからインターフェースバスを介してアクセスできるようにしてもよい。コンポーネント集合体内の非従来型のプログラムコンポーネントは、ローカルストレージデバイス６１４に保存してもよいが、これらは、周辺デバイス、ＲＡＭ、通信ネットワークを介するリモートストレージ設備、ＲＯＭ、様々な形式のメモリ等のメモリにロード及び／又は保存してもよい。
【００６６】
オペレーティングシステムコンポーネント６１５は、ＤＳＦＭコントローラの動作を実現する実行可能なプログラムコンポーネントである。オペレーティングシステムは、Ｉ／Ｏ、ネットワークインターフェース、周辺デバイス、ストレージデバイス等のアクセスを実現する。オペレーティングシステムは、障害耐性が高く、スケーラブルで、安全なシステムであってもよく、例えば、アップルマッキントッシュＯＳＸ（サーバ）、ＡＴ＆Ｔプラン９、ＢｅＯＳ、Ｕｎｉｘ及びＵｎｉｘに類するシステムディストリビューション（例えば、ＡＴ＆ＴのＵＮＩＸ、バークレーソフトウェアディストリビューション（Berkeley Software Distribution：ＢＳＤ）及び例えば、ＦｒｅｅＢＳＤ、ＮｅｔＢＳＤ、ＯｐｅｎＢＳＤ等のバリエーション、Ｌｉｎｕｘディストリビューション、例えばＲｅｄ  Ｈａｔ、Ｕｂｕｎｔｕ等、及び／又はこれらに類するオペレーティングシステム等であってもよい。なお、より限定された及び／又はより安全が低いオペレーティングシステムを使用してもよく、例えば、アップルマッキントッシュＯＳ、ＩＢＭ  ＯＳ／２、マイクロソフトＤＯＳ、マイクロソフトＷｉｎｄｏｗｓ２０００／２００３／３．１／９５／９８／ＣＥ／Ｍｉｌｌｅｎｉｕｍ／ＮＴ／Ｖｉｓｔａ／ＸＰ（サーバ）、ＰａｌｍＯＳ等を使用してもよい。更に、モバイルオペレーティングシステム、例えば、アップルのｉＯＳ、グーグルのアンドロイド、ヒューレットパッカードのＷｅｂＯＳ、マイクロソフトのウィンドウズモバイル等を使用してもよい。これらのオペレーティングシステムの何れも、ＤＳＦＭコントローラのハードウェアに埋め込んでもよく、及び／又はメモリ／ストレージに保存／ロードしてもよい。オペレーティングシステムは、それ自体を含むコンポーネント集合体内で他のコンポーネントに及び／又は他のコンポーネントと通信してもよい。多くの場合、オペレーティングシステムは、他のプログラムコンポーネント、ユーザインターフェース等と通信する。例えば、オペレーティングシステムは、プログラムコンポーネント、システム、ユーザ及び／又はデータ通信、要求及び／又は応答を含み、これらと通信し、これらを生成、取得及び／又は提供する。オペレーティングシステムは、ＣＰＵによって実行されると、通信ネットワーク、データ、Ｉ／Ｏ、周辺デバイス、プログラムコンポーネント、メモリ、ユーザ入力デバイス等とのインタラクションを可能にする。オペレーティングシステムは、通信プロトコルを提供し、これにより、ＤＳＦＭコントローラは、通信ネットワーク６１３を介して、他のエンティティと通信することができる。ＤＳＦＭコントローラは、インタラクションのためのサブキャリア伝達メカニズムとして、様々な通信プロトコルを使用でき、例えば、以下に限定されるわけではないが、マルチキャスト、ＴＣＰ／ＩＰ、ＵＤＰ、ユニキャスト等を使用してもよい。
【００６７】
情報サーバコンポーネント６１６は、ＣＰＵによって実行される保存されたプログラムコンポーネントである。情報サーバは、例えば、アパッチソフトウェア財団のアパッチ（Apache）、マイクロソフトのインターネットインフォメーションサーバ（Internet Information Server）等のインターネット情報サーバであってもよい。情報サーバにより、設備は、アクティブサーバページ（Active Server Page：ＡＳＰ）、ＡｃｔｉｖｅＸ、（ＡＮＳＩ）（Ｏｂｊｅｃｔｉｖｅ−）Ｃ（＋＋）、Ｃ＃及び／又は．ＮＥＴ、コモンゲートウェイインターフェース（Common Gateway Interface：ＣＧＩ）スクリプト、ダイナミック（Ｄ）ハイパーテキストマークアップ言語（hypertext markup language：ＨＴＭＬ）、ＦＬＡＳＨ、Ｊａｖａ、ＪａｖａＳｃｒｉｐｔ、パール（Practical Extraction Report Language：ＰＥＲＬ）、ハイパーテキストプレプロセッサ（Hypertext Pre-Processor：ＰＨＰ）、パイプス（pipes）、パイソン（Python）、無線アプリケーションプロトコル（wireless application protocol：ＷＡＰ）、ＷｅｂＯｂｊｅｃｔｓ等のプログラムコンポーネントを実行できる。情報サーバは、安全な通信プロトコルをサポートしてもよく、このようなプロトコルとしては、以下に限定されるわけではないが、ファイル転送プロトコル（File Transfer Protocol：ＦＴＰ）、ハイパーテキストトランスファプロトコル（Secure Hypertext Transfer Protocol：ＨＴＴＰ）、セキュアＨＴＴＰ（Secure Hypertext Transfer Protocol：ＨＴＴＰＳ）、セキュアソケットレイヤ（Secure Socket Layer：ＳＳＬ）、メッセージングプロトコル（例えば、Ａｍｅｒｉｃａ  Ｏｎｌｉｎｅ（ＡＯＬ）インスタントメッセンジャー（ＡＩＭ）、アップルのｉＭｅｓｓａｇｅ、アプリケーションエクスチェンジ（Application Exchange：ＡＰＥＸ）、ＩＣＱ、インターネットリレーチャット（Internet Relay Chat：ＩＲＣ）、マイクロソフトネットワーク（Microsoft Network：ＭＳＮ）メッセンジャーサービス、プレゼンスアンドインスタントメッセージングプロトコル（Presence and Instant Messaging Protocol：ＰＲＩＭ）、インターネットエンジニアリングタスクフォース（Internet Engineering Task Force：ＩＥＴＦ）のセッション開始プロトコル（Session Initiation Protocol：ＳＩＰ）、インスタントメッセージング及びプレゼンスレバレイジング拡張のためのＳＩＰ（SIP for Instant Messaging and Presence Leveraging Extensions：ＳＩＭＰＬＥ）、オープンＸＭＬベースの拡張可能メッセージング及びプレゼンスプロトコル（XML-based Extensible Messaging and Presence Protocol：ＸＭＰＰ）（すなわち、Ｊａｂｂｅｒ又はオープンモバイルアライアンス（Open Mobile Alliance：ＯＭＡ）のインスタントメッセージング及びプレゼンスサービス（Instant Messaging and Presence Service：ＩＭＰＳ））、Ｙａｈｏｏ！インスタントメッセンジャーサービス等がある。情報サーバは、ウェブページの形式でウェブブラウザに結果を提供し、他のプログラムコンポーネントとのインタラクションによって、ウェブページの操作を可能にする。ＨＴＴＰ要求のドメインネームシステム（Domain Name System：ＤＮＳ）の解決部分が特定の情報サーバに解決されると、この情報サーバは、ＤＳＦＭコントローラの指定された位置において、ＨＴＴＰ要求の残りの部分に基づいて、情報の要求を解決する。例えば、要求ｈｔｔｐ：／／１２３．１２４．１２５．１２６／ｍｙＩｎｆｏｒｍａｔｉｏｎ．ｈｔｍｌは、要求のＩＰ部分「１２３．１２４．１２５．１２６」を含み、ＤＮＳサーバによってこのＩＰアドレスにおける情報サーバに解決され、この情報サーバは、続いて、要求の「／ｍｙＩｎｆｏｒｍａｔｉｏｎ．ｈｔｍｌ」部分についてｈｔｔｐ要求を更に解析し、これを情報「ｍｙＩｎｆｏｒｍａｔｉｏｎ．ｈｔｍｌ」を含むメモリ内の位置に解決する。更に、様々なポートを介する他の情報サービングプロトコル、例えば、ポート２１を介するＦＴＰ通信等を使用してもよい。情報サーバは、それ自体及び／又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び／又は他のコンポーネントと通信してもよい。多くの場合、情報サーバは、ＤＳＦＭデータベース６１９、オペレーティングシステム、他のプログラムコンポーネント、ユーザインターフェース、ウェブブラウザ等と通信する。
【００６８】
ＤＳＦＭデータベースへのアクセスは、例えば、以下に列挙するスクリプト言語（例えば、ＣＧＩ）及び以下に列挙するアプリケーション間通信チャネル（例えば、ＣＯＲＢＡ、ＷｅｂＯｂｊｅｃｔｓ等）の幾つかのデータベースブリッジメカニズムによって達成してもよい。ウェブブラウザを介する如何なるデータ要求も、ブリッジメカニズムによってＤＳＦＭが要求する適切な文法に解析される。一実施形態においては、情報サーバは、ウェブブラウザによってアクセスできるウェブ形式を提供する。ウェブ形式内のフィールドに供給されたエントリは、特定のフィールドに入力されているとタグ付けされ、これに応じて解析される。入力された項目は、フィールドタグと共に渡され、フィールドタグは、パーサに対し、適切なテーブル及び／又はフィールドに向けられたクエリを生成するように指示する。一実施形態において、パーサは、タグ付けされたテキストエントリに基づいて、適切な結合／選択（join/select）コマンドによって、検索文字列をインスタント化することによって、標準ＳＱＬでクエリを生成してもよく、この結果として生成されるコマンドは、ブリッジメカニズムを介して、クエリとしてＤＳＦＭに供給される。クエリからクエリ結果が生成されると、この結果は、ブリッジメカニズムに渡され、新しい結果のウェブページのフォーマット及び生成のために、ブリッジメカニズムによって解析してもよい。そして、このような新しい結果のウェブページは、情報サーバに供給され、情報サーバは、要求側のウェブブラウザにこれを供給してもよい。
【００６９】
また、情報サーバは、プログラムコンポーネント、システム、ユーザ及び／又はデータ通信、要求及び／又は応答を含み、これらと通信し、これらを生成、取得及び／又は提供する。
【００７０】
コンピュータインターフェースは、幾つかの点で自動車運転インターフェースと類似する。自動車運転インターフェース要素、例えば、操作ハンドル、ギアシフト、及び速度計は、自動車リソース及び状態のアクセス、操作及び表示を実現する。コンピュータインタラクションインターフェース要素、例えば、チェックボックス、カーソル、メニュー、スクローラ及びウィンドウ（集合的に及び一般的にウィジェットと呼ばれる）は、同様に、データ及びコンピュータハードウェア及びオペレーティングシステムリソース、並びに状態のアクセス、能力、操作及び表示を実現する。操作インターフェースは、一般的に、ユーザインターフェースと呼ばれる。グラフィカルユーザインターフェース（graphical user interface：ＧＵＩ）、例えば、アップルのマッキントッシュオペレーティングシステムのＡｑｕａ及びｉＯＳのＣｏｃｏａ  Ｔｏｕｃｈ、ＩＢＭのＯＳ／２、グーグルのＡｎｄｒｏｉｄ  Ｍｏｂｉｌｅ  ＵＩ、マイクロソフトのＷｉｎｄｏｗｓ２０００／２００３／３．１／９５／９８／ＣＥ／Ｍｉｌｌｅｎｉｕｍ／Ｍｏｂｉｌｅ／ＮＴ／ＸＰ／Ｖｉｓｔａ／７／８（すなわち、Ａｅｒｏ、Ｍｅｔｒｏ）、ＵｎｉｘのＸ−Ｗｉｎｄｏｗ（これは、例えば、更なるＵｎｉｘグラフィカルインターフェースライブラリ及びレイヤ、例えば、Ｋデスクトップ環境（K Desktop Environment：ＫＤＥ）、ｍｙｔｈＴＶ及びＧＮＵネットワークオブジェクトモデル環境（GNU Network Object Model Environment：ＧＮＯＭＥ）を含んでいてもよい。）、ウェブインターフェースライブラリ（例えば、ＡｃｔｉｖｅＸ、ＡＪＡＸ、（Ｄ）ＨＴＭＬ、ＦＬＡＳＨ、Ｊａｖａ、ＪａｖａＳｃｒｉｐｔ等、インターフェースライブラリ、例えば、以下に限定されるわけではないが、Ｄｏｊｏ、ｊＱｕｅｒｙ（ＵＩ）、ＭｏｏＴｏｏｌｓ、Ｐｒｏｔｏｔｙｐｅ、ｓｃｒｉｐｔ．ａｃｕｌｏ．ｕｓ、ＳＷＦＯｂｊｅｃｔ、Ｙａｈｏｏ！ユーザインターフェースの何れを使用してもよい。）は、ベースライン、及び視覚的に情報にアクセスし且つ情報を表示する手段をユーザに提供する。
【００７１】
ユーザインターフェースコンポーネント６１７は、ＣＰＵによって実行される保存されたプログラムコンポーネントである。ユーザインターフェースは、例えば、上述したオペレーティングシステム及び／又は操作環境が提供し、これらが備え及び／又はこれらの上にあるグラフィックユーザインターフェースであってもよい。ユーザインターフェースは、テキスト及び／又はグラフィック情報によってプログラムコンポーネント及び／又はシステム設備の表示、実行、インタラクション、操作及び／又は演算を実現する。ユーザインターフェースにより、ユーザは、コンピュータシステムに影響を与え、コンピュータシステムとインタラクトし及び／又はコンピュータシステムを操作できる。ユーザインターフェースは、それ自体及び／又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び／又は他のコンポーネントと通信してもよい。多くの場合、ユーザインターフェースは、オペレーティングシステム、他のプログラムコンポーネント等と通信する。ユーザインターフェースは、プログラムコンポーネント、システム、ユーザ及び／又はデータ通信、要求及び／又は応答を含み、これらと通信し、これらを生成、取得及び／又は提供する。
【００７２】
ウェブブラウザコンポーネント６１８は、ＣＰＵによって実行される保存されたプログラムコンポーネントである。ウェブブラウザは、例えば、グーグルの（モバイル）Ｃｈｒｏｍｅ、マイクロソフトＩｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ、Ｎｅｔｓｃａｐｅ  Ｎａｖｉｇａｔｏｒ、アップル（モバイル）Ｓａｆａｒｉ、例えば、アップルのＣｏｃｏａ（Ｔｏｕｃｈ）オブジェクトクラスを介する埋め込みウェブブラウザオブジェクト等のハイパーテキスト閲覧アプリケーションであってもよい。安全なウェブブラウジングのために、ＨＴＴＰＳ、ＳＳＬ等によって１２８ビット（又はこれ以上）の暗号化を提供してもよい。ウェブブラウザは、例えば、ＡｃｔｉｖｅＸ、ＡＪＡＸ、（Ｄ）ＨＴＭＬ、ＦＬＡＳＨ、Ｊａｖａ、ＪａｖａＳｃｒｉｐｔ、ウェブブラウザプラグインＡＰＩ（例えば、Ｃｈｒｏｍｅ、ＦｉｒｅＦｏｘ、Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ、Ｓａｆａｒｉ  Ｐｌｕｇ−ｉｎ及び／又はこれらに類するＡＰＩ）等を介してプログラムコンポーネントの実行を実現してもよい。ウェブブラウザ及び同様の情報アクセスツールは、ＰＤＡ、携帯電話、スマートフォン及び／又は他のモバイル機器に統合してもよい。ウェブブラウザは、それ自体及び／又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び／又は他のコンポーネントと通信してもよい。多くの場合、ウェブブラウザは、情報サーバ、オペレーティングシステム、統合されたプログラムコンポーネント（例えば、プラグイン）等と通信し、例えば、プログラムコンポーネント、システム、ユーザ及び／又はデータ通信、要求及び／又は応答を含み、これらと通信し、これらを生成、取得及び／又は提供する。また、ウェブブラウザ及び情報サーバの代わりに、両方の類似した動作を実行する複合アプリケーションを開発してもよい。複合アプリケーションは、同様に、ＤＳＦＭを備えるノードからの情報の取得及びユーザ、ユーザエージェント等への情報の提供を行う。複合アプリケーションは、標準的なウェブブラウザを使用するシステム上では無効（nugatory）にしてもよい。
【００７３】
メールサーバコンポーネント６２１は、ＣＰＵ６０３によって実行される保存されたプログラムコンポーネントである。メールサーバは、例えば、以下に限定されるわけではないが、アップルのメールサーバ（３）、ｄｏｖｅｃｏｔ、ｓｅｎｄｍａｉｌ、ＭｉｃｒｏｓｏｆｔＥｘｃｈａｎｇｅ等のインターネットメールサーバであってもよい。メールサーバにより、設備は、ＡＳＰ、ＡｃｔｉｖｅＸ、（ＡＮＳＩ）（Ｏｂｊｅｃｔｉｖｅ−）Ｃ（＋＋）、Ｃ＃及び／又は．ＮＥＴ、ＣＧＩスクリプト、Ｊａｖａ、ＪａｖａＳｃｒｉｐｔ、ＰＥＲＬ、ＰＨＰ、パイプス、パイソン、ＷｅｂＯｂｊｅｃｔｓ等のプログラムコンポーネントを実行できる。メールサーバは、例えば、以下に限定されるわけではないが、インターネットメッセージアクセスプロトコル（Internet message access protocol：ＩＭＡＰ）、メッセージングアプリケーションプログラミングインターフェース（Messaging Application Programming Interface：ＭＡＰＩ）／ＭｉｃｒｏｓｏｆｔＥｘｃｈａｎｇｅ、ポストオフィスプロトコル（post office protocol：ＰＯＰ３）、シンプルメールトランスファプロトコル（simple mail transfer protocol：ＳＭＴＰ）等の通信プロトコルをサポートすることができる。メールサーバは、ＤＳＦＭシステムを介して及び／又はＤＳＦＭシステムに送信され、中継され及び／又はＤＳＦＭシステムを通過する受信及び送信メールメッセージをルーティングし、送り及び処理する。
【００７４】
ＤＳＦＭシステムメールへのアクセスは、個々のウェブサーバコンポーネント及び／又はオペレーティングシステムによって提供される幾つかのＡＰＩによって達成できる。
【００７５】
また、メールサーバは、プログラムコンポーネント、システム、ユーザ及び／又はデータ通信、要求、情報及び／又は応答を含み、これらと通信し、これらを生成、取得及び／又は提供する。
【００７６】
メールクライアントコンポーネント６２２は、ＣＰＵ６０３によって実行される保存されたプログラムコンポーネントである。メールクライアントは、メールアプリケーション、例えば、アップル（Ｍｏｂｉｌｅ）メール、マイクロソフトＥｎｔｏｕｒａｇｅ、マイクロソフトＯｕｔｌｏｏｋ、マイクロソフトＯｕｔｌｏｏｋＥｘｐｒｅｓｓ、Ｍｏｚｉｌｌａ、Ｔｈｕｎｄｅｒｂｉｒｄ等であってもよい。メールクライアントは、幾つかの転送プロトコル、例えばＩＭＡＰ、マイクロソフトＥｘｃｈａｎｇｅ、ＰＯＰ３、ＳＭＴＰ等をサポートしてもよい。メールクライアントは、それ自体及び／又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び／又は他のコンポーネントと通信してもよい。多くの場合、メールクライアントは、メールサーバ、オペレーティングシステム、他のメールクライアント等と通信し、例えば、プログラムコンポーネント、システム、ユーザ及び／又はデータ通信、要求、情報及び／又は応答を含み、これらと通信し、これらを生成、取得及び／又は提供する。包括的には、メールクライアントは、電子メールメッセージを構築し、送信する能力を提供する。
【００７７】
暗号サーバコンポーネント６２０は、ＣＰＵ６０３、暗号プロセッサ６２６、暗号プロセッサインターフェース６２７、暗号プロセッサデバイス６２８等によって実行される保存されたプログラムコンポーネントである。暗号プロセッサインターフェースにより、暗号コンポーネントは、暗号化及び／又は解読要求を実行できるが、暗号コンポーネントは、ＣＰＵ上で動作してもよい。暗号コンポーネントは、提供されたデータの暗号化及び／又は解読を実現する。暗号コンポーネントは、対称及び非対称（例えば、プリティグッドプロテクション（Pretty Good Protection：ＰＧＰ））の両方の暗号化及び／又は解読を実現する。例えば、暗号コンポーネントは、以下に限定されるわけではないが、デジタル証明書（例えば、Ｘ．５０９認証フレームワーク）、デジタル署名、二重シグネチャ、エンベローピング、パスワードアクセス保護、公開鍵管理等の暗号技術を使用できる。暗号コンポーネントは、例えば、以下に限定されるわけではないが、チェックサム、データ暗号規格（Data Encryption Standard：ＤＥＳ）、楕円曲線暗号（Elliptical Curve Encryption：ＥＣＣ）、国際データ暗号アルゴリズム（International Data Encryption Algorithm：ＩＤＥＡ）、メッセージダイジェスト５（Message Digest：ＭＤ５、一方向ハッシュ操作である。）、パスワード、リベスト暗号（Rivest Cipher：ＲＣ５）、Ｒｉｊｎｄａｅｌ、ＲＳＡ（１９７７年に開発されたアルゴリズムを使用するロンリ・ベスト（Ron Rivest）、アディ・シャミル（Adi Shamir）及びレナード・アドルマン（Leonard Adleman）によってインターネット暗号化及び認証システム）、セキュアハッシュアルゴリズム（Secure Hash Algorithm：ＳＨＡ）、セキュアソケットレイヤ（Secure Socket Layer：ＳＳＬ）、セキュアハイパーテキストトランスファプロトコル（Secure Hypertext Transfer Protocol：ＨＴＴＰＳ）等の多数の（暗号化及び／又は解読）セキュリティプロトコルを実現できる。このような暗号化セキュリティプロトコルを使用することによって、ＤＳＦＭシステムは、全ての受信及び送信通信を暗号化することができ、仮想プライベートネットワーク（virtual private network：ＶＰＮ）内の、より広い通信ネットワークとのノードとして機能することができる。暗号コンポーネントは、「セキュリティ認証」のプロセスを実現し、これによって、リソースへのアクセスは、セキュリティプロトコルによって禁止され、暗号コンポーネントは、高信頼リソースへの認証されたアクセスを実現する。更に、暗号コンポーネントは、例えば、ＭＤ５ハッシュを使用して、デジタルオーディオファイルのための一意的シグネチャを取得するためのコンテンツの一意的識別子を提供できる。暗号コンポーネントは、それ自体及び／又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び／又は他のコンポーネントと通信してもよい。暗号コンポーネントは、通信ネットワークを介する情報の安全な伝送を可能にする暗号化スキームをサポートし、これにより、１つ以上のＤＳＦＭコンポーネントは、必要に応じて、安全なトランザクションを行うことができる。暗号コンポーネントは、ＤＳＦＭシステム上でのリソースの安全なアクセスを可能にし、リモートシステム上での高信頼リソースのアクセスを可能にし、すなわ��、高信頼リソースのクライアント及び／又はサーバとして機能できる。多くの場合、暗号コンポーネントは、情報サーバ、オペレーティングシステム、他のプログラムコンポーネント等と通信する。暗号コンポーネントは、プログラムコンポーネント、システム、ユーザ及び／又はデータ通信、要求及び／又は応答を含み、これらと通信し、これらを生成、取得及び／又は提供する。
【００７８】
ＤＳＦＭデータベースコンポーネント６１９は、データベース及びその保存されたデータとして実現してもよい。データベースは、ＣＰＵによって実行される保存されたプログラムコンポーネントであり、保存されたプログラムコンポーネント部分は、保存されたデータをＣＰＵに処理させる。データベースは、フォールトトレラント、リレーショナル、スケーラブル、セキュアデータベースの何れであってもよく、例えばＤＢ２、ＭｙＳＱＬ、Ｏｒａｃｌｅ、Ｓｙｂａｓｅ等であってもよい。リレーショナルデータベースは、フラットファイルの拡張である。リレーショナルデータベースは、一連の関連するテーブルから構成されている。テーブルは、キーフィールドを介して、互いに相互接続されている。キーフィールドを使用することによって、キーフィールドに対するインデクス付けによって、テーブルの組合せが可能になり、すなわち、キーフィールドは、様々なテーブルからの情報を結合するための次元的支点（dimensional pivot point）として機能する。関係は、通常、プライマリキーを照合することによって、テーブルの間で維持されているリンクを特定する。プライマリキーは、リレーショナルデータベース内のテーブルの列を一意的に特定するフィールドを意味する。より正確には、プライマリキーは、「一対多の」関係の「一の」側のテーブルの列を一意的に特定する。
【００７９】
これに代えて、ＤＳＦＭデータベースは、例えば、アレイ、ハッシュ、（リンク付き）リスト、ストラクト（struct）、構造化されたテキストファイル（例えば、ＸＭＬ）、テーブル等の様々な標準的なデータ構造を用いてインプリメントしてもよい。このようなデータ構造は、メモリ及び／又は（構造化された）ファイルに保存してもよい。他の代替例として、例えば、Ｆｒｏｎｔｉｅｒ、Ｏｂｊｅｃｔ  Ｓｔｏｒｅ、Ｐｏｅｔ、Ｚｏｐｅ等のオブジェクト指向型データベースを使用してもよい。オブジェクトデータベースは、共通の属性によって互いにグループ化及び／又リンクされた幾つかのオブジェクトコレクションを含むことができ、これらは、幾つかの共通の属性によって他のオブジェクトコレクションに関連付けることができる。オブジェクト指向型データベースは、オブジェクトが単にデータのピースではなく、所与のオブジェクト内にカプセル化された他のタイプの能力を有することできる点を除いて、リレーショナルデータベースと同様に機能する。ＤＳＦＭデータベースがデータ構造としてインプリメントされる場合、ＤＳＦＭデータベース６１９の使用は、他のコンポーネント、例えば、ＤＳＦＭコンポーネント６３５に統合してもよい。また、データベースは、データ構造、オブジェクト及び関連構造の混合としてインプリメントしてもよい。データベースは、標準的なデータ処理技術によって、無数の変形例として統合及び／又は分散させてもよい。データベースの一部（例えば、テーブル）は、エキスポート及び／又はインポートしてもよく、したがって、分散及び／又は統合してもよい。
【００８０】
一実施形態においては、データベースコンポーネント６１９は、幾つかのテーブル６１９ａ〜ｆを含む。ユーザテーブル６１９ａは、例えば、以下に限定されるわけではないが、ｕｓｅｒ＿ｉｄ、ｓｓｎ、ｄｏｂ、ｆｉｒｓｔ＿ｎａｍｅ、ｌａｓｔ＿ｎａｍｅ、ａｇｅ、ｓｔａｔｅ、ａｄｄｒｅｓｓ＿ｆｉｒｓｔｌｉｎｅ、ａｄｄｒｅｓｓ＿ｓｅｃｏｎｄｌｉｎｅ、ｚｉｐｃｏｄｅ、ｄｅｖｉｃｅｓ＿ｌｉｓｔ、ｃｏｎｔａｃｔ＿ｉｎｆｏ、ｃｏｎｔａｃｔ＿ｔｙｐｅ、ａｌｔ＿ｃｏｎｔａｃｔ＿ｉｎｆｏ、ａｌｔ＿ｃｏｎｔａｃｔ＿ｔｙｐｅやこの他等のフィールドを含んでいてもよい。ユーザテーブルは、ＤＳＦＭシステム上で複数のエンティティアカウントをサポートしてもよい。クライアントテーブル６１９ｂは、例えば、以下に限定されるわけではないが、ｄｅｖｉｃｅ＿ＩＤ、ｄｅｖｉｃｅ＿ｎａｍｅ、ｄｅｖｉｃｅ＿ＩＰ、ｄｅｖｉｃｅ＿ＭＡＣ、ｄｅｖｉｃｅ＿ｔｙｐｅ、ｄｅｖｉｃｅ＿ｍｏｄｅｌ、ｄｅｖｉｃｅ＿ｖｅｒｓｉｏｎ、ｄｅｖｉｃｅ＿ＯＳ、ｄｅｖｉｃｅ＿ａｐｐｓ＿ｌｉｓｔ、ｄｅｖｉｃｅ＿ｓｅｃｕｒｅｋｅｙ等のフィールドを含んでいてもよい。アプリケーションテーブル６１９ｃは、例えば、以下に限定されるわけではないが、ａｐｐｌｉｃａｔｉｏｎ＿ＩＤ、ａｐｐｌｉｃａｔｉｏｎ＿ｎａｍｅ、ａｐｐｌｉｃａｔｉｏｎ＿ｔｙｐｅ、ａｐｐｌｉｃａｔｉｏｎ＿ｂａｃｋｕｐ＿ｌｉｓｔ、ａｐｐｌｉｃａｔｉｏｎ＿ｓｙｎｃ等のフィールドを含んでいてもよい。メッセージテーブル６１９ｄは、例えば、以下に限定されるわけではないが、ｍｓｇ＿ｉｄ、ｍｓｇ＿ａｐｐｌｉｃａｔｉｏｎ、ｔｉｍｅｓｔａｍｐ、ｍｓｇ＿ｄｅｔａｉｌｓ＿ｌｉｓｔ、ｍｅｓｓａｇｅ＿ｓｉｚｅ、ｍｅｓｓａｇｅ＿ｏｒｉｇｉｎ、ｍｅｓｓａｇｅ＿ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ等のフィールドを含んでいてもよい。フェイルオーバテーブル６１９ｅは、例えば、以下に限定されるわけではないが、ｆａｉｌｏｖｅｒ＿ＩＤ、ｆａｉｌｏｖｅｒ＿ｔｉｍｅｓｔａｍｐ、ｐｒｉｍａｒｙ＿ａｐｐｌｉｃａｔｉｏｎ、ｓｅｃｏｎｄａｒｙ＿ａｐｐｌｉｃａｔｉｏｎ、ｆａｉｌｏｖｅｒ＿ｃｈｅｃｋ＿ｔｉｍｅ等のフィールドを含んでいてもよい。コード経路テーブル６１９ｆは、例えば、以下に限定されるわけではないが、ｃｏｄｅｐａｔｈ＿ＩＤ、ｃｏｄｅｐａｔｈ＿ｉｔｒｔｉｏｎｓ、ｏｐｔｍｚ＿ｔｈｒｓｈｌｄ＿ｍｉｎ、ｏｐｔｍｚ＿ｔｈｒｓｈｌｄ＿ｍａｘ、ｃｏｄｅｐａｔｈ＿ｌｅｎｇｔｈ、ｃｏｄｅｐａｔｈ＿ｐｒｉｏｒｔｙ等のフィールドを含んでいてもよい。
【００８１】
一実施形態において、ＤＳＦＭデータベースは、他のデータベースシステムとインタラクトしてもよい。例えば、分散型データベースシステムを用いて、検索ＤＳＦＭコンポーネントによるクエリ及びデータアクセスは、ＤＳＦＭデータベース及び統合データ保護層データベースの組合せを１つのデータベースエンティティとして取り扱ってもよい。
【００８２】
一実施形態において、ユーザプログラムは、ＤＳＦＭシステムを更新するために役立つ様々なユーザインターフェースプリミティブを含んでいてもよい。また、様々なアカウントは、ＤＳＦＭシステムがサービスを提供する必要があるクライアントの環境及びタイプによって、カスタムデータベーステーブルを必要とすることがある。なお、如何なる一意的フィールドを全体的なキーフィールドとして指定／ラベル付けしてもよい。他の実施形態において、これらのテーブルは、これら自身のデータベース及びこれらのそれぞれのデータベースコントローラ（すなわち、上述のテーブル毎に個別のデータベースコントローラ）に分散されている。標準的なデータ処理技術を用いることによって、複数のコンピュータシステム及び／又はストレージデバイスに亘ってデータベースをより分散させることができる。同様に、分散型データベースコントローラの構成は、様々なデータベースコンポーネント６１９ａ〜ｆを統合及び／又は分散させることによって変化させてもよい。ＤＳＦＭシステムは、データベースコントローラによって様々な設定、入力及びパラメータを追跡することによって構成してもよい。
【００８３】
ＤＳＦＭデータベースは、それ自体及び／又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び／又は他のコンポーネントと通信してもよい。多くの場合、ＤＳＦＭデータベースは、１つ以上のＤＳＦＭコンポーネント、他のプログラムコンポーネント等と通信する。データベースは、他のノード及びデータに関する情報を含み、保持し及び提供してもよい。
【００８４】
ＤＳＦＭコンポーネント６３５は、ＣＰＵによって実行される保存されたプログラムコンポーネントである。一実施形態において、ＤＳＦＭコンポーネントは、先の図面について説明したＤＳＦＭシステムの様々な実施形態の側面の何れか及び／又は全ての組合せを取り込む。このように、ＤＳＦＭシステムの実施形態は、様々な通信ネットワークを介する情報、サービス、トランザクション等のアクセス、取得及び供給に影響を及ぼすことができる。
【００８５】
１つ以上のＤＳＦＭコンポーネントは、ソフトウェアアプリケーションのプライマリインスタンスにおいて失敗した実行を、この失敗の前に、プライマリインスタンスの実行と同期するソフトウェアアプリケーションのセカンダリインスタンスの実行に訂正できる。一実施形態において、ＤＳＦＭコンポーネント６３５は、（例えば、断片化された仮想アドレス２０４等）を入力として受け取り、様々なコンポーネント（例えば、ＩＭＡＳ６４１等）を介してこの入力を出力（例えば、連続的で無限の仮想メモリアドレス空間２０６等）に変換する。
【００８６】
ノード間の情報の効率的なアクセスを可能にするＤＳＦＭコンポーネントは、標準的な開発ツール及び言語を使用することによって開発してもよく、これらには、例えば、以下に限定されるわけではないが、アパッチコンポーネント、アセンブリ、ＡｃｔｉｖｅＸ、バイナリ実行可能形式、（ＡＮＳＩ）（Ｏｂｊｅｃｔｉｖｅ−）Ｃ（＋＋）、Ｃ＃及び／又は．ＮＥＴ、データベースアダプタ、ＣＧＩスクリプト、Ｊａｖａ、ＪａｖａＳｃｒｉｐｔ、マッピングツール、手続型及びオブジェクト指向型開発ツール、ＰＥＲＬ、ＰＨＰ、パイソン、シェルスクリプト、ＳＱＬコマンド、ウェブアプリケーションサーバ拡張、ウェブ開発環境及びライブラリ（例えば、マイクロソフトのＡｃｔｉｖｅＸ、アドビＡＩＲ、ＦＬＥＸ及びＦＬＡＳＨ、ＡＪＡＸ、（Ｄ）ＨＴＭＬ、Ｄｏｊｏ（Ｊａｖａ）、ＪａｖａＳｃｒｉｐｔ、ｊＱｕｅｒｙ（ＵＩ）、ＭｏｏＴｏｏｌｓ、Ｐｒｏｔｏｔｙｐｅ、ｓｃｒｉｐｔ．ａｃｕｌｏ．ｕｓ、シンプルオブジェクトアクセスプロトコル（Simple Object Access Protocol：ＳＯＡＰ）、ＳＷＦＯｂｊｅｃｔ、Ｙａｈｏｏ！ユーザインターフェース等）、ＷｅｂＯｂｊｅｃｔｓ等がある。一実施形態においては、ＤＳＦＭサーバは、暗号サーバを使用して通信を暗号化及び解読する。ＤＳＦＭコンポーネントは、それ自体及び／又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び／又は他のコンポーネントと通信してもよい。多くの場合、ＤＳＦＭコンポーネントは、ＤＳＦＭデータベース、オペレーティングシステム、他のプログラムコンポーネント等と通信する。ＤＳＦＭシステムの実施形態は、プログラムコンポーネント、システム、ユーザ及び／又はデータ通信、要求及び／又は応答を含み、これらと通信し、これらを生成、取得及び／又は提供する。
【００８７】
ＤＳＦＭノードのコントローラコンポーネントのあらゆる構造及び／又は動作は、展開及び／又は配備を容易にする如何なる手法で結合、統合及び／又は分散してもよい。同様に、コンポーネント集合体は、配備及び／又は展開を可能にする如何なる手法で組合せてもよい。これを達成するために、オンデマンドでコンポーネントを動的に統合化された形式にロードできる共通のコードベース又は設備にコンポーネントを統合してもよい。
【００８８】
コンポーネント集合体は、標準的なデータ処理及び／又は開発技術によって無数の変形例に統合及び／又は分散できる。プログラムコンポーネント集合体内のプログラムコンポーネントの何れか１つの複数のインスタンスを１つのノード上で及び／又は複数のノードに亘ってインスタンス化し、ロードバランシング及び／又はデータ処理技術によって性能を向上させてもよい。更に、複数のコントローラ及び／又はストレージデバイス、例えば、データベースに亘って、単一のインスタンスを分散させてもよい。標準的なデータ処理通信技術によって、連携して動作する全てのプログラムコンポーネントインスタンス及びコントローラを分散させてもよい。
【００８９】
ＤＳＦＭコントローラの実施形態の構成は、システム配備のコンテキストに依存していてもよい。例えば、以下に限定されるわけではないが、予算、能力、場所及び／又は基底にあるハードウェアリソースの使用等の因子が配備条件及び構成に影響を及ぼすことがある。構成がより統合及び／又は集積化されたプログラムコンポーネントとなるか、より分散された一連のプログラムコンポーネントとなるか、及び／又は統合構成と分散構成の間の幾つかの組合せとなるかにかかわらず、データを通信し、取得し及び／又は提供することができる。プログラムコンポーネント集合体からの共通のコードベースに統合されたコンポーネントのインスタンスは、データを通信し、取得し及び／又は提供することができる。これは、例えば、以下に限定されるわけではないが、データ参照（例えば、ポインタ）、内部メッセージング、オブジェクトインスタンス変数通信、共有メモリ空間、変数通過（variable passing）等の内部アプリケーションデータ処理通信技術によって達成してもよい。
【００９０】
コンポーネント集合体のコンポーネントが互いに離散、分離及び／又は外部にある場合、
他のコンポーネントとのデータの通信、取得及び／又は提供は、例えば、以下に限定されるわけではないが、アプリケーションプログラムインターフェース（Application Program Interfaces：ＡＰＩ）情報通過、（分散型：distributed）コンポーネントオブジェクトモデル（Component Object Model：（Ｄ）ＣＯＭ）、（分散型）オブジェクトリンキング及び埋め込み（Object Linking and Embedding：（Ｄ）ＯＬＥ）等、共通オブジェクトリクエストブローカアーキテクチャ（Common Object Request Broker Architecture：ＣＯＲＢＡ）、Ｊｉｎｉローカル及びリモートアプリケーションプログラムインターフェース、ＪａｖａＳｃｒｉｐｔオブジェクトノテーション（JavaScript Object Notation：ＪＳＯＮ）、遠隔メソッド呼出（Remote Method Invocation：ＲＭＩ）、ＳＯＡＰ、プロセスパイプ、共有ファイル等のアプリケーション間データ処理通信技術によって達成してもよい。アプリケーション間通信のために離散コンポーネント間で又はアプリケーション内通信のために単一のコンポーネントのメモリ空間内で送信されるメッセージは、文法の作成及び解析によって実現してもよい。文法は、コンポーネント内及びコンポーネント間の通信メッセージの基礎となる文法生成及び解析能力を可能にする、例えば、ｌｅｘ、ｙａｃｃ、ＸＭＬ等の開発ツールを用いて開発してもよい。
【００９１】
例えば、文法は、例えば、以下のようなＨＴＴＰポストコマンドを認識するように構成してもよい。
w3c -post http://... Value1
【００９２】
ここで、「ｈｔｔｐ：／／」は、文法構文の一部であり、これに続くものがポスト値の一部であるとみなされるため、Ｖａｌｕｅ１は、パラメータである。同様に、このような文法では、変数「Ｖａｌｕｅ１」は、「ｈｔｔｐ：／／」ポストコマンドに挿入して送信してもよい。文法構文自体は、解釈され及び／又は他の手法で解析メカニズムを生成するために使用される構造化されたデータ（例えば、ｌｅｘ、ｙａｃｃ等によって処理される構文記述テキストファイル）として表現してもよい。また、解析メカニズムが生成及び／又はインスタンス化されると、それ自体が、例えば、以下に限定されるわけではないが、キャラクタ（例えば、タブ）区切りテキスト、ＨＴＭＬ、構造化されたテキストストリーム、ＸＭＬ及び／又はこれらに類する構造化されたデータを処理及び／又は解析してもよい。他の実施形態においては、アプリケーション間データ処理プロトコル自体が統合化された及び／又は直ちに利用できるパーサ（例えば、ＪＳＯＮ、ＳＯＡＰ等パーサ）を有していてもよく、これを用いてデータを解析（例えば、通信）してもよい。更に、文法解析は、メッセージ解析だけではなく、データベース、データコレクション、データストア、構造化されたデータ等の解析に用いてもよい。この場合も、望ましい構成は、コンテキスト、環境及びシステム展開の要件に依存する。
【００９３】
例えば、幾つかの実装では、ＤＳＦＭコントローラは、情報サーバを介してセキュアソケットレイヤ（Secure Sockets Layer：ＳＳＬ）ソケットサーバをインプリメントするＰＨＰスクリプトを実行してもよく、情報サーバは、サーバポートに供給される通信を待機し、このサーバポートには、クライアントがデータ、例えば、ＪＳＯＮフォーマットで符号化されたデータを送信できる。供給された通信を識別すると、ＰＨＰスクリプトは、クライアントデバイスから供給されたメッセージを読み込み、受信したＪＳＯＮ符号化テキストデータを解析し、ＪＳＯＮ符号化テキストデータからＰＨＰスクリプト変数に情報を抽出し、データ（例えば、クライアント識別情報等）及び／又は抽出された情報を、構造化照会言語（Structured Query Language：ＳＱＬ）を用いてアクセス可能なリレーショナルデータベースに保存する。ＳＳＬ接続を介してクライアントデバイスからＪＳＯＮ符号化入力データを受け取り、データを解析して変数を抽出し、データベースにデータを格納するための、実質的にＰＨＰ／ＳＱＬコマンドの形式で書かれた例示的なリストを以下に示す。
<?PHP
header('Content-Type: text/plain');
// set ip address and port to listen to for incoming data（供給されるデータをリスンするためにＩＰアドレス及びポートを設定）
$address = ‘192.168.0.100';
$port = 255;
// create a server-side SSL socket, listen for/accept incoming communication（供給される通信をリスンし／受け取るためにサーバ側ＳＳＬソケットを作成）
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sock, $address, $port) or die(‘Could not bind to address');
socket_listen($sock);
$client = socket_accept($sock);
// read input data from client device in 1024 byte blocks until end of message（メッセージの末尾まで１０２４バイトブロックでクライアントデバイスからの入力データを読出）
do {
$input = "";
$input = socket_read($client, 1024);
$data .= $input;
} while($input != "");
// parse data to extract variables（データを解析して変数を抽出）
$obj = json_decode($data, true);
// store input data in a database（データベースに入力を保存）
mysql_connect("201.408.185.132",$DBserver,$password); // access database server（データベースサーバにアクセス）
mysql_select("CLIENT_DB.SQL"); // select database to append（付加するデータベースを選択）
mysql_query("INSERT INTO UserTable (transmission)
VALUES ($data)"); // add data to UserTable table in a CLIENT database（クライアントデータベース内のＵｓｅｒＴａｂｌｅテーブルにデータを追加）
mysql_close("CLIENT_DB.SQL"); // close connection to database（データベースへの接続を閉じる）
?>
【００９４】
また、ＳＯＡＰパーサインプリメンテーションに関する例示的な実施形態を提供するために、以下のリソースを使用してもよい。
http://www.xav.com/perl/site/lib/SOAP/Parser.html
http://publib.boulder.ibm.com/infocenter/tivihelp/v2r1/index.jsp?topic=/com.ibm.IBMDI.doc/referenceguide295.htm
他のパーサインプリメンテーションを以下に示す。
http://publib.boulder.ibm.com/infocenter/tivihelp/v2r1/index.jsp?topic=/com.ibm.IBMDI.doc/referenceguide259.htm
これらは、全て参照によって明示的に本願に援用される。
【００９５】
なお、ＤＳＦＭの個人及び／又は企業ユーザの特定のニーズ及び／又は特徴、データベース構成及び／又は関係モデル、データタイプ、データ伝送及び／又はネットワークフレームワーク、構文構造等に応じて、多くの柔軟性及びカスタム化を可能にするＤＳＦＭシステムの様々な実施形態をインプリメントすることができる。アプリケーション実行最適化及び効率性に関して様々なＤＳＦＭシステムの実施形態を説明してきたが、ここに記述した実施形態は、広範囲に亘る様々なアプリケーション及び／又は実装について容易に構成及び／又はカスタマイズできることは明らかである。
【００９６】
本明細書は、多くの詳細事項を含んでいるが、これらの詳細事項は、任意の発明の範囲又は特許請求可能な範囲を限定するものとは解釈されず、特定の実施形態の特定の特徴の記述として解釈される。本明細書おいて、別個の実施形態の文脈で開示した幾つかの特徴を組合せて、単一の実施形態として実現してもよい。逆に、単一の実施形態の文脈で開示した様々な特徴は、複数の実施形態に別個に具現化してもよく、適切な如何なる部分的組合せとして具現化してもよい。更に、以上では、幾つかの特徴を、ある組合せで機能するものと説明しているが、初期的には、そのように特許請求している場合であっても、特許請求された組合せからの１つ以上の特徴は、幾つかの場合、組合せから除外でき、特許請求された組合せは、部分的組合せ又は部分的な組合せの変形に変更してもよい。
【００９７】
同様に、図面では、動作を特定の順序で示しているが、このような動作は、所望の結果を達成するために、図示した特定の順序又は順次的な順序で行う必要はなく、また、図示した全ての動作を行う必要もない。ある特定の状況では、多重タスキング及び並列処理が有利であることもある。更に、上述の実施形態の様々なシステム構成要素の分離は、全ての実施形態においてこのような分離が必要であるとは解釈されず、ここに記述したプログラム構成要素及びシステムは、包括的に、１つのソフトソフトウェア製品に統合してもよく、複数のソフトウェア製品にパッケージングしてもよい。
【００９８】
主題の特定の実施形態を記述した。他の実施形態も、以下の特許請求の範囲に含まれる。例えば、請求の範囲に示す処理は、望ましい結果を達成する異なる順序で実行してもよい。更に、添付の図に示す処理は、所望の結果を達成するために、必ずしも、ここに示された特定の順序又は連続的な処理を要求するわけではない。幾つかの実装では、マルチタスキング及び並列処理が有利である場合もある。
【図１】
0006592450.tif 000002
【図２】
0006592450.tif 000003
【図３】
0006592450.tif 000004
【図４】
0006592450.tif 000005
【図５】
0006592450.tif 000006
【図６】
0006592450.tif 000007