JP6592450B2 - データ同期及びフェイルオーバ管理のためのシステム及び方法 - Google Patents

データ同期及びフェイルオーバ管理のためのシステム及び方法 Download PDF

Info

Publication number
JP6592450B2
JP6592450B2 JP2016556727A JP2016556727A JP6592450B2 JP 6592450 B2 JP6592450 B2 JP 6592450B2 JP 2016556727 A JP2016556727 A JP 2016556727A JP 2016556727 A JP2016556727 A JP 2016556727A JP 6592450 B2 JP6592450 B2 JP 6592450B2
Authority
JP
Japan
Prior art keywords
instance
application
instances
results
primary
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016556727A
Other languages
English (en)
Other versions
JP2017511939A (ja
Inventor
ケープ,ジェームズ,マイケル
パーク,ロバート
ジャン,アレン
ペルコフ,ゾラン
ユー,リエティン
サンヴィ,プレラク,プクライ
タテヤマ,ボー
ソコロフ,コンスタンティン
クインラン,エリック
Original Assignee
アイイーエックス グループ,インコーポレーテッド
アイイーエックス グループ,インコーポレーテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by アイイーエックス グループ,インコーポレーテッド, アイイーエックス グループ,インコーポレーテッド filed Critical アイイーエックス グループ,インコーポレーテッド
Priority claimed from US14/644,674 external-priority patent/US10210005B2/en
Publication of JP2017511939A publication Critical patent/JP2017511939A/ja
Application granted granted Critical
Publication of JP6592450B2 publication Critical patent/JP6592450B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44536Selecting among different versions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)
  • Retry When Errors Occur (AREA)

Description

