JP5373770B2 - 分散型、耐障害性、および高可用性を達成するための決定性コンピューティング・システム、方法、およびプログラム・ストレージ・デバイス(分散型、耐障害性、および高可用性のコンピューティング・システム) - Google Patents

分散型、耐障害性、および高可用性を達成するための決定性コンピューティング・システム、方法、およびプログラム・ストレージ・デバイス(分散型、耐障害性、および高可用性のコンピューティング・システム) Download PDF

Info

Publication number
JP5373770B2
JP5373770B2 JP2010506208A JP2010506208A JP5373770B2 JP 5373770 B2 JP5373770 B2 JP 5373770B2 JP 2010506208 A JP2010506208 A JP 2010506208A JP 2010506208 A JP2010506208 A JP 2010506208A JP 5373770 B2 JP5373770 B2 JP 5373770B2
Authority
JP
Japan
Prior art keywords
component
message
execution
messages
deterministic
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.)
Expired - Fee Related
Application number
JP2010506208A
Other languages
English (en)
Other versions
JP2010525484A (ja
Inventor
ドライ、チトラ
シュトルム、ロバート、イー
フイニン、フェン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2010525484A publication Critical patent/JP2010525484A/ja
Application granted granted Critical
Publication of JP5373770B2 publication Critical patent/JP5373770B2/ja
Expired - Fee Related 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
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1461Backup scheduling policy
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1482Generic software techniques for error detection or fault masking by means of middleware or OS functionality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • 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
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1469Backup restoration techniques
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1482Generic software techniques for error detection or fault masking by means of middleware or OS functionality
    • G06F11/1484Generic software techniques for error detection or fault masking by means of middleware or OS functionality involving virtual machines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/835Timestamp

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Stored Programmes (AREA)
  • Retry When Errors Occur (AREA)

Description

本発明は、一般に、分散型システムを開発および実行するためのアプリケーション開発ツール、方法、およびシステムに関し、とりわけ、コンポーネント指向アプリケーションを実行するための分散型、トランスペアレントな耐障害性、および高可用性のシステムを開発および実行するために改善された環境に関する。
SCAサービス・コンポーネント・アーキテクチャは、ビジネス機能を定義するITサービスを実装するための、オープンで技術に無関係な(technology-neutral)モデルを提供する。SCAは、アクセス方法およびセキュリティなどのソリューション面にわたる制御によって、個々のサービスの集合からビジネス・ソリューションを組み立てるためのモデルも提供する。顧客はSCAを使用して、より簡単に新しいIT資産を作成すること、および既存のIT資産を、変化するビジネス要件に即時に適合可能な再使用可能サービスに変換することが可能になる。SCA(ミドルウェア)コンポーネントの構築を可能にする規格は、ビジネス機能を実行する一連の再使用可能サービスとしてIT資産を構築する、サービス指向アーキテクチャ(SOA)を利用する。サービス指向アーキテクチャは、リモートのオブジェクトおよび機能(「サービス」と呼ぶ)を呼び出す機能と、相互運用性に重きを置いた動的サービス発見のためのツールとを組み合わせる。現在、この業界の目標は、SOAに基づくアプリケーションを構築するためのより単純かつより強力な方法を、アプリケーション開発者に提供することである。
さらに、SCAコンポーネントを実装する分散型システムの開発において、持続的な「設定」(分散型システム全体にわたって大容量媒体上に格納されることになる)、または障害に対して耐性のあるように保持された「状態」の、いずれかを表すことが可能な、「不揮発性」データのトランスペアレントな対障害性機能を提供することが目標である。現在、分散型の耐障害性および高可用性システムの開発は、その場しのぎの、エラーを起こしやすい、時間のかかるものである。現在のソリューションは、通貨価格の変動および為替動作が異常であるかまたはアトミックでない可能性のある、例示的な為替システムに類似している。実行は、ネットワークまたはスレッディングによって、通常は非決定性であり、持続性のための既存のメカニズム(エンティティ・ビーン、JDBCなど)は非常に重く、特別な知識および特別なコードを必要とする。
たとえば、現在のソリューションは、たとえば「エンタープライズJavaビーン」(EJB)などの、J2EEプラットフォーム用のサーバ側のコンポーネント・アーキテクチャを含むエンティティ・ビーンを実装する。EJBは、その称するところによれば、分散型、トランザクション、セキュア、およびポータブルな、Javaアプリケーションの、高速かつ簡略化された開発をサポートしている。EJBは、メッセージの同時消費を可能にするコンテナ・アーキテクチャをサポートし、分散型トランザクションのサポートを提供するため、データベース更新、メッセージ処理、およびJ2EEアーキテクチャを使用する企業システムへの接続が、同じトランザクション・コンテキストに関与することができる。
プログラマが、コンポーネント状態を別々のオブジェクトに分割する、トランザクション、JDBC、またはエンティティ・ビーンなどの特別な方法および構造を習得すること、ならびに、その状態を持続すること、さらにはその代わりに、通常のコードに対して持続性および耐障害性を自動的に提供すること(トランスペアレントな耐障害性とも呼ばれる)を、必要としなくなることが、強く望まれている。
本発明の譲受人によって共同所有された米国特許出願第4,665,520号に記載された技法を含む、分散型システムにおけるトランスペアレントな耐障害性に関する技法が存在する。こうした技法の性能は、分散型コンポーネント間での各通信を記録する必要があるため、分散型システムにおける通信コンポーネントの動作の非決定性によって制限される。
さらに、非決定性分散型システムの回復の性能問題を避けるために、決定的実行、耐障害性、および高可用性をトランスペアレントにサポートする、実行サーバを提供することが強く望まれている。
さらに、単純なコンポーネント・ベース・モデルをプログラマに提供すること、およびとりわけ、アプリケーション開発者がミドルウェア機能によりアクセスしやすくするためのシステムおよび方法を提供することが、強く望まれている。
米国特許出願第4,665,520号
David Bacon、Robert Strom、Ashis Tarafdar著、「Guava:a dialect of Java without data races」と題するオブジェクト指向のプログラミング、システム、言語、およびアプリケーションに関する第15回ACM SIGPLAN会議2000の議事録 1985年7月付けのJefferson,Dによる「Virtual time」と題するACM Transactions on Programming Languages and Systems
したがって、本発明の広義な目的は、前述のような従来技術の欠点を改善することである。
本発明の他の目的は、コンポーネント指向アプリケーションに関する決定的実行、耐障害性、および高可用性をトランスペアレントにサポートする、実行環境を提供することである。
これらおよび他の関連する目的の実施は、コンピューティング・システムおよび方法によって達成される。決定性コンピューティング・システムは、
タスクを実行するための論理をそれぞれが実装する複数のソフトウェア・コンポーネントであって、このコンポーネントが、ネットワーク内で接続され、コンポーネント間でメッセージを通信するように適合された、1つまたは複数のマシンを備える実行環境内で実行する、複数のソフトウェア・コンポーネントと、
プログラム実行中に送信側コンポーネントから受信側コンポーネントへと送られるメッセージに関して、決定性タイムスタンプを自動的に関連付けるための手段であって、当該タイムスタンプが受信側コンポーネントでの当該メッセージの着信の推定時刻を表す、自動的に関連付けるための手段と、
入力メッセージの固有の着信順序を生成するために当該タイムスタンプを使用することによって、当該コンポーネントを決定的に実行するための手段と、
プログラム実行中にコンポーネント状態を追跡し、その状態をローカル・ストレージ・デバイスに定期的にチェックポインティング(checkpointing)するための手段と、
を備え、
マシンの障害時には、最近格納されたチェックポイントを回復すること、および最後のチェックポイント以降に発生したイベントを再実行することによって、このコンポーネント状態が復元される。
コンピューティング・システムは、関連付けられたタイムスタンプと同じ順序でメッセージを処理することにより、受信側コンポーネントの実行を反復することで、決定性を持つ。
本発明の他の態様では、コンポーネント状態をバックアップ・プロセッサ・デバイスに対してチェックポインティングすることができる。
本発明の他の実施形態によれば、
コンピューティング・システム内のコンポーネントを、それらのコンポーネント間でのメッセージ通信を実行可能にするように適合されたコンピューティング・システム内で決定的に実行するための方法であって、各コンポーネントがタスクを実行するための論理を実装し、
プログラム実行中に送信側コンポーネントから受信側コンポーネントへと送られるメッセージに関して、タイムスタンプを自動的に関連付けることであって、このタイムスタンプが受信側コンポーネントでのメッセージの着信の推定時刻を表す、自動的に関連付けることと、
入力メッセージの固有の着信順序を生成するために当該タイムスタンプを使用することによって、当該コンポーネントを決定的に実行することと、
プログラム実行中にそのコンポーネント状態を追跡し、その状態をローカル・ストレージ・デバイスに定期的にチェックポインティングすることと、
を含み、
コンポーネントの障害時には、最近格納されたチェックポイントを回復すること、および最後のチェックポイント以降に発生したイベントを再実行することによって、このコンポーネント状態が復元される。
さらに本発明の他の実施形態によれば、コンポーネント指向アプリケーションを実行するための環境が提供され、この環境はコンポーネント間でメッセージを通信するように適合される。この環境は、
各コンポーネントがタスクを実行するための論理を実装する、メッセージのコンポーネントへの入力およびコンポーネントからの出力を表すポートの仕様を含む、コンポーネントの高水準設計を実行可能にするサブシステムと、
コンポーネントが当該実行環境の特定の処理エンジンに割り当てられた低水準実装に、高水準設計をマッピングするための、配置サービスと、
プログラム実行中に送信側コンポーネントから受信側コンポーネントへと送られるメッセージに関して、タイムスタンプに関連付けられたコンポーネントの入力または出力メッセージを自動的に増補するためであって、このタイムスタンプが受信側コンポーネントでのメッセージの着信の推定時刻を表す、自動的に増補するため、および
その状態に対する増分変化を追跡するためのコードでコンポーネントを増補するための、
コード強化手段と、
を備え、
プログラム実行中にコンポーネント状態が追跡され、コンポーネント状態はローカル・ストレージ・デバイス内でチェックポインティングされ、
コンポーネントの障害時には、最近のチェックポイントを回復すること、および最後のチェックポイント以降に発生したイベントを再実行することによって、このコンポーネント状態が復元される。
本発明のこの態様により、高水準設計は、当該実行環境内のどこでコンポーネントが実行されるかに無関係である。
さらに、時間の推定が自動的な非時間認識(non-time-aware)コンポーネントと、プログラマが実時間制約を指定することが可能な時間認識コンポーネントという、2つのタイプのコンポーネントの共存を実行可能にする、前述の諸実施形態のそれぞれに従った分散型システムを提供することが、強く望まれている。
当業者であれば、本発明の他の利点は、図面および詳細な説明の審査により明らかとなろう。任意の追加の利点が本明細書に組み込まれることが意図されている。
当業者であれば、添付の図面と組み合わされた以下の詳細な説明に鑑みて、本発明の目的、特徴、および利点が明らかとなろう。
本発明に従った、コンポーネントおよびコンポーネント指向アプリケーションを実行するためのミドルウェア・アプリケーションが実行される、実行サーバ・アーキテクチャ10を示す図である。 本発明の実行サーバ・アーキテクチャに従った、単一実行エンジン、この例ではJava仮想マシン(JVM)内のコンポーネント間での、および、複数の実行エンジン間での、例示的メッセージングおよび通信を示す図である。 例示的ユーザ設計からのコンポーネントの配置を含む、本発明のサーバ・ミドルウェア・コンポーネントによって実行可能化された例示的アプリケーションを示す図である。 例示的ユーザ設計からのコンポーネントの配置を含む、本発明のサーバ・ミドルウェア・コンポーネントによって実行可能化された例示的アプリケーションを示す図である。 仮想時間推定を含む、本発明のサーバ・ミドルウェア・コンポーネントによって実行可能化された例示的アプリケーションを示す図である。 沈黙(silence)および好奇(curiosity)メッセージ生成を含む、本発明のサーバ・ミドルウェア・コンポーネントによって実行可能化された例示的アプリケーションを示す図である。 本発明の原理に従った、メモリ・ストレージ・デバイスへのチェックポインティングおよびハード・ディスクからのチェックポイントの復元を示す概略図である。 本発明によって与えられる高可用性を提供するための、受動リモート・バックアップの使用、およびスケジューラ・レプリカの生成(spawning)を示す、概略図である。 本発明によって与えられる高可用性を提供するための、受動リモート・バックアップの使用、およびスケジューラ・レプリカの生成(spawning)を示す、概略図である。 本発明によって与えられる高可用性を提供するための、受動リモート・バックアップの使用、およびスケジューラ・レプリカの生成(spawning)を示す、概略図である。
前述のように、提案された発明は、当分野の問題、すなわち、コンポーネント状態を持続させるためにその状態を別々のオブジェクトに分割する、トランザクション、JDBC、またはエンティティ・ビーンなどの、特化された方法および構造をプログラマに提供するという継続的な必要性、ならびに、非決定的実装においてコンポーネント間でのメッセージを記録する必要性に、対処することを目標としている。これは、コンポーネント指向アプリケーションを実行するために持続性および耐障害性を自動的に提供する、決定性かつ高可用性の実行サーバを提供することによって、対処される。
図1は、全体としてコンポーネント20a、...、20nとして表されるコンポーネントおよびコンポーネント指向アプリケーションを実行するための、ミドルウェア・アプリケーションが実行される、実行サーバ・アーキテクチャ10を示す。図1に示されるように、各サーバは、図1に示されるような全体としてJVM 12a、...12nとして表される1つまたは複数のJava仮想マシンを含む。複数のサーバが存在可能であり、各サーバ内には、たとえば、単一マシン内の異なるプロセスとして実行するJava仮想マシン(JVM)の複数のインスタンスが存在可能であることを理解されよう。JavaおよびJVMの使用は純粋に例示的なものであり、JVMの代わりに、アプリケーション・コンポーネントが作成された他の言語の実行環境も使用可能であることを理解されよう。各JVM内には、開発者に対してトランスペアレントな、階層内のJVMとコンポーネントとの間の層として、全体としてスケジューラ15a、...15nとして表される少なくとも1つのスケジューラを含むスケジューラ層が提供される。スケジューラ15a、15b...15nは、JVM内の1つまたは複数の緊密に関係するコンポーネントと、これらのコンポーネントをいつ実行するかを決定する論理との、グループ化である。JVM内には、独自のそれぞれのコンポーネントの実行をそれぞれが管理する複数のスケジューラが存在可能である。たとえば図2に示されるように、JVM 12は、コンポーネント21および22の実行を管理するためのスケジューラ15を実装し、コンポーネント26および27を実行するためのスケジューラ16を実装する。第2のJVM 13は、コンポーネント28および29を管理するためのスケジューラ17を含む。具体的に言えば、図2に示されるように、階層内のJVMとコンポーネントとの間のスケジューラ層が、JVM内のコンポーネントの実行を管理する。JVM内では、コンポーネント間の通信およびスケジューラ間の通信が、参照を渡すことによって効率的に実施されることを理解されよう。JVM内には、それぞれが独自のコンポーネントの実行を管理する複数のスケジューラが存在可能である。コンポーネントが保留中の入力メッセージを有する場合、スケジューラは、それを実行するのに使用可能なスレッドを割り当てるための適切な時間を選択することになる。この決定は、システム・ロード、ユーザが必要とするスループット、キューイングによって生じるメモリ消費などの、いくつかの要素に基づいて行われる。スケジューラが複数のコンポーネントを同時に実行することを決定した場合、同時処理が取得される。
コンポーネント
周知のように、コンポーネントはサービス指向またはイベント指向とすることが可能であり、SCAのようなコンポーネント・モデルに適合した「オブジェクト」の任意の集合とすることができる。典型的には、Java言語またはC++言語または同様のオブジェクト指向言語、あるいは、PythonまたはPerlなどの他の言語が、SCAサービス・コンポーネントおよびコンポーネント間で送信されるデータを実装するために使用される。すなわち、コンポーネント間の対話は、ポートを横切ってデータ・メッセージを渡すことによって、またはサービス消費者からサービス提供者へのサービス呼び出しによってのみ、実行され、ここではデータ値を渡すことおよび戻すことが可能である。送信されたメッセージまたはサービス呼び出しの受信者は、同期方法を備えたオブジェクトとして表される。いかなる時点でも、コンポーネント内には1つの制御スレッドが存在する。コンポーネント間ではいかなるオブジェクトも共有されない。オブジェクトは、(a)コンポーネント・オブジェクトそれ自体、同期方法を備えた「モニタ」、(b)コンポーネント間で渡すことが可能であるが決して共有されない、「値」オブジェクト、または(c)共有可能であるが、コンポーネント・オブジェクト自体の中で、または同じ値オブジェクト内での、いずれかのみで可能な、「実装」オブジェクトの、いずれかである。とりわけ、複数の実行コンポーネントによってデータが同時に所有されないことを保証する、この規律は、David Bacon、Robert Strom、Ashis Tarafdar等による、「Guava:a dialect of Java without data races」と題するオブジェクト指向のプログラミング、システム、言語、およびアプリケーションに関する第15回ACM SIGPLAN会議2000の議事録において、様式化および記述されている。Guava技法によれば、特定のコンポーネントがこの規律に従うことを静的にチェックすることが可能である。JVMで実行されるJavaのGuava言語は、本発明の環境で使用するのに好適なコンポーネント実装言語の単なる一例である。
コンポーネントを「配線可能(wireable)」にするために、コンポーネントによって処理されるサービス呼び出しのための入力方法、またはコンポーネントによって受け取られる非同期メッセージに関するメッセージ・キューは、入力「ポート」として外部で使用できるようになっている。他のコンポーネントに対して呼び出しを実行するかまたはメッセージを送信するサイトは、図2に示されるように、出力「ポート」として外部で使用できるようになっている。(a)出力ポートを入力ポートにどのように「配線する」か、および(b)コンポーネントをどこに配置するか、を決定する、別の展開時間決定が実行されることが想定される。これらの決定の結果として、いくつかのポート接続がローカルであり、その他がリモートであるものとすることができる。メッセージおよびサービス呼び出しは、ポート接続が同じJVM内のコンポーネントを接続する場合(たとえば、図2の接続40)、より効率的に(たとえば「参照によって」)通信され、これらのコンポーネントが異なるJVM内にある場合(たとえば、図2の接続42)、より非効率的に(たとえば、コピーによるか、またはネットワーク・メッセージの送信によって)通信される可能性があることを、理解されよう。
前述のように、本発明の実行サーバは、マシン間にまたがる分散型実行をサポートするように設計される。Java仮想マシン(JVM)の複数のインスタンスは、展開に応じて、それらのマシン上で実行可能であるか、または単一のマシン内の異なるプロセスとして実行可能である。図2に示されるように、JVM間でのメッセージ通信に関する例示的プロトコルは、ユーザ・データグラム・プロトコル(UDP)30である。したがって、図2に示された例示的実施形態では、JVM 12はUDPメッセージング・プロトコルを介してJVM 13と通信する。周知のように、UDPの使用では保証された送達は提供されないが、伝送制御プロトコル(TCP)よりも良好な性能を特徴とする。その代わりに、以下でより詳細に説明するように、本発明のミドルウェア・コンポーネント内には、損失がなく、順序が保持される、メッセージングが構築される。
開発
本発明の実行サーバは、(1)開発環境が根本的に簡略化されており、コンポーネントはプレーンJavaで作成可能であり、分散型フロー・ネットワークを構築するためにSCAコンポーネント・モデルのように配線可能であること、(2)コンポーネントは、プレーンJavaの基本変数および集合クラスで状態を格納すること、(3)プログラマは、コンポーネント状態を別々のオブジェクトに分割するため、およびその状態を持続するために、トランザクション、JDBC、またはエンティティ・ビーンなどの、特化された方法および構造を使用する必要がないこと、という理由から、他の手法と区別される。その代わりに、マシン障害、ならびに、メッセージをドロップ、再順序付け、または複製する可能性のある不良ネットワークにもかかわらず、本発明の実行サーバによって、持続性および耐障害性が自動的に提供される。
決定的実行
本発明の方法によれば、耐障害性に関する技術は、決定的で再生可能なシステムの実行を保証することに基づく。これは、トランザクションに基づく、または複製に基づく、またはすべてのコンポーネント間メッセージの持続的記録に基づく、他の手法に勝る、改良点である。決定的実行とは、システムに同じ状態および同じ入力メッセージが与えられた場合、同じ出力メッセージを生成することを意味する。決定性とは、コンポーネントの障害時に、最近のチェックポイントを回復すること、およびそのチェックポイント以降に発生したイベントを再生することによって、その状態を復元できることを示唆する。決定性のために、再生以後の状態は失われた状態と同じであることが保証される。これは、状態を、更新されるごとに持続的に保存しておく必要がなく、断続的に保存すればよいことを意味する。
決定的実行の達成は、離散型イベント・シミュレーションからの技法を一般化すること、およびそれらを実行サーバの実行時環境に適用することに基づく。イベント・シミュレータの場合と同様に、コンポーネント間で通信される各メッセージには、仮想時間(VT)タグが付けられる。イベント・シミュレータとは異なり、この仮想時間は、メッセージが受信側コンポーネントに到達することになる実時間の決定的推定となるように選択される。本発明の実行サーバは、あたかもメッセージが仮想時間順に到達したかのように、システムが動作することを保証する。仮想時間と実時間とが良好に一致するほど、システムは良好に動作するが、この一致がどれほど良好であるかにかかわらず、決定的実行は保証される。この手法の変形では、仮想時間は実時間のデッドラインであり、システムはこれらの実時間デッドラインに合致することを保証するように、スケジューリングを調整する。これも、シミュレートされた仮想時間が実時間と明白に相関しない可能性のある、イベント・シミュレータの場合とは異なる。
決定的実行は、仮想時間(VT)を含むタイムスタンプですべての通信を増補することによって達成される。システム境界で、生成された時点ではタイムスタンプを含んでいない外部イベントが受信される。本発明によれば、システムは手動介入なしで、それらのイベントにVTを自動的に割り当てる。VTは、因果的(causal)順序に従い、すなわち、入力によって出力が発生する場合、初期の仮想時間では決して発生せず、実時間近くに発生する。ログは、割り当てられるすべてのVTを記録するが、これは、それらの生成が非決定性であり、後に再生が必要な場合にそのログが不可欠となるためである。イベントは、VTによって境界上で増補されると、コンポーネント間の接続を介して移動し、決定的順序で処理される。その後のログは不要である。これは、非決定性着信順序が再生可能なようにコンポーネント間でのメッセージのログが必要な、楽観的回復によって使用される手法およびトランスペアレントな耐障害性の他の従来技術の技法とは対照的である。2つのメッセージが同一のVTを有することは決してないことを理解されよう。
実行するコンポーネントが選択されると、その入力メッセージの処理の結果として出力を生成することができる。この出力は、非ゼロの計算遅延を反映して、入力メッセージのVTよりも厳密に大きいVTと関連付けられる。VTにおける増分、ならびに出力メッセージは、入力メッセージによって完全に決定される。コンポーネントは、たとえば送信されたメッセージまたはサービス呼び出しメッセージなどの、複数の先行コンポーネントからの入力を受信することができる。この場合、メッセージのVTに基づいて決定性マージが利用される。VTは先行要素によって独立に生成されるが、マージの際にローカルに比較される。最小VTを有するメッセージは、いかなる先行要素も、今後、より早期のVTを備えたメッセージを送信できないことがわかると、安全に処理することができる。代替実施形態では、1985年7月付けのJefferson,Dによる「Virtual time」と題するACM Transactions on Programming Languages and Systemsに記載された、離散型イベント・シミュレーション環境の場合と同様に、早期のVTを備えたメッセージが着信すると、メッセージを積極的に処理し、ロールバックすることが可能であることを理解されよう。決定性VT生成および決定性マージング(どちらもコンポーネントに対してローカルである)により、メッセージ処理の順序は決定的である。
展開時間メカニズム
持続的な分散型計算に関する決定的実行メカニズム間の主な相違点として、本発明の手法では、わずかながらユーザの介入が必要である。具体的に言えば、開発者は、VTまたはそれらの計算方法を知る必要がない。アプリケーション開発者の作業を劇的に簡略化するためのツール・セットが提供されるが、本明細書で説明される恩恵はまったく損なわれることがない。
配置サービス
図3に示されるように、設計時、コンポーネントの計算論理は、プレーンJava、C++、または同様のオブジェクト指向コード、あるいはPythonまたはPerlなどの他の言語で作成することができる。ポートは、たとえばJavaインターフェースで定義される。論理接続は、2つまたはそれ以上のポートを配線することにより、設計者によって作成される。この高水準設計は、結果として生じるシステムの分散性を完全に取り除く(abstract)。さらに、決定的実行および耐障害性などの特性を当然のものとみなす。図4に示されるように、ミドルウェア配置サービス・コンポーネント50を使用して、図3に示される設計などのこの高水準設計を、低水準実装にマッピングし、ここでは最も相互に関係するコンポーネントがスケジューラにグループ化され、スケジューラは、おそらくは異なるマシン上のJVM内に割り当てられる。実行前の配置は、マシンの計算能力のメトリクス、ネットワーク機能、および配置プリファレンスなどの、ユーザ供給パラメータにより、半自動式である。性能を最大限にするために、異なるマシン上の作業負荷は平均化される。実行時、全体の性能を良くするために、スケジューラをそれらの元のマシンから他のマシンへと移動させることによって、初期の配置を微調整することができる。配置に応じて、開発者ビューにおける論理接続を物理接続にマッピングすることもできる。
この配置サービス50は展開タスクを簡略化するが、ユーザ指定の構成を受け入れることによって、依然として十分な柔軟性を提供する。
したがって、例示の目的で提示された図3に示されるような配置の非限定的な一例では、2つの異なる要求パスからのメッセージの受け取り、すなわち、たとえばイベントで座席を予約する要求者32、34をモデル化するために使用可能な、チケット(チケット販売)システム30の例示的設計者ビューの高水準手法が示される。これらのチケット要求は、第1に、各要求者によって要求されているチケットの枚数(たとえば5チケットまたは10チケット)を決定するために、受信および処理された後、最終的にプリンタ・デバイスでチケットを印刷するためのプロセスが割り当てられる。以下の例示的なコード部分は、図3に示された例示的システムの高水準設計に従って、プレーンJavaで作成可能な、コンポーネントの論理(たとえば、基本変数、集合クラスなど)を示す。
Figure 0005373770
配置サービス50は、図4に示されるような低レベル実装に関するコードを生成する。結果として生じる、図4に示される低レベル実装では、要求者は、メッセージを受信する第1のJVM 62に関するポートを定義することによってモデル化され、それぞれの要求を処理し、その要求を割り当て者コンポーネント65でマージする、第2のJVM 64で、定義されたそれぞれのポートがさらにモデル化され、割り当て者コンポーネント65は、スケジューリングされたチケット印刷プロセスを実行するためのプリンタ・コンポーネント67を含む第3のJVM 66に関する単一のポート定義することによってモデル化される、プリンタ機能コンポーネントを割り当てる。以下の例示的コード部分は、図4に示された例示的システムの低レベル設計に従ってプレーンJavaで作成可能な、配置論理を示す。この以下の例示的コードは、図4に示されるように、要求者コンポーネント32、34を管理するための第1のスケジューラ72を含むように設計された、第1のJVM 62の構成を示す。
Figure 0005373770
以下の例示的コードは、図4に示されるように、要求者コンポーネント32、34に対応する処理コンポーネントを管理するためのスケジューラ74を含むように設計された、第2のJVM 64の構成を示す。
Figure 0005373770
この以下の例示的コードは、図4に示されるように、単一の入力から印刷処理コンポーネントを管理するためのスケジューラ76を含むように設計された、第3のJVM 66の構成を示す。
Figure 0005373770
自動コード・エンハンサ(enhancer)
本発明では、プログラム変換器が、実行時実行環境に適合可能なコンポーネントを生成するために、ユーザ作成コンポーネントを増補する。具体的に言えば、プログラム変換器は、以下の拡張機能を供給する。1)入力および出力メッセージまたは方法呼び出しのすべてのインターフェースが、VTを保持するフィールドで増補される。2)入力ポートに着信するメッセージを処理する各方法が、生成する各出力メッセージに関して、およびその方法からの戻りに関して、「デルタVT」を算出するエスティメータで増補される。デルタVTは、方法の開始から生成された出力メッセージまで、または戻りまで、経過することになる、実時間量の決定的推定を表す。さらに3)各コンポーネントは、最後のソフト・チェックポイント以降のその状態に対する増分変化を追跡し、スケジューラからの要求時に、増分ソフト・チェックポイント記録を直列化する、コードで増補される。
ソフト・チェックポイントとは、システムの回復機能を損なうことなく、いずれかの単一のチェックポイントが失われる可能性があるため、そのように呼ばれるが、損失チェックポイントは、前のチェックポイントから回復処理を進めなければならないことを意味するため、障害後の回復時間を長引かせる可能性があるが、最終的な回復機能には影響を与えない。これとは逆に、コンポーネントは、増分ソフト・チェックポイント記録の集合から状態を再構築するコードで増補される。オプションとして、コンポーネントは、「熱心な沈黙(eager silence)」を生成するコードで増補することが可能である。すなわち、所与の時間tを通じてその入力ポートに着信する入力メッセージがないことがわかった場合、メッセージが所与の出力ポートに出現可能な時間tを超えた、最も早期のデルタVTを計算する。こうした計算は、これらの入力ポートに接続されたコンポーネントに沈黙を送信する目的に使用することができる。沈黙タイムスタンプの範囲は、それらのタイムスタンプを備えたメッセージが今後そのコンポーネントから送信されることがない旨を約束するものであることから、こうした情報によって、待機メッセージが最も早期の可能メッセージであることがわかるため、おそらく、受信側コンポーネントにその処理を進行させることが可能である。
図5は、図4の例に示された例示的チケット・システムにおいて低水準設計によって示されるような、本発明を実装するために必要なメッセージ構造を増補するために使用される、VTの決定性をより詳細に示す。メッセージまたはイベント(「e」)は、システム境界上のVTと関連付けられることを理解されよう。現時点で、VTは、因果関係と一致する任意の方法で生成される。しかしながら、それらは実時間の推定とすることも可能である。したがって、図5に示されるように、実行時中、第1のJVM 62の第1の要求者コンポーネント32で受信された例示的な関連データ文字列(e )を含む、受信メッセージ構造42については、メッセージ構造42に追加される第1のVT値(vt )が関連付けられ、第2の要求者34で受信された例示的な関連データ文字列(e )を含む、受信メッセージ構造44については、メッセージ構造44に追加されるVT値(vt )が関連付けられる。加えて図5は、スケジューラからの要求時に、データ・ストレージ・デバイス内のログ99へのエントリで示される、増分ソフト・チェックポイント記録の生成を実行する、最後のソフト・チェックポイント以降のその状態に対する増分変化の追跡を示す。このログ99は、割り当てられるすべてのVTを記録するが、これは、それらの生成が非決定性であり、以下でより詳細に説明するように、再生が必要な場合にそのログが不可欠となるためである。これらの増補されたイベントまたは要求メッセージ42(e ;vt )および44(e ;vt )は、それぞれ、それらのスケジューリングされたVT(仮想時間)に第2のJVM 64に入力され、ここで、JVM 64内のコンポーネントを処理するそれぞれの要求メッセージによって処理される。すなわち、図5に示されるように、第2のJVM 64で受信した入力増補要求メッセージ42を処理した後、第2のJVM 64の第1のコンポーネントから出力された算出VT値(e ;vt )を含むように増補された他のメッセージ52が生成され、同様に、第2のJVM 64の第2のコンポーネントから出力された算出VT値(e ;vt )を含むように増補された他のメッセージ54が生成される。割り当て者コンポーネント65によって示されるマージ・ポイントで、複数のストリームからのイベントがそれらのVTを使用して比較される。したがって、図5に示されるように、第2のJVMの割り当て者コンポーネントからの出力は、一時的に配列されたメッセージ52および54、すなわち[e ;vt ]および[e ;vt ]を備える、決定的にマージされたメッセージ・シーケンス55である。第3のJVM 66で実装されるこの決定的マージャは、その後、受信メッセージ55内にマージされたVT値に基づいて、印刷コンポーネント67に関して決定的順序で動作を配列する。
メッセージ損失および再順序付けの許容範囲
前述のように、JVM内では、コンポーネント間の通信は参照を渡すことによって効率的に実施される。さらにJVM内通信は、損失が無く、順序が保持される。JVM間では、たとえメッセージ損失または再順序付けが発生する可能性があっても、スケジューラ間では送信されるがスケジューラ内では送信されない、沈黙および好奇メッセージの概念を実装する、本発明のミドルウェア・コンポーネントによって、こうした損失または再順序付けが許容されるため、UDP通信を使用することができる。
図6に進むと、本発明のシステム内での紛失メッセージの検出を確実にするための、沈黙および好奇メッセージの組み込みが示されている。図3〜図5に示されたような、本発明の例示的適用例で言及され、次に図6で示されるように、すなわち、2つのメッセージが時間線内で互いに厳密に隣り合っていない限り、VT内には時間のギャップが存在することが想定される。時間のギャップの存在は、サーバのミドルウェア・コンポーネント、たとえばスケジューラによって検出される。たとえば、第1のJVM 62が第1の増補メッセージ42を送信した後、および第2の増補メッセージを送信するのに先立ち、JVM 62は、ギャップを埋めるために1つまたは複数の沈黙、すなわち沈黙メッセージ81を生成および送信することから、結果として受信者、たとえばJVM 64は、メッセージまたは沈黙のいずれかの連続的な知識を取得することになる。沈黙メッセージは、メッセージを含まないことが知られているVTの時間チック(tick)範囲を指定する、1対の数字を定義する。たとえば、図6でメッセージ42の直前に送信されるメッセージ80は、データ[Silence;100:vt −1]を含むことが可能であり、これは、100からvt −1までの範囲内にあるすべてのVTチックがメッセージを含まないことを知られていることを意味する。沈黙メッセージのために、受信者はあらゆるチックを、明確にメッセージを含むかまたは沈黙かの、いずれかとして説明することができる。データまたは沈黙メッセージが失われた場合、受信者はギャップに気付くことになる。ギャップの検出は、受信者側で実行される。(ユーザ構成可能またはプログラム可能パラメータとして定義された)ある期間中にギャップが存在する場合、受信者、たとえばJVM 64は、何らかのメッセージまたは沈黙が失われたものと決定し、送信者、たとえばJVM 62に対して、受け取りに関する好奇メッセージ83を逆に発行することができる。好奇メッセージは、受信者がデータまたは沈黙に関する知識を持たない、したがってそれに関して「好奇心がある」、VTの時間「チック」範囲を指定する1対の数を定義する。たとえば、この沈黙メッセージが何らかの形で失われた場合、好奇メッセージは[Curiosity;100:vt −1]を読み取ることになる。好奇メッセージは、照会されているチックの範囲に関して、送信者による以前のメッセージまたは沈黙の再送をトリガする。送信者は、受信者がソフト・チェックポイントを正常に受け取り、再度再送要求をしないことを約束するまで、これらのメッセージまたは沈黙の再送に備えなければならない。
好奇メッセージが失われるか、または再送メッセージが失われた場合、好奇メッセージが再送されることになる。同じメッセージが極めて頻繁に失われない限り、失われたメッセージは最終的に取り戻されることになる。メッセージは遅れて着信する可能性があり、再送メッセージを複製する可能性があるが、すでに処理したメッセージに関する時間とそのVTが合致するいかなるメッセージも廃棄することが、受信者にとって安全であるため、これによっていかなる問題も生じないことを理解されたい。(2つのメッセージが同一のVTを有することは決してない。)受信者は、その前に依然としてギャップがある場合、単にメッセージの処理を拒否するだけであるため、再順序付けも許容される。したがって、図6に示されるように、照会、沈黙、および好奇は、正しい順序でメッセージを処理することを全体で保証する。
今までのところ、VT生成は、完全に決定性である場合、およびメッセージの因果性を保持する場合、任意とすることができる。こうした任意のVT割り当てが、決定的実行を保証する。しかしながら、VTが実時間とはるかに同期していない場合、マージの時点で受信者は、VTの早期にはいかなるメッセージも受信しないことが確実になるまで、次のメッセージの処理を拒否することになるため、性能上の不利が見られる。これにより、実時間で早期に生成されたメッセージは、推定の不正確さによってより長いVTを獲得することから、後で処理されることになる可能性がある。VTおよび実時間をほぼ同期して維持しようとするために、自動VTエスティメータが提供され、結果としてこの悲観論によって受け入れがたい性能の損失が生じることはない。このVT推定に対して、静的(すなわち事前実行)および動的(すなわち実行中)コンポーネントの両方が存在する。静的には、自動VTエスティメータは、コードの既知の複雑さに基づいて個々のコンポーネントにおける計算遅延を推定する。展開時、エスティメータは、コンポーネントが展開された環境の既知の特性を考慮に入れることもできる。これにより、ネットワーク待ち時間、平均CPUロード、ガーベージ・コレクタ性能、予測されるメモリ消費量、スレッディングなどを反映するように、計算遅延の推定が調整されることになる。しかしながら、計算遅延の推定は、コンポーネント状態の決定的な反復可能機能でなければならないことを強調すべきである。実電流CPUロードなどの非決定性要素は考慮しない可能性がある。不運にも、VTと実時間との間の相違が大きくなり過ぎたことにスケジューラが気付いた場合、以下の2つの可能な処置のうちの1つを講じることができる。
1.スケジューラは、速度をダウンまたはアップし、相違を少なくするように、マシンの他のスケジューラに対してその優先順位を変更することが可能である。
2.スケジューラは、スケジューラ内で使用されるエスティメータに対してパラメータを調節するために、非決定性決定、いわゆる「決定性障害」を実行することが可能である。この調節は、通常の計算遅延の推定とは異なり、非決定性要素を考慮に入れるために、非決定性とすることができる。こうした決定によって決定性が侵害されることから、適切な再生を保証するために、この処置は安定ストレージ内にログ記録しなければならない。実際のところ、決定以前には、いかなるVTの再生も古いエスティメータを使用しなければならず、決定後には、いかなるVTの再生も新しいエスティメータを使用しなければならない。決定性障害は、結果として、特定のメッセージに関する特定の時間推定値の変更を生じさせる可能性がある。このシステムの目標は、VTと実時間との間のドリフトが最小限となり、スケジューリング優先順位の調整によって制御可能であるように、さらに結果として、決定性障害が極端に稀なイベントであるように、静的エスティメータを十分良好にすることである。
実時間分析
非時間認識コンポーネントの場合、本発明のミドルウェアのVTエスティメータを使用してタイムスタンプの導入が自動化される。しかしながら、一部のアプリケーションは時間認識とする必要がある可能性があり、またはより複雑なシナリオの場合、ある種のアプリケーションが非時間認識コンポーネントおよび時間認識コンポーネントの混合を含む可能性がある。タイミング制御の必要性を満たすために、本発明のミドルウェア・コンポーネントでは、特別な時間制御コードに自動的にコンパイルされるタイミング制約を、設計者によって指定することができる。実行時、このコードは、コンポーネントの優先順位付けまたはコンポーネントの移動によって、スケジューラが時間制約を満たすように実行することができる。すなわち、実時間スケジューラは、実時間デッドラインを保証するために配置サービスと共に動作するようにプログラミングすることができる。配置サービスは、デッドラインを満たすだけの十分な予約容量があることを確認するために、こうしたスケジューラを展開する前に、何らかの入場制御を実行する必要がある確率が高い。加えて、新しい種類の決定性障害が発生する可能性もあり、異常な条件によって所与の計算が実時間デッドラインを満たさないことが明らかになった場合、(おそらくはオーバヘッドの少ない)代替計算を使用するという非決定性決定を実行することができる。いずれの決定性障害とも同様に、こうした変更を行うという決定は、ログ記録しておく必要がある。
高可用性によるマシン障害の許容範囲
分散型システムでは、予期せずにマシンがシャットダウンされ、ネットワークから切断されるか、または障害を起こす可能性がある。多くの現在のアプリケーションは、マシン間の協働を利用する。複数のマシンを使用することによって、高可用性が実行可能になる。この特性により、いくつかのマシンの障害がアプリケーション全体の機能を妨害することはない。本発明の実行サーバでは、耐障害性はトランスペアレントである。ミドルウェア・コンポーネントは、個々のスケジューラに対して断続的にソフト・チェックポイントを作成する。ソフト・チェックポイントとは、内部にコンポーネント、確立された接続、キューに入れられたメッセージ、待機中のサービス呼び出しなどを含む、スケジューラの状態のコンパクト・イメージである。ソフト・チェックポイントは、全状態を含むか、または前のソフト・チェックポイント以降の増分変化を含むことができる。ユーザ定義コンポーネントの状態(たとえば、相互参照のJava基本値およびオブジェクトなどの言語水準エンティティを含む)もチェックポイントに記録されるため、マシンに障害が発生し、回復した場合、計算を再開することができる。
したがって、図3から図6に示され、次に図7で示されるような、本発明の例示的アプリケーションでは、JVM 64、66内の各スケジューラに関するチェックポイント情報84、86は、たとえば、それぞれハード・ディスク・ドライブ94、96などのローカル・メモリ・ストレージ・デバイス上に格納され、断続的または増分的に更新される。しかしながら、これらのチェックポイントは、リモート・マシンで、またはリモート・マシン上に格納可能であることを理解されよう。
JVMマシンは、実行中にクラッシュする可能性があり、このイベントにより、その上で実行中のスケジューラは停止し、それらの最後のチェックポイント以降の状態は完全に失われる。マシンは再始動すると、それらの最後のチェックポイントでスケジューラを再作成する。したがって、図3〜図6に示され、図7に示されたような、本発明の例示的アプリケーションの場合、JVM 64でクラッシュ・イベントが発生したものと想定すると、格納されたJVM 64内の例示的スケジューラに関するチェックポイント情報84’が、たとえばハード・ディスク・ドライブ94などのローカル・メモリ・ストレージ・デバイスから、JVM 64で実行中の再始動したスケジューラ・コンポーネントへと再送されることになる。チェックポイントが取得された後に、いくつかのメッセージが受信され、処理された可能性さえもあるため、これらのチェックポイントはスケジューラの過去の要素内にある。したがってスケジューラは、それらの先行要素に別個に好奇メッセージ85を送信し、これによって先行要素が紛失メッセージを再送することになる。その後、本発明に従ってこの紛失メッセージが再処理され、本発明によって与えられる決定的実行によって、同じ結果が生成されることになる。スケジューラが障害の発生した時点まで遅れを取り戻した場合、その状態は、障害が発生する直前の状態と同一になる。その後、新しいメッセージの処理を続行する。
前述のように、JVM内の各スケジューラに関するチェックポイント情報は、リモート・マシン(たとえばJVM)上に格納し、断続的または増分的に更新することができる。したがって、代替実施形態では、リモートに配置されたスケジューラが、他のスケジューラからのチェックポイントを格納することによって、「受動的バックアップ」を実行することができる。受動的バックアップを使用してチェックポイントが格納された場合、障害が検出されると、この受動的バックアップがバックアップされたコンポーネントのインスタンスを作成し、すなわちレプリカを生成し、アクティブとなって、再始動して紛失計算の遅れを取り戻すまで、障害を起こしたスケジューラの作業を再開する。受動的バックアップは、何らかの他の耐障害性システムのアクティブなレプリカとは異なり、冗長計算は実行しない。それらは単にチェックポインティングされた状態を保持するだけであるため、アクティブなマシンに障害が発生した場合、そのバックアップが最小遅延で計算を迅速に引き継ぐことができる。
したがって、図3〜図6に示され、次に図8に示されるような、本発明の例示的アプリケーションでは、JVM 64内の例示的スケジューラに関するソフト・チェックポイント情報84は、そこで格納するために第3のJVM 66内にリモートに格納された、第2のJVM 64のためのバックアップ・スケジューラ・コンポーネント74に関連付けられたメモリに送信されることになり、同様に、図8に示されるように、JVM 66内の例示的第3のスケジューラに関するソフト・チェックポイント情報86は、そこで格納するために第2のJVM 64内にリモートに格納された、第3のJVM 66のためのバックアップ・スケジューラ・コンポーネント76に関連付けられたメモリに送信されることになる。したがって、たとえば、スケジューラ2およびバックアップ・スケジューラ・コンポーネント76を含むJVM 64が使用不可になるか、またはそうでなければクラッシュした場合、図9に示されるように、JVM 64内で実行していたスケジューラ2のレプリカを生成することができる。すなわち、JVM 66では、JVM 64内で実行していたスケジューラ2のレプリカを、リモートの受動的バックアップに基づいて生成することができる。すなわち、実行用に第2のJVM 64のコンポーネントを含む、新しいスケジューラ2’が生成される。高可用性保証を提供するものが障害を起こした場合、最大の障害検出遅延およびレプリカ作成時間に基づいて、最大のダウンタイムを推定することができる。
最終的に、図3〜図6に示されたように、また次に図10で示されるように、本発明の例示的アプリケーションでは、クラッシュした第2のJVM 64の回復時に、復活したスケジューラ2は、第3のJVM 66内で生成されたレプリカ、すなわちスケジューラ2’で格納されていたチェックポインティング情報を、フェッチすることになる。したがって、第2のJVM 64がアップされ、通知メッセージ91を介して実行している旨を、他のマシン(たとえばJVM 1)の先行コンポーネントに示すこと、さらに、生成されたスケジューラ2のリモート・バックアップ(すなわちスケジューラ2’)は終了可能である旨を、第3のJVM 66に示すことが、可能である。
以上、本発明について、その例示的かつ事前形成された諸実施形態に関して、具体的に例示および説明してきたが、当業者であれば、添付の特許請求の範囲によってのみ制限されるべきである、本発明の趣旨および範囲を逸脱することなく、形式および細部における前述および他の変更が可能であることを理解されよう。

