(57)【特許請求の範囲】
【請求項１】
一定数のイベントが入力されるたびに前記一定数の前記イベントに対して適用する処理を前記一定数が所定の配分数に配分されることにより並列分散処理を行う複数の情報処理装置に含まれる、第１情報処理装置と第２情報処理装置のうちの前記第１情報処理装置に、
前記第１情報処理装置に対する前記イベントの入力数を示す第１入力数が、前記配分数に対して所定の範囲内に到達すると、前記第２情報処理装置に対する前記イベントの前記入力数を示す第２入力数を前記第２情報処理装置から取得し、
前記第１入力数と前記第２入力数との合計と、前記一定数との差分に基づいて、前記第１情報処理装置と前記第２情報処理装置に対する前記配分数を更新すること、
を実行させることを特徴とする複合イベント処理プログラム。
【請求項２】
前記配分数の更新後に、前記第２入力数を再取得し、
前記第１入力数と、再取得された前記第２入力数の合計が前記一定数を超える場合に、前記差分を記憶部に記憶し、
前記差分を前記記憶部に記憶した後における前記第１入力数が前記第１情報処理装置への配分数に対して所定の範囲内に到達したことに応じて前記取得する処理において取得された前記第２入力数と、前記第１入力数との合計と、前記一定数との差分が、前記記憶部に記憶されている差分未満である場合、前記イベントの入力数のカウントを一元化することを判断すること、
を前記第１情報処理装置に実行させることを特徴とする請求項１記載の複合イベント処理プログラム。
【請求項３】
前記第１入力数と、前記再取得された前記第２入力数の合計が前記一定数を超える場合に、前記第１情報処理装置又は前記第２情報処理装置に対して入力された前記各イベントを、それぞれの入力時期に基づいてソートし、ソート結果において前記一定数以内に含まれる前記イベントを示す情報を前記第２情報処理装置に通知すること、
を前記第１情報処理装置に実行させることを特徴とする請求項２記載の複合イベント処理プログラム。
【請求項４】
一定数のイベントが入力されるたびに前記一定数の前記イベントに対して適用する処理を前記一定数が所定の配分数に配分されることにより並列分散処理を行う複数の情報処理装置に含まれる、第１情報処理装置と第２情報処理装置のうちの前記第１情報処理装置であって、
前記第１情報処理装置に対する前記イベントの入力数を示す第１入力数が、前記配分数に対して所定の範囲内に到達すると、前記第２情報処理装置に対する前記イベントの前記入力数を示す第２入力数を前記第２情報処理装置から取得する取得部と、
前記第１入力数と前記第２入力数との合計と、前記一定数との差分に基づいて、前記第１情報処理装置と前記第２情報処理装置に対する前記配分数を更新する更新部と、
を有することを特徴とする情報処理装置。
【請求項５】
一定数のイベントが入力されるたびに前記一定数の前記イベントに対して適用する処理を前記一定数が所定の配分数に配分されることにより並列分散処理を行う第１情報処理装置及び第２情報処理装置と、前記所定の配分数を前記第１情報処理装置及び前記第２情報処理装置に通知する管理装置とを含む情報処理システムであって、
前記第１情報処理装置は、
前記第１情報処理装置に対する前記イベントの入力数を示す第１入力数が、前記配分数に対して所定の範囲内に到達すると、前記第２情報処理装置に対する前記イベントの前記入力数を示す第２入力数を前記第２情報処理装置から取得する取得部と、
前記第１入力数と前記第２入力数との合計と、前記一定数との差分に基づいて、前記第１情報処理装置と前記第２情報処理装置に対する前記配分数を更新する更新部と、
を有することを特徴とする情報処理システム。
【請求項６】
一定数のイベントが入力されるたびに前記一定数の前記イベントに対して適用する処理を前記一定数が所定の配分数に配分されることにより並列分散処理を行う複数の情報処理装置に含まれる、第１情報処理装置と第２情報処理装置のうちの前記第１情報処理装置が、
前記第１情報処理装置に対する前記イベントの入力数を示す第１入力数が、前記配分数に対して所定の範囲内に到達すると、前記第２情報処理装置に対する前記イベントの前記入力数を示す第２入力数を前記第２情報処理装置から取得し、
前記第１入力数と前記第２入力数との合計と、前記一定数との差分に基づいて、前記第１情報処理装置と前記第２情報処理装置に対する前記配分数を更新すること、
を実行することを特徴とする複合イベント処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複合イベント処理プログラム、情報処理装置、情報処理システム、及び複合イベント処理方法に関する。
【背景技術】
【０００２】
家電、家具、スマート端末等の各種のデバイスから刻々と発生するイベントに対し、高速に処理を行う技術として、複合イベント処理（ＣＥＰ（Complex Event Processing））が存在する。
【０００３】
ＣＥＰの代表的な処理として、フィルタ処理や結合処理の他、例えば、「１時間分」のアクセス数や「１００人分」の平均購買価格等、一定期間又は一定数毎に、入力イベントをまとめて集計する処理がある。一定期間の入力イベントを溜める領域（ウィンドウ）を「Ｔｉｍｅ  Ｗｉｎｄｏｗ」といい、一定数の入力イベントを溜める領域を「Ｌｅｎｇｔｈ  Ｗｉｎｄｏｗ」という。すなわち、「Ｔｉｍｅ  Ｗｉｎｄｏｗ」は、時間指定によってサイズが規定されたウィンドウであり、「Ｌｅｎｇｔｈ  Ｗｉｎｄｏｗ」は、イベントの個数指定によってサイズが規定されたウィンドウである。
【０００４】
近年の大規模データ化により、リアルタイム性の確保の観点からＣＥＰの並列分散が必要となり、並列分散型の複合イベント処理が新たに提唱されつつある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−１２８８１８号公報
【特許文献２】特開２００９−８７１９０号公報
【特許文献３】特開２０１５−２８６７９号公報
【特許文献４】国際公開第２０１５／７１９７８号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、イベントの個数指定によるウィンドウ（Ｌｅｎｇｔｈ  Ｗｉｎｄｏｗ）を用いた場合、並列分散型の複合イベント処理の実現が困難である。
【０００７】
すなわち、並列分散型の複合イベント処理の場合、並列分散された複数のコンピュータが別々にイベントを受信する。そうすると、各コンピュータは、当該コンピュータにおいて受信されたイベントの個数しかカウントすることができないため、システム全体で受信されたイベントの総数を把握することができない。
【０００８】
その結果、集計処理等の複合イベント処理の実行タイミングを，イベントの総数に応じたタイミングに一致させることが出来なくなる。換言すると、集計処理等の複合イベント処理の実行タイミングが、イベントの総数が所定数に到達したタイミングよりも後にズレたタイミングになってしまう。
【０００９】
そこで、一側面では、一定数のイベントが入力されるたびに実行される複合イベント処理が並列分散される場合について、イベントが総数に到達したタイミングに対する、処理が実行されるタイミングのズレを小さくさせることを目的とする。
【課題を解決するための手段】
【００１０】
一つの案では、複合イベント処理プログラムは、一定数のイベントが入力されるたびに前記一定数の前記イベントに対して適用する処理を前記一定数が所定の配分数に配分されることにより並列分散処理を行う複数の情報処理装置に含まれる、第１情報処理装置と第２情報処理装置のうちの前記第１情報処理装置に、前記第１情報処理装置に対する前記イベントの入力数を示す第１入力数が、前記配分数に対して所定の範囲内に到達すると、前記第２情報処理装置に対する前記イベントの前記入力数を示す第２入力数を前記第２情報処理装置から取得し、前記第１入力数と前記第２入力数との合計と、前記一定数との差分に基づいて、前記第１情報処理装置と前記第２情報処理装置に対する前記配分数を更新すること、を実行させる。
【発明の効果】
【００１１】
一定数のイベントが入力されるたびに実行される複合イベント処理が並列分散される場合について、イベントが総数に到達したタイミングに対する、処理が実行されるタイミングのズレを小さくさせることができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施の形態における情報処理システムの構成例を示す図である。
【図２】本発明の実施の形態の概要を説明するための図である。
【図３】同期中に合計入力イベント数が全体Ｗｉｎｄｏｗ長を超えてしまう状態を示す図である。
【図４】本発明の実施の形態における処理サーバのハードウェア構成例を示す図である。
【図５】本発明の実施の形態における管理サーバのハードウェア構成例を示す図である。
【図６】本発明の実施の形態における処理サーバの機能構成例を示す図である。
【図７】ルーティングテーブルの構成例を示す図である。
【図８】Ｗｉｎｄｏｗ管理テーブル及び並列化Ｗｉｎｄｏｗ管理テーブルの構成例を示す図である。
【図９】同期時の処理手順の第１の例を説明するためのシーケンス図である。
【図１０】同期時の処理手順の第２の例を説明するためのシーケンス図である。
【図１１】同期時の処理手順の第３の例を説明するためのシーケンス図である。
【図１２】同期時の処理手順の第４の例を説明するためのシーケンス図である。
【図１３】イベントの入力に応じて処理サーバが実行する処理手順の一例を説明するためのフローチャートである。
【図１４】到達通知の受信に応じて処理サーバが実行する処理手順の一例を説明するためのフローチャートである。
【図１５】並列化Ｗｉｎｄｏｗ長の受信に応じて処理サーバが実行する処理手順の一例を説明するためのフローチャートである。
【図１６】発火処理の処理手順の一例を説明するためのフローチャートである。
【図１７】一極カウントへの切替処理の処理手順の一例を説明するためのフローチャートである。
【発明を実施するための形態】
【００１３】
以下、図面に基づいて本発明の実施の形態を説明する。図１は、本発明の実施の形態における情報処理システムの構成例を示す図である。図１において、情報処理システム１は、管理サーバ２０、並びに処理サーバ１０ａ、処理サーバ１０ｂ、及び処理サーバ１０ｃ等の３つの処理サーバ１０を含む。但し、処理サーバ１０は、２つであってもよいし、４つ以上であってもよい。なお、各処理サーバ１０を区別しない場合、単に、処理サーバ１０という。
【００１４】
管理サーバ２０は、各処理サーバ１０を管理する１以上のコンピュータである。
【００１５】
各処理サーバ１０は、複合イベント処理（ＣＥＰ（Complex Event Processing））を並列分散するコンピュータである。複合イベント処理においては、処理の発火タイミング、すなわち処理の実行が開始されるタイミングが、期間又はイベントの個数によって規定されるが、本実施の形態では、イベントの個数に基づいて処理の発火タイミングが規定される。具体的には、一定数のイベントを溜める領域である「Ｌｅｎｇｔｈ  Ｗｉｎｄｏｗ」に基づいて、発火タイミングが判定される。以下、当該一定数を、全体Ｗｉｎｄｏｗ長という。全体Ｗｉｎｄｏｗ長は、情報処理システム１全体に対するパラメータである。例えば、全体Ｗｉｎｄｏｗ長が１０であれば、情報処理システム１全体において１０個のイベントが入力されるごとに、複合イベント処理が実行される。
【００１６】
但し、各処理サーバ１０には、それぞれ個別にイベントが入力される。また、各処理サーバ１０へのイベントの入力数は、必ずしも均一ではない。例えば、イベントは、キー分散によって各処理サーバ１０に分散される。この場合、各処理サーバ１０に対するイベントの入力数には偏りが生じる。なお、キー分散とは、ＳＱＬ（Structured Query Language）でのｇｒｏｕｐ  ｂｙ  ｉｄといった、あるキー（ｉｄ）の値毎に集約する処理を、キー値毎に分散することをいう。
【００１７】
したがって、各処理サーバ１０は、当該処理サーバ１０に対するイベントの入力数のみでは、情報処理システム１全体におけるイベントの入力数を知ることができない。そうすると、イベントの入力数が全体Ｗｉｎｄｏｗ長へ到達したタイミングが不明となり、複合イベント処理の実行タイミングの精度が低下してしまうことが本願発明者の検討により明らかになった。
【００１８】
斯かる課題に対し、本願発明者は、各処理サーバ１０にイベントが入力されるたびに、処理サーバ１０間で同期を行うことで、各処理サーバ１０が、情報処理システム１全体で入力されたイベント数を共有することを検討した。
【００１９】
しかし、この場合、発火タイミングの精度を確保することはできるが、同期のために必要とされる処理コストが高くなり、性能が低下することが明らかになった。
【００２０】
一方で、同期コストを低下させる為に、同期の頻度を低下させた場合、発火タイミングの精度が低下することが明らかになった。
【００２１】
そこで、本願発明者は、図２に示されるような方式を考案した。図２は、本発明の実施の形態の概要を説明するための図である。図２において、（１）〜（５）は、時系列順である。
【００２２】
（１）において、情報処理システム１に対する「Ｌｅｎｇｔｈ  Ｗｉｄｎｏｗ」は、管理サーバ２０によって３つの処理サーバ１０に対して並列化される。すなわち、全体Ｗｉｎｄｏｗ長が、管理サーバ２０によって３つの処理サーバ１０に配分される。各処理サーバ１０への配分数は同じでもよいし、異なっていてもよい。以下、並列化された「Ｌｅｎｇｔｈ  Ｗｉｄｎｏｗ」のそれぞれを、「並列化Ｗｉｎｄｏｗ」という。また、各配分数（すなわち、各並列化Ｗｉｎｄｏｗの長さ（サイズ））を、「並列化Ｗｉｎｄｏｗ長」という。並列化Ｗｉｎｄｏｗ長は、各処理サーバ１０に設定される。図２において、並列化Ｗｉｎｄｏｗ長Ｌａ、並列化Ｗｉｎｄｏｗ長Ｌｂ、並列化Ｗｉｎｄｏｗ長Ｌｃは、順番に、処理サーバ１０ａ、処理サーバ１０ｂ、処理サーバ１０ｃに対する並列化Ｗｉｎｄｏｗ長である。
【００２３】
（２）は、各処理サーバ１０に対してイベントが入力され始めた状態を示す。（２）においては、いずれの処理サーバ１０においても、並列化Ｗｉｎｄｏｗ長は、イベントの入力数に対して余裕が有る。
【００２４】
（３）は、処理サーバ１０ｂにおいて、イベントの入力数が、並列化Ｗｉｎｄｏｗ長に対して所定の範囲内に到達した状態を示す。ここでは、所定の範囲内が、並列化Ｗｉｎｄｏｗ長と同じである例が示されている。但し、所定の範囲は、イベントの入力数が並列化Ｗｉｎｄｏｗ長に到達しそうな状態を示す値であってもよい。具体的には、（並列化Ｗｉｎｄｏｗ長−イベントの入力数）が、閾値以下となるような入力数が、所定の範囲内の入力数であってもよい。（３）の状態において、処理サーバ１０ｂは、他の処理サーバ１０との間でイベントの入力数について同期を行う。具体的には、処理サーバ１０ｂは、処理サーバ１０ａ及び処理サーバ１０ｃに対してそれぞれのイベントの入力数を問い合わせ、３つの処理サーバ１０におけるイベントの入力数（入力イベント数）の合計（以下、「合計入力イベント数」という。）を算出する。合計入力イベント数が全体Ｗｉｎｄｏｗ長以上になっていなければ、（４）の状態に移行する。
【００２５】
（４）において、各処理サーバ１０の並列化Ｗｉｎｄｏｗ長は、合計入力イベント数と全体Ｗｉｎｄｏｗ長との差分（「全体Ｗｉｎｄｏｗ長−合計入力イベント数」（以下、「全体Ｗｉｎｄｏｗ長余り」という。））に基づいて、更新（再設定）される。例えば、更新後の各処理サーバ１０における「並列化Ｗｉｎｄｏｗ長−イベントの入力数」（以下、「並列化Ｗｉｎｄｏｗ長余り」という。）が略均一になるように、更新が行われる。
【００２６】
（５）は、処理サーバ１０ｃにおいて、イベントの入力数が、並列化Ｗｉｎｄｏｗ長に対して所定の範囲内に到達した状態を示す。この場合、再び同期及び並列化Ｗｉｎｄｏｗ長の更新が行われる。
【００２７】
上記のような処理が行われることで、並列化Ｗｉｎｄｏｗ長余りが徐々に短くなっていくため、同期の頻度が徐々に上がっていく。すなわち、本実施の形態では、全体Ｗｉｎｄｏｗ長が入力イベント数に対して余裕が有る状態では同期は行われずに、全体Ｗｉｎｄｏｗ長と入力イベント数との差が小さくなるにつれて同期頻度が上げられる。その結果、同期の頻度を低下させつつ、発火タイミングの精度を確保することができる。
【００２８】
ところで、処理サーバ１０間において同期が行われている間においても、各処理サーバ１０に対してイベントは刻々と入力される。そうすると、同期中に、合計入力イベント数が、全体Ｗｉｎｄｏｗ長を超えてしまう可能性も考えられる。合計入力イベント数が、全体Ｗｉｎｄｏｗ長を超えてしまった場合、発火タイミングが遅延してしまう。
【００２９】
図３は、同期中に合計入力イベント数が全体Ｗｉｎｄｏｗ長を超えてしまう状態を示す図である。図３には、図２の（５）に続く、（６）〜（８）の状態が示されている。
【００３０】
（６）は、（５）において処理サーバ１０ｃの並列化Ｗｉｎｄｏｗ長余りが無くなったことに基づいて、並列化Ｗｉｎｄｏｗ長が更新された状態を示す。
【００３１】
（７）は、更新後において、処理サーバ１０ｂの並列化Ｗｉｎｄｏｗ長余りが無くなった状態を示す。
【００３２】
（８）は、（７）に応じて同期を行っている間に、合計入力イベント数が、全体Ｗｉｎｄｏｗ長を超えてしまった状態を示す。
【００３３】
この場合、本実施の形態では、全体Ｗｉｎｄｏｗ長に余りが有る状態で最後に同期を行ったタイミング（７）における、全体Ｗｉｎｄｏｗ長余り（図３では「２」）が記憶される。当該全体Ｗｉｎｄｏｗ長余りを、以下「最小Ｗｉｎｄｏｗ長余り」という。次の発火に対する入力イベント数のカウントは、全体Ｗｉｎｄｏｗ長余りが最小Ｗｉｎｄｏｗ長余りを下回った時点で、例えば、処理サーバ１０ａに一元化される。そうすることで、発火タイミングの遅延を防止することができる。なお、一元化されたイベント数のカウントを「一極カウント」という。これに対し、並列化されたイベント数のカウントを「並列カウント」という。
【００３４】
図４は、本発明の実施の形態における処理サーバのハードウェア構成例を示す図である。図４の処理サーバ１０は、それぞれバスＢで相互に接続されているドライブ装置１００、補助記憶装置１０２、メモリ装置１０３、ＣＰＵ１０４、及びインタフェース装置１０５等を有する。
【００３５】
処理サーバ１０での処理を実現するプログラムは、記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００３６】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従って処理サーバ１０に係る機能を実行する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。
【００３７】
なお、記録媒体１０１の一例としては、ＣＤ−ＲＯＭ、ＤＶＤディスク、又はＵＳＢメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置１０２の一例としては、ＨＤＤ（Hard Disk Drive）又はフラッシュメモリ等が挙げられる。記録媒体１０１及び補助記憶装置１０２のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。  図５は、本発明の実施の形態における管理サーバのハードウェア構成例を示す図である。図５の管理サーバ２０は、それぞれバスＢで相互に接続されているドライブ装置２００、補助記憶装置２０２、メモリ装置２０３、ＣＰＵ２０４、及びインタフェース装置２０５等を有する。
【００３８】
管理サーバ２０での処理を実現するプログラムは、記録媒体２０１によって提供される。プログラムを記録した記録媒体２０１がドライブ装置２００にセットされると、プログラムが記録媒体２０１からドライブ装置２００を介して補助記憶装置２０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体２０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置２０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００３９】
メモリ装置２０３は、プログラムの起動指示があった場合に、補助記憶装置２０２からプログラムを読み出して格納する。ＣＰＵ２０４は、メモリ装置２０３に格納されたプログラムに従って管理サーバ２０に係る機能を実行する。インタフェース装置２０５は、ネットワークに接続するためのインタフェースとして用いられる。
【００４０】
なお、記録媒体２０１の一例としては、ＣＤ−ＲＯＭ、ＤＶＤディスク、又はＵＳＢメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置２０２の一例としては、ＨＤＤ（Hard Disk Drive）又はフラッシュメモリ等が挙げられる。記録媒体２０１及び補助記憶装置２０２のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
【００４１】
図６は、本発明の実施の形態における処理サーバの機能構成例を示す図である。図６において、管理サーバ２０は、構成管理部２１を有する。処理の初期実行段階において、各処理サーバ１０は、情報処理システム１を構成する他の処理サーバ１０群を知り得ない。また、処理の初期実行段階において、各処理サーバ１０は、Ｗｉｎｄｏｗ管理テーブル１２３及び並列化Ｗｉｎｄｏｗ管理テーブル１２４を有していない。管理サーバ２０は、各処理サーバ１０が他の処理サーバ１０を認識し、各処理サーバ１０に対してＷｉｎｄｏｗ管理テーブル１２３及び並列化Ｗｉｎｄｏｗ管理テーブル１２４を配備するための役割を担う。
【００４２】
構成管理部２１は、管理サーバ２０にインストールされた１以上のプログラムが、管理サーバ２０のＣＰＵ２０４に実行させる処理により実現される。管理サーバ２０は、また、Ｗｉｎｄｏｗ管理テーブル２２及び並列化Ｗｉｎｄｏｗ管理テーブル２３等を有する。これら各テーブルは、例えば、管理サーバ２０のメモリ装置２０３又は管理サーバ２０の補助記憶装置２０２等を用いて実現可能である。
【００４３】
Ｗｉｎｄｏｗ管理テーブル２２には、情報処理システム１において使用される各Ｗｉｎｄｏｗの情報が記憶される。すなわち、情報処理システム１において使用されるＷｉｎｄｏｗは、１つであるとは限らない。並列化Ｗｉｎｄｏｗ管理テーブル２３には、各Ｗｉｎｄｏｗに対する各並列化Ｗｉｎｄｏｗ１２１の情報が記憶される。
【００４４】
構成管理部２１は、管理サーバ２０に接続している処理サーバ１０の識別情報を認識することができ、その認識結果に基づいて、Ｗｉｎｄｏｗ管理テーブル２２から並列化Ｗｉｎｄｏｗ管理テーブル２３を生成する。構成管理部２１は、生成したＷｉｎｄｏｗ管理テーブル２２及び並列化Ｗｉｎｄｏｗ管理テーブル２３のそれぞれを、各処理サーバ１０に配備（コピー）する。
【００４５】
図８は、Ｗｉｎｄｏｗ管理テーブル及び並列化Ｗｉｎｄｏｗ管理テーブルの構成例を示す図である。図８において、Ｗｉｎｄｏｗ管理テーブル２２は、Ｗｉｎｄｏｗごとに、ＷｉｎｄｏｗＩＤ、Ｗｉｎｄｏｗ名、全体Ｗｉｎｄｏｗ長、最小Ｗｉｎｄｏｗ長余り、合計入力イベント数、及び並列化数等を記憶する。
【００４６】
ＷｉｎｄｏｗＩＤは、Ｗｉｎｄｏｗごとの識別番号である。なお、各Ｗｉｎｄｏｗは、複合イベント処理の単位ごとに定義される。Ｗｉｎｄｏｗ名は、Ｗｉｎｄｏｗに付加された名前である。並列化数は、Ｗｉｎｄｏｗがいくつの並列化Ｗｉｎｄｏｗに並列化（分割）されたのかを示す値である。その他の項目については上記した通りである。
【００４７】
一方、並列化Ｗｉｎｄｏｗ管理テーブル２３は、並列化Ｗｉｎｄｏｗごとに、ＷｉｎｄｏｗＩＤ、並列化ＷｉｎｄｏｗＩＤ、並列化Ｗｉｎｄｏｗ長、入力イベント数、及び処理サーバＩＤ等を記憶する。
【００４８】
ＷｉｎｄｏｗＩＤは、並列化Ｗｉｎｄｏｗが属するＷｉｎｄｏｗのＷｉｎｄｏｗＩＤである。並列化ＷｉｎｄｏｗＩＤは、ＷｉｎｄｏｗＩＤが共通する並列化Ｗｉｎｄｏｗを識別するための識別情報である。処理サーバＩＤは、当該並列化Ｗｉｎｄｏｗの配分先の処理サーバ１０の識別情報（ＩＰアドレス）である。
【００４９】
一方、処理サーバ１０は、転送部１１、処理部１２、制御部１３、及び同期部１４を有する。これら各部は、処理サーバ１０にインストールされた１以上のプログラムが、ＣＰＵ１０４に実行させる処理により実現される。処理サーバ１０は、また、並列化Ｗｉｎｄｏｗ１２１、バッファ１２２、Ｗｉｎｄｏｗ管理テーブル１２３、並列化Ｗｉｎｄｏｗ管理テーブル１２４、及びルーティングテーブル１２５等を有する。並列化Ｗｉｎｄｏｗ１２１、バッファ１２２、Ｗｉｎｄｏｗ管理テーブル１２３、並列化Ｗｉｎｄｏｗ管理テーブル１２４、及びルーティングテーブル１２５等は、例えば、メモリ装置１０３等を用いて実現可能である。
【００５０】
転送部１１は、ルーティングテーブル１２５に基づき、他の処理サーバ１０から入力されたイベント、又は情報処理システム１の外部から入力されたイベントを処理部１２へ転送する。転送部１１は、また、処理部１２からの結果を、他の処理サーバ１０、又は情報処理システム１の外部へ転送する。転送部１１は、更に、一極カウントへ切替える際は、該当のイベントが特定の処理サーバ１０に集まるようにルーティングテーブル１２５を書き換える。
【００５１】
図７は、ルーティングテーブルの構成例を示す図である。図７に示されるように、ルーティングテーブル１２５には、例えば、イベントのキー値に対応付けて、当該イベントの入力先の処理サーバ１０のＩＰアドレスが記憶されている。すなわち、各処理サーバ１０は、自らが必要とする（自らへの入力対象となる）イベントのみを受信するとは限らず、他の処理サーバ１０が必要とするイベントを受信する可能性も有る。他の処理サーバ１０が必要とするイベントを受信した処理サーバ１０の転送部１１は、ルーティングテーブル１２５に基づいて、当該他の処理サーバ１０に対して当該イベントを転送する。
【００５２】
処理部１２は、転送部１１から転送されたイベントを並列化Ｗｉｎｄｏｗ１２１に投入する。並列化Ｗｉｎｄｏｗ１２１は、処理サーバ１０に配分されたイベント数分のイベントを格納するための箱として機能する。イベントは、例えば、時刻、イベント名、及びキー値等の項目を含む。但し、時刻は、必ずしもイベントに含まれていなくてもよい。例えば、処理部１２が時刻をイベントに付与し、当該イベントを並列化Ｗｉｎｄｏｗ１２１に投入してもよい。処理部１２は、発火タイミングが到来すると、それまでに並列化Ｗｉｎｄｏｗ１２１に投入されたイベント群について、イベント複合処理を実行する。但し、処理部１２は、他の処理サーバ１０との同期中に入力されたイベントは、バッファ１２２に投入する。
【００５３】
制御部１３は、各処理サーバ１０の並列化Ｗｉｎｄｏｗ長の決定、調停判断、発火判断、同期方式の切替判断等を行う。制御部１３は、入力イベント数が並列化Ｗｉｎｄｏｗ長に対して所定の範囲内に到達している場合に、他の処理サーバ１０と同期して、新たな並列化Ｗｉｎｄｏｗ長を決定する。制御部１３は、新たな並列化Ｗｉｎｄｏｗ長の決定の際に、全体Ｗｉｎｄｏｗ長余りが最小Ｗｉｎｄｏｗ長余りを下回っていないかを判断する。制御部１３は、また、最小Ｗｉｎｄｏｗ長余りを決定する。上記したように、最小Ｗｉｎｄｏｗ長余りは、これより下回ると発火タイミングが遅延してしまうと予想される全体Ｗｉｎｄｏｗ長余りをいう。
【００５４】
同期部１４は、他の処理サーバ１０との間で、入力イベント数や発火の同期を行う。同期部１４は、同期により他の処理サーバ１０から取得された並列化Ｗｉｎｄｏｗ長及び入力イベント数を制御部１３へ通知する。
【００５５】
以下、情報処理システム１において実行される処理手順について説明する。図９は、同期時の処理手順の第１の例を説明するためのシーケンス図である。なお、図９において、各処理サーバ１０の並列化Ｗｉｎｄｏｗ長は、１０であるとする。すなわち、全体Ｗｉｎｄｏｗ長は、１０＋１０＋１０＝３０であるとする。また、図９以降の説明において、特定の処理サーバ１０の各構成要素の符号の末尾には、当該処理サーバ１０の符号の末尾のアルファベット（ａ、ｂ、又はｃ）が付加される。更に、以下の説明において、各処理サーバ１０に入力されるイベントは、特定の一つのＷｉｎｄｏｗＩＤに対応するイベントであるとする。
【００５６】
ステップＳ１０１において、処理サーバ１０ｂの並列化Ｗｉｎｄｏｗ１２１ｂに記憶されたイベントの個数（入力イベント数）が並列化Ｗｉｎｄｏｗ長に到達すると、制御部１３ｂは、並列化Ｗｉｎｄｏｗ１２１ｂをロックする（Ｓ１０２）。並列化Ｗｉｎｄｏｗ１２１ｂのロック中に処理サーバ１０ｂに入力されるイベントは、バッファ１２２ｂに記憶される。続いて、同期部１４ｂは、入力イベント数が並列化Ｗｉｎｄｏｗ長に到達したことを示す通知（以下、「到達通知」という。）を、処理サーバ１０ａ及び処理サーバ１０ｃに送信する（Ｓ１０３−１、Ｓ１０３−２）。
【００５７】
処理サーバ１０ａの制御部１３ａは、到達通知の受信に応じ、並列化Ｗｉｎｄｏｗ１２１ａをロックし、並列化Ｗｉｎｄｏｗ１２１ａに記憶されているイベントの個数（入力イベント数）を取得する（Ｓ１０４−１）。続いて、同期部１４ａは、入力イベント数及び並列化Ｗｉｎｄｏｗ長を含む、状態情報を処理サーバ１０ｂに通知する（Ｓ１０５−１）。なお、図９では、（並列化Ｗｉｎｄｏｗ長，入力イベント数）の形式で、各処理サーバ１０の並列化Ｗｉｎｄｏｗ長及び入力イベント数が示されている。
【００５８】
一方、処理サーバ１０ｃにおいても、ステップＳ１０４−１及びＳ１０５−１と同様の処理が実行される（Ｓ１０４−２、Ｓ１０５−２）。処理サーバ１０ｂの同期部１４ｂは、処理サーバ１０ａ及び処理サーバ１０ｃのそれぞれの並列化Ｗｉｎｄｏｗ長及び入力イベント数を受信する。なお、処理サーバ１０ａの並列化Ｗｉｎｄｏｗ長は１０であり、入力イベント数は、２である。また、処理サーバ１０ｃの並列化Ｗｉｎｄｏｗ長は１０であり、入力イベント数は、３である。
【００５９】
続いて、制御部１３ｂは、合計入力イベント数と、全体Ｗｉｎｄｏｗ長余りとを算出する（Ｓ１０６）。合計入力イベント数は、処理サーバ１０ａ及び処理サーバ１０ｃのそれぞれから通知された入力イベント数と、処理サーバ１０ｂの入力イベント数とを合計することで求めることができる。全体Ｗｉｎｄｏｗ長余りは、各処理サーバ１０の合計入力イベント数を、全体Ｗｉｎｄｏｗ長から差し引くことで求めることができる。この時点において、各処理サーバ１０の合計入力イベント数は、２＋１０＋３＝１５である。また、全体Ｗｉｎｄｏｗ長余りは、３０−１５＝１５である。
【００６０】
続いて、制御部１３ｂは、合計入力イベント数と全体Ｗｉｎｄｏｗ長とを比較する（Ｓ１０７）。すなわち、合計入力イベント数が全体Ｗｉｎｄｏｗ長に到達していないことが確認される。ここでは、合計入力イベント数は１５であり、全体Ｗｉｎｄｏｗ長は３０であるため、合計入力イベント数は全体Ｗｉｎｄｏｗ長に到達していない。
【００６１】
合計入力イベント数が全体Ｗｉｎｄｏｗ長に到達していない場合、制御部１３ｂは、全体Ｗｉｎｄｏｗ長余りと最小Ｗｉｎｄｏｗ長余りとを比較する（Ｓ１０８）。ここでは、全体Ｗｉｎｄｏｗ長余りが、最小Ｗｉｎｄｏｗ長余り以上であるとする。この場合、制御部１３ｂは、各処理サーバ１０の並列化Ｗｉｎｄｏｗ長を更新する（Ｓ１０９）。例えば、全体Ｗｉｎｄｏｗ長余りを３等分した結果が、各処理サーバ１０の並列化Ｗｉｎｄｏｗ長余りとなるように、各処理サーバ１０の並列化Ｗｉｎｄｏｗ長が更新されてもよい。図９の例では、（３０−１５）÷３＝５が、各処理サーバ１０の並列化Ｗｉｎｄｏｗ長余りとなるように、各処理サーバ１０の並列化Ｗｉｎｄｏｗ長が更新されている。このような並列化Ｗｉｎｄｏｗ長は、「入力イベント数＋並列化Ｗｉｎｄｏｗ長余り」によって算出することができる。したがって、処理サーバ１０ａ、処理サーバ１０ｂ、処理サーバ１０ｃの順に、並列化Ｗｉｎｄｏｗ長は、７、１５、８となる。なお、各処理サーバ１０の並列化Ｗｉｎｄｏｗ長余りは均等にならなくてもよい。
【００６２】
続いて、同期部１４ｂは、処理サーバ１０ａ及び処理サーバ１０ｂのそれぞれに対して、それぞれの更新後の並列化Ｗｉｎｄｏｗ長を通知する（Ｓ１１０−１、Ｓ１１０−２）。処理サーバ１０ａには「７」が通知され、処理サーバ１０ｃには「８」が通知される。
【００６３】
続いて、各処理サーバ１０の制御部１３は、それぞれの並列化Ｗｉｎｄｏｗ長を再設定する（Ｓ１１１−１、Ｓ１１１−２、Ｓ１１１−３）。その結果、処理サーバ１０ａ、処理サーバ１０ｂ、処理サーバ１０ｃの順で、（並列化Ｗｉｎｄｏｗ長、並列化Ｗｉｎｄｏｗ長余り）は、（７，２）、（１５，１０）、（８，３）となる。
【００６４】
ここで、処理サーバ１０ａについては、並列化Ｗｉｎｄｏｗ１２１ａのロック中に３つのイベントがバッファ１２２ａに投入されていたとする。すなわち、ステップＳ１０４―１〜Ｓ１１１−２までの間に、３つのイベントが処理サーバ１０ａに入力されていたとする。この場合、制御部１３ａは、バッファ１２２ａに記憶されているイベントを、並列化Ｗｉｎｄｏｗ１２１ａに転記する（Ｓ１１２）。その結果、処理サーバ１０ａの（並列化Ｗｉｎｄｏｗ長、並列化Ｗｉｎｄｏｗ長余り）は、（７，５）に更新される。
【００６５】
続いて、並列化Ｗｉｎｄｏｗ長を受信した処理サーバ１０ａ及び処理サーバ１０ｃのそれぞれの同期部１４は、並列化Ｗｉｎｄｏｗ長の再設定後の並列化Ｗｉｎｄｏｗ１２１の状態情報を処理サーバ１０ｂに通知する（Ｓ１１３−１、Ｓ１１３−２）。処理サーバ１０ａからは（７，５）が通知され、処理サーバ１０ｃからは（８，３）が通知される。
【００６６】
続いて、処理サーバ１０ｂの制御部１３ｂは、合計入力イベント数を算出する（Ｓ１１４）。続いて、制御部１３ｂは、合計入力イベント数と、全体Ｗｉｎｄｏｗ長とを比較する（Ｓ１１５）。ここでは、合計入力イベント数は、５＋１０＋３＝１８であり、全体Ｗｉｎｄｏｗ長（３０）以下である。したがって、同期に成功したことになる。
【００６７】
続いて、制御部１３ｂは、並列化Ｗｉｎｄｏｗ１２１ｂのロックを解除する（Ｓ１１６）。続いて、同期部１４ｂは、処理サーバ１０ａ及び処理サーバ１０ｃのそれぞれに対し、ロック解除の要求を送信する（Ｓ１１７−１、Ｓ１１７−２）。処理サーバ１０ａ及び処理サーバ１０ｂのそれぞれの制御部１３は、当該要求に応じ、それぞれの並列化Ｗｉｎｄｏｗ１２１のロックを解除する。各処理サーバ１０の並列化Ｗｉｎｄｏｗ１２１のロックが解除されることで、各処理サーバ１０に入力されるイベントは、それぞれの並列化Ｗｉｎｄｏｗ１２１に記憶されるようになる。
【００６８】
続いて、ステップＳ１１５において、合計入力イベント数が全体Ｗｉｎｄｏｗ長を超えていた場合について説明する。図１０は、同期時の処理手順の第２の例を説明するためのシーケンス図である。図１０中、図９に対応するステップには図９と同一ステップ番号を付し、その説明は適宜省略する。
【００６９】
図１０では、ステップＳ１１３−１において、処理サーバ１０ａの並列化Ｗｉｎｄｏｗ１２１ａの状態（並列化Ｗｉｎｄｏｗ長、入力イベント数）として、（７，１０）が通知されたとする。また、ステップＳ１１３−２において、処理サーバ１０ｃの並列化Ｗｉｎｄｏｗ１２１ｃの状態として、（８，１２）が通知されたとする。更に、処理サーバ１０ｂの並列化Ｗｉｎｄｏｗ１２１ｂの状態は、（１５，１０）であるとする。
【００７０】
この場合、ステップＳ１１４において、合計入力イベント数の算出結果は、１０＋１２＋１０＝３２となる。したがって、ステップＳ１１５において、合計入力イベント数が、全体Ｗｉｎｄｏｗ長を超えていることが検知される。
【００７１】
この場合、制御部１３ｂは、同期を開始した時点における全体Ｗｉｎｄｏｗ長余り（すなわち、図９のステップＳ１０６において算出された全体Ｗｉｎｄｏｗ長余り）によって、最小Ｗｉｎｄｏｗ長余りを更新する（Ｓ１１９）。更新後の最小Ｗｉｎｄｏｗ長余りは、Ｗｉｎｄｏｗ管理テーブル１２３に記憶され、次回のステップＳ１０８において参照される。なお、Ｗｉｎｄｏｗ管理テーブル１２３の内容は、Ｗｉｎｄｏｗ管理テーブル２３に対して同期されてもよい。但し、本実施の形態では、Ｗｉｎｄｏｗ管理テーブル１２３の内容がＷｉｎｄｏｗ管理テーブル２３に対して同期されなくても動作する。したがって、本実施の形態において、Ｗｉｎｄｏｗ管理テーブル２３に関する同期については省略される。
【００７２】
続いて、同期部１４ｂは、処理サーバ１０ａ及び処理サーバ１０ｃに対し、到達時刻後に各処理サーバ１０に入力された各イベントの入力時刻の問い合わせ要求を送信する（Ｓ１２１−１、Ｓ１２１−２）。ここで、到達時刻とは、図９のステップＳ１０１において、処理サーバ１０ｂの入力イベント数が並列化Ｗｉｎｄｏｗ長に到達した時刻をいう。当該到達時刻は、ステップＳ１０３−１、Ｓ１０３−２における到達時刻に含まれている。
【００７３】
すなわち、図９のステップＳ１０４−１又はＳ１０４−２より後に入力され、バッファ１２２に記憶された各イベントの入力時刻が問い合わせの対象となる。入力時刻とは、イベントが入力された時刻をいう。なお、当該問い合わせ要求には、ステップＳ１１９において更新された最小Ｗｉｎｄｏｗ長余りも含まれる。処理サーバ１０間で最小Ｗｉｎｄｏｗ長余りを共有するためである。
【００７４】
処理サーバ１０ａ及び処理サーバ１０ｃのそれぞれの制御部１３は、当該要求を受信すると、当該要求に含まれている最小Ｗｉｎｄｏｗ長余りをそれぞれのＷｉｎｄｏｗ管理テーブル１２３に記憶する。また、処理サーバ１０ａ及び処理サーバ１０ｃのそれぞれの制御部１３は、それぞれの並列化Ｗｉｎｄｏｗ１２１に記憶されているイベントのうち、到達時刻より後に入力された各イベントの入力時刻の一覧を取得する。なお、並列化Ｗｉｎｄｏｗ１２１には、各イベントに関連付けられて各イベントの入力時刻が記憶されている。続いて、処理サーバ１０ａ及び処理サーバ１０ｃのそれぞれの同期部１４は、取得された入力時刻の一覧を処理サーバ１０ｂに返信する（Ｓ１２２−１、Ｓ１２２−２）。
【００７５】
続いて、処理サーバ１０ｂの制御部１３ｂは、処理サーバ１０ｂの並列化Ｗｉｎｄｏｗ１２１ｂに記憶されているイベントのうち、到達時刻より後に入力されたイベントの入力時刻の一覧と、処理サーバ１０ａ及び処理サーバ１０ｃのそれぞれから返信された入力時刻の一覧とを時系列順にソートし、ソート結果において全体Ｗｉｎｄｏｗ長に含まれる最後の時刻を特定する（Ｓ１２３）。ここで、到達時刻の時点における合計入力イベント数が１５であるとすると、ソート順において、３０−１５＝１５番目の時刻が特定される。
【００７６】
続いて、同期部１４ｂは、特定された時刻を含む発火通知を処理サーバ１０ａ及び処理サーバ１０ｃに送信する（Ｓ１２４−１、Ｓ１２４−２）。続いて、各処理サーバ１０の制御部１３は、それぞれの並列化Ｗｉｎｄｏｗ１２１に記憶されているイベントのうち、入力時刻が当該時刻以前であるイベントを処理対象として複合イベント処理を実行する（Ｓ１２５）。
【００７７】
続いて、図９のステップＳ１０８において、全体Ｗｉｎｄｏｗ長余りが最小Ｗｉｎｄｏｗ長余りを下回っている場合について説明する。図１１は、同期時の処理手順の第３の例を説明するためのシーケンス図である。図１１中、図９に対応するステップには図９と同一ステップ番号を付し、その説明は適宜省略する。
【００７８】
図１１では、ステップＳ１０５−１において、処理サーバ１０ａの並列化Ｗｉｎｄｏｗ１２１ａの状態（並列化Ｗｉｎｄｏｗ長、入力イベント数）として、（１０，６）が通知されたとする。また、ステップＳ１０５−２において、処理サーバ１０ｃの並列化Ｗｉｎｄｏｗ１２１ｃの状態として、（１０，８）が通知されたとする。更に、処理サーバ１０ｂの並列化Ｗｉｎｄｏｗ１２１ｂの状態は、（１０，１０）であるとする。
【００７９】
そうすると、ステップＳ１０６において、合計入力イベント数は、６＋８＋１０＝２４として算出され、全体Ｗｉｎｄｏｗ長余りは、３０−２４＝６として算出される。したがって、ステップＳ１０７において、合計入力イベント数は、全体Ｗｉｎｄｏｗ長未満であることが確認される。
【００８０】
一方、ステップＳ１０８において、最小Ｗｉｎｄｏｗ長余りが１５であるとすると、全体Ｗｉｎｄｏｗ長余りが最小Ｗｉｎｄｏｗ長余りを下回っていることが検知される。
【００８１】
この場合、制御部１３ｂは、イベントのカウント方式を、並列カウントから一極カウントに切り換えることを判断する（Ｓ１３１）。すなわち、残り６個のイベントのカウントが処理サーバ１０ｂにおいて集約される。当該判断に応じ、転送部１１ｂは、ルーティングテーブル１２５ｂにおいて、処理サーバ１０ａ宛又は処理サーバ１０ｃ宛のそれぞれのイベントの宛先を、処理サーバ１０ｂに書き換える。
【００８２】
続いて、同期部１４ｂは、一極カウントへの切替通知を処理サーバ１０ａ及び処理サーバ１０ｃへ送信する（Ｓ１３２−１、Ｓ１３２−２）。処理サーバ１０ａ及び処理サーバ１０ｃのそれぞれの制御部１３は、当該切替通知に応じ、それぞれのバッファ１２２に記憶されているイベントが有れば、当該イベントをそれぞれの並列化Ｗｉｎｄｏｗ１２１に転記し、転記後に並列化Ｗｉｎｄｏｗ１２１に記憶されているイベントの数（入力イベント数）を、それぞれの並列化Ｗｉｎｄｏｗ１２１の並列化Ｗｉｎｄｏｗ長とする。すなわち、それぞれの並列化Ｗｉｎｄｏｗ長余りが０とされる。図１１の例では、それぞれのバッファ１２２に記憶されているイベントの数は０であるとする。したがって、処理サーバ１０ａの並列化Ｗｉｎｄｏｗ長は６にされ、処理サーバ１０ｃの並列化Ｗｉｎｄｏｗ長は８にされる。また、処理サーバ１０ａ及び処理サーバ１０ｃのそれぞれの転送部１１は、それぞれのルーティングテーブル１２５において、処理サーバ１０ａ宛又は処理サーバ１０ｃ宛のイベントの宛先を処理サーバ１０ｂに書き換える。
【００８３】
続いて、処理サーバ１０ａ及び処理サーバ１０ｃのそれぞれの同期部１４は、並列化Ｗｉｎｄｏｗ長を変える前の並列化Ｗｉｎｄｏｗ長余りを処理サーバ１０ｂへ返信する（Ｓ１３３−１、Ｓ１３３−２）。すなわち、処理サーバ１０ａ及び処理サーバ１０ｃのそれぞれから取り上げられた並列化Ｗｉｎｄｏｗ長が返信される。処理サーバ１０ａからは４が返信され、処理サーバ１０ｃからは２が返信される。
【００８４】
続いて、処理サーバ１０ｂの制御部１３ｂは、返信された並列化Ｗｉｎｄｏｗ長余りの合計分だけ並列化Ｗｉｎｄｏｗ１２１ｂの並列化Ｗｉｎｄｏｗ長を長くする（Ｓ１３４）。図１１の例では、当該並列化Ｗｉｎｄｏｗ長は、１６に更新される。
【００８５】
その後、処理サーバ１０ａ、処理サーバ１０ｂ、又は処理サーバ１０ｃ宛の全てのイベントは、処理サーバ１０ｂに入力される（Ｓ１３５−１〜Ｓ１３５−６）。その結果、入力イベント数のカウントは、処理サーバ１０ｂにおいて一元化される。この過程において、処理サーバ１０ｂの入力イベント数が、並列化Ｗｉｎｄｏｗ１２１ｂの並列化Ｗｉｎｄｏｗ長に到達すると（Ｓ１３６）、同期部１４ｂは、発火通知を処理サーバ１０ａ及び処理サーバ１０ｃに送信する（Ｓ１３７）。その結果、複合イベント処理が実行される。
【００８６】
なお、図１１では、処理サーバ１０ｂが一極カウントを行う例について説明したが、公知の他の方法によって一極カウントが行われてもよい。例えば、各処理サーバ１０以外のコンピュータによって一極カウントが行われてもよい。
【００８７】
続いて、処理サーバ１０ｂと処理サーバ１０ａとにおいて、ほぼ同時期に入力イベント数が並列化Ｗｉｎｄｏｗ長に到達した場合について説明する。図１２は、同期時の処理手順の第４の例を説明するためのシーケンス図である。図１２中、図９に対応するステップには図９と同一ステップ番号を付し、その説明は適宜省略する。
【００８８】
図１２では、処理サーバ１０ａが、処理サーバ１０ｂから到達通知を受信する前に、処理サーバ１０ａにおいて、入力イベント数が並列化Ｗｉｎｄｏｗ長に到達している（Ｓ１４１）。この場合、制御部１３ａは、並列化Ｗｉｎｄｏｗ１２１ａをロックして（Ｓ１４２）、処理サーバ１０ｃ及び処理サーバ１０ｂのそれぞれに対し、到達通知を送信する（Ｓ１４３−１、Ｓ１４３−２）。なお、ステップＳ１０３−１及びＳ１０３−２における処理サーバ１０ｂからの到達通知と、ステップＳ１４３−１及びＳ１４３−２における処理サーバ１０ａからの到達通知とのそれぞれには到達時刻が含まれている。
【００８９】
処理サーバ１０ｃの制御部１３ｃは、処理サーバ１０ａからの到達通知の受信に応じ、並列化Ｗｉｎｄｏｗ１２１ｃをロックし、入力イベント数を取得する（Ｓ１４４−１）。続いて、同期部１４ｃは、入力イベント数及び並列化Ｗｉｎｄｏｗ長を含む、状態情報を処理サーバ１０ａに通知する（Ｓ１４６−１）。処理サーバ１０ｃはまた、処理サーバ１０ｂからの到達通知に対しても、同様の状態情報を返信する（Ｓ１０５−２）。
【００９０】
一方、自らが到達通知を送信した後に、処理サーバ１０ａからの到達通知を受信した処理サーバ１０ｂの制御部１３ｂは、処理サーバ１０ｂにおける到達時刻と、処理サーバ１０ａからの到達通知に含まれている到達時刻とを比較する（Ｓ１４５−１）。同様に、処理サーバ１０ａの制御部１３ａも、処理サーバ１０ａにおける到達時刻と、処理サーバ１０ｂからの到達通知に含まれている到達時刻とを比較する（Ｓ１４５−２）。ここでは、処理サーバ１０ｂにおける到達時刻の方が、処理サーバ１０ａにおける到達時刻より早いこととする。この場合、処理サーバ１０ｂの制御部１３ｂは、自らが同期のとりまとめを行うこと判断し、処理サーバ１０ａへの状態情報の返信は行わない。一方、処理サーバ１０ａの制御部１３ａは、同期のとりまとめを処理サーバ１０ｂに任せることを判断する。そこで、同期部１４ａは、並列化Ｗｉｎｄｏｗ１２１ａの状態情報を処理サーバ１０ｂに通知する（Ｓ１０５−１）。
【００９１】
このように、ほぼ同時期に複数の処理サーバ１０において入力イベント数が並列化Ｗｉｎｄｏｗ長に到達した場合、到達時刻に基づいて調停が行われる。
【００９２】
続いて、上記の各シーケンス図において説明した処理手順を実現するために、各処理サーバ１０が実行する処理手順について説明する。
【００９３】
図１３は、イベントの入力に応じて処理サーバが実行する処理手順の一例を説明するためのフローチャートである。図１３の処理は、イベントが入力されるたびに実行される。なお、処理サーバ１０においてイベントが入力されると、当該イベントは、並列化Ｗｉｎｄｏｗ１２１に投入される。但し、並列化Ｗｉｎｄｏｗ１２１がロックされている場合、当該イベントはバッファ１２２に投入される。
【００９４】
ステップＳ２０１において、制御部１３は、一極カウント中か否かを判定する。一極カウント中である場合（Ｓ２０１でＹｅｓ）、図１３の処理は終了する。一極カウント中でない場合（Ｓ２０１でＮｏ）、制御部１３は、並列化Ｗｉｎｄｏｗ管理テーブル１２４から最小Ｗｉｎｄｏｗ長余りを取得する（Ｓ２０２）。
【００９５】
続いて、制御部１３は、並列化Ｗｉｎｄｏｗ１２１に記憶されているイベント数（入力イベント数）が、並列化Ｗｉｎｄｏｗ管理テーブル１２４に記憶されている並列化Ｗｉｎｄｏｗ長に到達したか否かを判定する（Ｓ２０３）。入力イベント数が並列化Ｗｉｎｄｏｗ長に到達していない場合（Ｓ２０３でＮｏ）、図１３の処理は終了する。
【００９６】
入力イベント数が並列化Ｗｉｎｄｏｗ長に到達した場合（Ｓ２０３でＹｅｓ）、制御部１３は、並列化Ｗｉｎｄｏｗ１２１をロックする（Ｓ２０４）。続いて、同期部１４は、到達時刻を含む到達通知を他の処理サーバ１０に送信する（Ｓ２０５）。続いて、制御部１３は、到達通知の送信先の全ての処理サーバ１０からそれぞれの状態情報（並列化Ｗｉｎｄｏｗ長，入力イベント数）が受信されるのを待機する（Ｓ２０６）。但し、待機中に、他の処理サーバ１０から到達時刻がより早い到達通知が受信された場合（Ｓ２０７でＹｅｓ）、図１３の処理は終了する。
【００９７】
一方、到達通知の全ての送信先の処理サーバ１０からそれぞれの状態情報が受信されると（Ｓ２０６でＹｅｓ）、制御部１３は、合計入力イベント数と全体Ｗｉｎｄｏｗ長余りとを算出する（Ｓ２０８）。算出された合計入力イベント数は、Ｗｉｎｄｏｗ管理テーブル１２３に記憶される。
【００９８】
続いて、制御部１３は、合計入力イベント数が、Ｗｉｎｄｏｗ管理テーブル１２３に記憶されている全体Ｗｉｎｄｏｗ長以上であるか否かを判定する（Ｓ２０９）。合計入力イベント数が全体Ｗｉｎｄｏｗ長未満である場合（Ｓ２０９でＮｏ）、制御部１３は、全体Ｗｉｎｄｏｗ長余りが最小Ｗｉｎｄｏｗ長余り未満であるか否かを判定する（Ｓ２１０）。なお、最小Ｗｉｎｄｏｗ長余りの初期値は、例えば、０であってもよい。全体Ｗｉｎｄｏｗ長余りが最小Ｗｉｎｄｏｗ長余り未満である場合（Ｓ２１０でＹｅｓ）、一極カウントへの切替処理が実行される（Ｓ２２１）。一極カウントへの切替処理の詳細については後述される。
【００９９】
全体Ｗｉｎｄｏｗ長余りが最小Ｗｉｎｄｏｗ長余り以上である場合（Ｓ２１０でＮｏ）、制御部１３は、各処理サーバ１０の新たな並列化Ｗｉｎｄｏｗ長を算出する（Ｓ２１１）。例えば、全体Ｗｉｎｄｏｗ長余りが略均等に配分されるように、各処理サーバ１０の並列化Ｗｉｎｄｏｗ長が算出される。新たに算出された並列化Ｗｉｎｄｏｗ長は、並列化Ｗｉｎｄｏｗ管理テーブル１２４に記憶される。
【０１００】
続いて、同期部１４は、新たな並列化Ｗｉｎｄｏｗ長を各処理サーバ１０に通知する（Ｓ２１２）。続いて、同期部１４は、新たな並列化Ｗｉｎｄｏｗ長の送信先である各処理サーバ１０から返信される、それぞれの並列化Ｗｉｎｄｏｗ１２１部の状態情報を受信する（Ｓ２１３）。ここでは、ステップＳ２０５からＳ２１２までの間に、各処理サーバ１０に入力され、それぞれのバッファ１２２に記憶されているイベントが、それぞれの並列化Ｗｉｎｄｏｗ１２１に反映された後の状態情報が受信される。
【０１０１】
続いて、制御部１３は、新たに受信された状態情報に基づいて、合計入力イベント数と全体Ｗｉｎｄｏｗ長余りとを算出する（Ｓ２１４）。算出された合計入力イベント数は、Ｗｉｎｄｏｗ管理テーブル１２３に記憶される。続いて、制御部１３は、並列化Ｗｉｎｄｏｗ１２１のロックを解除する（Ｓ２１５）。
【０１０２】
続いて、制御部１３は、合計入力イベント数が、Ｗｉｎｄｏｗ管理テーブル１２３に記憶されている全体Ｗｉｎｄｏｗ長以上であるか否かを判定する（Ｓ２１６）。合計入力イベント数が全体Ｗｉｎｄｏｗ長未満である場合（Ｓ２１６でＮｏ）、制御部１３は、全体Ｗｉｎｄｏｗ長余りが最小Ｗｉｎｄｏｗ長余り未満であるか否かを判定する（Ｓ２１７）。全体Ｗｉｎｄｏｗ長余りが最小Ｗｉｎｄｏｗ長余り以上であれば、図１３の処理は終了する。全体Ｗｉｎｄｏｗ長余りが最小Ｗｉｎｄｏｗ長余り未満である場合（Ｓ２１７でＹｅｓ）、一極カウントへの切替処理が実行される（Ｓ２２１）。
【０１０３】
一方、ステップＳ２０９又はステップＳ２１６において、合計入力イベント数が全体Ｗｉｎｄｏｗ長以上である場合（Ｓ２０９でＹｅｓ又はＳ２１６でＹｅｓ）、合計入力イベント数が全体Ｗｉｎｄｏｗ長を超えていれば（Ｓ２１８でＹｅｓ）、制御部１３は、ステップＳ２０８において算出された全体Ｗｉｎｄｏｗ長余りを最小Ｗｉｎｄｏｗ長余りとしてＷｉｎｄｏｗ管理テーブル１２３に記憶する（Ｓ２１９）。すなわち、最小Ｗｉｎｄｏｗ長余りが更新される。続いて、発火処理が実行される（Ｓ２２０）。発火処理の詳細については後述される。
【０１０４】
続いて、ステップＳ２０５において送信される到達通知の受信側の処理サーバ１０が実行する処理手順について説明する。図１４は、到達通知の受信に応じて処理サーバが実行する処理手順の一例を説明するためのフローチャートである。
【０１０５】
他の処理サーバ１０から送信された到達通知が受信されると、制御部１３は、当該到達通知の受信前に、自分（自処理サーバ１０）が到達通知を送信済みであるか否かを判定する（Ｓ３０１）。自処理サーバ１０が到達通知を送信済みである場合（Ｓ３０１でＹｅｓ）、制御部１３は、自処理サーバ１０の到達時刻の方が、受信された到達通知に含まれている到達時刻よりも早いか否かを判定する（Ｓ３０２）。自処理サーバ１０の到達時刻の方が、受信された到達通知に含まれている到達時刻よりも早い場合（Ｓ３０２でＹｅｓ）、図１４の処理は終了する。すなわち、この場合、状態情報の応答は行われない。
【０１０６】
一方、自処理サーバ１０が到達通知を送信済みでない場合（Ｓ３０１でＮｏ）、又は自処理サーバ１０の到達時刻の方が、受信された到達通知に含まれている到達時刻よりも遅い場合（Ｓ３０２でＮｏ）、制御部１３は、並列化Ｗｉｎｄｏｗ１２１をロックする（Ｓ３０３）。続いて、制御部１３は、並列化Ｗｉｎｄｏｗ１２１の状態情報（並列化Ｗｉｎｄｏｗ長、入力イベント数）を、到達通知の送信元の処理サーバ１０へ返信する（Ｓ３０４）。
【０１０７】
続いて、図１３のステップＳ２１２において送信される並列化Ｗｉｎｄｏｗ長の受信側の処理サーバ１０が実行する処理手順について説明する。
【０１０８】
図１５は、並列化Ｗｉｎｄｏｗ長の受信に応じて処理サーバが実行する処理手順の一例を説明するためのフローチャートである。
【０１０９】
並列化Ｗｉｎｄｏｗ長が受信されると、制御部１３は、並列化Ｗｉｎｄｏｗ管理テーブル１２４の並列化Ｗｉｎｄｏｗ長の値を、受信された並列化Ｗｉｎｄｏｗ長に変更する（Ｓ４０１）。続いて、制御部１３は、バッファ１２２内に記憶されているイベントを並列化Ｗｉｎｄｏｗ１２１に投入する（Ｓ４０２）。同期部１４は、変更後の並列化Ｗｉｎｄｏｗ長と入力イベント数とを、並列化Ｗｉｎｄｏｗ長の送信元の処理サーバ１０へ返信する（Ｓ４０３）。
【０１１０】
続いて、図１３のステップＳ２２０の詳細について説明する。図１６は、発火処理の処理手順の一例を説明するためのフローチャートである。
【０１１１】
ステップＳ５０１において、制御部１３は、合計入力イベント数が全体Ｗｉｎｄｏｗ長に一致するか否かを判定する。合計入力イベント数が全体Ｗｉｎｄｏｗ長に一致する場合（Ｓ５０１でＹｅｓ）、同期部１４は、全ての入力イベントを発火対象とすることを示す発火通知を他の処理サーバ１０へ送信する（Ｓ５０２）。続いて、処理部１２は、並列化Ｗｉｎｄｏｗ１２１に記憶されている全てのイベントについて複合イベント処理を実行する（Ｓ５０３）。
【０１１２】
一方、合計入力イベント数が全体Ｗｉｎｄｏｗ長より大きい場合（Ｓ５０１でＮｏ）、同期部１４は、到達時刻後に入力された各イベントの入力時刻の一覧を他の処理サーバ１０から収集する（Ｓ５０４）。
【０１１３】
続いて、制御部１３は、自処理サーバ１０の並列化Ｗｉｎｄｏｗ１２１に記憶されているイベントのうち、入力時刻より後に入力されたイベントの入力時刻の一覧と、他の処理サーバ１０から収集された入力時刻の一覧とを時系列順にソートし、ソート順において全体Ｗｉｎｄｏｗ長に含まれる最後の時刻を特定する（Ｓ５０５）。すなわち、合計入力イベント数が全体Ｗｉｎｄｏｗ長に到達した時刻が特定される。その結果、発火対象とするイベントの範囲を定するための情報が得られる。
【０１１４】
続いて、同期部１４は、特定された時刻を含む発火通知を他の処理サーバ１０に送信する（Ｓ５０６）。続いて、処理部１２は、並列化Ｗｉｎｄｏｗ１２１に記憶されているイベントのうち、特定された時刻以前に入力されたイベントについて複合イベント処理を実行する（Ｓ５０７）。
【０１１５】
続いて、図１３のステップＳ２２１の詳細について説明する。図１７は、一極カウントへの切替処理の処理手順の一例を説明するためのフローチャートである。
【０１１６】
ステップＳ６０１において、転送部１１は、ルーティングテーブル１２５を書き換える。すなわち、他の処理サーバ１０宛のイベントの宛先が自処理サーバ１０宛に書き換えられる。
【０１１７】
続いて、同期部１４は、一極カウントへの切替通知を他の処理サーバ１０へ送信する（Ｓ６０２）。その結果、他の処理サーバ１０においてもルーティングテーブル１２５が書き換えられる。また、他の処理サーバ１０の並列化Ｗｉｎｄｏｗ長が、並列化Ｗｉｎｄｏｗ長余りが０となる値に更新される。続いて、同期部１４は、他の処理サーバ１０から更新前の並列化Ｗｉｎｄｏｗ長余りを受信する（Ｓ６０３）。続いて、制御部１３は、受信した並列化Ｗｉｎｄｏｗ長余りの合計を、並列化Ｗｉｎｄｏｗ１２１の並列化Ｗｉｎｄｏｗ長に割り当てる（Ｓ６０４）。具体的には、並列化Ｗｉｎｄｏｗ管理テーブル１２４における並列化Ｗｉｎｄｏｗ長余りの値に、受信した並列化Ｗｉｎｄｏｗ長余りの合計が加算される。
【０１１８】
上述したように、本実施の形態によれば、合計入力イベント数が全体Ｗｉｎｄｏｗ長に到達している可能性に応じて処理サーバ１０間の同期の頻度が変化する。具体的に当該可能性が高まるにつれて同期の頻度が高くなる。その結果、一定数のイベントが入力されるたびに実行される複合イベント処理が並列分散される場合について実行するタイミングの精度を確保することができる。
【０１１９】
また、同期の頻度が変化することで、各処理サーバ１０においてイベントが入力されるたびに同期が行われる場合に比べて同期の頻度を低下させることができる。その結果、各処理サーバ１０による処理性能の低下を抑制することができる。
【０１２０】
例えば、Ｗｉｎｄｏｗ長＝ＮのＷｉｎｄｏｗについて、処理サーバ１０台数＝Ｍ台で並列化したとする。本実施の形態を適用しない場合、発火タイミングの精度を維持しようとすれば、１イベントが入力される毎に、全処理サーバ１０の状態を確認するために、Ｎ×Ｍ回の通信を行う必要が有る。また、性能を維持しようとして、同期の周期を１秒間隔にした場合、最大で１秒の発火遅れが発生する。
【０１２１】
一方、本実施の形態によれば、いずれかの処理サーバ１０における入力イベント数が並列化Ｗｉｎｄｏｗ長に到達するまで同期は行われないため、各並列化Ｗｉｎｄｏｗに対して均等にイベントが入力された場合においては、性能を維持した上で１回の通信で済む。
【０１２２】
上記より、本実施の形態によれば、発火タイミングの精度と、性能を維持して、「Ｌｅｎｇｔｈ  Ｗｉｎｄｏｗ」の並列分散化を実現することができる。
【０１２３】
なお、Ｗｉｎｄｏｗの属性には、Ｗｉｎｄｏｗ長の他に、スライド幅（長）がある。スライド幅は、Ｗｉｎｄｏｗ長の中で、集計する単位となる。例えば、Ｗｉｎｄｏｗ長＝１００、スライド幅＝１０とするＷｉｎｄｏｗの場合、イベントが１０個入力されたら発火する。本実施の形態では、Ｗｉｎｄｏｗ長＝スライド幅という前提で説明したが、Ｗｉｎｄｏｗ長＜スライド幅の場合において、スライド幅が全体Ｗｉｎｄｏｗ長に置き換えられて本実施の形態が実施されてもよい。
【０１２４】
なお、本実施の形態において、処理サーバ１０は、情報処理装置の一例である。同期部１４は、取得部の一例である。更新部は、制御部１３の一例である。
【０１２５】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１２６】
以上の説明に関し、更に以下の項を開示する。
（付記１）
一定数のイベントが入力されるたびに前記一定数の前記イベントに対して適用する処理を前記一定数が所定の配分数に配分されることにより並列分散処理を行う複数の情報処理装置に含まれる、第１情報処理装置と第２情報処理装置のうちの前記第１情報処理装置に、
前記第１情報処理装置に対する前記イベントの入力数を示す第１入力数が、前記配分数に対して所定の範囲内に到達すると、前記第２情報処理装置に対する前記イベントの前記入力数を示す第２入力数を前記第２情報処理装置から取得し、
前記第１入力数と前記第２入力数との合計と、前記一定数との差分に基づいて、前記第１情報処理装置と前記第２情報処理装置に対する前記配分数を更新すること、
を実行させることを特徴とする複合イベント処理プログラム。
（付記２）
前記配分数の更新後に、前記第２入力数を再取得し、
前記第１入力数と、再取得された前第２入力数の合計が前記一定数を超える場合に、前記差分を記憶部に記憶し、
前記差分を前記記憶部に記憶した後における前記第１入力数が前記第１情報処理装置への配分数に対して所定の範囲内に到達したことに応じて前記取得する処理において取得された前記第２入力数と、前記第１入力数との合計と、前記一定数との差分が、前記記憶部に記憶されている差分未満である場合、前記イベントの入力数のカウントを一元化することを判断すること、
を前記第１情報処理装置に実行させることを特徴とする付記１記載の複合イベント処理プログラム。
（付記３）
前記第１入力数と、前記再取得された前記第２入力数の合計が前記一定数を超える場合に、前記第１情報処理装置又は前記第２情報処理装置に対して入力された前記各イベントを、それぞれの入力時期に基づいてソートし、ソート結果において前記一定数以内に含まれる前記イベントを示す情報を前記第２情報処理装置に通知すること、
を前記第１情報処理装置に実行させることを特徴とする付記２記載の複合イベント処理プログラム。
（付記４）
一定数のイベントが入力されるたびに前記一定数の前記イベントに対して適用する処理を前記一定数が所定の配分数に配分されることにより並列分散処理を行う複数の情報処理装置に含まれる、第１情報処理装置と第２情報処理装置のうちの前記第１情報処理装置であって、
前記第１情報処理装置に対する前記イベントの入力数を示す第１入力数が、前記配分数に対して所定の範囲内に到達すると、前記第２情報処理装置に対する前記イベントの前記入力数を示す第２入力数を前記第２情報処理装置から取得する取得部と、
前記第１入力数と前記第２入力数との合計と、前記一定数との差分に基づいて、前記第１情報処理装置と前記第２情報処理装置に対する前記配分数を更新する更新部と、
を有することを特徴とする情報処理装置。
（付記５）
前記配分数の更新後に、前記第２入力数を再取得する再取得部と、
前記第１入力数と、再取得された前第２入力数の合計が前記一定数を超える場合に、前記差分を記憶する記憶部と、
前記差分を前記記憶部に記憶した後における前記第１入力数が前記第１情報処理装置への配分数に対して所定の範囲内に到達したことに応じて前記取得部によって取得された前記第２入力数と、前記第１入力数との合計と、前記一定数との差分が、前記記憶部に記憶されている差分未満である場合、前記イベントの入力数のカウントを一元化することを判断する判断部と、
を有することを特徴とする付記４記載の情報処理装置。
（付記６）
前記第１入力数と、前記再取得された前記第２入力数の合計が前記一定数を超える場合に、前記第１情報処理装置又は前記第２情報処理装置に対して入力された前記各イベントを、それぞれの入力時期に基づいてソートし、ソート結果において前記一定数以内に含まれる前記イベントを示す情報を前記第２情報処理装置に通知する通知部、
を有することを特徴とする付記５記載の情報処理装置。
（付記７）
一定数のイベントが入力されるたびに前記一定数の前記イベントに対して適用する処理を前記一定数が所定の配分数に配分されることにより並列分散処理を行う第１情報処理装置及び第２情報処理装置と、前記所定の配分数を前記第１情報処理装置及び前記第２情報処理装置に通知する管理装置とを含む情報処理システムであって、
前記第１情報処理装置は、
前記第１情報処理装置に対する前記イベントの入力数を示す第１入力数が、前記配分数に対して所定の範囲内に到達すると、前記第２情報処理装置に対する前記イベントの前記入力数を示す第２入力数を前記第２情報処理装置から取得する取得部と、
前記第１入力数と前記第２入力数との合計と、前記一定数との差分に基づいて、前記第１情報処理装置と前記第２情報処理装置に対する前記配分数を更新する更新部と、
を有することを特徴とする情報処理システム。
（付記８）
一定数のイベントが入力されるたびに前記一定数の前記イベントに対して適用する処理を前記一定数が所定の配分数に配分されることにより並列分散処理を行う複数の情報処理装置に含まれる、第１情報処理装置と第２情報処理装置のうちの前記第１情報処理装置が、
前記第１情報処理装置に対する前記イベントの入力数を示す第１入力数が、前記配分数に対して所定の範囲内に到達すると、前記第２情報処理装置に対する前記イベントの前記入力数を示す第２入力数を前記第２情報処理装置から取得し、
前記第１入力数と前記第２入力数との合計と、前記一定数との差分に基づいて、前記第１情報処理装置と前記第２情報処理装置に対する前記配分数を更新すること、
を実行することを特徴とする複合イベント処理方法。
（付記９）
前記配分数の更新後に、前記第２入力数を再取得し、
前記第１入力数と、再取得された前第２入力数の合計が前記一定数を超える場合に、前記差分を記憶部に記憶し、
前記差分を前記記憶部に記憶した後における前記第１入力数が前記第１情報処理装置への配分数に対して所定の範囲内に到達したことに応じて前記取得する処理において取得された前記第２入力数と、前記第１入力数との合計と、前記一定数との差分が、前記記憶部に記憶されている差分未満である場合、前記イベントの入力数のカウントを一元化することを判断すること、
を前記第１情報処理装置が実行することを特徴とする付記８記載の複合イベント処理方法。
（付記１０）
前記第１入力数と、前記再取得された前記第２入力数の合計が前記一定数を超える場合に、前記第１情報処理装置又は前記第２情報処理装置に対して入力された前記各イベントを、それぞれの入力時期に基づいてソートし、ソート結果において前記一定数以内に含まれる前記イベントを示す情報を前記第２情報処理装置に通知すること、
を前記第１情報処理装置が実行することを特徴とする付記９記載の複合イベント処理方法。
【符号の説明】
【０１２７】
１            情報処理システム
１０ａ        処理サーバ
１０ｂ        処理サーバ
１０ｃ        処理サーバ
１１          転送部
１２          処理部
１３          制御部
１４          同期部
２０          管理サーバ
２１          構成管理部
２２          Ｗｉｎｄｏｗ管理テーブル
２３          並列化Ｗｉｎｄｏｗ管理テーブル
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
２００        ドライブ装置
２０１        記録媒体
２０２        補助記憶装置
２０３        メモリ装置
２０４        ＣＰＵ
２０５        インタフェース装置
１２１        並列化Ｗｉｎｄｏｗ
１２２        バッファ
１２３        Ｗｉｎｄｏｗ管理テーブル
１２４        並列化Ｗｉｎｄｏｗ管理テーブル
１２５        ルーティングテーブル
Ｂ            バス
【図１】
0006638544.tif 000002
【図２】
0006638544.tif 000003
【図３】
0006638544.tif 000004
【図４】
0006638544.tif 000005
【図５】
0006638544.tif 000006
【図６】
0006638544.tif 000007
【図７】
0006638544.tif 000008
【図８】
0006638544.tif 000009
【図９】
0006638544.tif 000010
【図１０】
0006638544.tif 000011
【図１１】
0006638544.tif 000012
【図１２】
0006638544.tif 000013
【図１３】
0006638544.tif 000014
【図１４】
0006638544.tif 000015
【図１５】
0006638544.tif 000016
【図１６】
0006638544.tif 000017
【図１７】
0006638544.tif 000018