関連出願への相互参照
本出願は、2014年3月11日に出願された米国の仮出願番号第61/951,374号、発明の名称「Data Synchronization and Failover Management Apparatuses, Methods and Systems」の優先権を主張する。また、本出願は、同じ発明の名称で2015年3月11日に出願された米国特許出願番号第14/644,674号の優先権を主張する。本出願の主題は、(a)2014年3月11日に出願された米国仮出願番号第61/951,364号、及び(b)2014年3月11日に出願された米国仮出願番号第61/951,390号の優先権を主張して2015年3月11日に出願された同時に継続中の米国特許出願番号第14/644,606号に関連する。また、本出願の主題は、2013年9月12日に出願されたPCT国際出願番号PCT/US2013/059558に関連する。上述した各関連出願の全体は、参照によって本願に援用される。
発明の分野
本開示は、包括的には、ソフトウェアアプリケーションの実行のためのランタイム環境に関し、詳しくは、ソフトウェアアプリケーションの性能及び信頼性を向上させる技術に関する。
通常、ソフトウェアアプリケーション又はアプリケーションと呼ばれるソフトウェアプログラム及びシステムは、例えば、医療システムのモニタリング及び制御、金融取引、産業的製造のモニタリング及び制御等の様々な分野において、ミッションクリティカルタスク(mission critical task)を行うことが多い。アプリケーションは、例えば、ソフトウェアエラーのために、クリティカルタスクの実行に失敗することがある。コード解析、テスト及びコードの訂正によって、ソフトウェアエラーを回避又は少なくとも最小化できる。しかしながら、ソフトウェアアプリケーションの実行は、ソフトウェアエラーのためではなく、アプリケーションが実行される環境内のイベントのために失敗することがある。例えば、アプリケーションがデータにアクセスするためのディスク又は他のメモリに障害が生じることもあり、アプリケーションの1つ以上のコンポーネント及び/又は要求されたデータにアクセスするためのネットワークリンクに障害が生じることもある。このような環境障害は、ソフトウェアアプリケーションに障害を生じさせる原因となることがある。
上述したような様々な分野において、ソフトウェアアプリケーションは、例えば、要求された演算結果を可能な限り速やかに生成するといった高い性能を期待されるだけではなく、これらの結果を高い信頼度で提供することを期待される。ソフトウェアエラーは、上述したように、回避又は少なくとも最小化できるが、環境因子及び/又はハードウェア故障に起因するエラーは、予測できない傾向がある。そこで、ソフトウェアアプリケーションの信頼性を改善する1つの手法は、ソフトウェアアプリケーションの2つのインスタンスを同時に実行することである。一方のインスタンスが環境イベントのために失敗したとしても、この時点で、又はこの時点の近くで、他方のインスタンスの環境において、そのインスタンスを同様に失敗させる原因となるイベントが発生する可能性は非常に低い。したがって、バックアップインスタンスとも呼ばれる他方のインスタンスは、要求された演算タスクの実行を継続できる。
しかしながら、この冗長性ベースの手法には、幾つかの課題がある。第1に、ソフトウェアアプリケーションの2つのインスタンスを実行させることによって、通常、例えば、プロセッサ、サーバ、メモリ、ネットワークインターフェース等の要求されるリソースに関するソフトウェアアプリケーションの実行のコストが高くなる。第2に、バックアップインスタンスの失敗を引き起こす他方の環境イベントが発生する可能性があるため、この手法は、スケーラビリティが低い。冗長性及び信頼性を更に高めるために、2つ以上のバックアップインスタンスを同時に実行してもよいが、この場合、ソフトウェアアプリケーションを実行するためのコストが更に高くなる。
ソフトウェアアプリケーションの効率的な実行のために、インタープリットされたコンピュータ言語は、コンパイルされた同等の表現に対して、例えば、異なるコンピュータアーキテクチャに亘る携帯性の向上といった幾つかの利益を提供する。しかしながら、インタープリタ内のコードの実行は、プロセッサのネイティブのマシン言語にコンパイルされた同じコードの実行に比べて、著しく遅くなる。この不利益を克服するために、多くのインタープリタは、インタープリタの少なくとも一部のバイトコードをプロセッサのネイティブコードにコンパイルするジャストインタイム(just-in-time:JIT)コンパイルを含むことによって、性能を向上させることができる。これにより、インタープリタは、このプログラムの部分について、バイトコードをインタープリットする代わりに、ネイティブコードを実行することができる。この特徴は、Java仮想マシン(Java Virtual Machine:JVM)の標準的なHotSpotインプリメンテーション及びマイクロソフトの共通言語ランタイム(Common Language Runtime:.NETとして知られる)を含む幾つかのインタープリタランタイムにおいて提供され、事前に(ahead-of-time:AT)コンパイルされた言語と同等の性能を提供する。
JITコンパイル言語による他の性能改善も可能であり、この場合、インタープリタが特定のバイトコード(又は他の中間的表現又はソースコード)を実行するので、インタープリタは、実行されたコード又は少なくともその一部について、プロファイリング情報を収集でき、これにより、コード又はその一部がコンパイルされる際に、より高度な最適化を行うことができる。この適応型最適化(adaptive optimization)は、HotSpotJVMにおいて実現され、事前コンパイルコードより高い性能を提供できる。この技術の1つの大きな短所は、コンパイルを最適化するために十分なプロファイリング情報を収集するために、インタープリタを用いてコード又はその一部を何度も(例えば、数十回、数百回、数千回以上)実行する必要がある点である。プロファイリングフェーズの間、ソフトウェアアプリケーションは、例えば、AITコンパイル等の従来のコンパイル技術を用いてコンパイルされたコンパイルバージョンに比べて、動作が遅くなる。適応型JITが強化された性能を提供できるのは、コードのプロファイリングが完了した後のみである。
ここに開示するシステム及び方法の実施形態は、ソフトウェアアプリケーションの複数の同一ではないインスタンスの同時実行を可能にすることによってソフトウェアアプリケーションの信頼性を向上させるデータ同期及びフェイルオーバ管理(Data Synchronization and Failover Management:DSFM)を特徴とする。これにより、単に冗長性のみに基づく技術と比べて、ソフトウェアアプリケーションの実行のコストが高くなるが、同一ではないインスタンスは、機能強化を提供することができる。詳しくは、各インスタンスを生成して、例えば、メモリ、ネットワークインターフェース、処理能力、利用できるプロセッサの数等のうち1つ以上のリソースの指定された制約に基づき、例えば、最大化、最小化又は使用等のそれぞれの異なる目標を最適化することができる。幾つかのインスタンスは、先の実行から入手できるランタイム情報を使用して、及び/又はジャストインタイム(JIT)コンパイルを使用して、実行のために最適化してもよい。このようなインスタンスは、例えば、上述したような1つ以上の指定された目標を最適化することができる異なるコンパイラを使用して及び/又は異なるコンパイラオプションを使用してソフトウェアアプリケーションのソースコードをコンパイルすることによって生成することができる。
各インスタンスは、実質的に同じソースコードに由来するので、各インスタンスは、他の何れのインスタンスとも実質的に同じ結果を生成し、すなわち、各インスタンスは、ソフトウェアアプリケーションが生成することを期待される結果と同じ結果を生成する可能性が高い。しかしながら、異なるインスタンスは、別様に最適化されてもよく、したがって、ソフトウェアアプリケーションの様々なインスタンスの実行が同時又は略同時に開始されても、これらのそれぞれの実行の間の異なる時刻において、一連の結果として1つ以上の結果を出力することがある。ソフトウェアアプリケーションが一連の結果を生成することを期待されている場合、各結果について、DSFMシステムの実装(implementation)は、他の全てのインスタンスより先に出力を生成したインスタンスからの対応する出力を、要求された結果として指定(designate)/ラベリングし、他のインスタンスからの出力を複製として破棄してもよい。通常、異なるインスタンスは、最初に、異なる結果を出力することがある。最も早く生成された各出力をソフトウェアアプリケーションの連続した結果として指定/ラベリングすることによって、DSFMシステムの実装は、ソフトウェアアプリケーションの全体的な性能を向上させることができる。
DSFMシステムの実装が特定のインスタンスの特定の出力をソフトウェアアプリケーションの特定の結果として指定/ラベリング又は選択したか否かにかかわらず、各インスタンスは、この結果を生成するために必要な全ての演算を実行する。幾つかのインスタンスは、それぞれの異なる最適化のために、特定の結果を生成するために必要ではない追加の演算を実行していることがあるため、これらのインスタンスは、異なる状態を有することがある。これにもかかわらず、全てのインスタンスが特定の結果を生成するために必要な演算を完了すると、DSFMシステムの実装は、これらのインスタンスが同期されている又は同期中であるとみなす。
DSFMシステムの実装は、これらのインスタンスの1つをプライマリインスタンスとして指定/ラベリングしてもよい。オプションとして、DSFMシステムの1つの実装は、プライマリインスタンスの出力をソフトウェアアプリケーションの結果として指定/ラベリングし、他の1つ以上のインスタンスの出力をセカンダリインスタンスとして指定/ラベリングして破棄してもよい。上述したように、全てのインスタンスによって全体的に、又はプライマリインスタンスのみによって、k個の結果が生成された後に、プライマリインスタンスが失敗した場合、上述したように、k個の結果が生成された後に、これらのインスタンスの全ては、同一の状態でなくとも、同期しているので、DSFMシステムの実装は、セカンダリインスタンスの1つを新しいプライマリインスタンスとして指定/ラベリングすることができる。(k+1)番目及びこれ以降の結果は、新しいプライマリインスタンスとして再指定/再ラベリングされたセカンダリインスタンスによって生成してもよい。
新しく指定/ラベリングされたプライマリインスタンスが後に、例えば、n個の結果の計算後に失敗した場合、更に他のセカンダリインスタンスが同期しており、DSFMシステムの実装は、この他のセカンダリインスタンスを新しいプライマリインスタンスとして再指定/再ラベリングしてもよい。ソフトウェアアプリケーションを実行するためのコストは、通常、インスタンスの数に応じて高くなるが、異なるインスタンスは、それぞれ異なる最適化のために、異なる結果の生成に関連する異なる性能を有することがあり、最も早い出力の選択によって、ソフトウェアアプリケーションの全体的な性能を向上させることができる。様々なインスタンスが同一ではなくても、DSFMシステムの幾つかの実装は、様々なインスタンスが同期しているインスタンスを判定することができ、したがって、生成される結果に影響を及ぼすことなく、1つのインスタンスから、失敗したインスタンスの状態とは状態が異なる可能性が高い他の異なるインスタンスへのフェイルオーバを実現し、したがって、ソフトウェアアプリケーションの信頼性を高めることができる。
したがって、一側面として、少なくとも1つのコンピュータプロセッサ上で、アプリケーションを迅速に実行する方法を提供する。方法は、1つ以上のコンピュータプロセッサ上でソフトウェアアプリケーションの複数のインスタンスを同時に実行することを含み、各インスタンスは、複数のインスタンスの他の全てのインスタンスをコンパイルするために用いられる各コンパイラオプションとは異なるそれぞれのコンパイラオプションによってコンパイルされる。アプリケーションによって生成される第1の複数の結果のそれぞれについて、方法は、結果に対応する、各インスタンスによって生成されるそれぞれの出力を監視することを含む。アプリケーションによって生成される結果の第1のセットのそれぞれについて、方法は、監視された出力から最も早く発生する出力を結果に対応するアプリケーションの出力としてラベリングし、他の全ての出力を複製としてラベリングすることを含む。これにより、他の全てのインスタンスより先に特定の結果を生成したインスタンスからの結果の第1のセットのそれぞれが取得され、これによって、ソフトウェアアプリケーションを実行する際の1つ以上のコンピュータプロセッサの演算性能の速度を向上させることができる。
幾つかの実施形態においては、複数のインスタンスは、第1のインスタンス及び第2のインスタンスを含み、第1のインスタンスのためのコンパイラオプションは、事前(AIT)コンパイルを含む。例えば、第1のインスタンスは、AITコンパイルを使用してコンパイルしてもよい。第2のインスタンスのためのコンパイラオプションは、ジャストインタイム(just-in-time:JIT)コンパイルを含んでいてもよい。JITコンパイルは、少なくとも部分的に、第2のインスタンスの少なくとも1つの以前の実行から得られるランタイム情報に基づいていてもよい。ソフトウェアアプリケーションの少なくとも一部のソースコードは、少なくとも部分的にインタープリットされるプログラミング言語を使用して特定してもよい。
幾つかの実施形態においては、複数のインスタンスは、第1のインスタンスを含み、第1のインスタンスのためのコンパイラオプションは、無制約のメモリ使用、メモリ使用の最小化、並列演算(concurrent operation)の最大化、及び演算の制約された同時並列性(concurrency)のうちの1つ以上であってもよい。これにより、一具体例では、第1のインスタンスは、無制約メモリ使用を利用して、並列処理を最大化することができる。他の具体例では、第1のインスタンスは、例えば、メモリ使用を最小化してもよい。
幾つかの実施形態においては、方法は、更に、複数のインスタンスから1つのインスタンスをプライマリインスタンスとしてラベリングすることと、他の全てのインスタンスをセカンダリインスタンスとしてラベリングすることとを含む。方法は、更に、結果に対応する、アプリケーションによって生成される第2の複数の結果からの各結果について、セカンダリインスタンスからの各出力を抑制することを含む。また、方法は、k≧1として、第2の複数の結果からk個の結果を生成した後に、プライマリインスタンスの失敗を認識する(identify)ことを含んでいてもよい。プライマリインスタンスは、失敗したインスタンスとしてラベリングしてもよい。方法は、更に、k個の結果の各計算に関連するロジックを実行したセカンダリインスタンスを選択することと、選択されたセカンダリインスタンスをプライマリインスタンスとして再ラベリングすることによって、再ラベリングされたプライマリインスタンスが(k+1)番目の結果を生成することとを含んでいてもよい。選択されたセカンダリインスタンスは、k個の結果の各計算に関係するロジックを実行しているので、選択されたセカンダリインスタンスは、プライマリインスタンスの失敗の前にプライマリインスタンスと同期している可能性が高い。このように、2つ以上のインスタンスによるアプリケーションの実行によって、通常、実質的な遅延(例えば、アプリケーションを再開することによる遅延等)及び/又はエラーを導入することなく、1つのインスタンスから他のインスタンスへのフェイルオーバを行うことができる。
他の側面として、ソフトウェアアプリケーションのフェイルオーバを可能にする方法を提供する。方法は、プロセッサベースのコントローラによって、ソフトウェアアプリケーションのプライマリインスタンス及びアプリケーションの第1のセカンダリインスタンスの同時の実行を監視することを含む。プライマリインスタンスは、第1のコンパイラオプションによってコンパイルされており、第1のセカンダリインスタンスは、第1のコンパイラオプションとは異なるコンパイラオプションによってコンパイルされている。また、方法は、k≧1として、ソフトウェアアプリケーションのk個の結果の生成の後、プライマリインスタンスの失敗を検出することを含む。更に、方法は、第1のセカンダリインスタンスが、k番目の結果を算出するために必要な演算を完了していることを確認することと、第1のセカンダリインスタンスをプライマリインスタンスとしてラベリングすることとを含む。第1のセカンダリインスタンスは、k個の結果のそれぞれを算出するために必要な演算を行っているので、第1のセカンダリインスタンスは、プライマリインスタンスの失敗の前にプライマリインスタンスと同期している可能性が高い。このように、2つ以上のインスタンスによるアプリケーションの実行によって、通常、実質的な遅延(例えば、アプリケーションを再開することによる遅延等)及び/又はエラーを導入することなく、1つのインスタンスから他のインスタンスへのフェイルオーバを行うことができる。
コントローラは、プライマリインスタンスとしてラベリングされたインスタンスの失敗の前に、k個の結果に対応する第1のセカンダリインスタンスの出力を抑制してもよい。第1のコンパイラオプションは、ジャストインタイム(JIT)コンパイルを含んでいてもよく、第1のセカンダリインスタンスのために使用されるコンパイラオプションは、事前(AIT)コンパイルを含んでいてもよい。幾つかの実施形態においては、方法は、更に、コントローラによって、アプリケーションの第2のセカンダリインスタンスの同時の実行を監視することを含む。第2のセカンダリインスタンスは、第1のコンパイラオプション及び第1のセカンダリインスタンスをコンパイルするために使用されるコンパイラオプションの両方と異なるコンパイラオプションによってコンパイルされている。この方法によって、第1のセカンダリインスタンスがk番目の結果を算出するために必要な演算を完了していることが確認されない場合、この方法は、第2のセカンダリインスタンスがk番目の結果を算出するために必要な演算を完了していることを確認することを含んでもよい。そして、この第2のセカンダリインスタンスをプライマリインスタンスとしてラベリングしてもよく、以前にプライマリインスタンスとされていたインスタンスから、プライマリインスタンスとして再ラベリングされた第2のセカンダリインスタンスへの効率的でエラーのないフェイルオーバが実現する。
他の側面として、少なくとも1つのコンピュータプロセッサ上で、アプリケーションを迅速に実行するシステムは、第1のプロセッサと、第1のプロセッサと電気的に通信する第1のメモリとを含む。第1のメモリは、例えば、第1のプロセッサ及び/又は第2のプロセッサを含む処理ユニットによって実行されると、処理ユニットをプログラムする命令を含み、この命令により、処理ユニットは、1つ以上のコンピュータプロセッサ上でソフトウェアアプリケーションの幾つかのインスタンスを同時に実行する。各インスタンスは、複数のインスタンスの他の全てのインスタンスをコンパイルするために用いられる各コンパイラオプションとは異なるそれぞれのコンパイラオプションによってコンパイルされる。アプリケーションによって生成される第1の複数の結果のそれぞれについて、命令は、処理ユニットをプログラムして、結果に対応する、各インスタンスによって生成されるそれぞれの出力を監視する。アプリケーションによって生成される結果の第1のセットのそれぞれについて、命令は、処理ユニットをプログラムし、監視された出力から最も早く発生する出力を結果に対応するアプリケーションの出力としてラベリングし、他の全ての出力を複製としてラベリングする。これにより、他の全てのインスタンスより先に特定の結果を生成したインスタンスからの結果の第1のセットのそれぞれが取得され、これによって、ソフトウェアアプリケーションを実行する際の1つ以上のコンピュータプロセッサの演算性能の速度を向上させることができる。様々な実施形態において、命令は、処理ユニットが上述の方法ステップの1つ以上を実行するようにプログラムすることができる。
他の側面として、ソフトウェアアプリケーションのためのフェイルオーバを可能にするシステムは、第1のプロセッサと、第1のプロセッサと電気的に通信する第1のメモリとを含む。第1のメモリは、例えば、第1のプロセッサ及び/又は第2のプロセッサを含む処理ユニットによって実行されると、処理ユニットをプログラムする命令を含み、この命令により、処理ユニットは、ソフトウェアアプリケーションのプライマリインスタンス及びアプリケーションの第1のセカンダリインスタンスの同時の実行を監視する。プライマリインスタンスは、第1のコンパイラオプションによってコンパイルされており、第1のセカンダリインスタンスは、第1のコンパイラオプションとは異なるコンパイラオプションによってコンパイルされている。更に、命令は、処理ユニットをプログラムし、k≧1として、ソフトウェアアプリケーションのk個の結果の生成の後、プライマリインスタンスの失敗を検出する。更に、命令は、処理ユニットをプログラムし、第1のセカンダリインスタンスが、k番目の結果を算出するために必要な演算を完了していることを確認し、第1のセカンダリインスタンスをプライマリインスタンスとしてラベリングする。このように、2つ以上のインスタンスによるアプリケーションの実行によって、通常、実質的な遅延(例えば、アプリケーションを再開することによる遅延等)及び/又はエラーを導入することなく、1つのインスタンスから他のインスタンスへのフェイルオーバを行うことができる。様々な実施形態において、命令は、処理ユニットが上述の方法ステップの1つ以上を実行するようにプログラムすることができる。
他の側面として、メモリと電子的に通信する処理ユニットによって実行されると、1つ以上のコンピュータプロセッサ上でソフトウェアアプリケーションの幾つかのインスタンスを実行するように処理ユニットをプログラムする命令を格納する非一時的なストレージ媒体を含む製品を提供する。各インスタンスは、複数のインスタンスの他の全てのインスタンスをコンパイルするために用いられる各コンパイラオプションとは異なるそれぞれのコンパイラオプションによってコンパイルされる。アプリケーションによって生成される結果の第1のセットのそれぞれについて、命令は、処理ユニットをプログラムして、結果に対応する、各インスタンスによって生成されるそれぞれの出力を監視する。アプリケーションによって生成される結果の第1のセットのそれぞれについて、命令は、処理ユニットをプログラムし、監視された出力から最も早く発生する出力を、結果に対応するアプリケーションの出力としてラベリングし、他の全ての出力を複製としてラベリングする。様々な実施形態において、命令は、処理ユニットが上述の方法ステップの1つ以上を実行するようにプログラムすることができる。
他の側面として、メモリと電子的に通信する処理ユニットによって実行されると、ソフトウェアアプリケーションのプライマリインスタンス及びアプリケーションの第1のセカンダリインスタンスの同時の実行を監視するように処理ユニットをプログラムする命令を格納する非一時的なストレージ媒体を含む製品を提供する。プライマリインスタンスは、第1のコンパイラオプションによってコンパイルされており、第1のセカンダリインスタンスは、第1のコンパイラオプションとは異なるコンパイラオプションによってコンパイルされている。更に、命令は、処理ユニットをプログラムし、k≧1として、ソフトウェアアプリケーションのk個の結果の生成の後、プライマリインスタンスの失敗を検出する。更に、命令は、処理ユニットをプログラムし、第1のセカンダリインスタンスが、k番目の結果を算出するために必要な演算を完了していることを確認し、第1のセカンダリインスタンスをプライマリインスタンスとしてラベリングする。様々な実施形態において、命令は、処理ユニットが上述の方法ステップの1つ以上を実行するようにプログラムすることができる。
本発明の様々な実施形態の1つの技術的な効果は、結果に対応する出力を同時に生成する複数のインスタンスから各結果について最も早い出力を選択することによって、一連の結果を生成することが期待されるソフトウェアアプリケーションの全体的な性能を高めることができることである。異なるインスタンスをコンパイルする手法の違いのために、異なるインスタンスが特定の結果に対応する出力を生成する時刻は、異なることがある。幾つかのインスタンスは、初期的には、出力の生成が他の幾つかのインスタンスより遅く、後に、これらのインスタンスより早く出力を生成するようになることがある。各結果について最も早い出力を効果的に選択することによって、ソフトウェアアプリケーションは、それぞれが異なる結果に対応する出力を最も早く生成したインスタンスによって実行され、これによって、全体的なソフトウェアアプリケーションの実行の速度を向上させることができる。
本発明の様々な実施形態の他の技術的な効果は、上述したように、性能を向上させると共に、ソフトウェアアプリケーションによって生成される一連の結果のそれぞれの計算において、異なるインスタンスを、正確に同じ状態ではなくとも、同期した状態に維持できることである。したがって、1つのインスタンスが1つ以上の結果の生成の後に失敗した場合、失敗していないインスタンスのうち、次の結果を最も早く生成する可能性が高い他のインスタンスを用いて、次の結果を生成することができる。このようにして、ソフトウェアアプリケーションの全体的な性能を向上させながら、例えば、アプリケーションの再開に関連するような過度の遅延を引き起こすことなく、安全な、すなわち、包括的にエラーがないフェイルオーバが達成される。
ここに開示した実施形態の利点及び特徴と共に、これらの及びこの他の目的は、以下の説明、添付の図面及び特許請求の範囲によって、より明らかとなる。更に、ここに記述する様々な実施形態の特徴は、互いに排他的なものではなく、様々な順列及び組合せで実現できる。
図面において、同様の参照符号は、異なる図でも同様の部分を指している。また、図面は、必ずしも実際の縮尺に対応しておらず、本発明の原理を説明する部分を強調している。以下の説明では、以下の図面を参照して、本発明の様々な実施形態を記述する。
DSFMシステムの様々な実施形態の使用を説明する図である。 DSFMシステムの実施形態を用いたソフトウェアアプリケーションのプライマリインスタンスからセカンダリインスタンスへのフェイルオーバを例示するデータ図である。 DSFMシステムの実施形態を用いたソフトウェアアプリケーションの1つのインスタンスから他のインスタンスへの移行を例示するロジックフロー図である。 DSFMシステムの実施形態を用いたソフトウェアアプリケーションの機能向上を図式的に説明する図である。 DSFMシステムの実施形態を用いたソフトウェアアプリケーションの機能向上を図式的に説明する図である。 一実施形態に基づくDSFMコントローラを図式的に示す図である。
図1に示すように、ユーザ101は、特定のソフトウェアアプリケーションの実行を望む。データ同期及びフェイルオーバ管理(DSFM)システム102は、一方がプライマリインスタンス(primary instance)として指定/ラベリングされ、他方がセカンダリインスタンス(secondary instance)として指定/ラベリングされるソフトウェアアプリケーションの2つのインスタンスを実行することができる。プライマリインスタンスは、例えば、ハードウェア故障、ネットワークエラー等のために失敗することがあり、実行は、(バックアップインスタンスとも呼ばれる)セカンダリインスタンスに転送することができる。幾つかの実施形態においては、例えば、プライマリインスタンス及びセカンダリインスタンスが同一のソースコードに由来するものであっても、2つのインスタンスを別様にコンパイルしてもよいため、セカンダリインスタンスは、プライマリインスタンスと正確に同じ状態でないことがある。したがって、セカンダリインスタンスは、プライマリインスタンスと同じコード経路を辿らないことがある。したがって、セカンダリインスタンスの実行は、プライマリインスタンスの実行と比較して異なることがあり、例えば、実行速度に関して、異なる及び/又は潜在的に劣る結果を生じることがある。
例えば、プライマリインスタンス及びセカンダリインスタンスは、開始時には同じ状態であったとしても、実行の間にドリフトして離れ、同期されていたとしても、すなわち、包括的に同じ全体的なロジックをインプリメントしていたとしても、2つのインスタンスは、必ずしも正確に同じ状態にならないことがある。例えば、インタープリットされた又は部分的にインタープリットされた言語、例えば、以下に限定されるわけではないが、Javaに符号化された幾つかのソフトウェアシステムでは、ジャストインタイム(JIT)コンパイルは、実行の間、辿るべき最適コード経路を検索しながら、バイトコードをマシンコードに翻訳することができる。JITコンパイルを使用して、プライマリインスタンス又はセカンダリインスタンスの一方のみを生成する場合、特定の時刻に、プライマリインスタンス及びセカンダリインスタンスは、必ずしも同じ命令を実行しないことがある。例えば、以下のようなコードセグメントを検討する。
If (eval(condition) == true)
x = f1(A);
else
x = f2(A);
output (x);
1つのコンパイラを使用してコンパイルされたこのコードセグメントの1つのインスタンス(インスタンスAとする。)は、最初に、条件を評価し、条件が真であるかを判定し、これに応じてf1又はf2を計算して、結果xを生成する。
同じコンパイラ又は他のコンパイラは、通常、条件の評価に長い時間がかかり(例えば、数ミリ秒)、f1及びf2の評価にも、かなりの時間がかかるが(例えば、数ミリ秒)、この3つの計算の全ては、互いに依存していないといった知識を有することができる。したがって、他のコンパイラ又は同じコンパイラの異なるオプションを用いて、実行時間についての知識を使用してコンパイルされた同じコードセグメントの他のインスタンス(インスタンスBとする)は、条件の評価が行われている間に、f1及びf2の両方を計算することができる。評価が完了した後、インスタンスBは、f1及びf2の結果を選択してもよく、これによって、インスタンスAより早く出力を生成することができる。このように、特定の時刻において、コードセグメントのインスタンスAは、条件のみを評価し、この間に、インスタンスBは、更にf1及びf2を計算してもよい。
更に他の例では、コードセグメントの他のインスタンス(インスタンスCとする)を生成するために使用されるコンパイラは、条件が少なからず偽になるという知識を有していてもよい。したがって、インスタンスCは、条件の評価が行われている間、f1ではなくf2のみを計算し、条件が真であると判定された場合にのみ、f1を計算してもよい。これにより、追加的な知識を使用することなく、コンパイルされたインスタンスAの場合と比べて、全ての状況ではないが、大多数の状況において、xの計算の速度を上げることができる。特定の時刻において、インスタンスAは、条件のみを評価し、この間、インスタンスCは、条件及びf2を評価してもよい。このように、インスタンスA、B及びCは、コードセグメントによって特定される包括的に同じロジックをインプリメントしていても、特定の時刻において、これらのインスタンスのそれぞれは、異なる命令を実行できる。
異なるコンパイル技術、異なるコンパイラ及び/又は異なるコンパイラオプションを使用してコンパイルされたこのような2つ以上のインスタンスが同時に実行される場合、通常、他のインスタンスに比べて、アプリケーションの結果の生成が遅れる1つ以上のインスタンスは、例えば、結果の重複を回避するために、これらのそれぞれの出力を抑制するように構成されてもよい。例えば、実行の間、プライマリインスタンス(例えば、インスタンスB)が特定の出力(例えば、結果x)を生成してもよく、したがって、セカンダリインスタンス(例えば、インスタンスA又はC)は、インスタンスA及びCがこの出力を生成するために必要な計算を実行したとしても、この出力の複製を生成しないようにしてもよい。幾つかの実施形態においては、アプリケーションの結果としてその出力を生成するように指定/ラベリングされたインスタンスをプライマリインスタンス(例えば、インスタンスB)と呼んでもよく、他の1つ以上のインスタンス(例えば、インスタンスA及びインスタンスC)をセカンダリインスタンスと呼んでもよい。アプリケーションが生成する各結果に関係する演算をセカンダリインスタンスにも実行させ、セカンダリインスタンスの出力のみを抑制することによって、セカンダリインスタンスは、プライマリインスタンスの状態と可能な限り近い状態で、プライマリインスタンスとの同期が維持される。
幾つかの実装では、プライマリインスタンス及びセカンダリインスタンスのためのJITコンパイルは、上述したように、例示的なコードセグメントを使用して、プライマリインスタンス及びセカンダリインスタンスのための異なる命令によって、異なるコード経路を生成してもよい。幾つかの実装では、異なる種類のコンパイラ(例えばJIT及び事前(AIT))を使用してプライマリインスタンス及びセカンダリインスタンスがコンパイルされるために、プライマリインスタンス及びセカンダリインスタンスが異なるコード経路を有することがある。幾つかの実装では、同じコンパイラを使用してプライマリインスタンス及びセカンダリインスタンスをコンパイルするが、それぞれのコンパイルの間に異なるコンパイラオプションを使用してもよい。コンパイラオプションの例は、以下に限定されるわけではないが、メモリ使用の最小化、無制約のメモリ使用、(例えば、並列プロセッサ、複数のスレッド等を用いる)並列及び/又は部分的に重なり合う演算の最大化、並列及び/又は部分的に重なり合う演算の数の指定された限度への制限を含む。幾つかの実装では、プライマリインスタンスが失敗したことが検出されると、実行がセカンダリインスタンスに切り替えられる。例えば、104に示すように、セカンダリインスタンスの実行は、異なるコード経路を辿ってもよく、したがって、セカンダリインスタンスの性能及び効率は、プライマリインスタンスの性能及び効率に一致しなくてもよい。
ここに記述するDSFMシステムの様々な実施形態は、幾つかのJITランタイムにおけるオプションの利益を享受でき、これを用いて、プログラム全体を事前にコンパイルしてもよい。例えば、HotSpotJVMでは、−Xcompコマンドラインオプションにより、ランタイムは、メソッドに比較的遅いインタープリット及びプロファイリングフェーズを適用するのではなく、全ての実行されたメソッドをコンパイルする。.NETでは、NGenユーティリティは、プログラムの実行時の各時点ではなく、インストール時にバイトコードプログラムをネイティブコードにコンパイルすることができる。これらのオプションは、動作が異なっていても、包括的には、JITを事前コンパイルに変換する同じ効果を有している。
幾つかの実施形態においては、単一のバイトコードプログラムの2つのインスタンスが同時に実行される。ここで、同時とは、包括的に、実行の各時刻における少なくとも部分的な重なりを意味する。第2のインスタンスが標準的な適応型JITランタイムによって実行されている間、第1のインスタンスは、オプションの事前コンパイルを使用する。両方のインスタンスは、同一の入力が供給され、異なる速度で同一の出力を生成してもよい。通常、第2のインスタンスがインタープリタ内でコードのプロファイルを継続している間、初期的には、第1のインスタンスは、コンパイルされたコードを使用するので、第2のインスタンスより大幅に速い。第2のインスタンスがプログラムを徐々にコンパイルすると、通常、その性能は、向上し、部分的に、適応型JITコンパイラによって利用できる高度な最適化のために、最終的に、第1のインスタンスの性能を超えることもある。
2つのインスタンスの異なる実行は、ソフトウェアアプリケーションの単一の実行として表現することができる。このために、2つのインスタンスのそれぞれの出力は、フィルタ処理によってマージされてもよい。幾つかの実施形態においては、フィルタ処理は、2つのインスタンスから出力メッセージを収集し、マージされたメッセージのうちの第1の又は先に生成されたメッセージに応じて出力メッセージのみを発行し、すなわち、より速いインスタンスによって生成されたメッセージのみを発行し、他の比較的遅いインスタンスによって生成された複製メッセージは、破棄される。各インスタンスは、同じ出力メッセージを同じ順序で生成することが予想されるので、フィルタは、2つのインスタンスのうちのより速い1つのインスタンスからメッセージを効率的に発行することができる。実質的には、2つのインスタンスとフィルタの組合せは、初期における事前コンパイルのより速い性能及び長期的な適応型JITのより速い性能の両方によって、1つのインスタンスとして動作する。この技術は、例えば、図4及び図5に関して後述するように、3つ以上のインスタンスに拡張することができる。
図2を参照して説明すると、幾つかの実装では、ユーザ/クライアント201は、例えば、205として示すように、例えば、所与のシステム上でコードを実行することによって、アプリケーションの実行を要求することができる。幾つかの実装は、例えば、202として示すように、アプリケーションの1つのインスタンスをプライマリ203とし、残りのインスタンスをセカンダリ204として指定/ラベリングする構成を有していてもよい。幾つかの実施形態においては、コード実行の異なるインスタンス(例えば、プライマリ及びセカンダリ)の間で正確に同じ記録を維持するために、バックアップアプリケーションは、プライマリインスタンスと同じコード経路を使用する。また、幾つかの実施形態においては、実行における幾つかのステップは、僅かに異なっていてもよい。例えば、207として示すように、プライマリインスタンスは、実行の後に出力を生成するが、例えば、208として示すように、セカンダリインスタンスは、出力を生成しない点を除き、プライマリインスタンス及びセカンダリインスタンスは、正確に同じコード経路を辿ってもよい。幾つかの実施形態において、バックアップアプリケーションによる出力生成処理は、出力を発行する時点まで、但しこの時点を含まず、プライマリインスタンスの完全な実行経路を通過し、これにより、プライマリインスタンス及びセカンダリインスタンスは、可能な限り高い同一性を維持する。但し、幾つかの実施形態においては、プライマリインスタンス及びセカンダリインスタンスは、正確に同一の状態では終了しない。例えば、javaで符号化されたシステムでは、プライマリインスタンス及びセカンダリインスタンスが、メッセージを発行する時点まで、但しこの時点を含まず、正確に同じコード実行経路を辿る場合、これらは、共通の完全なメッセージストリームを有し、互いに同期することができるが、正確に同じ状態にはならない。例えば、プライマリインスタンスへの実行要求206aは、最終的な出力を生成する必要があることを指定してもよい。例えば、実行要求206a及び206bは、XMLに準拠してフォーマットされたデータの形式で、「出力書込」要求を含む(セキュア)ハイパーテキストトランスファプロトコル(Hypertext Transfer Protocol:HTTP)POSTメッセージであってもよい。XMLフォーマットデータを含む、実質的にHTTP POSTメッセージの形式のアプリケーション実行要求206a及び206bのインスタンスリストを以下に示す。
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>
幾つかの実装では、コードのランタイム性能を向上させるために、ジャストインタイム(JIT)コンパイルシステム能力を利用し、及びコードをマシンコードに変換してもよい。幾つかの実装では、JITコンパイラは、コンパイルの一部として、例えば、207として示すようにプライマリである、又は例えば、208として示すようにセカンダリであるコードの最適化を開始してもよい。例えば、JITコンパイルは、複製コードラインを簡潔なラインに統合し及び/又は余分なコード経路を取り除いて、最も使用される経路をより効率的に最適化する。例えば、幾つかの実施形態においては、コード経路が所定の及び/又は動的に判定される回数の閾値を超えて使用されている場合、この経路に高い優先度を付与し、使用頻度がより少ない他のコード経路より優先させる。幾つかの実施形態においては、出力を発行する時点までのプライマリインスタンスの完全な実行経路を通って実行されるセカンダリインスタンスは、プライマリインスタンスのコード経路とは異なるコード経路を有することがあり、これは、発行の時点までに至るセカンダリインスタンスのコードは、プライマリインスタンスの対応するコードと同様には最適化されていないことがあるためである。
幾つかの実施形態においては、元のプライマリ及び/又はアクティブなアプリケーションが失敗したと判定されると、セカンダリ及び/又は待機アプリケーションがプライマリインスタンスになることがある。例えば、サーバ204は、例えば、209として示すように、プライマリインスタンスの性能を監視し、第1のプライマリインスタンスの一部でシステム及び/又はアプリケーション障害を検出したとき、アプリケーションフェイルオーバを開始してもよい。幾つかの実施形態においては、例えば、210として示すように、第1のプライマリインスタンスが失敗したと判定されると、サーバは、アプリケーションのセカンダリインスタンスを新しいプライマリインスタンスに指定/ラベリングし、実行のためのコードを新しいプライマリインスタンスに供給してもよい。例えば、セカンダリサーバ204は、XMLに準拠してフォーマットされたデータの形式で切替命令を含む(セキュア)ハイパーテキストトランスファプロトコル(HTTP)POSTメッセージを生成してもよい。XMLフォーマットデータを含む、実質的にHTTP POSTメッセージの形式のフェイルオーバ命令210のインスタンスリストを以下に示す。
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>
幾つかの実施形態においては、例えば、211として示すように、命令の後、最適なコード経路によってコード実行がアプリケーションに供給され、ここで、アプリケーションの「発行(publish)」又は、「書込(write)」コードは、コールド(cold)であり、すなわち、最適化されていない。例えば、コード実行要求211は、図2に関して上述したように、XMLに準拠してフォーマットされたデータの形式で「書込出力」命令を含む(セキュア)ハイパーテキストトランスファプロトコル(「HTTP」)POSTメッセージであってもよい。幾つかの実施形態においては、このコード実行は、コード経路の幾つかの部分が最適化されていないため、以前のプライマリインスタンスに比べて劣っている場合がある。例えば、javaで符号化されたシステムでは、例えば、212として示すように、コールド「書込」コードを有するコード経路によるセカンダリインスタンスへの切替えが行われた後、javaは、所定の及び/又は動的に判定される繰返し回数、コード経路の「書込」コードを実行して、コード経路を最適化、すなわち、「ワームアップ(warm up)」し、このプロセスでは、ワームアップ期間において、アプリケーションが遅くなり、この結果、切替え前のプライマリインスタンスと比べて、性能が低下する。
幾つかの実装では、DSFMシステムによって、セカンダリ及び/又は待機アプリケーションは、コードのメッセージ出力の発行を含む完全なコード経路の終わりまでを実行してもよい。幾つかの実装では、これにより、プライマリインスタンス及びセカンダリインスタンスは、同一の状態を維持することができ、プライマリインスタンスに障害が生じた場合、例えば、213として示すように、セカンダリインスタンスが、以前にプライマリインスタンスが辿っていたものと同じ最適化されたコード経路に沿って、コード実行に進み、これを継続してもよく、したがって、性能の劣化が生じないようにすることができる。例えば、セカンダリインスタンスは、メッセージ処理経路にjavaセグメントの最後を実行させ、java書込メッセージを次のステップに出力し、次のステップが開始される前に、経路を中止してもよい。これらの実施形態では、プライマリアプリケーション及びバックアップアプリケーションの両方によって完全なjava経路が実行され、両方のアプリケーションが同一の状態を維持することができる。幾つかの実施形態においては、プライマリインスタンスがセカンダリインスタンスにフェイルオーバする必要がある場合、プライマリインスタンスは、処理を引き渡し、セカンダリインスタンスが、直ちに処理を引き受けてもよく、セカンダリインスタンスは、java及び「ワームアップ」をプライマリインスタンスと同様に最適化しているため、性能の劣化は生じない。
図3は、DSFMコンポーネントの実施形態によって、アプリケーション実行のための要求をアプリケーションの最適化された効率的な実行に変換するロジックフロー図である。幾つかの実施形態においては、例えば、301として示すように、ユーザは、アプリケーションの実行を望み、アプリケーションのコードを実行することによって、実行を開始する。幾つかの実装では、これは、例えば、302として示すように、コードの実行の第1のインスタンスであってもよく、コードのコンパイルを保証してもよい。例えば、303として示すように、バイトコードに変換されるjavaソースコードは、JITコンパイラによってマシンコードにコンパイルしてもよい。幾つかの実施形態においては、コンパイルは、動的に行ってもよく及び/又は完全なコードの一部(例えば、呼び出されたコードのメソッド)のみについて行ってもよい。例えば、304として示すように、アプリケーションが実行を開始すると、幾つかの実施形態においては、javaは、例えば、305として示すように、コードの実行の監視を開始して、実行を最適化してもよい。例えば、javaは、「ホットスポット」として頻繁に呼び出され及び/又は使用されるメソッド、関数等を特定する前に、例えば、306として示すように、数回の繰り返しを待ってもよい。幾つかの実装では、これらのホットスポットを判定するために十分な回数、アプリケーションが実行されると、例えば、309として示すように、更なる最適化のためにホットスポットを選出してもよい。例えば、これらのメソッド、関数等は、コマンドを統合すること、コード要素を削減すること等によって、より効率的なものにでき、これによって、アプリケーションの実行の効率及び速度を向上させることができる。幾つかの実装では、例えば、307として示すように、頻繁に使用されるコード経路を特定する前に、javaは、何回かの繰り返しを待ってもよく、例えば、310として示すように、頻繁に使用されない余分なコード経路を取り除くことによって、効率を高めるためにアプリケーションを最適化/「準備(prime)」してもよい。例えば、経路が10,000回実行された後、この経路に高い優先度を与え、より高い優先度を有する経路を優先して、頻繁に使用されていない他の経路は、削除してもよい。幾つかの実装では、例えば、311として示すように、ホットスポットが最適化されると、高優先度コード経路が特定され、アプリケーションの実行をより効率的にできる。
図4は、アプリケーションプロセスの冗長性によって、アプリケーション最適化、同期及びフェイルオーバを提供する例示的なDSFMシステムのブロック図である。幾つかの実装では、アプリケーションを実行する要求に応じて、DSFMシステムは、アプリケーションの少なくとも2つのインスタンス、例えば、401a〜n(2つ以上の同一のアプリケーションと等価)の実行を開始する。幾つかの実施形態においては、これらのアプリケーションのインスタンスは、何れもプライマリ及びセカンダリ/バックアップとして状態指定/ラベリングされておらず、各アプリケーションインスタンスは、独立して実行され、同一又は略同一のメッセージ出力を生成し、メッセージングバス/ワイヤ406に書き込まれる。幾つかの実施形態においては、システム処理(例えば、ソフトウェア、ハードウェア等)における僅かな変化によって、同じアプリケーションの2つ以上のインスタンス(すなわち、同一のアプリケーション)によって生成されるこれらのメッセージ出力402は、非同時的にワイヤに書き込まれることがある。幾つかの実装では、シーケンサが、到着するメッセージを処理し、1つの出力をアプリケーションのメッセージ出力として分類し、残りの出力を複製として分類する。例えば、シーケンサ403は、アプリケーションの2つ以上のインスタンスの1つによってワイヤに書き込まれる1つのメッセージ出力を、維持すべきアプリケーションのメッセージ出力として指定/ラベリングし、アプリケーションのより遅いインスタンスに由来する残りのメッセージ出力を、複製としてラベリング(したがって、例えば、除外)してもよい。幾つかの実施形態においては、シーケンサは、どのメッセージを維持し、どのメッセージを複製としてラベリングするかを選択するためにメッセージの到着の時刻を基準として使用する。例えば、404として示すように、シーケンサは、ワイヤに書き込まれる第1のメッセージをアプリケーションのメッセージ出力として選択し、この他を除外してもよい。幾つかの実装では、シーケンサは、到着の時刻に代えて又はこれと組合せて他の基準を使用して、アプリケーションのメッセージ出力として維持されるメッセージを決定してもよい。例えば、幾つかの実施形態においては、この基準は、メッセージの到着の時刻、メッセージのサイズ等を含んでいてもよい。例えば、シーケンサは、アプリケーションの出力として維持されるメッセージを、サイズが閾値バイト数より小さい最初に到着したメッセージ(及び/又はサイズが最も小さいメッセージ等)とする基準を使用してもよい。
幾つかの実施形態では、2つ以上の同一又は略同一のアプリケーションによる実行のうち、シーケンサが維持するメッセージは、異なるアプリケーションに由来することがあり、メッセージの書込に「勝ち抜く」アプリケーションは、メッセージ毎に異なる。例えば、図5に示すように、アプリケーションの実行の最後のメッセージ出力は、シーケンサによって、複数の同一又は略同一のアプリケーションのメッセージ出力を組み合わせてもよい。例えば、N個のアプリケーションが実行されているとき、例えば、501として示すように、N個メッセージの第1のバッチから、アプリケーションDのメッセージが最初に到着してもよい。また、例えば、502として示すように、N個のメッセージの第2のバッチでは、他のアプリケーション(例えば、アプリケーションK)のメッセージがシーケンサに最初に到着してもよい。このような実施形態においては、例えば、505として示すように、シーケンサ504は、第1のバッチのアプリケーションDからのメッセージに、第2のバッチのアプリケーションKからからのメッセージを続け、このようにして、アプリケーションの最後のメッセージ出力までメッセージを組み合わせてもよい。
このような実装において、複数の同一又は略同一のアプリケーションを実行させると、冗長性がメッセージングバス/ワイヤ上でメッセージトラフィックを生じさせることがある。例えば、N個の同一又は略同一のアプリケーションが実行されている場合、N個の同一又は略同一のメッセージ出力があり、この結果、ワイヤ上のメッセージトラフィックが増加する。逆に、上述したように、システムは、最速のアプリケーションからメッセージ出力を取得する利益を享受するので、冗長性は、性能最適化のために利用できる。幾つかの実装では、例えば、405として示すように、1つ以上のアプリケーションが失敗した場合、冗長性によって、フェイルセーフメカニズム(fail safe mechanism)を提供できる。このような実装では、例えば、406として示すように、1つ以上の他のアプリケーションが実行されており、メッセージ出力は、これらの1つ以上のアプリケーションから取得できるため、手動による及び/又は自動的な介入の必要がない。
このように、ここに記述する様々な実施形態は、例えば、オプションのジャストインタイムの(JIT)コンパイルされたランタイムによって、インタープリットされた言語及び/又は他の言語のコードの性能を向上させる。適応型JITコンパイラは、初期の期間の性能が遅いというコストがあるが、後のコンパイル段階では、コードがインタープリット及びプロファイルされて強化され、事前の及び/又は単純なJITコンパイラと比べて、長期的性能を向上させることができる。2つ以上のランタイム上で、2つ以上の非同一なインスタンスとして、同じコードを並列に実行することによって、初期の性能を犠牲にすることなく、インタープリット段階における最適化されたJITコンパイルの利益を享受できる。
DSFMコントローラ
図6は、DSFMコントローラ601を例示するブロック図である。この実装では、DSFMコントローラ601は、様々な技術及び/又は他の関連するデータによって、コンピュータとのインタラクションを集計し、処理し、保存し、検索し、取り扱い、識別し、命令し、生成し、照合し及び/又は促進する能力を提供する。
ユーザ、例えば、ユーザ633aは、人間及び/又は他のシステムであってもよく、情報技術システム(例えば、コンピュータ)に情報処理を実行させる。次に、コンピュータは、プロセッサを用いて情報を処理し、このようなプロセッサ603は、中央演算処理装置(central processing unit:CPU)とも呼ばれる。プロセッサの1つの形式は、マイクロプロセッサと呼ばれる。CPUは、通信回路を用いて、命令として作用するバイナリ符号化信号を渡し、様々な動作を実現する。これらの命令は、プロセッサがアクセス可能及び使用可能なメモリ629(例えば、レジスタ、キャッシュメモリ、ランダムアクセスメモリ等)の様々な領域内の他の命令及びデータを含み及び/又は参照する演算命令及び/又はデータ命令であってもよい。このような通信命令は、所望の演算を実現するために、プログラム及び/又はデータコンポーネントとして、バッチ(例えば、命令のバッチ)で保存及び/又は送信してもよい。これらの保存された命令コード(例えば、プログラム)は、CPU回路部品及び他の(マザー)ボード及び/又はシステムコンポーネントに所望の演算を実行させることができる。プログラムの1つのタイプは、コンピュータオペレーティングシステムであり、これは、コンピュータ上のCPUによって実行してもよく、オペレーティングシステムによって、ユーザは、コンピュータ情報技術及びリソースにアクセスし、これらを操作することができる。情報技術システム内で採用できる幾つかのリソースには、コンピュータにデータを渡し、コンピュータからデータを受け取るための入出力(I/O)メカニズム、データを保存できるメモリストレージ、及び情報を処理するプロセッサ等が含まれる。これらの情報技術システムを使用して、後の検索、解析及び操作のためにデータを収集してもよく、これはデータベースプログラムによって行ってもよい。これらの情報技術システムは、ユーザが様々なシステムコンポーネントにアクセスし、操作するためのインターフェースを提供する。
一実施形態においては、DSFMコントローラ601は、例えば、以下に限定されるわけではないが、ユーザ入力デバイス611からの1人以上のユーザ、周辺装置612、オプションの暗号プロセッサデバイス628及び/又は通信ネットワーク613等のエンティティに接続され及び/又はエンティティと通信する。例えば、DSFMコントローラ601は、ユーザ、例えば、ユーザ633aに接続し及び/又はこれと通信してもよく、稼働中のクライアントデバイス、例えば、クライアントデバイス633bに接続し及び/又はこれと通信してもよく、クライアントデバイスは、以下に限定されるわけではないが、パーソナルコンピュータ、サーバ、様々なモバイル機器、例えば、以下に限定されるわけではないが、携帯電話、スマートフォン(例えば、iPhone(商標)、ブラックベリー(商標)、AndroidOSベースの電話機等)、タブレット型コンピュータ(例えば、アップルiPad(商標)HP Slate(商標)、モトローラXoom(商標)等)、電子書籍リーダ(例えば、アマゾンキンドル(Amazon Kindle:商標)、バーンズ・アンド・ノーブルのNook(Barnes and Noble's Nook:商標)eReader等)、ラップトップコンピュータ、ノートブック、ネットブック、ゲーム機器(例えば、XBOXライブ(商標)、任天堂DS(商標)、ソニープレイステーションポータブル等)、携帯用スキャナ及び/又はこれらに類する機器を含む。
ネットワークは、一般的に、グラフトポロジ内のクライアント、サーバ及び中間ノードの相互接続及び相互運用を含むと考えられる。なお、本明細書において「サーバ」という用語は、包括的に、通信ネットワークを介して、リモートユーザの要求を処理及び応答するコンピュータ、他の機器、プログラム又はこれらの組合せを意味する。サーバは、その情報を要求側の「クライアント」に提供する。ここで用いる「クライアント」という用語は、包括的に、要求を処理及び作成し、通信ネットワークを介して、サーバからの何らかの応答を取得及び処理する能力を有するコンピュータ、プログラム、他の機器、ユーザ及び/又はこれらの組合せを意味する。情報及び要求の処理を補助し及び/又はソースユーザから宛先ユーザへの情報の引き渡しを中継するコンピュータ、他のデバイス、プログラム又はこれらの組合せは、包括的に「ノード」と呼ばれる。ネットワークは、通常、ソースから宛先への情報の転送を補助するものとみなされる。特にソースから宛先への情報の引き渡しを担うノードは、通常、「ルータ」と呼ばれる。ネットワークには、例えば、ローカルエリアネットワーク(Local Area Network:LAN)、ピコネットワーク、ワイドエリアネットワーク(Wide Area Network:WAN)、無線ネットワーク(Wireless Network:WLAN)等の多くの形式がある。例えば、インターネットは、多数のネットワークの相互接続として一般的に認知されており、これによって、リモートクライアント及びサーバは、互いにアクセスし、相互運用される。
DSFMコントローラ601は、コンピュータシステムに基づいていてもよく、コンピュータシステムは、以下に限定されるわけではないが、メモリ629に接続されたコンピュータシステム602を含むことができる。
コンピュータシステム602は、通常、クロック630、中央演算処理装置(「CPU」及び/又は「プロセッサ」(本開示において、特段の言及がない限り、これらの用語は交換可能に使用される))603、メモリ629(例えば、読出専用メモリ(read only memory:ROM)606、ランダムアクセスメモリ(random access memory:RAM)605等)及び/又はインターフェースバス607を含み、これらは、多くの場合、必ずしも必要ではないが、全てが相互接続され及び/又は1つ以上の(マザー)ボード602上のシステムバス604を介して通信を行い、システムバス604は、導電性を有する及び/又は伝達可能な回路経路を有し、ここを介して、通信、演算、ストレージ等を実現するために命令(例えば、バイナリ符合化された信号)を伝達することができる。コンピュータシステムは、電源686に接続してもよく、例えば、オプションとして、電源は内部電源であってもよい。オプションとして、暗号プロセッサ626及び/又はトランシーバ(例えば、IC)674をシステムバスに接続してもよい。他の実施形態においては、暗号プロセッサ及び/又はトランシーバは、インターフェースバスI/Oを介して、内部及び/又は外部周辺デバイス612として接続してもよい。次に、トランシーバは、アンテナ675に接続してもよく、これによって、様々な通信及び/又はセンサプロトコルの無線送信及び受信が実現され、例えば、アンテナは、テキサスインスツルメンツ(Texas Instruments)WiLinkWL1283トランシーバチップ(例えば、802.11n、ブルートゥース3.0、FM、グローバルポジショニングシステム(global positioning system:GPS)(これによってDSFMコントローラがその位置を判定できる。)を提供する。)、BroadcomBCM4329FKUBGトランシーバチップ(例えば、802.11n、ブルートゥース2.1EDR、FM等を提供する。)、BCM28150(HSPA)及びBCM2076(ブルートゥース4.0、GPS等)、BroadcomBCM4750IUB8レシーバチップ(例えば、GPS)、インフィニオンテクノロージーズ(Infineon Technologies)X−Gold618−PMB9800(例えば、2G/3GHSDPA/HSUPA通信を提供する。)、インテルXMM7160(LTE及びDCHSPA)、クアルコム(Qualcom)CDMA(2000)、モバイルデータ/ステーションモデム、スナップドラゴン(Snapdragon)等に接続してもよい。システムクロックは、水晶発振器を備えていてもよく、コンピュータシステムの回路経路へのベース信号を生成する。クロックは、システムバス及び様々なクロックマルチプライヤに接続してもよく、クロックマルチプライヤは、コンピュータシステム内で相互接続されている他のコンポーネントのためのベース動作周波数を上昇又は低下させる。コンピュータシステム内のクロック及び様々なコンポーネントは、システムを介して伝達される情報を表す信号を駆動する。このような、コンピュータシステムを介する、情報を表す命令の送信及び受信は、通信と呼ばれることがある。これらの通信命令は、更に、インスタントコンピュータシステムを越えて、通信ネットワーク、入力デバイス、他のコンピュータシステム、周辺デバイス等に送信され、これらから受信され、応答及び/又は戻り通信を引き起こす。なお、他の実施形態においては、上述したコンポーネントの何れも、互いに直接的に接続してもよく、CPUに接続してもよく、及び/又は、例えば、様々なコンピュータシステムによって採用されているように、多数の変形例によって組織化してもよい。
CPUは、プログラムコンポーネントを実行して、ユーザ及び/又はシステムが生成した要求の実行に適する少なくとも1つの高速データプロセッサを含んでいてもよい。多くの場合、プロセッサ自体には、様々な専用処理ユニットが組み込まれており、これらには、以下に限定されるわけではないが、浮動小数点ユニット、整数処理ユニット、統合システム(バス)コントローラ、ロジック演算ユニット、メモリ管理制御ユニット等が含まれ、更に、グラフィックス処理ユニット、デジタル信号処理ユニット等の専用処理サブユニットも含まれる。更に、プロセッサは、内部高速アクセスアドレス指定可能メモリを含んでいてもよく、プロセッサ自体を越えてメモリ629をマッピング及びアドレッシングする能力を有し、内部メモリは、以下に限定されるわけではないが、高速レジスタ、様々なレベルのキャッシュメモリ(例えば、レベル1、2、3等)、RAM等を含むことができる。プロセッサは、プロセッサが構築及びデコードできる命令アドレスを介してアクセス可能なメモリアドレス空間を用いて、このメモリにアクセスすることができ、これによって、メモリ状態/値を有する特定のメモリアドレス空間への回路経路にアクセスすることができる。CPUは、マイクロプロセッサ、例えば、AMDのAthlon、Duron及び/又はOpteron、ARMのクラシック(例えば、ARM7/9/11)、埋め込み(Coretx−M/R)、アプリケーション(Cortex−A)、及びセキュアプロセッサ、IBM及び/又はモトローラのDragonBall及びPowerPC、IBM及びソニーのCellプロセッサ、インテルのAtom、Celeron(モバイル)、Core(2/Duo/i3/i5/i7)、Itanium、Pentium、Xeon及び/又はXScale、及び/又はこれらに類する他プロセッサであってもよい。CPUは、導電性及び/又は伝達可能な導体(例えば、(プリントされた)電子及び/又は光回路)を通過する命令を介してメモリとインタラクトし、保存された命令(すなわち、プログラムコード)を実行する。このような命令の伝達によって、DSFMコントローラ内の及び様々なインターフェースを介する通信が実現する。処理条件がより高い速度及び/又は能力を要求する場合、同様に、分散型プロセッサ(例えば、分散型DSFMシステム/コントローラ)、メインフレーム、マルチコア、配列及び/又はスーパコンピュータアーキテクチャを使用してもよい。これに代えて、実用条件がより高い携帯性を要求する場合、より小さなモバイル機器(例えば、スマートフォン、個人情報端末(Personal Digital Assistant:PDA)等)を使用してもよい。
特定の実装では、DSFMシステムの特徴は、マイクロコントローラ、例えば、CASTのR8051XC2マイクロコントローラ、インテルのMCS51(すなわち、8051マイクロコントローラ)及び/又はこれらに類するマイクロコントローラをインプリメントすることによって達成される。また、DSFMシステムの特定の特徴をインプリメントするために、幾つかの特徴は、埋込型部品、例えば、特定用途向け集積回路(Application-Specific Integrated Circuit:ASIC)、デジタル信号処理(Digital Signal Processing:DSP)、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array:FPGA)、及び/又はこの他の埋込技術を用いて実現してもよい。例えば、DSFMコンポーネントの集合体(分散していても、この他の形式で存在してもよく、例えば、IMAS341等)及び/又は特徴は、マイクロプロセッサ及び/又は埋込型部品、例えば、ASIC、コプロセッサ、DSP、FPGAによってインプリメントしてもよい。これに代えて、DSFMシステムの幾つかの実装は、様々な特徴又は信号処理を達成するために構成及び使用される埋込型部品によって実現してもよい。
特定の実装では、埋込型部品は、ソフトウェアソリューション、ハードウェアソリューション及び/又はハードウェア/ソフトウェアソリューションの何らかの組合せを含んでいてもよい。例えば、ここに説明するDSFMシステムの特徴は、「ロジックブロック」と呼ばれるプログラム可能なロジックコンポーネントを含む半導体デバイスであるFPGA、並びにプログラム可能な内部接続、例えば、高性能FPGAVirtexシリーズ及び/又はXilinxによって製造される低コストSpartanシリーズを用いてインプリメントしてもよい。ロジックブロック及び内部接続は、FPGAが製造された後に、DSFMシステム機能の何れかをインプリメントするように、顧客又は設計者によってプログラムしてもよい。プログラム可能な内部接続の階層により、1−チップのプログラマブルボードと同様に、DSFMシステム設計者/管理者の要求に応じて、ロジックブロックを相互接続することができる。FPGAのロジックブロックは、基本的な論理ゲート、例えば、AND及びXORの演算、又はより複雑な組合せの演算子、例えば、デコーダ又は単純数値演算を実行するようにプログラムしてもよい。大部分のFPGAでは、ロジックブロックは、メモリ素子も含み、これは、フリップフロップ又はより完全なメモリのブロックであってもよい。幾つかの状況では、DSFMシステムは、通常のFPGA上で開発し、ASIC実装とより似た、固定されたバージョンに移し替えてもよい。代替となる又は共存する実装では、FPGAに代えて又はこれに加えて、最終的なASICに1つ以上のDSFMコントローラ特徴を移し替えてもよい。実装に応じて、上述した埋込型部品及びマイクロプロセッサの全ては、DSFMシステムのための「CPU」及び/又は「プロセッサ」とみなすことができる。
電源686は、小型電子回路基板デバイスに電源を供給する如何なる標準的な形式を有していてもよく、例えば、アルカリ、水素化リチウム、リチウムイオン、リチウムポリマ、ニッケルカドミウム、太陽電池等の電池であってもよい。他のタイプのAC又はDC電源も同様に使用することができる。1つの実施形態において、太陽電池の場合、太陽電池が光エネルギを捕捉するための開口をケースに設けてもよい。電池686は、DSFMシステムの相互接続された後段のコンポーネントの少なくとも1つに接続され、これによって、これらに相互接続された全ての部品に電流を提供する。ある例では、電源686は、システムバスコンポーネント604に接続される。他の実施形態においては、I/O608インターフェースに接続された外部電源686が設けられる。例えば、USB及び/又はIEEE1394接続は、接続を介してデータ及び電力の両方を伝送し、したがって、適切な電源となる。
インターフェースバス607は、必ずしも必須ではないが、多くの場合、アダプタカードの形式である幾つかのインターフェースアダプタを受け入れ、これに接続し及び/又はこれと通信するものであってよく、ここで、インターフェースアダプタは、以下に限定されるわけではないが、入出力インターフェース(I/O)608、ストレージインターフェース609、ネットワークインターフェース610等を含む。オプションとして、暗号プロセッサインターフェース627も同様にインターフェースバスに接続してもよい。インターフェースバスは、インターフェースアダプタの相互の及びコンピュータシステムの他のコンポーネントとの通信を提供する。インターフェースアダプタは、インターフェースバスに互換性を有している。インターフェースアダプタは、拡張及び/又はスロットアーキテクチャによってインターフェースバスに接続してもよい。使用できる様々な拡張及び/又はスロットアーキテクチャは、例えば、以下に限定されるわけではないが、アクセラレーテッドグラフィックポート(Accelerated Graphics Port:AGP)、カードバス、ExpressCard、(拡張:Extended)業界標準アーキテクチャ(Industry Standard Architecture:(E)ISA)、マイクロチャネルアーキテクチャ(Micro Channel Architecture:MCA)、NuBus、周辺コンポーネントインターコネクト(拡張)(Peripheral Component Interconnect (Extended)Peripheral Component Interconnect:PCI(X))、PCIExpress、PCMCIA(Personal Computer Memory Card International Association)、Thunderbolt等を含む。
ストレージインターフェース609は、例えば、以下に限定されるわけではないが、ストレージデバイス614、リムーバブルディスクデバイス等の幾つかのストレージデバイスを受け入れ、これに接続し及び/又はこれと通信するものであってもよい。ストレージインターフェースは、例えば、以下に限定されるわけではないが、(ウルトラ)(シリアル)アドバンスドテクノロジアタッチメント(パケットインターフェース)((ウルトラ)(シリアル)ATA(PI))、(拡張)統合ドライブエレクトロニクス(Integrated Drive Electronics:(E)IDE)、電気電子技術者協会(Institute of Electrical and Electronics Engineers:IEEE)1394、イーサネット、ファイバチャネル、スモールコンピュータシステムインターフェース(Small Computer Systems Interface:SCSI)、Thunderbolt、ユニバーサルシリアルバス(Universal Serial Bus:USB)等の接続プロトコルを使用してもよい。
ネットワークインターフェース610は、通信ネットワーク613を受け入れ、これに接続し及び/又はこれと通信するものであってもよい。通信ネットワーク613を介して、ユーザ633aは、リモートクライアント633b(例えば、ウェブブラウザを有するコンピュータ)を介してDSFMコントローラにアクセスできる。ネットワークインターフェースは、例えば、以下に限定されるわけではないが、直接接続、イーサネット、(シック、シン、ツイステッドペア10/100/1000ベースT等)、トークンリング、無線接続、例えば、IEEE802.11a−x等の接続プロトコルを使用してもよい。処理条件がより高い速度及び/又は能力を要求する場合、分散型ネットワークコントローラ(例えば、分散型DSFMシステム)アーキテクチャを同様に使用して、DSFMコントローラが要求する通信帯域幅を確保し、負荷のバランスを取り及び/又は通信帯域幅を広げてもよい。通信ネットワークは、直接的な相互接続、インターネット、ローカルエリアネットワーク(Local Area Network:LAN)、メトロポリタンエリアネットワーク(Metropolitan Area Network:MAN)、インターネット上のノードとしてのオペレーティングミッション(Operating Missions as Nodes on the Internet:OMNI)、高信頼カスタムコネクション、ワイドエリアネットワーク(Wide Area Network:WAN)、(例えば、以下に限定されるわけではないが、無線アプリケーションプロトコル(Wireless Application Protocol:WAP)、I−mode等のプロトコルを採用する)無線ネットワーク等のうちの1つ又は任意の組合せであってもよい。ネットワークインターフェースは、入出力(I/O)インターフェースの特化された形式とみなすことができる。更に、複数のネットワークインターフェース610を使用して、様々な通信ネットワークタイプ613に接続することができる。例えば、複数のネットワークインターフェースを使用して、ブロードキャスト、マルチキャスト及び/又はユニキャストネットワークを介して通信を実現することができる。
入出力インターフェース(I/O)608は、ユーザ入力デバイス611、周辺デバイス612、暗号プロセッサデバイス628等を受け入れ、これらと通信し、及び/又はこれらに接続することができる。I/Oは、以下に限定されるわけではないが、アナログ、デジタル、モノラル、RCA、ステレオ等の音声、アップルデスクトップバス(Apple Desktop Bus:ADB)、ブルートゥース、IEEE1394a−b、シリアル、ユニバーサルシリアルバス(universal serial bus:USB)、赤外線、ジョイスティック、キーボード、MIDI、光、PC AT、PS/2、パラレル、ラジオ等のデータ、アップルデスクトップコネクタ(Apple Desktop Connector:ADC)、BNC、コアキシャル、コンポーネント、コンポジット、デジタル、DisplayPort、デジタルビジュアルインターフェース(Digital Visual Interface:DVI)、高精細度マルチメディアインターフェース(high-definition multimedia interface:HDMI)、RCA、RFアンテナ、S−Video、VGA等のビデオインターフェース、802.11a/b/g/n/x、ブルートゥース、セルラ(例えば、符号分割多元接続(code division multiple access:CDMA)、高速パケットアクセス(high speed packet access:HSPA(+))、高速ダウンリンクパケットアクセス(high-speed downlink packet access:HSDPA)、移動体通信のためのグローバルシステム(global system for mobile communications:GSM)、ロングタームエボリューション(long term evolution:LTE)、WiMax等)の無線トランシーバ等の接続プロトコルを使用することができる。1つの出力デバイスは、ビデオディスプレイであってもよく、これは、ビデオインターフェースから信号を受け取るためのインターフェース(例えば、VGA、DVI回路及びケーブル)を備える陰極線管(Cathode Ray Tube:CRT)、液晶ディスプレイ(Liquid Crystal Display:LCD)、発光ダイオード(Light Emitting Diode:LED)、有機発光ダイオード(Organic Light Emitting Diode:OLED)、プラズマ等に基づくモニタであってもよい。ビデオインターフェースは、コンピュータシステムによって生成された情報を合成し、ビデオメモリフレーム内の合成された情報に基づいてビデオ信号を生成する。他の出力デバイスは、ビデオインターフェースから信号を受け取るテレビジョン受像機である。多くの場合、ビデオインターフェースは、ビデオディスプレイインターフェースを受け入れるビデオ接続インターフェース(例えば、RCAコンポジットビデオケーブルを受け入れるRCAコンポジットビデオコネクタ、DVIディスプレイケーブルを受け入れるDVIコネクタ、HDMI等)を介して、合成されたビデオ情報を提供する。
ユーザ入力デバイス611は、多くの場合、ある種の周辺デバイス612(後述)であり、例えば、カードリーダ、ドングル、指紋リーダ、グローブ、グラフィックスタブレット、ジョイスティック、キーボード、マイク、マウス、リモートコントローラ、網膜リーダ、タッチスクリーン(例えば、静電容量方式、 抵抗膜方式等)、トラックボール、トラックパッド、センサ(例えば、加速度計、環境光、GPS、ジャイロスコープ、近接センサ等)、スタイラス等を含むことができる。
周辺デバイス612は、例えば、ネットワークインターフェース、ストレージインターフェース、インターフェースバスへの直接接続、システムバス、CPU等のI/O及び/又は他の同様の設備に接続し及び/又はこれらと通信してもよい。周辺デバイスは、外部であっても内部であってもよく及び/又はDSFMコントローラの一部であってもよい。周辺デバイスは、アンテナ、音声デバイス(例えば、ラインイン、ラインアウト、マイク入力、スピーカ等)、カメラ(例えば、スチール、ビデオ、ウェブカメラ等)、ドングル(例えば、デジタル署名及び/又はこれに類するものによって、安全なトランザクションを保証するコピー保護を目的とする。)、外部プロセッサ(能力を追加することを目的とする、例えば、暗号デバイス628)、力フィードバック装置(例えば、振動モータ)、近距離無線通信(near field communication:NFC)デバイス、ネットワークインターフェース、プリンタ、無線周波数識別子(radio frequency identifier:RFID)、スキャナ、ストレージデバイス、トランシーバ(例えば、セルラ、GPS等)、ビデオデバイス(例えば、ゴーグル、モニタ等)、ビデオソース、バイザ等を含んでいてもよい。周辺デバイスは、多くの場合、複数のタイプの入力デバイス(例えば、マイク、カメラ等)を含んでいる。
なお、ユーザ入力デバイス及び周辺デバイスを使用してもよいが、DSFMコントローラは、ネットワークインターフェース接続を介してアクセスが提供される埋込型、専用及び/又はモニタなし(すなわち、ヘッドレス)デバイスであってもよい。
暗号ユニット、例えば、以下に限定されるわけではないが、マイクロコントローラ、プロセッサ626、インターフェース627及び/又はデバイス628は、DSFMコントローラに接続され及び/又はDSFMコントローラと通信することができる。暗号ユニットのために及び/又は暗号ユニットの内部で、モトローラ社(Motorola Inc.)によって製造されているMC68HC16マイクロコントローラを使用してもよい。MC68HC16マイクロコントローラは、16MHzの構成において16ビット積和(multiply-and-accumulate)命令を利用し、1秒以内に512ビットのRSA秘密鍵演算を実行する。暗号ユニットは、インタラクトするエージェントからの通信の認証をサポートすると共に、匿名のトランザクションを可能にする。暗号ユニットは、CPUの一部として構成してもよい。同等のマイクロコントローラ及び/又はプロセッサを使用してもよい。他の市販の専門暗号プロセッサは、BroadcomのCryptoNetX及び他のセキュリティプロセッサ、nCipherのnShield(例えば、Solo、Connect等)、SafeNetのLuna PCI(例えば、7100)シリーズ、Semaphore Communicationsの40MHzのRoadrunner184、sMIP(例えば、208956)、Sunの暗号アクセラレータ(例えば、アクセラレータ6000PCIeボード、アクセラレータ500ドーターカード)、500+MB/sの暗号命令を実行する能力を有する/(例えば、L2100、L2200、U2400)ライン、VLSI Technologyの33MHz6868等を含む。
包括的には、プロセッサが情報の保存及び/又は読出を行うことができるあらゆる機械及び/又は実施形態がメモリ629とみなされる。但し、メモリは、代替可能な技術及びリソースであり、したがって、互いに代えて又は互いと共に、幾つのメモリ実施形態を採用してもよい。DSFMコントローラ及び/又はコンピュータシステムが様々な形式のメモリ629を使用できることは、明らかである。例えば、コンピュータシステムは、オンチップCPUメモリ(例えば、レジスタ)、RAM、ROM及び他の何らかのストレージデバイスの動作を紙穿孔テープ又は紙穿孔カード機構によって提供するように構成してもよいが、このような実施形態は、動作速度が非常に遅くなる。一構成においては、メモリ629は、ROM606、RAM605及びメモリデバイス614を含む。ストレージデバイス614は、幾つのコンピュータストレージデバイス/システムを採用してもよい。ストレージデバイスは、ドラム、(固定及び/又はリムーバブル)磁気ディスクドライブ、光磁気ドライブ、光ドライブ(すなわち、ブルーレイ、CD−ROM/RAM/Recordable(R)/ReWritable(RW)、DVDR/RW、HD DVDR/RW等)、デバイスのアレイ(例えば、独立ディスクの冗長アレイ(Redundant Array of Independent Disks:RAID))、半導体メモリデバイス(USBメモリ、ソリッドステートドライブ(solid state drive:SSD)等)、他のプロセッサが読取可能なメモリ媒体等を含んでいてもよい、このように、コンピュータシステムは、通常、メモリを要求し、利用する。
メモリ629は、プログラム及び/又はデータベースコンポーネント及び/又はデータの集合体を含んでいてもよく、これらには、例えば、以下に限定されるわけではないが、オペレーティングシステムコンポーネント615(オペレーティングシステム)、情報サーバコンポーネント616(情報サーバ)、ユーザインターフェースコンポーネント617(ユーザインターフェース)、ウェブブラウザコンポーネント618(ウェブブラウザ)、データベース619、メールサーバコンポーネント621、メールクライアントコンポーネント622、暗号サーバコンポーネント620(暗号サーバ)、DSFMコンポーネント635等(すなわち、集合的にコンポーネント集合体)が含まれる。これらのコンポーネントは、ストレージデバイスによって保存され及びストレージデバイスからアクセスしてもよく、及び/又はストレージデバイスからインターフェースバスを介してアクセスできるようにしてもよい。コンポーネント集合体内の非従来型のプログラムコンポーネントは、ローカルストレージデバイス614に保存してもよいが、これらは、周辺デバイス、RAM、通信ネットワークを介するリモートストレージ設備、ROM、様々な形式のメモリ等のメモリにロード及び/又は保存してもよい。
オペレーティングシステムコンポーネント615は、DSFMコントローラの動作を実現する実行可能なプログラムコンポーネントである。オペレーティングシステムは、I/O、ネットワークインターフェース、周辺デバイス、ストレージデバイス等のアクセスを実現する。オペレーティングシステムは、障害耐性が高く、スケーラブルで、安全なシステムであってもよく、例えば、アップルマッキントッシュOSX(サーバ)、AT&Tプラン9、BeOS、Unix及びUnixに類するシステムディストリビューション(例えば、AT&TのUNIX、バークレーソフトウェアディストリビューション(Berkeley Software Distribution:BSD)及び例えば、FreeBSD、NetBSD、OpenBSD等のバリエーション、Linuxディストリビューション、例えばRed Hat、Ubuntu等、及び/又はこれらに類するオペレーティングシステム等であってもよい。なお、より限定された及び/又はより安全が低いオペレーティングシステムを使用してもよく、例えば、アップルマッキントッシュOS、IBM OS/2、マイクロソフトDOS、マイクロソフトWindows2000/2003/3.1/95/98/CE/Millenium/NT/Vista/XP(サーバ)、PalmOS等を使用してもよい。更に、モバイルオペレーティングシステム、例えば、アップルのiOS、グーグルのアンドロイド、ヒューレットパッカードのWebOS、マイクロソフトのウィンドウズモバイル等を使用してもよい。これらのオペレーティングシステムの何れも、DSFMコントローラのハードウェアに埋め込んでもよく、及び/又はメモリ/ストレージに保存/ロードしてもよい。オペレーティングシステムは、それ自体を含むコンポーネント集合体内で他のコンポーネントに及び/又は他のコンポーネントと通信してもよい。多くの場合、オペレーティングシステムは、他のプログラムコンポーネント、ユーザインターフェース等と通信する。例えば、オペレーティングシステムは、プログラムコンポーネント、システム、ユーザ及び/又はデータ通信、要求及び/又は応答を含み、これらと通信し、これらを生成、取得及び/又は提供する。オペレーティングシステムは、CPUによって実行されると、通信ネットワーク、データ、I/O、周辺デバイス、プログラムコンポーネント、メモリ、ユーザ入力デバイス等とのインタラクションを可能にする。オペレーティングシステムは、通信プロトコルを提供し、これにより、DSFMコントローラは、通信ネットワーク613を介して、他のエンティティと通信することができる。DSFMコントローラは、インタラクションのためのサブキャリア伝達メカニズムとして、様々な通信プロトコルを使用でき、例えば、以下に限定されるわけではないが、マルチキャスト、TCP/IP、UDP、ユニキャスト等を使用してもよい。
情報サーバコンポーネント616は、CPUによって実行される保存されたプログラムコンポーネントである。情報サーバは、例えば、アパッチソフトウェア財団のアパッチ(Apache)、マイクロソフトのインターネットインフォメーションサーバ(Internet Information Server)等のインターネット情報サーバであってもよい。情報サーバにより、設備は、アクティブサーバページ(Active Server Page:ASP)、ActiveX、(ANSI)(Objective−)C(++)、C#及び/又は.NET、コモンゲートウェイインターフェース(Common Gateway Interface:CGI)スクリプト、ダイナミック(D)ハイパーテキストマークアップ言語(hypertext markup language:HTML)、FLASH、Java、JavaScript、パール(Practical Extraction Report Language:PERL)、ハイパーテキストプレプロセッサ(Hypertext Pre-Processor:PHP)、パイプス(pipes)、パイソン(Python)、無線アプリケーションプロトコル(wireless application protocol:WAP)、WebObjects等のプログラムコンポーネントを実行できる。情報サーバは、安全な通信プロトコルをサポートしてもよく、このようなプロトコルとしては、以下に限定されるわけではないが、ファイル転送プロトコル(File Transfer Protocol:FTP)、ハイパーテキストトランスファプロトコル(Secure Hypertext Transfer Protocol:HTTP)、セキュアHTTP(Secure Hypertext Transfer Protocol:HTTPS)、セキュアソケットレイヤ(Secure Socket Layer:SSL)、メッセージングプロトコル(例えば、America Online(AOL)インスタントメッセンジャー(AIM)、アップルのiMessage、アプリケーションエクスチェンジ(Application Exchange:APEX)、ICQ、インターネットリレーチャット(Internet Relay Chat:IRC)、マイクロソフトネットワーク(Microsoft Network:MSN)メッセンジャーサービス、プレゼンスアンドインスタントメッセージングプロトコル(Presence and Instant Messaging Protocol:PRIM)、インターネットエンジニアリングタスクフォース(Internet Engineering Task Force:IETF)のセッション開始プロトコル(Session Initiation Protocol:SIP)、インスタントメッセージング及びプレゼンスレバレイジング拡張のためのSIP(SIP for Instant Messaging and Presence Leveraging Extensions:SIMPLE)、オープンXMLベースの拡張可能メッセージング及びプレゼンスプロトコル(XML-based Extensible Messaging and Presence Protocol:XMPP)(すなわち、Jabber又はオープンモバイルアライアンス(Open Mobile Alliance:OMA)のインスタントメッセージング及びプレゼンスサービス(Instant Messaging and Presence Service:IMPS))、Yahoo!インスタントメッセンジャーサービス等がある。情報サーバは、ウェブページの形式でウェブブラウザに結果を提供し、他のプログラムコンポーネントとのインタラクションによって、ウェブページの操作を可能にする。HTTP要求のドメインネームシステム(Domain Name System:DNS)の解決部分が特定の情報サーバに解決されると、この情報サーバは、DSFMコントローラの指定された位置において、HTTP要求の残りの部分に基づいて、情報の要求を解決する。例えば、要求http://123.124.125.126/myInformation.htmlは、要求のIP部分「123.124.125.126」を含み、DNSサーバによってこのIPアドレスにおける情報サーバに解決され、この情報サーバは、続いて、要求の「/myInformation.html」部分についてhttp要求を更に解析し、これを情報「myInformation.html」を含むメモリ内の位置に解決する。更に、様々なポートを介する他の情報サービングプロトコル、例えば、ポート21を介するFTP通信等を使用してもよい。情報サーバは、それ自体及び/又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び/又は他のコンポーネントと通信してもよい。多くの場合、情報サーバは、DSFMデータベース619、オペレーティングシステム、他のプログラムコンポーネント、ユーザインターフェース、ウェブブラウザ等と通信する。
DSFMデータベースへのアクセスは、例えば、以下に列挙するスクリプト言語(例えば、CGI)及び以下に列挙するアプリケーション間通信チャネル(例えば、CORBA、WebObjects等)の幾つかのデータベースブリッジメカニズムによって達成してもよい。ウェブブラウザを介する如何なるデータ要求も、ブリッジメカニズムによってDSFMが要求する適切な文法に解析される。一実施形態においては、情報サーバは、ウェブブラウザによってアクセスできるウェブ形式を提供する。ウェブ形式内のフィールドに供給されたエントリは、特定のフィールドに入力されているとタグ付けされ、これに応じて解析される。入力された項目は、フィールドタグと共に渡され、フィールドタグは、パーサに対し、適切なテーブル及び/又はフィールドに向けられたクエリを生成するように指示する。一実施形態において、パーサは、タグ付けされたテキストエントリに基づいて、適切な結合/選択(join/select)コマンドによって、検索文字列をインスタント化することによって、標準SQLでクエリを生成してもよく、この結果として生成されるコマンドは、ブリッジメカニズムを介して、クエリとしてDSFMに供給される。クエリからクエリ結果が生成されると、この結果は、ブリッジメカニズムに渡され、新しい結果のウェブページのフォーマット及び生成のために、ブリッジメカニズムによって解析してもよい。そして、このような新しい結果のウェブページは、情報サーバに供給され、情報サーバは、要求側のウェブブラウザにこれを供給してもよい。
また、情報サーバは、プログラムコンポーネント、システム、ユーザ及び/又はデータ通信、要求及び/又は応答を含み、これらと通信し、これらを生成、取得及び/又は提供する。
コンピュータインターフェースは、幾つかの点で自動車運転インターフェースと類似する。自動車運転インターフェース要素、例えば、操作ハンドル、ギアシフト、及び速度計は、自動車リソース及び状態のアクセス、操作及び表示を実現する。コンピュータインタラクションインターフェース要素、例えば、チェックボックス、カーソル、メニュー、スクローラ及びウィンドウ(集合的に及び一般的にウィジェットと呼ばれる)は、同様に、データ及びコンピュータハードウェア及びオペレーティングシステムリソース、並びに状態のアクセス、能力、操作及び表示を実現する。操作インターフェースは、一般的に、ユーザインターフェースと呼ばれる。グラフィカルユーザインターフェース(graphical user interface:GUI)、例えば、アップルのマッキントッシュオペレーティングシステムのAqua及びiOSのCocoa Touch、IBMのOS/2、グーグルのAndroid Mobile UI、マイクロソフトのWindows2000/2003/3.1/95/98/CE/Millenium/Mobile/NT/XP/Vista/7/8(すなわち、Aero、Metro)、UnixのX−Window(これは、例えば、更なるUnixグラフィカルインターフェースライブラリ及びレイヤ、例えば、Kデスクトップ環境(K Desktop Environment:KDE)、mythTV及びGNUネットワークオブジェクトモデル環境(GNU Network Object Model Environment:GNOME)を含んでいてもよい。)、ウェブインターフェースライブラリ(例えば、ActiveX、AJAX、(D)HTML、FLASH、Java、JavaScript等、インターフェースライブラリ、例えば、以下に限定されるわけではないが、Dojo、jQuery(UI)、MooTools、Prototype、script.aculo.us、SWFObject、Yahoo!ユーザインターフェースの何れを使用してもよい。)は、ベースライン、及び視覚的に情報にアクセスし且つ情報を表示する手段をユーザに提供する。
ユーザインターフェースコンポーネント617は、CPUによって実行される保存されたプログラムコンポーネントである。ユーザインターフェースは、例えば、上述したオペレーティングシステム及び/又は操作環境が提供し、これらが備え及び/又はこれらの上にあるグラフィックユーザインターフェースであってもよい。ユーザインターフェースは、テキスト及び/又はグラフィック情報によってプログラムコンポーネント及び/又はシステム設備の表示、実行、インタラクション、操作及び/又は演算を実現する。ユーザインターフェースにより、ユーザは、コンピュータシステムに影響を与え、コンピュータシステムとインタラクトし及び/又はコンピュータシステムを操作できる。ユーザインターフェースは、それ自体及び/又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び/又は他のコンポーネントと通信してもよい。多くの場合、ユーザインターフェースは、オペレーティングシステム、他のプログラムコンポーネント等と通信する。ユーザインターフェースは、プログラムコンポーネント、システム、ユーザ及び/又はデータ通信、要求及び/又は応答を含み、これらと通信し、これらを生成、取得及び/又は提供する。
ウェブブラウザコンポーネント618は、CPUによって実行される保存されたプログラムコンポーネントである。ウェブブラウザは、例えば、グーグルの(モバイル)Chrome、マイクロソフトInternet Explorer、Netscape Navigator、アップル(モバイル)Safari、例えば、アップルのCocoa(Touch)オブジェクトクラスを介する埋め込みウェブブラウザオブジェクト等のハイパーテキスト閲覧アプリケーションであってもよい。安全なウェブブラウジングのために、HTTPS、SSL等によって128ビット(又はこれ以上)の暗号化を提供してもよい。ウェブブラウザは、例えば、ActiveX、AJAX、(D)HTML、FLASH、Java、JavaScript、ウェブブラウザプラグインAPI(例えば、Chrome、FireFox、Internet Explorer、Safari Plug−in及び/又はこれらに類するAPI)等を介してプログラムコンポーネントの実行を実現してもよい。ウェブブラウザ及び同様の情報アクセスツールは、PDA、携帯電話、スマートフォン及び/又は他のモバイル機器に統合してもよい。ウェブブラウザは、それ自体及び/又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び/又は他のコンポーネントと通信してもよい。多くの場合、ウェブブラウザは、情報サーバ、オペレーティングシステム、統合されたプログラムコンポーネント(例えば、プラグイン)等と通信し、例えば、プログラムコンポーネント、システム、ユーザ及び/又はデータ通信、要求及び/又は応答を含み、これらと通信し、これらを生成、取得及び/又は提供する。また、ウェブブラウザ及び情報サーバの代わりに、両方の類似した動作を実行する複合アプリケーションを開発してもよい。複合アプリケーションは、同様に、DSFMを備えるノードからの情報の取得及びユーザ、ユーザエージェント等への情報の提供を行う。複合アプリケーションは、標準的なウェブブラウザを使用するシステム上では無効(nugatory)にしてもよい。
メールサーバコンポーネント621は、CPU603によって実行される保存されたプログラムコンポーネントである。メールサーバは、例えば、以下に限定されるわけではないが、アップルのメールサーバ(3)、dovecot、sendmail、MicrosoftExchange等のインターネットメールサーバであってもよい。メールサーバにより、設備は、ASP、ActiveX、(ANSI)(Objective−)C(++)、C#及び/又は.NET、CGIスクリプト、Java、JavaScript、PERL、PHP、パイプス、パイソン、WebObjects等のプログラムコンポーネントを実行できる。メールサーバは、例えば、以下に限定されるわけではないが、インターネットメッセージアクセスプロトコル(Internet message access protocol:IMAP)、メッセージングアプリケーションプログラミングインターフェース(Messaging Application Programming Interface:MAPI)/MicrosoftExchange、ポストオフィスプロトコル(post office protocol:POP3)、シンプルメールトランスファプロトコル(simple mail transfer protocol:SMTP)等の通信プロトコルをサポートすることができる。メールサーバは、DSFMシステムを介して及び/又はDSFMシステムに送信され、中継され及び/又はDSFMシステムを通過する受信及び送信メールメッセージをルーティングし、送り及び処理する。
DSFMシステムメールへのアクセスは、個々のウェブサーバコンポーネント及び/又はオペレーティングシステムによって提供される幾つかのAPIによって達成できる。
また、メールサーバは、プログラムコンポーネント、システム、ユーザ及び/又はデータ通信、要求、情報及び/又は応答を含み、これらと通信し、これらを生成、取得及び/又は提供する。
メールクライアントコンポーネント622は、CPU603によって実行される保存されたプログラムコンポーネントである。メールクライアントは、メールアプリケーション、例えば、アップル(Mobile)メール、マイクロソフトEntourage、マイクロソフトOutlook、マイクロソフトOutlookExpress、Mozilla、Thunderbird等であってもよい。メールクライアントは、幾つかの転送プロトコル、例えばIMAP、マイクロソフトExchange、POP3、SMTP等をサポートしてもよい。メールクライアントは、それ自体及び/又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び/又は他のコンポーネントと通信してもよい。多くの場合、メールクライアントは、メールサーバ、オペレーティングシステム、他のメールクライアント等と通信し、例えば、プログラムコンポーネント、システム、ユーザ及び/又はデータ通信、要求、情報及び/又は応答を含み、これらと通信し、これらを生成、取得及び/又は提供する。包括的には、メールクライアントは、電子メールメッセージを構築し、送信する能力を提供する。
暗号サーバコンポーネント620は、CPU603、暗号プロセッサ626、暗号プロセッサインターフェース627、暗号プロセッサデバイス628等によって実行される保存されたプログラムコンポーネントである。暗号プロセッサインターフェースにより、暗号コンポーネントは、暗号化及び/又は解読要求を実行できるが、暗号コンポーネントは、CPU上で動作してもよい。暗号コンポーネントは、提供されたデータの暗号化及び/又は解読を実現する。暗号コンポーネントは、対称及び非対称(例えば、プリティグッドプロテクション(Pretty Good Protection:PGP))の両方の暗号化及び/又は解読を実現する。例えば、暗号コンポーネントは、以下に限定されるわけではないが、デジタル証明書(例えば、X.509認証フレームワーク)、デジタル署名、二重シグネチャ、エンベローピング、パスワードアクセス保護、公開鍵管理等の暗号技術を使用できる。暗号コンポーネントは、例えば、以下に限定されるわけではないが、チェックサム、データ暗号規格(Data Encryption Standard:DES)、楕円曲線暗号(Elliptical Curve Encryption:ECC)、国際データ暗号アルゴリズム(International Data Encryption Algorithm:IDEA)、メッセージダイジェスト5(Message Digest:MD5、一方向ハッシュ操作である。)、パスワード、リベスト暗号(Rivest Cipher:RC5)、Rijndael、RSA(1977年に開発されたアルゴリズムを使用するロンリ・ベスト(Ron Rivest)、アディ・シャミル(Adi Shamir)及びレナード・アドルマン(Leonard Adleman)によってインターネット暗号化及び認証システム)、セキュアハッシュアルゴリズム(Secure Hash Algorithm:SHA)、セキュアソケットレイヤ(Secure Socket Layer:SSL)、セキュアハイパーテキストトランスファプロトコル(Secure Hypertext Transfer Protocol:HTTPS)等の多数の(暗号化及び/又は解読)セキュリティプロトコルを実現できる。このような暗号化セキュリティプロトコルを使用することによって、DSFMシステムは、全ての受信及び送信通信を暗号化することができ、仮想プライベートネットワーク(virtual private network:VPN)内の、より広い通信ネットワークとのノードとして機能することができる。暗号コンポーネントは、「セキュリティ認証」のプロセスを実現し、これによって、リソースへのアクセスは、セキュリティプロトコルによって禁止され、暗号コンポーネントは、高信頼リソースへの認証されたアクセスを実現する。更に、暗号コンポーネントは、例えば、MD5ハッシュを使用して、デジタルオーディオファイルのための一意的シグネチャを取得するためのコンテンツの一意的識別子を提供できる。暗号コンポーネントは、それ自体及び/又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び/又は他のコンポーネントと通信してもよい。暗号コンポーネントは、通信ネットワークを介する情報の安全な伝送を可能にする暗号化スキームをサポートし、これにより、1つ以上のDSFMコンポーネントは、必要に応じて、安全なトランザクションを行うことができる。暗号コンポーネントは、DSFMシステム上でのリソースの安全なアクセスを可能にし、リモートシステム上での高信頼リソースのアクセスを可能にし、すなわち、高信頼リソースのクライアント及び/又はサーバとして機能できる。多くの場合、暗号コンポーネントは、情報サーバ、オペレーティングシステム、他のプログラムコンポーネント等と通信する。暗号コンポーネントは、プログラムコンポーネント、システム、ユーザ及び/又はデータ通信、要求及び/又は応答を含み、これらと通信し、これらを生成、取得及び/又は提供する。
DSFMデータベースコンポーネント619は、データベース及びその保存されたデータとして実現してもよい。データベースは、CPUによって実行される保存されたプログラムコンポーネントであり、保存されたプログラムコンポーネント部分は、保存されたデータをCPUに処理させる。データベースは、フォールトトレラント、リレーショナル、スケーラブル、セキュアデータベースの何れであってもよく、例えばDB2、MySQL、Oracle、Sybase等であってもよい。リレーショナルデータベースは、フラットファイルの拡張である。リレーショナルデータベースは、一連の関連するテーブルから構成されている。テーブルは、キーフィールドを介して、互いに相互接続されている。キーフィールドを使用することによって、キーフィールドに対するインデクス付けによって、テーブルの組合せが可能になり、すなわち、キーフィールドは、様々なテーブルからの情報を結合するための次元的支点(dimensional pivot point)として機能する。関係は、通常、プライマリキーを照合することによって、テーブルの間で維持されているリンクを特定する。プライマリキーは、リレーショナルデータベース内のテーブルの列を一意的に特定するフィールドを意味する。より正確には、プライマリキーは、「一対多の」関係の「一の」側のテーブルの列を一意的に特定する。
これに代えて、DSFMデータベースは、例えば、アレイ、ハッシュ、(リンク付き)リスト、ストラクト(struct)、構造化されたテキストファイル(例えば、XML)、テーブル等の様々な標準的なデータ構造を用いてインプリメントしてもよい。このようなデータ構造は、メモリ及び/又は(構造化された)ファイルに保存してもよい。他の代替例として、例えば、Frontier、Object Store、Poet、Zope等のオブジェクト指向型データベースを使用してもよい。オブジェクトデータベースは、共通の属性によって互いにグループ化及び/又リンクされた幾つかのオブジェクトコレクションを含むことができ、これらは、幾つかの共通の属性によって他のオブジェクトコレクションに関連付けることができる。オブジェクト指向型データベースは、オブジェクトが単にデータのピースではなく、所与のオブジェクト内にカプセル化された他のタイプの能力を有することできる点を除いて、リレーショナルデータベースと同様に機能する。DSFMデータベースがデータ構造としてインプリメントされる場合、DSFMデータベース619の使用は、他のコンポーネント、例えば、DSFMコンポーネント635に統合してもよい。また、データベースは、データ構造、オブジェクト及び関連構造の混合としてインプリメントしてもよい。データベースは、標準的なデータ処理技術によって、無数の変形例として統合及び/又は分散させてもよい。データベースの一部(例えば、テーブル)は、エキスポート及び/又はインポートしてもよく、したがって、分散及び/又は統合してもよい。
一実施形態においては、データベースコンポーネント619は、幾つかのテーブル619a〜fを含む。ユーザテーブル619aは、例えば、以下に限定されるわけではないが、user_id、ssn、dob、first_name、last_name、age、state、address_firstline、address_secondline、zipcode、devices_list、contact_info、contact_type、alt_contact_info、alt_contact_typeやこの他等のフィールドを含んでいてもよい。ユーザテーブルは、DSFMシステム上で複数のエンティティアカウントをサポートしてもよい。クライアントテーブル619bは、例えば、以下に限定されるわけではないが、device_ID、device_name、device_IP、device_MAC、device_type、device_model、device_version、device_OS、device_apps_list、device_securekey等のフィールドを含んでいてもよい。アプリケーションテーブル619cは、例えば、以下に限定されるわけではないが、application_ID、application_name、application_type、application_backup_list、application_sync等のフィールドを含んでいてもよい。メッセージテーブル619dは、例えば、以下に限定されるわけではないが、msg_id、msg_application、timestamp、msg_details_list、message_size、message_origin、message_synchronization等のフィールドを含んでいてもよい。フェイルオーバテーブル619eは、例えば、以下に限定されるわけではないが、failover_ID、failover_timestamp、primary_application、secondary_application、failover_check_time等のフィールドを含んでいてもよい。コード経路テーブル619fは、例えば、以下に限定されるわけではないが、codepath_ID、codepath_itrtions、optmz_thrshld_min、optmz_thrshld_max、codepath_length、codepath_priorty等のフィールドを含んでいてもよい。
一実施形態において、DSFMデータベースは、他のデータベースシステムとインタラクトしてもよい。例えば、分散型データベースシステムを用いて、検索DSFMコンポーネントによるクエリ及びデータアクセスは、DSFMデータベース及び統合データ保護層データベースの組合せを1つのデータベースエンティティとして取り扱ってもよい。
一実施形態において、ユーザプログラムは、DSFMシステムを更新するために役立つ様々なユーザインターフェースプリミティブを含んでいてもよい。また、様々なアカウントは、DSFMシステムがサービスを提供する必要があるクライアントの環境及びタイプによって、カスタムデータベーステーブルを必要とすることがある。なお、如何なる一意的フィールドを全体的なキーフィールドとして指定/ラベル付けしてもよい。他の実施形態において、これらのテーブルは、これら自身のデータベース及びこれらのそれぞれのデータベースコントローラ(すなわち、上述のテーブル毎に個別のデータベースコントローラ)に分散されている。標準的なデータ処理技術を用いることによって、複数のコンピュータシステム及び/又はストレージデバイスに亘ってデータベースをより分散させることができる。同様に、分散型データベースコントローラの構成は、様々なデータベースコンポーネント619a〜fを統合及び/又は分散させることによって変化させてもよい。DSFMシステムは、データベースコントローラによって様々な設定、入力及びパラメータを追跡することによって構成してもよい。
DSFMデータベースは、それ自体及び/又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び/又は他のコンポーネントと通信してもよい。多くの場合、DSFMデータベースは、1つ以上のDSFMコンポーネント、他のプログラムコンポーネント等と通信する。データベースは、他のノード及びデータに関する情報を含み、保持し及び提供してもよい。
DSFMコンポーネント635は、CPUによって実行される保存されたプログラムコンポーネントである。一実施形態において、DSFMコンポーネントは、先の図面について説明したDSFMシステムの様々な実施形態の側面の何れか及び/又は全ての組合せを取り込む。このように、DSFMシステムの実施形態は、様々な通信ネットワークを介する情報、サービス、トランザクション等のアクセス、取得及び供給に影響を及ぼすことができる。
1つ以上のDSFMコンポーネントは、ソフトウェアアプリケーションのプライマリインスタンスにおいて失敗した実行を、この失敗の前に、プライマリインスタンスの実行と同期するソフトウェアアプリケーションのセカンダリインスタンスの実行に訂正できる。一実施形態において、DSFMコンポーネント635は、(例えば、断片化された仮想アドレス204等)を入力として受け取り、様々なコンポーネント(例えば、IMAS641等)を介してこの入力を出力(例えば、連続的で無限の仮想メモリアドレス空間206等)に変換する。
ノード間の情報の効率的なアクセスを可能にするDSFMコンポーネントは、標準的な開発ツール及び言語を使用することによって開発してもよく、これらには、例えば、以下に限定されるわけではないが、アパッチコンポーネント、アセンブリ、ActiveX、バイナリ実行可能形式、(ANSI)(Objective−)C(++)、C#及び/又は.NET、データベースアダプタ、CGIスクリプト、Java、JavaScript、マッピングツール、手続型及びオブジェクト指向型開発ツール、PERL、PHP、パイソン、シェルスクリプト、SQLコマンド、ウェブアプリケーションサーバ拡張、ウェブ開発環境及びライブラリ(例えば、マイクロソフトのActiveX、アドビAIR、FLEX及びFLASH、AJAX、(D)HTML、Dojo(Java)、JavaScript、jQuery(UI)、MooTools、Prototype、script.aculo.us、シンプルオブジェクトアクセスプロトコル(Simple Object Access Protocol:SOAP)、SWFObject、Yahoo!ユーザインターフェース等)、WebObjects等がある。一実施形態においては、DSFMサーバは、暗号サーバを使用して通信を暗号化及び解読する。DSFMコンポーネントは、それ自体及び/又は設備等を含むコンポーネント集合体内で他のコンポーネントに及び/又は他のコンポーネントと通信してもよい。多くの場合、DSFMコンポーネントは、DSFMデータベース、オペレーティングシステム、他のプログラムコンポーネント等と通信する。DSFMシステムの実施形態は、プログラムコンポーネント、システム、ユーザ及び/又はデータ通信、要求及び/又は応答を含み、これらと通信し、これらを生成、取得及び/又は提供する。
DSFMノードのコントローラコンポーネントのあらゆる構造及び/又は動作は、展開及び/又は配備を容易にする如何なる手法で結合、統合及び/又は分散してもよい。同様に、コンポーネント集合体は、配備及び/又は展開を可能にする如何なる手法で組合せてもよい。これを達成するために、オンデマンドでコンポーネントを動的に統合化された形式にロードできる共通のコードベース又は設備にコンポーネントを統合してもよい。
コンポーネント集合体は、標準的なデータ処理及び/又は開発技術によって無数の変形例に統合及び/又は分散できる。プログラムコンポーネント集合体内のプログラムコンポーネントの何れか1つの複数のインスタンスを1つのノード上で及び/又は複数のノードに亘ってインスタンス化し、ロードバランシング及び/又はデータ処理技術によって性能を向上させてもよい。更に、複数のコントローラ及び/又はストレージデバイス、例えば、データベースに亘って、単一のインスタンスを分散させてもよい。標準的なデータ処理通信技術によって、連携して動作する全てのプログラムコンポーネントインスタンス及びコントローラを分散させてもよい。
DSFMコントローラの実施形態の構成は、システム配備のコンテキストに依存していてもよい。例えば、以下に限定されるわけではないが、予算、能力、場所及び/又は基底にあるハードウェアリソースの使用等の因子が配備条件及び構成に影響を及ぼすことがある。構成がより統合及び/又は集積化されたプログラムコンポーネントとなるか、より分散された一連のプログラムコンポーネントとなるか、及び/又は統合構成と分散構成の間の幾つかの組合せとなるかにかかわらず、データを通信し、取得し及び/又は提供することができる。プログラムコンポーネント集合体からの共通のコードベースに統合されたコンポーネントのインスタンスは、データを通信し、取得し及び/又は提供することができる。これは、例えば、以下に限定されるわけではないが、データ参照(例えば、ポインタ)、内部メッセージング、オブジェクトインスタンス変数通信、共有メモリ空間、変数通過(variable passing)等の内部アプリケーションデータ処理通信技術によって達成してもよい。
コンポーネント集合体のコンポーネントが互いに離散、分離及び/又は外部にある場合、
他のコンポーネントとのデータの通信、取得及び/又は提供は、例えば、以下に限定されるわけではないが、アプリケーションプログラムインターフェース(Application Program Interfaces:API)情報通過、(分散型:distributed)コンポーネントオブジェクトモデル(Component Object Model:(D)COM)、(分散型)オブジェクトリンキング及び埋め込み(Object Linking and Embedding:(D)OLE)等、共通オブジェクトリクエストブローカアーキテクチャ(Common Object Request Broker Architecture:CORBA)、Jiniローカル及びリモートアプリケーションプログラムインターフェース、JavaScriptオブジェクトノテーション(JavaScript Object Notation:JSON)、遠隔メソッド呼出(Remote Method Invocation:RMI)、SOAP、プロセスパイプ、共有ファイル等のアプリケーション間データ処理通信技術によって達成してもよい。アプリケーション間通信のために離散コンポーネント間で又はアプリケーション内通信のために単一のコンポーネントのメモリ空間内で送信されるメッセージは、文法の作成及び解析によって実現してもよい。文法は、コンポーネント内及びコンポーネント間の通信メッセージの基礎となる文法生成及び解析能力を可能にする、例えば、lex、yacc、XML等の開発ツールを用いて開発してもよい。
例えば、文法は、例えば、以下のようなHTTPポストコマンドを認識するように構成してもよい。
w3c -post http://... Value1
ここで、「http://」は、文法構文の一部であり、これに続くものがポスト値の一部であるとみなされるため、Value1は、パラメータである。同様に、このような文法では、変数「Value1」は、「http://」ポストコマンドに挿入して送信してもよい。文法構文自体は、解釈され及び/又は他の手法で解析メカニズムを生成するために使用される構造化されたデータ(例えば、lex、yacc等によって処理される構文記述テキストファイル)として表現してもよい。また、解析メカニズムが生成及び/又はインスタンス化されると、それ自体が、例えば、以下に限定されるわけではないが、キャラクタ(例えば、タブ)区切りテキスト、HTML、構造化されたテキストストリーム、XML及び/又はこれらに類する構造化されたデータを処理及び/又は解析してもよい。他の実施形態においては、アプリケーション間データ処理プロトコル自体が統合化された及び/又は直ちに利用できるパーサ(例えば、JSON、SOAP等パーサ)を有していてもよく、これを用いてデータを解析(例えば、通信)してもよい。更に、文法解析は、メッセージ解析だけではなく、データベース、データコレクション、データストア、構造化されたデータ等の解析に用いてもよい。この場合も、望ましい構成は、コンテキスト、環境及びシステム展開の要件に依存する。
例えば、幾つかの実装では、DSFMコントローラは、情報サーバを介してセキュアソケットレイヤ(Secure Sockets Layer:SSL)ソケットサーバをインプリメントするPHPスクリプトを実行してもよく、情報サーバは、サーバポートに供給される通信を待機し、このサーバポートには、クライアントがデータ、例えば、JSONフォーマットで符号化されたデータを送信できる。供給された通信を識別すると、PHPスクリプトは、クライアントデバイスから供給されたメッセージを読み込み、受信したJSON符号化テキストデータを解析し、JSON符号化テキストデータからPHPスクリプト変数に情報を抽出し、データ(例えば、クライアント識別情報等)及び/又は抽出された情報を、構造化照会言語(Structured Query Language:SQL)を用いてアクセス可能なリレーショナルデータベースに保存する。SSL接続を介してクライアントデバイスからJSON符号化入力データを受け取り、データを解析して変数を抽出し、データベースにデータを格納するための、実質的にPHP/SQLコマンドの形式で書かれた例示的なリストを以下に示す。
<?PHP
header('Content-Type: text/plain');

// set ip address and port to listen to for incoming data(供給されるデータをリスンするためにIPアドレス及びポートを設定)
$address = ‘192.168.0.100';
$port = 255;

// create a server-side SSL socket, listen for/accept incoming communication(供給される通信をリスンし/受け取るためにサーバ側SSLソケットを作成)
$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(メッセージの末尾まで1024バイトブロックでクライアントデバイスからの入力データを読出)

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(クライアントデータベース内のUserTableテーブルにデータを追加)
mysql_close("CLIENT_DB.SQL"); // close connection to database(データベースへの接続を閉じる)
?>
また、SOAPパーサインプリメンテーションに関する例示的な実施形態を提供するために、以下のリソースを使用してもよい。
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
これらは、全て参照によって明示的に本願に援用される。
なお、DSFMの個人及び/又は企業ユーザの特定のニーズ及び/又は特徴、データベース構成及び/又は関係モデル、データタイプ、データ伝送及び/又はネットワークフレームワーク、構文構造等に応じて、多くの柔軟性及びカスタム化を可能にするDSFMシステムの様々な実施形態をインプリメントすることができる。アプリケーション実行最適化及び効率性に関して様々なDSFMシステムの実施形態を説明してきたが、ここに記述した実施形態は、広範囲に亘る様々なアプリケーション及び/又は実装について容易に構成及び/又はカスタマイズできることは明らかである。
本明細書は、多くの詳細事項を含んでいるが、これらの詳細事項は、任意の発明の範囲又は特許請求可能な範囲を限定するものとは解釈されず、特定の実施形態の特定の特徴の記述として解釈される。本明細書おいて、別個の実施形態の文脈で開示した幾つかの特徴を組合せて、単一の実施形態として実現してもよい。逆に、単一の実施形態の文脈で開示した様々な特徴は、複数の実施形態に別個に具現化してもよく、適切な如何なる部分的組合せとして具現化してもよい。更に、以上では、幾つかの特徴を、ある組合せで機能するものと説明しているが、初期的には、そのように特許請求している場合であっても、特許請求された組合せからの1つ以上の特徴は、幾つかの場合、組合せから除外でき、特許請求された組合せは、部分的組合せ又は部分的な組合せの変形に変更してもよい。
同様に、図面では、動作を特定の順序で示しているが、このような動作は、所望の結果を達成するために、図示した特定の順序又は順次的な順序で行う必要はなく、また、図示した全ての動作を行う必要もない。ある特定の状況では、多重タスキング及び並列処理が有利であることもある。更に、上述の実施形態の様々なシステム構成要素の分離は、全ての実施形態においてこのような分離が必要であるとは解釈されず、ここに記述したプログラム構成要素及びシステムは、包括的に、1つのソフトソフトウェア製品に統合してもよく、複数のソフトウェア製品にパッケージングしてもよい。
主題の特定の実施形態を記述した。他の実施形態も、以下の特許請求の範囲に含まれる。例えば、請求の範囲に示す処理は、望ましい結果を達成する異なる順序で実行してもよい。更に、添付の図に示す処理は、所望の結果を達成するために、必ずしも、ここに示された特定の順序又は連続的な処理を要求するわけではない。幾つかの実装では、マルチタスキング及び並列処理が有利である場合もある。

Claims (20)

  1. 少なくとも1つのコンピュータプロセッサ上で、アプリケーションを迅速に実行する方法であって、
    前記少なくとも1つのコンピュータプロセッサ上でアプリケーションの複数のインスタンスを同時に実行することであって、
    各インスタンスは、前記複数のインスタンスの他の全てのインスタンスをコンパイルするために用いられる各コンパイラオプションとは異なるそれぞれのコンパイラオプションによってコンパイルされ
    ‐前記アプリケーションは、その実行に際して、第1の一連の結果を生成するよう構成され、
    ‐各インスタンスは、同一の前記第1の一連の結果を生成するようコンパイルされる、
    複数のインスタンスを同時に実行することと、
    前記アプリケーションによって生成される前記第1の一連の結果のうち各結果について、
    前記結果に対応する、各インスタンスによって生成されるそれぞれの出力を監視することと、
    前記監視された出力から最も早く発生する出力を前記結果に対応する前記アプリケーションの出力としてラベリングし、他の全ての出力を複製としてラベリングすることとによって、少なくとも1つのコンピュータプロセッサの演算性能の速度を向上させることと
    を含む方法。
  2. 前記複数のインスタンスは、第1のインスタンス及び第2のインスタンスを含み、
    前記第1のインスタンスのためのコンパイラオプションは、事前(AT:ahead-of-time)コンパイルを含み、
    前記第2のインスタンスのためのコンパイラオプションは、ジャストインタイム(JIT:just-in-time)コンパイルを含み、前記JITコンパイルは、少なくとも部分的に、前記第2のインスタンスの少なくとも1つの以前の実行から得られるランタイム情報に基づいている、請求項1記載の方法。
  3. 前記複数のインスタンスは、第1のインスタンスを含み、
    前記第1のインスタンスのためのコンパイラオプションは、無制約のメモリ使用、メモリ使用の最小化、並列演算の最大化、及び演算の制約された同時並列性からなるグループから選択される、請求項1記載の方法。
  4. 前記複数のインスタンスから1つのインスタンスをプライマリインスタンスとしてラベリングすることと、
    他の全てのインスタンスをセカンダリインスタンスとしてラベリングすることと、
    前記結果に対応する、前記アプリケーションの各インスタンスによって出力される第2の一連の結果からの各結果について、前記セカンダリインスタンスからの各出力を抑制することと
    を更に含む請求項1記載の方法。
  5. k≧1として、前記第2の一連の結果からk個の結果を生成した後に、前記プライマリインスタンスの失敗を認識することと、
    前記プライマリインスタンスを失敗したインスタンスとしてラベリングすることと、
    前記k個の結果の各計算に関連するロジックを実行したセカンダリインスタンスを選択することと、
    前記選択されたセカンダリインスタンスを前記プライマリインスタンスとして再ラベリングすることによって、前記再ラベリングされたプライマリインスタンスが(k+1)番目の結果を生成することと
    を更に含む請求項4記載の方法。
  6. 記アプリケーションの少なくとも一部のソースコードは、少なくとも部分的にインタープリットされるプログラミング言語を用いて特定される、請求項1記載の方法。
  7. ソフトウェアアプリケーションのフェイルオーバを可能にする方法であって、
    前記ソフトウェアアプリケーションは、その実行に際して、一連の結果を生成するよう構成され、
    前記ソフトウェアアプリケーションの、何れのインスタンスの実行も、同一の前記一連の結果を出力し、
    前記方法は、
    プロセッサベースのコントローラによって、(i)ソフトウェアアプリケーションのプライマリインスタンスであって、第1のコンパイラオプションによってコンパイルされているプライマリインスタンス及び(ii)アプリケーションの第1のセカンダリインスタンスであって、前記第1のコンパイラオプションとは異なるコンパイラオプションによってコンパイルされている第1のセカンダリインスタンスの同時の実行を監視することと、 k≧1として、ソフトウェアアプリケーションの一連の結果からのk個の結果の生成の後、プライマリインスタンスの失敗を検出することと、
    前記第1のセカンダリインスタンスが、k番目の結果を算出するために必要な演算を完了していることを確認することと、
    前記第1のセカンダリインスタンスをプライマリインスタンスとしてラベリングすることと
    を含む方法。
  8. 前記コントローラは、前記k個の結果に対応する前記第1のセカンダリインスタンスの出力を抑制する、請求項7記載の方法。
  9. 前記第1のコンパイラオプションは、ジャストインタイム(JIT:just-in-time)コンパイルであり、前記第1のセカンダリインスタンスのために使用されるコンパイラオプションは、事前(AT:ahead-of-time)コンパイルである、請求項7記載の方法。
  10. 前記コントローラによって、(iii)前記アプリケーションの第2のセカンダリインスタンスであって、前記第1のコンパイラオプション及び前記第1のセカンダリインスタンスをコンパイルするために使用されるコンパイラオプションの両方と異なるコンパイラオプションによってコンパイルされている第2のセカンダリインスタンスの同時の実行を監視することと、
    前記第1のセカンダリインスタンスが前記k番目の結果を算出するために必要な演算を完了していることが確認されない場合、
    前記第2のセカンダリインスタンスが前記k番目の結果を算出するために必要な演算を完了していることを確認することと、
    前記第2のセカンダリインスタンスをプライマリインスタンスとしてラベリングすることと
    を含む請求項7記載の方法。
  11. 少なくとも1つのコンピュータプロセッサ上で、アプリケーションを迅速に実行するシステムであって、
    第1のプロセッサと、
    前記第1のプロセッサと電気的に通信する第1のメモリであって、前記第1のメモリは、前記第1のプロセッサ及び第2のプロセッサの少なくとも1つを含む処理ユニットによって実行されると、前記処理ユニットをプログラムする命令を含み、この命令により前記処理ユニットは、
    前記少なくとも1つのコンピュータプロセッサ上でアプリケーションの複数のインスタンスを同時に実行し、各インスタンスは、前記複数のインスタンスの他の全てのインスタンスをコンパイルするために用いられる各コンパイラオプションとは異なるそれぞれのコンパイラオプションによってコンパイルし、前記アプリケーションは、その実行に際して、第1の一連の結果を生成するよう構成され、各インスタンスは、同一の前記第1の一連の結果を生成するようコンパイルされ、
    前記アプリケーションによって生成される前記第1の一連の結果のうち各結果について、
    前記結果に対応する、各インスタンスによって生成されるそれぞれの出力を監視し、
    前記監視された出力から最も早く発生する出力を前記結果に対応する前記アプリケーションの出力としてラベリングし、他の全ての出力を複製としてラベリングすることとによって、少なくとも1つのコンピュータプロセッサの演算性能の速度を向上させる、システム。
  12. 前記複数のインスタンスは、第1のインスタンス及び第2のインスタンスを含み、
    前記第1のインスタンスのためのコンパイラオプションは、事前(AT:ahead-of-time)コンパイルを含み、
    前記第2のインスタンスのためのコンパイラオプションは、ジャストインタイム(JIT:just-in-time)コンパイルを含み、前記JITコンパイルは、少なくとも部分的に、前記第2のインスタンスの少なくとも1つの以前の実行から得られるランタイム情報に基づいている、請求項11記載のシステム。
  13. 前記複数のインスタンスは、第1のインスタンスを含み、
    前記第1のインスタンスのためのコンパイラオプションは、無制約のメモリ使用、メモリ使用の最小化、並列演算の最大化、及び演算の制約された同時並列性からなるグループから選択される、請求項11記載のシステム。
  14. 前記命令は、前記処理ユニットが、
    前記複数のインスタンスから1つのインスタンスをプライマリインスタンスとしてラベリングし、
    他の全てのインスタンスをセカンダリインスタンスとしてラベリングし、
    前記結果に対応する、前記アプリケーションの各インスタンスによって出力される第2の一連の結果からの各結果について、前記セカンダリインスタンスからの各出力を抑制する
    ように更にプログラムされている、請求項11記載のシステム。
  15. 前記命令は、前記処理ユニットが、
    k≧1として、前記第2の一連の結果からk個の結果を生成した後に、前記プライマリインスタンスの失敗を認識し、
    前記プライマリインスタンスを失敗したインスタンスとしてラベリングし、
    前記k個の結果の各計算に関連するロジックを実行したセカンダリインスタンスを選択し、
    前記選択されたセカンダリインスタンスを前記プライマリインスタンスとして再ラベリングすることによって、前記再ラベリングされたプライマリインスタンスが(k+1)番目の結果を生成する
    ように更にプログラムされている、請求項14記載のシステム。
  16. 記アプリケーションの少なくとも一部のソースコードは、少なくとも部分的にインタープリットされるプログラミング言語を用いて特定される、請求項11記載のシステム。
  17. ソフトウェアアプリケーションのフェイルオーバのためのシステムであって、
    前記ソフトウェアアプリケーションは、その実行に際して、一連の結果を生成するよう構成され、
    前記ソフトウェアアプリケーションの、何れのインスタンスの実行も、同一の前記一連の結果を出力し、
    前記システムは、
    第1のプロセッサと、
    前記第1のプロセッサと電気的に通信する第1のメモリであって、前記第1のメモリは、前記第1のプロセッサ及び第2のプロセッサの少なくとも1つからなる処理ユニットによって実行されると、前記処理ユニットをプログラムする命令を含み、この命令により前記処理ユニットは、
    (i)ソフトウェアアプリケーションのプライマリインスタンスであって、第1のコンパイラオプションによってコンパイルされているプライマリインスタンス及び(ii)アプリケーションの第1のセカンダリインスタンスであって、前記第1のコンパイラオプションとは異なるコンパイラオプションによってコンパイルされている第1のセカンダリインスタンスの同時の実行を監視し、
    k≧1として、ソフトウェアアプリケーションの一連の結果からのk個の結果の生成の後、プライマリインスタンスの失敗を検出し、
    前記第1のセカンダリインスタンスが、k番目の結果を算出するために必要な演算を完了していることを確認し、
    前記第1のセカンダリインスタンスをプライマリインスタンスとしてラベリングする、システム。
  18. 前記命令は、前記処理ユニットが、前記k個の結果に対応する前記第1のセカンダリインスタンスの出力を抑制するように更にプログラムされている、請求項17記載のシステム。
  19. 前記第1のコンパイラオプションは、ジャストインタイム(JIT:just-in-time)コンパイルであり、前記第1のセカンダリインスタンスのために使用されるコンパイラオプションは、事前(AT:ahead-of-time)コンパイルである、請求項17記載のシステム。
  20. 前記命令は、前記処理ユニットが、
    (iii)前記アプリケーションの第2のセカンダリインスタンスであって、前記第1のコンパイラオプション及び前記第1のセカンダリインスタンスをコンパイルするために使用されるコンパイラオプションの両方と異なるコンパイラオプションによってコンパイルされている第2のセカンダリインスタンスの同時の実行を監視し、
    前記第1のセカンダリインスタンスが前記k番目の結果を算出するために必要な演算を完了していることが確認されない場合、
    前記第2のセカンダリインスタンスが前記k番目の結果を算出するために必要な演算を完了していることを確認し、
    前記第2のセカンダリインスタンスをプライマリインスタンスとしてラベリングする
    ように更にプログラムされている、請求項17記載のシステム。
JP2016556727A 2014-03-11 2015-03-11 データ同期及びフェイルオーバ管理のためのシステム及び方法 Active JP6592450B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201461951374P 2014-03-11 2014-03-11
US61/951,374 2014-03-11
PCT/US2015/019920 WO2015138586A1 (en) 2014-03-11 2015-03-11 Systems and methods for data synchronization and failover management
US14/644,674 US10210005B2 (en) 2014-03-11 2015-03-11 Systems and methods for data synchronization and failover management
US14/644,674 2015-03-11

Publications (2)

Publication Number Publication Date
JP2017511939A JP2017511939A (ja) 2017-04-27
JP6592450B2 true JP6592450B2 (ja) 2019-10-16

Family

ID=54072362

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016556727A Active JP6592450B2 (ja) 2014-03-11 2015-03-11 データ同期及びフェイルオーバ管理のためのシステム及び方法

Country Status (9)

Country Link
EP (1) EP3117308B1 (ja)
JP (1) JP6592450B2 (ja)
KR (2) KR102250617B1 (ja)
AU (1) AU2015229434B2 (ja)
BR (1) BR112016021037B1 (ja)
CA (1) CA2942359C (ja)
ES (1) ES2776366T3 (ja)
SG (2) SG11201607515XA (ja)
WO (1) WO2015138586A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6945646B2 (ja) * 2017-03-24 2021-10-06 シーメンス アクチエンゲゼルシヤフトSiemens Aktiengesellschaft 産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー
US11663094B2 (en) * 2017-11-30 2023-05-30 Hewlett Packard Enterprise Development Lp Reducing recovery time of an application

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60150159A (ja) * 1984-01-17 1985-08-07 Agency Of Ind Science & Technol 多重化処理方式
JPH04153764A (ja) * 1990-10-18 1992-05-27 Nec Corp 分散cpuの処理高速化方式
JP3008521B2 (ja) * 1991-02-26 2000-02-14 日本電気株式会社 呼び出し機能実行制御方式
JP2921190B2 (ja) * 1991-07-25 1999-07-19 日本電気株式会社 並列実行方式
JPH06131312A (ja) * 1992-01-23 1994-05-13 Hitachi Ltd 並行処理方法およびシステム
US6233725B1 (en) * 1998-12-03 2001-05-15 International Business Machines Corporation Method and apparatus to coordinate and control the simultaneous use of multiple just in time compilers with a java virtual machine
JP3605327B2 (ja) * 1999-11-18 2004-12-22 富士通株式会社 プログラム実行装置
US7150012B2 (en) * 2002-10-15 2006-12-12 Nokia Corporation Method and apparatus for accelerating program execution in platform-independent virtual machines
JP4783005B2 (ja) * 2004-11-25 2011-09-28 パナソニック株式会社 プログラム変換装置、プログラム変換実行装置およびプログラム変換方法、プログラム変換実行方法。
US8621275B1 (en) * 2010-08-06 2013-12-31 Open Invention Network, Llc System and method for event-driven live migration of multi-process applications
JP2007334643A (ja) 2006-06-15 2007-12-27 Renesas Technology Corp プログラム実行方法、プログラム、およびプログラム実行システム
US8627300B2 (en) * 2009-10-13 2014-01-07 Empire Technology Development Llc Parallel dynamic optimization
US8495607B2 (en) 2010-03-01 2013-07-23 International Business Machines Corporation Performing aggressive code optimization with an ability to rollback changes made by the aggressive optimizations
US9081586B2 (en) * 2011-11-29 2015-07-14 Futurewei Technologies, Inc. Systems and methods for customizing optimization/transformation/ processing strategies

Also Published As

Publication number Publication date
KR102250613B1 (ko) 2021-05-10
KR102250617B1 (ko) 2021-05-10
AU2015229434B2 (en) 2020-02-06
SG10201802998YA (en) 2018-05-30
ES2776366T3 (es) 2020-07-30
BR112016021037B1 (pt) 2023-10-17
BR112016021037A2 (ja) 2017-08-15
JP2017511939A (ja) 2017-04-27
EP3117308A1 (en) 2017-01-18
KR20160132434A (ko) 2016-11-18
AU2015229434A1 (en) 2016-09-29
KR20200137045A (ko) 2020-12-08
EP3117308B1 (en) 2020-02-19
CA2942359C (en) 2020-10-06
CA2942359A1 (en) 2015-09-17
WO2015138586A1 (en) 2015-09-17
SG11201607515XA (en) 2016-10-28
EP3117308A4 (en) 2018-01-17

Similar Documents

Publication Publication Date Title
US10515057B2 (en) Management of data replication and storage apparatuses, methods and systems
US11061713B2 (en) Prioritization and source-nonspecific based virtual machine recovery apparatuses, methods and systems
US10210005B2 (en) Systems and methods for data synchronization and failover management
US11036422B2 (en) Prioritization and source-nonspecific based virtual machine recovery apparatuses, methods and systems
US10896101B2 (en) Multiclient backup replication apparatuses, methods and systems
US11061776B2 (en) Prioritization and source-nonspecific based virtual machine recovery apparatuses, methods and systems
WO2017181591A1 (zh) 测试方法及系统
US10909005B2 (en) Object-level metadata-preserving cross heterogeneous operating systems backup and restore apparatuses, methods and systems
US10915407B2 (en) Source volume backup with adaptive finalization apparatuses, methods and systems
US9547565B2 (en) Techniques for message retransmission mechanism
US11080139B2 (en) Systems and methods for data synchronization and failover management
JP6592450B2 (ja) データ同期及びフェイルオーバ管理のためのシステム及び方法
AU2015229429B2 (en) Techniques for message retransmission mechanism
US11003545B2 (en) User space incremental tracking apparatuses, methods and systems
US20160048544A1 (en) System and method for hierarchical categorization of collaborative tagging
US11010088B2 (en) Dynamically determined difference regions apparatuses, methods and systems

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180215

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190123

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190219

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20190513

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190813

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190827

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190920

R150 Certificate of patent or registration of utility model

Ref document number: 6592450

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250