Claims (22)

  1. タスクを実行するための論理をそれぞれが実装する複数のコンポーネントであって、前記コンポーネントが、ネットワーク内で接続され、前記コンポーネント間でメッセージを通信するように適合された、1つまたは複数のマシンを備える実行環境内で実行する、複数のソフトウェア・コンポーネントと、
    プログラム実行中に送信側コンポーネントから受信側コンポーネントへと送られるメッセージであって受信側コンポーネントにおいて非決定性着信順序をもつものとして特徴付けられるメッセージに関して、決定性タイムスタンプを自動的に生成して関連付けるための手段であって、前記タイムスタンプが受信側コンポーネントでの前記メッセージの着信の推定時刻を表す、自動的に生成して関連付けるための手段と、
    入力メッセージの固有の着信順序を生成するために前記タイムスタンプを使用することによって、前記コンポーネントを決定的に実行するための手段と、
    プログラム実行中にコンポーネント状態を追跡し、前記状態をローカル・ストレージ・デバイスにチェックポインティングするための手段と、
    を備え、
    マシンの障害時には、最近格納されたチェックポイントを回復すること、前記最後のチェックポイント以降に発生したイベントを再実行することによって、前記コンポーネント状態が復元される、
    コンピューティング・システム。
  2. 前記コンポーネント状態がバックアップ・プロセッサ・デバイスにチェックポインティングされる、請求項1に記載のコンピューティング・システム。
  3. 前記実行環境が単一のJava仮想マシンを備え、前記コンポーネントのそれぞれが前記単一のJava仮想マシンに格納される、請求項1に記載のコンピューティング・システム。
  4. 前記実行環境が複数のJava仮想マシンを備え、前記コンポーネントが、前記複数のJava仮想マシン全体にわたって分散様式で実行する、請求項1に記載のコンピューティング・システム。
  5. 前記実行環境が、1つまたは複数のコンポーネントの実行を管理するためのスケジューラ・コンポーネントを含み、スケジューリングが、前記実行環境内のコンポーネントに関する実行スレッドを割り振ることを含む、請求項4に記載のコンピューティング・システム。
  6. コンポーネントが複数の先行コンポーネントから入力メッセージを受信し、前記システムが、前記入力メッセージのタイムスタンプに基づいて決定性マージを実行するためのマージャ手段をさらに備える、請求項4に記載のコンピューティング・システム。
  7. 前記コンポーネントの状態が断続的に更新される、請求項1に記載のコンピューティング・システム。
  8. 前記タイムスタンプが、メッセージが前記受信側コンポーネントに着信する実時間の推定として計算される、請求項1に記載のコンピューティング・システム。
  9. コンポーネントからの連続するメッセージ伝送間の時間のギャップを検出するための手段と、
    前記実行環境における前記コンポーネントからのメッセージの正しい一時フローを保証するために、沈黙メッセージの伝送を実行可能にする手段と、
    をさらに備える、請求項1に記載のコンピューティング・システム。
  10. マシン間のネットワーク接続における障害によって何らかのメッセージまたは沈黙メッセージが失われたものと、コンポーネント受信側が決定した場合、いずれかの以前のメッセージまたは沈黙メッセージの再送をトリガするために、送信側コンポーネントに好奇メッセージを逆に発行するための手段、
    をさらに備える、請求項9に記載のコンピューティング・システム。
  11. コンポーネント間でのメッセージ通信を実行可能にするように適合された実行環境を提供するコンピューティング・システム内でコンポーネントを決定的に実行するための方法であって、各前記コンポーネントがタスクを実行するための論理を実装し、
    プログラム実行中に送信側コンポーネントから受信側コンポーネントへと送られるメッセージであって受信側コンポーネントにおいて非決定性着信順序をもつものとして特徴付けられるメッセージに関して、決定性タイムスタンプを自動的に生成して関連付けることであって、前記決定性タイムスタンプが受信側コンポーネントでの前記メッセージの着信の推定時刻を表す、自動的に生成して関連付けることと、
    入力メッセージの固有の着信順序を生成するために前記タイムスタンプを使用することによって、前記コンポーネントを決定的に実行することと、
    プログラム実行中に前記コンポーネントの状態を追跡し、前記状態をローカル・ストレージ・デバイスにチェックポインティングすることと、
    を含み、
    コンポーネントの障害時には、最近格納されたチェックポイントを回復すること、および前記最後のチェックポイント以降に発生したイベントを再実行することによって、前記コンポーネントの状態が復元される、
    方法。
  12. 前記メッセージを、前記格納された状態で記録された前記タイムスタンプに関連付けられたメッセージと同じ順序で処理することによって、前記受信側コンポーネントの前記実行を反復することをさらに含む、請求項11に記載の方法。
  13. 受信されたメッセージに関連付けられた前記タイムスタンプに従って、前記実行環境内の前記コンポーネントの実行を管理することをさらに含み、前記管理することが、前記実行環境内のコンポーネントに実行スレッドを割り当てることを含む、請求項11に記載の方法。
  14. コンポーネントが複数の先行コンポーネントから入力メッセージを受信し、前記方法が、前記入力メッセージのタイムスタンプに基づいて決定性マージを実行することをさらに含む、請求項13に記載の方法。
  15. 前記コンポーネントのチェックポイントを断続的に更新することをさらに含む、請求項13に記載の方法。
  16. 前記タイムスタンプが、メッセージが前記受信側コンポーネントに着信する実時間の推定として計算される、請求項11に記載の方法。
  17. コンポーネントで、前記コンポーネントからの連続するメッセージ伝送間の時間のギャップを検出することと、
    前記実行環境における前記コンポーネントからのメッセージの正しい一時フローを保証するために、沈黙メッセージの伝送を実行可能にすることと、
    をさらに含む、請求項11に記載の方法。
  18. 何らかのメッセージまたは沈黙が失われたものと、コンポーネント受信側が決定した場合、いずれかの以前のメッセージまたは沈黙メッセージの再送をトリガするために、送信側コンポーネントに好奇メッセージを逆に発行することをさらに含む、請求項17に記載の方法。
  19. 実行環境においてコンポーネント間でのメッセージの通信を実行可能にするサブシステムであって、前記コンポーネントが、メッセージ入力が受信されるか、または前記コンポーネントから出力される、1つまたは複数のポートを備え、各前記コンポーネントがタスクを実行するための論理を実装する、サブシステムと、
    コンポーネントが前記実行環境の特定の処理エンジンに割り当てられた低水準実装に、高水準設計をマッピングするための手段と、
    プログラム実行中に送信側コンポーネントから受信側コンポーネントへと送られるメッセージであって受信側コンポーネントにおいて非決定性着信順序をもつものとして特徴付けられるメッセージに関して、タイムスタンプに関連付けられたコンポーネントの入力または出力メッセージを自動的に増補するためであって、前記タイムスタンプが受信側コンポーネントでの前記メッセージの着信の推定時刻を表す、自動的に増補するため、および
    その状態に対する増分変化を追跡するためのコードでコンポーネントを増補するための、
    コード強化手段と、
    を備え、
    プログラム実行中にコンポーネント状態が追跡され、前記コンポーネント状態はローカル・ストレージ・デバイス内でチェックポインティングされ、
    コンポーネントの障害時には、最近のチェックポイントを回復すること、および最後のチェックポイント以降に発生したイベントを再実行することによって、前記コンポーネント状態が復元される、
    コンポーネント指向アプリケーションの決定的実行を実行可能にするためのシステム。
  20. 前記実行環境が分散型コンピューティング・システムである、請求項19に記載のシステム。
  21. コンポーネント間でのメッセージ通信を実行可能にするように適合された実行環境内でコンポーネントを決定的に実行するための方法ステップを実行するために、マシンによって実行可能な命令のプログラムを確実に記録する、マシンによる読み取り可能なプログラム・ストレージ・デバイスであって、各前記コンポーネントがタスクを実行するための論理を実装し、前記方法ステップが、
    プログラム実行中に送信側コンポーネントから受信側コンポーネントへと送られるメッセージであって受信側コンポーネントにおいて非決定性着信順序をもつものとして特徴付けられるメッセージに関して、決定性タイムスタンプを自動的に生成して関連付けることであって、前記決定性タイムスタンプが受信側コンポーネントでの前記メッセージの着信の推定時刻を表す、自動的に生成して関連付けることと、
    入力メッセージの固有の着信順序を生成するために前記タイムスタンプを使用することによって、前記コンポーネントを決定的に実行することと、
    コンポーネントで、プログラム実行中に前記コンポーネントの状態を追跡し、前記状態をローカル・ストレージ・デバイスにチェックポインティングすることと、
    を含み、
    コンポーネントの障害時には、最近格納されたチェックポイントを回復すること、および前記最後のチェックポイント以降に発生したイベントを再実行することによって、前記コンポーネントの状態が復元される、
    プログラム・ストレージ・デバイス。
  22. 前記メッセージを前記格納された状態で記録された前記タイムスタンプに関連付けられたメッセージと同じ順序で処理することにより、前記受信側コンポーネントの前記実行を反復することによって、決定性となる、請求項21に記載のマシンによる読み取り可能なプログラム・ストレージ・デバイス。
JP2010506208A 2007-04-26 2008-04-15 分散型、耐障害性、および高可用性を達成するための決定性コンピューティング・システム、方法、およびプログラム・ストレージ・デバイス(分散型、耐障害性、および高可用性のコンピューティング・システム) Expired - Fee Related JP5373770B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/740,556 2007-04-26
US11/740,556 US7937618B2 (en) 2007-04-26 2007-04-26 Distributed, fault-tolerant and highly available computing system
PCT/US2008/004866 WO2008133818A1 (en) 2007-04-26 2008-04-15 Distributed, fault-tolerant and highly available computing system

Publications (2)

Publication Number Publication Date
JP2010525484A JP2010525484A (ja) 2010-07-22
JP5373770B2 true JP5373770B2 (ja) 2013-12-18

Family

ID=39888475

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010506208A Expired - Fee Related JP5373770B2 (ja) 2007-04-26 2008-04-15 分散型、耐障害性、および高可用性を達成するための決定性コンピューティング・システム、方法、およびプログラム・ストレージ・デバイス(分散型、耐障害性、および高可用性のコンピューティング・システム)

Country Status (7)

Country Link
US (1) US7937618B2 (ja)
EP (1) EP2156307B1 (ja)
JP (1) JP5373770B2 (ja)
KR (1) KR101126979B1 (ja)
CN (1) CN101663660B (ja)
AU (1) AU2008244623B2 (ja)
WO (1) WO2008133818A1 (ja)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070174695A1 (en) 2006-01-18 2007-07-26 Srinidhi Varadarajan Log-based rollback-recovery
US8327327B2 (en) * 2007-03-21 2012-12-04 Carnegie Mellon University Method for statically checking an object-oriented computer program module
US8566829B1 (en) * 2008-01-30 2013-10-22 Emc Corporation Cooperative multi-level scheduler for virtual engines
US7979844B2 (en) * 2008-10-14 2011-07-12 Edss, Inc. TICC-paradigm to build formally verified parallel software for multi-core chips
US8060780B2 (en) * 2008-12-16 2011-11-15 Sap Ag Transient transaction execution with on-demand persistency
JP2010224935A (ja) * 2009-03-24 2010-10-07 Olympus Corp 分散処理システム
US20110078666A1 (en) * 2009-05-26 2011-03-31 University Of California System and Method for Reproducing Device Program Execution
US8468388B2 (en) * 2010-04-20 2013-06-18 International Business Machines Corporation Restoring programs after operating system failure
US8782434B1 (en) 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time
US8516032B2 (en) * 2010-09-28 2013-08-20 Microsoft Corporation Performing computations in a distributed infrastructure
US8724645B2 (en) 2010-09-28 2014-05-13 Microsoft Corporation Performing computations in a distributed infrastructure
US20120221884A1 (en) * 2011-02-28 2012-08-30 Carter Nicholas P Error management across hardware and software layers
US9202185B2 (en) 2011-04-08 2015-12-01 Ca, Inc. Transaction model with structural and behavioral description of complex transactions
US8782614B2 (en) * 2011-04-08 2014-07-15 Ca, Inc. Visualization of JVM and cross-JVM call stacks
US8745434B2 (en) 2011-05-16 2014-06-03 Microsoft Corporation Platform for continuous mobile-cloud services
US20130124174A1 (en) * 2011-06-03 2013-05-16 David R. Jefferson Internal parallelism in a parallel discrete event simulation for space situational awareness
EP2608061B1 (en) * 2011-12-22 2021-07-28 Amadeus Method and system for update message tracking and checking
US9122595B2 (en) 2012-01-13 2015-09-01 NetSuite Inc. Fault tolerance for complex distributed computing operations
US9063721B2 (en) 2012-09-14 2015-06-23 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
US9069782B2 (en) 2012-10-01 2015-06-30 The Research Foundation For The State University Of New York System and method for security and privacy aware virtual machine checkpointing
US9563452B2 (en) 2013-06-28 2017-02-07 Sap Se Cloud-enabled, distributed and high-availability system with virtual machine checkpointing
US9569517B1 (en) 2013-11-27 2017-02-14 Google Inc. Fault tolerant distributed key-value storage
KR102418109B1 (ko) * 2014-07-25 2022-07-06 아브 이니티오 테크놀로지 엘엘시 무작위로 발생하는 이벤트 지연들의 조절을 위한 가변 연대표들
WO2016153288A1 (ko) * 2015-03-24 2016-09-29 건국대학교 산학협력단 가상 클러스터 관리 시스템 및 이를 제어하기 위한 방법
KR101947221B1 (ko) * 2015-03-24 2019-02-12 건국대학교 산학협력단 가상 클러스터 구동 시간 스케줄링 방법 및 장치
US20160299786A1 (en) * 2015-04-10 2016-10-13 Microsoft Technology Licensing, Llc Code examination by scheduler timeline manipulation
US10592494B2 (en) 2015-04-14 2020-03-17 Microsoft Technology Licensing, Llc Collection record for overlapping data stream collections
US10102251B2 (en) 2015-04-14 2018-10-16 Microsoft Technology Licensing, Llc Lockless open collection data structure
US10133768B2 (en) 2015-04-14 2018-11-20 Microsoft Technology Licensing, Llc Latest external dependee entity in transaction record
US9959137B2 (en) 2015-04-14 2018-05-01 Microsoft Technology Licensing, Llc Transaction redo using skip element for object
US10031814B2 (en) * 2015-04-14 2018-07-24 Microsoft Technology Licensing, Llc Collection record location as log tail beginning
US9766929B2 (en) 2015-04-14 2017-09-19 Microsoft Technology Licensing, Llc Processing of data stream collection record sequence
WO2019070915A1 (en) * 2017-10-03 2019-04-11 Rubrik, Inc. PARTIAL RESTORATION OF A DATABASE
US10713124B2 (en) 2017-11-21 2020-07-14 Rubrik, Inc. Database snapshot and backup management with recoverable chains
US10860430B2 (en) * 2018-07-06 2020-12-08 EMC IP Holding Company LLC System and method for resilient backup generation
US10860431B2 (en) * 2018-07-06 2020-12-08 EMC IP Holding Company LLC System and method for fault tolerant backup generation in a virtual environment
US11335141B2 (en) 2019-10-22 2022-05-17 Argo AI, LLC Checkpoint-based tracing for monitoring a robotic system
US11216344B2 (en) 2020-05-13 2022-01-04 Rubrik, Inc. Real time database backup status indication and restore
US11461155B2 (en) * 2020-05-31 2022-10-04 Wipro Limited Method and system for predicting an occurrence of a failure condition in a VDI environment

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4665520A (en) 1985-02-01 1987-05-12 International Business Machines Corporation Optimistic recovery in a distributed processing system
US5794005A (en) * 1992-01-21 1998-08-11 The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration Synchronous parallel emulation and discrete event simulation system with self-contained simulation objects and active event objects
GB2293900B (en) * 1994-10-03 2000-01-19 Univ Westminster Data processing method and apparatus for parallel discrete event simulation
CA2150967C (en) * 1994-12-22 2001-04-03 Jon C. R. Bennett Method and a scheduler for controlling when a server provides service with rate control to an entity
JP3154942B2 (ja) * 1995-09-11 2001-04-09 株式会社東芝 分散チェックポイント生成方法および同方法が適用される計算機システム
US5917822A (en) * 1995-11-15 1999-06-29 Xerox Corporation Method for providing integrated packet services over a shared-media network
JP3253883B2 (ja) * 1997-01-31 2002-02-04 株式会社東芝 プロセスリスタート方法及びプロセス監視装置
US6125368A (en) 1997-02-28 2000-09-26 Oracle Corporation Fault-tolerant timestamp generation for multi-node parallel databases
US6031987A (en) * 1997-05-06 2000-02-29 At&T Optimistic distributed simulation based on transitive dependency tracking
US6397352B1 (en) * 1999-02-24 2002-05-28 Oracle Corporation Reliable message propagation in a distributed computer system
KR100382851B1 (ko) * 1999-03-31 2003-05-09 인터내셔널 비지네스 머신즈 코포레이션 분산형 데이터 처리 시스템에서 클라이언트 컴퓨터를관리하기 위한 방법 및 장치
US6553515B1 (en) * 1999-09-10 2003-04-22 Comdial Corporation System, method and computer program product for diagnostic supervision of internet connections
US6584581B1 (en) * 1999-12-06 2003-06-24 Ab Initio Software Corporation Continuous flow checkpointing data processing
DE10085287T1 (de) * 1999-12-08 2003-03-27 Univ British Columbia Zeitplaner für einen gewichteten fairen Warteschlagenbetrieb
US7315948B1 (en) * 1999-12-10 2008-01-01 International Business Machines Corporation Time stamping method employing a separate ticket and stub
EP1280051A4 (en) * 2000-05-04 2007-10-24 Access Co Ltd METHOD AND SYSTEM FOR PROCESSING INFORMATION
US6708288B1 (en) * 2000-10-31 2004-03-16 Hewlett-Packard Development Company, L.P. Compiler-based checkpointing for support of error recovery
US7743126B2 (en) 2001-06-28 2010-06-22 Hewlett-Packard Development Company, L.P. Migrating recovery modules in a distributed computing environment
US7013348B1 (en) * 2001-12-21 2006-03-14 Nortel Networks Limited Switch subtending in a synchronous transmission system
AU2003232120A1 (en) * 2002-05-13 2003-11-11 Rensselaer Polytechnic Institute Discrete event simulation system and method
US7383550B2 (en) * 2002-12-23 2008-06-03 International Business Machines Corporation Topology aware grid services scheduler architecture
US7937551B2 (en) * 2003-01-21 2011-05-03 Dell Products L.P. Storage systems having differentiated storage pools
JP4170988B2 (ja) * 2003-05-09 2008-10-22 富士通株式会社 実行環境の危険予測/回避方法,システム,プログラムおよびその記録媒体
US7886180B2 (en) * 2004-05-14 2011-02-08 International Business Machines Corporation Recovery in a distributed stateful publish-subscribe system
US7873941B2 (en) * 2004-06-14 2011-01-18 Alcatel-Lucent Usa Inc. Manager component that causes first software component to obtain information from second software component
US7660366B2 (en) * 2004-08-30 2010-02-09 Harmonic Inc. Message synchronization over a stochastic network
US20060168338A1 (en) * 2004-11-23 2006-07-27 Bruegl Aaron R Methods and systems for providing data across a network
US7376867B1 (en) * 2004-12-08 2008-05-20 Hewlett-Packard Development Company, L.P. Method of seeking consensus among computer processes
US7903560B2 (en) * 2004-12-30 2011-03-08 Intel Corporation Correlation technique for determining relative times of arrival/departure of core input/output packets within a multiple link-based computing system
US7512842B2 (en) 2005-08-29 2009-03-31 Searete Llc Multi-voltage synchronous systems
WO2009040680A2 (en) * 2007-06-15 2009-04-02 Michele Bargauan Deterministic program clock reference re-stamping for synchronous bit rate adaptation based on mega-frame initialization packet

Also Published As

Publication number Publication date
WO2008133818A1 (en) 2008-11-06
EP2156307A4 (en) 2010-10-13
US7937618B2 (en) 2011-05-03
CN101663660B (zh) 2012-08-01
US20080270838A1 (en) 2008-10-30
CN101663660A (zh) 2010-03-03
AU2008244623A1 (en) 2008-11-06
EP2156307A1 (en) 2010-02-24
KR20090118934A (ko) 2009-11-18
KR101126979B1 (ko) 2012-03-26
EP2156307B1 (en) 2018-05-23
JP2010525484A (ja) 2010-07-22
AU2008244623B2 (en) 2013-03-28

Similar Documents

Publication Publication Date Title
JP5373770B2 (ja) 分散型、耐障害性、および高可用性を達成するための決定性コンピューティング・システム、方法、およびプログラム・ストレージ・デバイス(分散型、耐障害性、および高可用性のコンピューティング・システム)
US8893139B2 (en) System and method for time-aware run-time to guarantee timeliness in component-oriented distributed systems
JP5258019B2 (ja) アプリケーション・プロセス実行の範囲内での非決定論的オペレーションを管理、ロギング、またはリプレイするための予測方法
US10289459B1 (en) System and method for event-driven live migration of multi-process applications
US10282259B1 (en) System and method for event-driven live migration of multi-process applications
US10365971B1 (en) System and method for event-driven live migration of multi-process applications
US7779298B2 (en) Distributed job manager recovery
US8904361B2 (en) Non-intrusive method for logging of internal events within an application process, and system implementing this method
US7613597B2 (en) Non-intrusive method for simulation or replay of external events related to an application process, and a system implementing said method
US8539434B2 (en) Method for the management, logging or replay of the execution of an application process
US7568131B2 (en) Non-intrusive method for logging external events related to an application process, and a system implementing said method
US7840940B2 (en) Semantic management method for logging or replaying non-deterministic operations within the execution of an application process
US20080046696A1 (en) Non-Intrusive Method for Replaying Internal Events In An Application Process, And System Implementing This Method
US7536587B2 (en) Method for the acceleration of the transmission of logging data in a multi-computer environment and system using this method
US7533296B2 (en) Method for optimizing the transmission of logging data in a multi-computer environment and a system implementing this method
Dumitraş et al. Architecting and implementing versatile dependability
Egan et al. Fault‐tolerant RT‐Mach (FT‐RT‐Mach) and an application to real‐time train control
Barrett et al. Models of replication for safety critical hard real time systems
Dabholkar1a et al. SafeMAT: Safe Middleware-based Adaptation for Predictable Fault-Tolerant Distributed Real-time and Embedded Systems
Ramani Performance and Reliability Analysis of the CORBA Event and Notification Services

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110124

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121221

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130122

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130131

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130730

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130805

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: 20130827

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130919

R150 Certificate of patent or registration of utility model

Ref document number: 5373770

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

LAPS Cancellation because of no payment of annual fees