(57)【要約】【課題】  エネルギーおよび冷却関連コストを最小限にするためにイベント・ドリブン・システムにおける非集中負配置を対象とする、コンピュータによって実行される方法、コンピュータ・プログラム、およびコンピュータ可読記憶媒体を提供する。【解決手段】  ステートフルおよびステートレス・イベント処理コンポーネントを有するイベント・ドリブン・システム内の複数のノードで複数のタスクによって処理すべきデータ・フローを受信することであって、階層タスク（他のタスクの出力に依存するタスク）と非階層タスク（他のタスクの出力に依存しないタスク）とそれらの混合物からなるグループから複数のタスクが選択されることが含まれる。その現行タスクが他のノードに移行できるノードが静止のために考慮され、負荷分散およびエネルギー効率パラメータならびに静止の予想持続時間を満たすことが静止およびその後の再始動のコストに釣り合った恩恵をもたらす。さらに、タスクを処理するシステム負荷を分散し、冷却コストを削減するために隣接ノードに移行するためのタスクが考慮される。【選択図】  図３
2013502642.tif 000002
【特許請求の範囲】
【請求項１】
イベント・ドリブン・システムにおける非集中負荷分散の方法であって、前記方法が、
ステートフルおよびステートレス・イベント処理コンポーネントを有する前記イベント・ドリブン・システム内の複数のノードで複数のタスクによって処理すべきデータ・フローを受信するステップであって、前記複数のタスクは、他のタスクの出力に依存するタスクである階層タスクと、他のタスクの前記出力に依存しないタスクである非階層タスクと、それらの混合物からなるグループから選択される、ステップと、
各ノードで処理された各タスクおよびその熱特性を含む前記ノードの特性に関する統計値を収集するステップと、
前記収集した統計値を使用し、それに対して１つのタスクを部分的にまたは全体的に転送することができる隣接ノードのリストを作成するステップと、
少なくとも１つのタスクを処理するシステム負荷を分散し、冷却コストを削減するために、前記隣接ノードのリストからターゲット・ノードと呼ばれる隣接ノードに移行するための考慮用のノードにおいて第１の温度を有し、ターゲット・タスクと呼ばれる前記少なくとも１つのタスクを選択するステップと、
それに対して前記少なくとも１つのターゲット・タスクを移行することができ、第２の温度を有する前記ターゲット・ノードを選択するステップと、
前記移行が前記第１の温度を低下させ、前記第２の温度が所定の許容できる熱しきい値未満であるという条件で、前記ターゲット・タスクを前記ターゲット・ノードに移行するステップと、
ターゲット・タスクの移行の回数を管理するために各ノードで負荷交換プロトコルを確立するステップであって、非集中負荷移行が前記イベント・ドリブン・システムにおける全システムの負荷分散につながり、冷却コストを削減する、ステップと
を含む、方法。
【請求項２】
前記少なくとも１つのターゲット・タスクを２つ以上のターゲット・サブタスクに分割することをさらに含む、請求項１記載の方法。
【請求項３】
前記負荷交換プロトコルが、
（ｉ）前記ターゲット・タスクを移行するという決定は振動に至ってはならないことと、
（ｉｉ）単一マシン・サイクルで単一ターゲット・ノードに対して２つ以上のタスクの同時移行が行われてはならないことと、
（ｉｉｉ）単一マシン・サイクルで１つのノードから２つ以上のタスクの同時移行が行われてはならないことと、
（ｉｖ）ターゲット・タスク移行の最終結果が何らかの方法で負荷分散を改善しなければならないこと
を含む、請求項１記載の方法。
【請求項４】
各ノードが、
（ｉ）第１の所定の期間中にすべてのターゲット・タスクがアップストリームまたはダウンストリームのいずれかに移行され、第２の所定の期間後にターゲット・タスク移行の方向を切り替えることができることと、
（ｉｉ）ターゲット・タスクがターゲット・ノードに移行される場合、所定の長さの時間の間、前記移行の前に最も近い隣接ダウンストリーム・ターゲット・タスクを移行することができないことと、
（ｉｉｉ）ターゲット・ノードへの移行後に、所定の長さの時間の間、ターゲット・タスクが前記ターゲット・ノードにとどまらなければならないことと、
（ｉｖ）２つのノードが同時にターゲット・タスクをターゲット・ノードに移行することはできないこと
という負荷交換制約を有する、請求項１記載の方法。
【請求項５】
少なくとも１つのターゲット・タスクをターゲット・ノードに移行し、前記ターゲット・ノード上で前記少なくとも１つのターゲット・タスクを実行するステップと、
前記ターゲット・ノード上での前記少なくとも１つのターゲット・タスクの前記実行に関する統計値を収集するステップと
をさらに含む、請求項１記載の方法。
【請求項６】
静止モードに遷移するために少なくとも１つのノードを選択するステップをさらに含む、請求項１記載の方法。
【請求項７】
イベント・ドリブン・システムにおける非集中負荷分散のためのコンピュータ可読プログラム・コードを有するコンピュータ記録可能記憶媒体を含むコンピュータ・プログラムであって、前記コンピュータ可読プログラム・コードが、
ステートフルおよびステートレス・イベント処理コンポーネントを有する前記イベント・ドリブン・システム内の複数のノードで複数のタスクによって処理すべきデータ・フローを受信するために構成されたコンピュータ可読プログラム・コードであって、他のタスクの出力に依存するタスクである階層タスクと、他のタスクの前記出力に依存しないタスクである非階層タスクと、それらの混合物からなるグループから前記複数のタスクが選択されるコンピュータ可読プログラム・コードと、
各ノードで処理された各タスクおよびその熱特性を含む前記ノードの特性に関する統計値を収集するために構成されたコンピュータ可読プログラム・コードと、
前記収集した統計値を使用し、それに対して１つのタスクを部分的にまたは全体的に転送することができる隣接ノードのリストを作成するために構成されたコンピュータ可読プログラム・コードと、
少なくとも１つのタスクを処理するシステム負荷を分散し、冷却コストを削減するために、前記隣接ノードのリストからターゲット・ノードと呼ばれる隣接ノードに移行するための考慮用のノードにおいて第１の温度を有し、ターゲット・タスクと呼ばれる前記少なくとも１つのタスクを選択するために構成されたコンピュータ可読プログラム・コードと、
それに対して前記少なくとも１つのターゲット・タスクを移行することができ、第２の温度を有する前記ターゲット・ノードを選択するために構成されたコンピュータ可読プログラム・コードと、
前記移行が前記第１の温度を低下させ、前記第２の温度が所定の許容できる熱しきい値未満であるという条件で、前記ターゲット・タスクを前記ターゲット・ノードに移行するために構成されたコンピュータ可読プログラム・コードと、
ターゲット・タスクの移行の回数を管理するために各ノードで負荷交換プロトコルを確立するために構成されたコンピュータ可読プログラム・コードであって、非集中負荷移行が前記イベント・ドリブン・システムにおける全システムの負荷分散につながり、冷却コストを削減するコンピュータ可読プログラム・コードと
を含む、コンピュータ・プログラム。
【請求項８】
前記少なくとも１つのターゲット・タスクを２つ以上のターゲット・サブタスクに分割するために構成されたコンピュータ可読プログラム・コードをさらに含む、請求項７記載のコンピュータ・プログラム。
【請求項９】
前記負荷交換プロトコルが、
（ｉ）前記ターゲット・タスクを移行するという決定は振動に至ってはならないことと、
（ｉｉ）単一マシン・サイクルで単一ターゲット・ノードに対して２つ以上のタスクの同時移行が行われてはならないことと、
（ｉｉｉ）単一マシン・サイクルで１つのノードから２つ以上のタスクの同時移行が行われてはならないことと、
（ｉｖ）ターゲット・タスク移行の最終結果が何らかの方法で負荷分散を改善しなければならないこと
を含む、請求項７記載のコンピュータ・プログラム。
【請求項１０】
各ノードが、
（ｉ）第１の所定の期間中にすべてのターゲット・タスクがアップストリームまたはダウンストリームのいずれかに移行され、第２の所定の期間後にターゲット・タスク移行の方向を切り替えることができることと、
（ｉｉ）ターゲット・タスクがターゲット・ノードに移行される場合、所定の長さの時間の間、前記移行の前に最も近い隣接ダウンストリーム・ターゲット・タスクを移行することができないことと、
（ｉｉｉ）ターゲット・ノードへの移行後に、所定の長さの時間の間、ターゲット・タスクが前記ターゲット・ノードにとどまらなければならないことと、
（ｉｖ）２つのノードが同時にターゲット・タスクをターゲット・ノードに移行することはできないこと
という負荷交換制約を有する、請求項７記載のコンピュータ・プログラム。
【請求項１１】
少なくとも１つのターゲット・タスクをターゲット・ノードに移行し、前記ターゲット・ノード上で前記少なくとも１つのターゲット・タスクを実行するために構成されたコンピュータ可読プログラム・コードと、
前記ターゲット・ノード上での前記少なくとも１つのターゲット・タスクの前記実行に関する統計値を収集するために構成されたコンピュータ可読プログラム・コードと
をさらに含む、請求項７記載のコンピュータ・プログラム。
【請求項１２】
静止モードに遷移するために少なくとも１つのノードを選択するために構成されたコンピュータ可読プログラム・コードをさらに含む、請求項７記載のコンピュータ・プログラム。
【請求項１３】
イベント・ドリブン・システムにおける非集中負荷分散の方法であって、前記方法が、
ステートフルおよびステートレス・イベント処理コンポーネントを有する前記イベント・ドリブン・システム内の複数のノードで複数のタスクによって処理すべきデータ・フローを受信するステップであって、他のタスクの出力に依存するタスクである階層タスクと、他のタスクの前記出力に依存しないタスクである非階層タスクと、それらの混合物からなるグループから前記複数のタスクが選択されるステップと、
各ノードで処理された各タスクに関する統計値を収集するステップと、
前記収集した統計値を使用し、それに対して１つのタスクを部分的にまたは全体的に転送することができる隣接ノードのリストを作成するステップと、
静止モードに遷移するためにドナー・ノードと呼ばれる少なくとも１つのノードを選択するステップと、
前記隣接ノードのリストからターゲット・ノードと呼ばれる隣接ノードに移行するための考慮用の前記ドナー・ノードにおいてターゲット・タスクと呼ばれるタスクを選択するステップと、
それに対して前記ターゲット・タスクを移行することができ、負荷分散品質に関して所定の基準を満たす前記ターゲット・ノードを選択するステップと、
ターゲット・タスクの移行の回数を管理するために各ノードで負荷交換プロトコルを確立するステップであって、非集中負荷移行が前記イベント・ドリブン・システムにおける全システムの負荷分散につながるステップと、
前記ターゲット・タスクを前記ドナー・ノードから前記ターゲット・ノードに移行し、前記ドナー・ノードを静止モードに遷移するステップと
を含む、方法。
【請求項１４】
静止モードに遷移するために少なくとも１つのノードを選択する前記ステップが、
前記ドナー・ノードにおける着信トラフィックおよび静止モード期間の予想持続時間を分析することと、
同様に静止モードに遷移できる他のノードを評価することと、
静止モードへの遷移の前記ドナー・ノードにおける待ち時間および電力／冷却コストを評価することと、
静止モードへの遷移の前記ドナー・ノードにおける電力／冷却の恩恵を評価することと、
静止モードへの遷移の前記恩恵が静止モードへの遷移の前記コストを超える場合に、前記ターゲット・タスクを前記ドナー・ノードから前記ターゲット・ノードに移行し，前記ドナー・ノードを静止モードに遷移すること
を含む、請求項１３記載の方法。
【請求項１５】
前記ターゲット・タスクを２つ以上のターゲット・サブタスク・グループに分割することをさらに含む、請求項１３記載の方法。
【請求項１６】
負荷分散品質に関する前記所定の基準が、
（ｉ）前記ターゲット・ノードが、（ａ）前記ターゲット・タスクを処理する前記ノード、（ｂ）前記ターゲット・タスクにとって親であるタスクを処理するノード、および（ｃ）前記ターゲット・タスクにとって子であるタスクを処理するノードに物理的に接続しなければならないことと、
（ｉｉ）前記ターゲット・ノードが前記ターゲット・タスクを処理するために十分な使用可能負荷およびメモリを備えていなければならないことと、
（ｉｉｉ）前記ターゲット・タスクを通過するデータ・フロー内の物理リンクの数を最小化することと、
（ｉｖ）サイクルを除去することと、
（ｖ）ターゲット・ノードが負の負荷相関係数を備えていなければならないことと、
（ｖｉ）前記ターゲット・タスクを処理する前記ノードおよび前記ターゲット・ノードの移行後使用率が所定の最大しきい値より小さいこと
を含む、請求項１３記載の方法。
【請求項１７】
前記負荷交換プロトコルが、
（ｉ）前記ターゲット・タスクを移行するという決定は振動に至ってはならないことと、
（ｉｉ）単一マシン・サイクルで単一ターゲット・ノードに対して２つ以上のタスクの同時移行が行われてはならないことと、
（ｉｉｉ）単一マシン・サイクルで１つのノードから２つ以上のタスクの同時移行が行われてはならないことと、
（ｉｖ）ターゲット・タスク移行の最終結果が何らかの方法で負荷分散を改善しなければならないこと
を含む、請求項１３記載の方法。
【請求項１８】
各ノードが、
（ｉ）第１の所定の期間中にすべてのターゲット・タスクがアップストリームまたはダウンストリームのいずれかに移行され、第２の所定の期間後にターゲット・タスク移行の方向を切り替えることができることと、
（ｉｉ）ターゲット・タスクがターゲット・ノードに移行される場合、所定の長さの時間の間、前記移行の前に最も近い隣接ダウンストリーム・ターゲット・タスクを移行することができないことと、
（ｉｉｉ）ターゲット・ノードへの移行後に、所定の長さの時間の間、ターゲット・タスクが前記ターゲット・ノードにとどまらなければならないことと、
（ｉｖ）２つのノードが同時にターゲット・タスクをターゲット・ノードに移行することはできないこと
という負荷交換制約を有する、請求項１３記載の方法。
【請求項１９】
前記ターゲット・ノード上での前記ターゲット・タスクの前記実行に関する統計値を収集するステップをさらに含む、請求項１３記載の方法。
【請求項２０】
イベント・ドリブン・システムにおける非集中負荷分散のためのコンピュータ可読プログラム・コードを有するコンピュータ記録可能記憶媒体を含むコンピュータ・プログラムであって、前記コンピュータ可読プログラム・コードが、
ステートフルおよびステートレス・イベント処理コンポーネントを有する前記イベント・ドリブン・システム内の複数のノードで複数のタスクによって処理すべきデータ・フローを受信するために構成されたコンピュータ可読プログラム・コードであって、他のタスクの出力に依存するタスクである階層タスクと、他のタスクの前記出力に依存しないタスクである非階層タスクと、それらの混合物からなるグループから前記複数のタスクが選択されるコンピュータ可読プログラム・コードと、
各ノードで処理された各タスクに関する統計値を収集するために構成されたコンピュータ可読プログラム・コードと、
前記収集した統計値を使用し、それに対して１つのタスクを部分的にまたは全体的に転送することができる隣接ノードのリストを作成するために構成されたコンピュータ可読プログラム・コードと、
静止モードに遷移するためにドナー・ノードと呼ばれる少なくとも１つのノードを選択するために構成されたコンピュータ可読プログラム・コードと、
前記隣接ノードのリストからターゲット・ノードと呼ばれる隣接ノードに移行するための考慮用の前記ドナー・ノードにおいてターゲット・タスクと呼ばれるタスクを選択するために構成されたコンピュータ可読プログラム・コードと、
それに対して前記ターゲット・タスクを移行することができ、負荷分散品質に関して所定の基準を満たす前記ターゲット・ノードを選択するために構成されたコンピュータ可読プログラム・コードと、
ターゲット・タスクの移行の回数を管理するために各ノードで負荷交換プロトコルを確立するために構成されたコンピュータ可読プログラム・コードであって、非集中負荷移行が前記イベント・ドリブン・システムにおける全システムの負荷分散につながるコンピュータ可読プログラム・コードと、
前記ターゲット・タスクを前記ドナー・ノードから前記ターゲット・ノードに移行し、前記ドナー・ノードを静止モードに遷移するために構成されたコンピュータ可読プログラム・コードと
を含む、方法。
【請求項２１】
静止モードに遷移するために少なくとも１つのノードを選択するために構成されたコンピュータ可読プログラム・コードが、
前記ドナー・ノードにおける着信トラフィックおよび静止モード期間の予想持続時間を分析するために構成されたコンピュータ可読プログラム・コードと、
同様に静止モードに遷移できる他のノードを評価するために構成されたコンピュータ可読プログラム・コードと、
静止モードへの遷移の前記ドナー・ノードにおける待ち時間および電力／冷却コストを評価するために構成されたコンピュータ可読プログラム・コードと、
静止モードへの遷移の前記ドナー・ノードにおける電力／冷却の恩恵を評価するために構成されたコンピュータ可読プログラム・コードと、
静止モードへの遷移の前記恩恵が静止モードへの遷移の前記コストを超える場合に、前記ターゲット・タスクを前記ドナー・ノードから前記ターゲット・ノードに移行し，前記ドナー・ノードを静止モードに遷移するために構成されたコンピュータ可読プログラム・コードと
を含む、請求項２０記載のコンピュータ・プログラム。
【請求項２２】
負荷分散品質に関する前記所定の基準が、
（ｉ）前記ターゲット・ノードが、（ａ）前記ターゲット・タスクを処理する前記ノード、（ｂ）前記ターゲット・タスクにとって親であるタスクを処理するノード、および（ｃ）前記ターゲット・タスクにとって子であるタスクを処理するノードに物理的に接続しなければならないことと、
（ｉｉ）前記ターゲット・ノードが前記ターゲット・タスクを処理するために十分な使用可能負荷およびメモリを備えていなければならないことと、
（ｉｉｉ）前記ターゲット・タスクを通過するデータ・フロー内の物理リンクの数を最小化することと、
（ｉｖ）サイクルを除去することと、
（ｖ）ターゲット・ノードが負の負荷相関係数を備えていなければならないことと、
（ｖｉ）前記ターゲット・タスクを処理する前記ノードおよび前記ターゲット・ノードの移行後使用率が所定の最大しきい値より小さいこと
を含む、請求項２０記載のコンピュータ・プログラム。
【請求項２３】
前記負荷交換プロトコルが、
（ｉ）前記ターゲット・タスクを移行するという決定は振動に至ってはならないことと、
（ｉｉ）単一マシン・サイクルで単一ターゲット・ノードに対して２つ以上のタスクの同時移行が行われてはならないことと、
（ｉｉｉ）単一マシン・サイクルで１つのノードから２つ以上のタスクの同時移行が行われてはならないことと、
（ｉｖ）ターゲット・タスク移行の最終結果が何らかの方法で負荷分散を改善しなければならないこと
を含む、請求項２０記載のコンピュータ・プログラム。
【請求項２４】
各ノードが、
（ｉ）第１の所定の期間中にすべてのターゲット・タスクがアップストリームまたはダウンストリームのいずれかに移行され、第２の所定の期間後にターゲット・タスク移行の方向を切り替えることができることと、
（ｉｉ）ターゲット・タスクがターゲット・ノードに移行される場合、所定の長さの時間の間、前記移行の前に最も近い隣接ダウンストリーム・ターゲット・タスクを移行することができないことと、
（ｉｉｉ）ターゲット・ノードへの移行後に、所定の長さの時間の間、ターゲット・タスクが前記ターゲット・ノードにとどまらなければならないことと、
（ｉｖ）２つのノードが同時にターゲット・タスクをターゲット・ノードに移行することはできないこと
という負荷交換制約を有する、請求項２０記載のコンピュータ・プログラム。
【請求項２５】
前記ターゲット・ノード上での前記ターゲット・タスクの前記実行に関する統計値を収集するために構成されたコンピュータ可読プログラム・コードをさらに含む、請求項２０記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ソフトウェアによって実行される複数のタスクにより複数のノードを使用するデータ・ストリーム処理に関し、詳細には、エネルギー・コストを削減するという目標で、ターゲット・ノードと呼ばれる可能なノードのサブセット上にタスクを集中させ、負荷分散品質（予想エンドツーエンド・スループット時間など）に関して所定の基準を満たし、経済対策としてタスクのない他のノードを静止させることができることによる負荷分散に関する。
【背景技術】
【０００２】
インターネット接続およびネットワーク接続のセンサ・デバイスの急増により、多数のオンライン・ソースから入手可能なデジタル情報の割合が増加している。これらのオンライン・ソースは、データ・ストリームの形で絶え間なくデータ（たとえば、ニュース項目、金融データ、センサ表示値、インターネット・トランザクション記録など）を発生し、ネットワークに提供している。データ・ストリーム処理装置は、典型的に、これらのデータ・ストリームを受信またはモニターし、これを処理して使用可能なフォーマットで結果を生み出すようにネットワーク内に実装される。たとえば、データ・ストリーム処理装置は、たとえば、結果のリストを生成するかまたは相互に確証するために、２つ以上のデータ・ストリームからの（たとえば、２つ以上のニュース・ソースからの）関連データ項目を選別し、集約または評価する結合演算を実行するように実装することができる。
【０００３】
しかし、典型的なデータ・ストリームの入力速度は難題を提示している。データ・ストリーム処理装置はデータ・ストリームが入力される際の、ときに散発的で予測不能な速度を制御できないので、特に速度急上昇中にデータ・ストリーム処理装置が容量以上に負荷がかかることは珍しいことではない。典型的なデータ・ストリーム処理装置は、データ・ストリームを任意にドロップする（たとえば、データ・ストリームの受信を辞退する）ことにより、このようなローディング問題に対処する。これによりローディングが削減されるが、この戦略の任意性の結果、予測不能かつ最適とは言えないデータ処理結果が発生する傾向がある。というのは、関連性のないデータを含むデータ・ストリームが保持され処理される一方で、有用なデータを含むデータ・ストリームが気付かずにドロップされる可能性があるからである。
【０００４】
イベント・ドリブン・システム（event-driven system）における負荷分散のための既知の解決策の大部分では、イベント処理コンポーネントがステートレス（stateless）であると想定する。負荷分散のためにステートフル演算子（stateful operator）を移行することは困難かつ費用のかかることなので、ステートフル演算子をターゲットにする既知の解決策はごくわずかである。ステートフル演算子を移行するために、すべてのデータ・ストリーム処理を停止しなければならず、すべての必要な状態を移行しなければならず、それに応じてすべてのイベント・ルーティング・パスを更新しなければならない。さらに、これらの解決策のほとんどは集中型である。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Ｘｉｎｇ，ＩＣＤＥ’０５
【発明の概要】
【発明が解決しようとする課題】
【０００６】
マシン・クラスタによって作業負荷を分散できる場合、本発明者によって提案される異なる戦略は、複数のノードを使用して作業負荷を処理しようと試みることである。データ・ストリーム量が低下する期間中にこのような戦略が使用されている場合、より少ないノードにタスクを戻し、いくつかのノードを全体的に静止するという戦略は、電力コストおよび冷却コストを低下させることができる。
【課題を解決するための手段】
【０００７】
以上および以下に記載した通り、本発明の様々な利点および目的は、本発明の第１の態様により、イベント・ドリブン・システムにおける非集中負荷分散（decentralized load distribution）の方法を提供することによって達成され、この方法は、ステートフルおよびステートレス・イベント処理コンポーネントを有するイベント・ドリブン・システム内の複数のノードで複数のタスクによって処理すべきデータ・フローを受信するステップであって、他のタスクの出力に依存するタスクである階層タスクと、他のタスクの出力に依存しないタスクである非階層タスクと、それらの混合物からなるグループから複数のタスクが選択されるステップと、各ノードで処理（host）された各タスクおよびその熱特性を含むノードの特性に関する統計値を収集するステップと、収集した統計値を使用し、それに対して１つのタスクを部分的にまたは全体的に転送することができる隣接ノードのリストを作成するステップと、少なくとも１つのタスクを処理するシステム負荷を分散し、冷却コストを削減するために、隣接ノードのリストからターゲット・ノードと呼ばれる隣接ノードに移行するための考慮用のノードにおいて第１の温度を有し、ターゲット・タスクと呼ばれる少なくとも１つのタスクを選択するステップと、それに対して少なくとも１つのターゲット・タスクを移行することができ、第２の温度を有するターゲット・ノードを選択するステップと、その移行が第１の温度を低下させ、第２の温度が所定の許容できる熱しきい値未満であるという条件で、ターゲット・タスクをターゲット・ノードに移行するステップと、ターゲット・タスクの移行の回数を管理するために各ノードで負荷交換プロトコルを確立するステップであって、非集中負荷移行がイベント・ドリブン・システムにおける全システムの負荷分散につながり、冷却コストを削減するステップとを含む。
【０００８】
本発明の第２の態様により、イベント・ドリブン・システムにおける非集中負荷分散のためのコンピュータ可読プログラム・コードを有するコンピュータ記録可能記憶媒体を含むコンピュータ・プログラム（computer program product）が提供され、このコンピュータ可読プログラム・コードは、ステートフルおよびステートレス・イベント処理コンポーネントを有するイベント・ドリブン・システム内の複数のノードで複数のタスクによって処理すべきデータ・フローを受信するために構成されたコンピュータ可読プログラム・コードであって、他のタスクの出力に依存するタスクである階層タスクと、他のタスクの出力に依存しないタスクである非階層タスクと、それらの混合物からなるグループから複数のタスクが選択されるコンピュータ可読プログラム・コードと、各ノードで処理された各タスクおよびその熱特性を含むノードの特性に関する統計値を収集するために構成されたコンピュータ可読プログラム・コードと、収集した統計値を使用し、それに対して１つのタスクを部分的にまたは全体的に転送することができる隣接ノードのリストを作成するために構成されたコンピュータ可読プログラム・コードと、少なくとも１つのタスクを処理するシステム負荷を分散し、冷却コストを削減するために、隣接ノードのリストからターゲット・ノードと呼ばれる隣接ノードに移行するための考慮用のノードにおいて第１の温度を有し、ターゲット・タスクと呼ばれる少なくとも１つのタスクを選択するために構成されたコンピュータ可読プログラム・コードと、それに対して少なくとも１つのターゲット・タスクを移行することができ、第２の温度を有するターゲット・ノードを選択するために構成されたコンピュータ可読プログラム・コードと、その移行が第１の温度を低下させ、第２の温度が所定の許容できる熱しきい値未満であるという条件で、ターゲット・タスクをターゲット・ノードに移行するために構成されたコンピュータ可読プログラム・コードと、ターゲット・タスクの移行の回数を管理するために各ノードで負荷交換プロトコルを確立するために構成されたコンピュータ可読プログラム・コードであって、非集中負荷移行がイベント・ドリブン・システムにおける全システムの負荷分散につながり、冷却コストを削減するコンピュータ可読プログラム・コードとを含む。
【０００９】
本発明の第３の態様により、イベント・ドリブン・システムにおける非集中負荷分散の方法が提供され、この方法は、ステートフルおよびステートレス・イベント処理コンポーネントを有するイベント・ドリブン・システム内の複数のノードで複数のタスクによって処理すべきデータ・フローを受信するステップであって、他のタスクの出力に依存するタスクである階層タスクと、他のタスクの出力に依存しないタスクである非階層タスクと、それらの混合物からなるグループから複数のタスクが選択されるステップと、各ノードで処理された各タスクに関する統計値を収集するステップと、収集した統計値を使用し、それに対して１つのタスクを部分的にまたは全体的に転送することができる隣接ノードのリストを作成するステップと、静止モード（quiescent mode）に遷移するためにドナー・ノード（donor node）と呼ばれる少なくとも１つのノードを選択するステップと、隣接ノードのリストからターゲット・ノードと呼ばれる隣接ノードに移行するための考慮用のドナー・ノードにおいてターゲット・タスクと呼ばれるタスクを選択するステップと、それに対してターゲット・タスクを移行することができ、負荷分散品質に関して所定の基準を満たすターゲット・ノードを選択するステップと、ターゲット・タスクの移行の回数を管理するために各ノードで負荷交換プロトコルを確立するステップであって、非集中負荷移行がイベント・ドリブン・システムにおける全システムの負荷分散につながるステップと、ターゲット・タスクをドナー・ノードからターゲット・ノードに移行し、ドナー・ノードを静止モードに遷移するステップとを含む。
【００１０】
本発明の第４の態様により、イベント・ドリブン・システムにおける非集中負荷分散のためのコンピュータ可読プログラム・コードを有するコンピュータ記録可能記憶媒体を含むコンピュータ・プログラムが提供され、このコンピュータ可読プログラム・コードは、ステートフルおよびステートレス・イベント処理コンポーネントを有するイベント・ドリブン・システム内の複数のノードで複数のタスクによって処理すべきデータ・フローを受信するために構成されたコンピュータ可読プログラム・コードであって、他のタスクの出力に依存するタスクである階層タスクと、他のタスクの出力に依存しないタスクである非階層タスクと、それらの混合物からなるグループから複数のタスクが選択されるコンピュータ可読プログラム・コードと、各ノードで処理された各タスクに関する統計値を収集するために構成されたコンピュータ可読プログラム・コードと、収集した統計値を使用し、それに対して１つのタスクを部分的にまたは全体的に転送することができる隣接ノードのリストを作成するために構成されたコンピュータ可読プログラム・コードと、静止モードに遷移するためにドナー・ノードと呼ばれる少なくとも１つのノードを選択するために構成されたコンピュータ可読プログラム・コードと、隣接ノードのリストからターゲット・ノードと呼ばれる隣接ノードに移行するための考慮用のドナー・ノードにおいてターゲット・タスクと呼ばれるタスクを選択するために構成されたコンピュータ可読プログラム・コードと、それに対してターゲット・タスクを移行することができ、負荷分散品質に関して所定の基準を満たすターゲット・ノードを選択するために構成されたコンピュータ可読プログラム・コードと、ターゲット・タスクの移行の回数を管理するために各ノードで負荷交換プロトコルを確立するために構成されたコンピュータ可読プログラム・コードであって、非集中負荷移行がイベント・ドリブン・システムにおける全システムの負荷分散につながるコンピュータ可読プログラム・コードと、ターゲット・タスクをドナー・ノードからターゲット・ノードに移行し、ドナー・ノードを静止モードに遷移するために構成されたコンピュータ可読プログラム・コードとを含む。
【００１１】
新規かつ本発明に特有の要素であると考えられている本発明の特徴は、特許請求に範囲に詳細に明記されている。図は例示のためにのみ示されており、一定の縮尺で描かれているわけではない。しかし、本発明自体は、構成および動作方法のいずれについても、添付図面に併せて以下に示されている詳細な説明を参照することによって最もよく理解することができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の模範的なハードウェア環境を示すブロック図である。
【図２】データ・プロデューサ（data producer）、データを処理するためのタスク、およびデータ・コンシューマ（data consumer）を含む、従来のタスク・フローを示す図である。
【図３】従来の負荷分散問題を示す図である。
【図４】本発明によるコンピュータによって実行される方法の好ましい一実施形態を示す流れ図である。
【図５】ターゲット・ノードの物理接続に関する基準を示す図である。
【図６】ノード間の物理接続を最小限にするという概念を示す図である。
【図７】タスク・フロー内のサイクルを回避するという概念を示す図である。
【図８】タスクを分割する１つの方法を示す図である。
【図９】一度に１つのタスクを移動するという概念を示す図である。
【図１０】少なくとも１つのノードが静止モードになる可能性がある本発明の実施形態を示す図である。
【図１１】少なくとも１つのノードが静止モードになる可能性がある本発明の実施形態を示す図である。
【図１２】少なくとも１つのノードが静止モードになる可能性がある本発明の実施形態を示す図である。
【図１３】少なくとも１つのノードが静止モードになる可能性がある本発明の実施形態を示す図である。
【発明を実施するための形態】
【００１３】
本発明のこの実施形態が実行されるプログラム環境は、複数の接続された汎用コンピュータまたはハンドヘルド・コンピュータなどの専用デバイスを実例として取り入れている。図１は、２つのコンピュータ・システム２２−１、２２−２が存在する本発明の模範的なハードウェア環境を示すブロック図である。しかし、本発明を実践する際に、通常、３つ以上のコンピュータ・システムが企図される可能性があることを理解されたい。また、コンピュータ・システムは、以下、マシンまたはノードと呼ぶ場合もある。本発明は、典型的に、マイクロプロセッサ手段、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、およびその他のコンポーネントからなる中央演算処理装置（ＣＰＵ）１０−１、１０−２を含むコンピュータ・システム２２−１、２２−２を使用して実装される。このコンピュータは、パーソナル・コンピュータ、メインフレーム・コンピュータ、またはその他のコンピューティング・デバイスにすることができる。ハード・ディスク、フレキシブル・ディスク・ドライブ、ＣＤ−ＲＯＭドライブ、磁気テープ・ドライブ、またはその他の記憶装置などの何らかのタイプの記憶装置１４−１、１４−２は、ＣＰＵ１０−１、１０−２に常駐するかまたはその周辺に存在することになる。また、ＣＰＵ１０−１、１０−２には、そのデータ単位がバイトであり、ＲＡＭとも呼ばれる固定量の内部メモリも常駐する。
【００１４】
一般的に言えば、本発明のソフトウェア実装例である図１のプログラム１２−１、１２−２は、上述の記憶装置１４−１、１４−２の１つなどのコンピュータ可読媒体に有形に具現化される。プログラム１２−１、１２−２は、ＣＰＵ１０−１、１０−２のマイクロプロセッサによって読み取られ実行されると、本発明の諸ステップまたは諸要素を実行するために必要な諸ステップをＣＰＵ１０−１、１０−２に実行させる命令を含む。プログラム１２−１、１２−２はイベント管理および負荷分散管理ランタイムに呼び出すことができる。
【００１５】
プログラム１２−１、１２−２は１つまたは複数のデータ・ストリーム処理装置１６−１、１６−２をロードし、始動し、制御し、進めるものであり、そのデータ・ストリーム処理装置は、サブストリーム１８−１、１８−２で構成することができる入力データ・ストリーム１８を処理し、出力サブストリーム２０−１、２０−２で構成することができる出力データ・ストリーム２０を生成する。
【００１６】
コンピュータ・システム２２−１、２２−２は物理リンク２１によってまとめてリンクすることもできる。
【００１７】
また、本発明の技法は様々な技術を使用して実装できることも理解されたい。たとえば、本明細書に記載されている方法は、コンピュータ・システム上で実行されるソフトウェアに実装するか、マイクロプロセッサの組み合わせまたはその他の特殊設計の特定用途向け集積回路、プログラマブル論理装置、あるいはこれらの様々な組み合わせのいずれかを使用してハードウェアに実装することができる。特に、本明細書に記載されている方法は、適切なコンピュータ可読媒体上に常駐する一連のコンピュータ実行可能命令によって実装することができる。適切なコンピュータ可読媒体としては、揮発性（たとえば、ＲＡＭ）あるいは不揮発性（たとえば、ＲＯＭ、ディスク）またはその両方のメモリ、搬送波、ならびに伝送媒体（たとえば、導線、同軸ケーブル、光ファイバ・メディア）を含むことができる。模範的な搬送波は、ローカル・ネットワーク、インターネットなどの公的にアクセス可能なネットワーク、または何らかのその他の通信リンクに沿ってデジタル・データ・ストリームを伝達する電気信号、電磁信号、または光信号の形を取ることができる。
【００１８】
さらに、本発明はクラウド・コンピューティング環境で実装することもできる。クラウド・コンピューティングとは、動的にスケーラブルであり、しばしば仮想化されたリソースがインターネットまたは企業の内部ネットワークによりサービスとして提供される、コンピューティング・スタイルの１つである。ユーザは、それらをサポートする「クラウド内」の技術インフラストラクチャについて知識、経験、または制御権を有する必要がない。クラウド・コンピューティング・サービスは、通常、Ｗｅｂブラウザからアクセスされる共通ビジネス・アプリケーションをオンラインで提供し、ソフトウェアおよびデータはサーバ上に保管されるが、データ・ストリーム・イベント処理も「クラウド」の一部であるノードの一部または全部で実行できるであろう。クラウド内の物理リソースは非常に地理的に分散される可能性があるので、異なるマシンへの電力のコストが劇的に異なるものになり、本発明は、データ・ストリーム量が大きくない場合でも、クラウド構成においてよりアクティブに使用される可能性がある。
【００１９】
本発明は、それらから除去すべき負荷を保証するノードとして所定のおよびユーザ設定の基準を満たすドナー・ノードから、負荷を受信することができるノードとしてそれらを認定する所定のおよびユーザ設定の基準を満たす１つまたは複数のターゲット・ノードに、移行すべき適切なタスクとしてそれらを認定する所定のおよびユーザ設定の基準を満たす１つまたは複数のタスクを移行することにより、イベント・ドリブン・システムにおける非集中負荷分散が行われる、方法、コンピュータ・プログラム、およびマシンによって読み取り可能なプログラム記憶装置に関係し、このエンドツーエンド移行は好ましくは、ネットワーク内の全負荷が同じままであるかまたは増加しない所定の基準を満たす。この所定の基準は、本方法によって初期設定され、ユーザによって構成可能である。それ自体からタスク移行を開始するためのノード、移行のために考慮されるタスク、移行されたタスクの受信側として働くためのノード、および移行すべきかどうかの判断を認定する基準については本明細書に記載されている。この基準は、バックグラウンドでノードが定期的に収集する実世界の属性（たとえば、使用される実際のエネルギーまたは入口温度などのセンサ表示値）を含む統計値を頼りにし、この負荷移行意思決定プロセスは進行中であり、ユーザ定義の間隔後にも定期的に実行され、ネットワーク内のノードへのタスクの割り当てにおける変化に至る場合もあれば、至らない場合もある。
【００２０】
本発明は、タスク・フロー内のタスクを処理するノード間の負荷分散のための動的かつ非集中のコンピュータによって実行される方法に関係し、あるタスクの処理によるデータは結果タスク・フロー内の次のタスクへの入力データとして働く場合もある。コンピュータによって実行されるこの方法は、データ・センタ内のノードまたは地理的に分散されるノード、単一マシン上の複数のプロセッサ、あるいはクラウド・コンピューティング環境に適用可能である。コンピュータによって実行されるこの方法のいくつかの目的は、（１）ノードが過負荷状態になることを防止するため、（２）過負荷ノードから負荷を分散するため、（３）エンドツーエンド待ち時間を最小限にすることなど、アプリケーションの何らかのサービス品質要件を維持するため、（４）電力／冷却コストを削減するために、負荷を分散することである。
【００２１】
何らかの定義上の背景は本発明を理解する際に有用になるであろう。「ノード」とは、個々のマシン、マルチプロセッサ・マシン上の単一プロセッサ、またはそれが数値を計算するものであるかまたは電力を発生しコンピュータが接続されたエンジンであるかにかかわらず何らかの処理を実行する物理エンティティを指す。ノードは、データ・センタ内にあるかまたは地理的に分散される可能性がある。本発明では、ノードは１つまたは複数のタスクを処理するか、あるいはいかなるタスクも処理しない。タスクの処理は、あるタスクの出力が他のタスクへの入力として働くように本質的に階層的である可能性がある。加えて、ノードは、ある時点でデータ・フローの一部ではないタスクを実行している可能性があるが、その後、データ・フローの一部としてタスクを実行する。階層内の第１のタスクは、何らかの入力ソースにより受信したデータについて処理を実行する。タスクの処理の多くは本質的に階層的なものになるが、所与のアプリケーションに関するいくつかのタスクは本質的に非階層的なものになる可能性があるので、必ず階層的なものになるわけではない。ノードによって受信されたデータは入力イベントと呼ばれ、処理の結果としてノードによって生成されるデータは導出イベントと呼ばれる。階層処理を必要とする可能性のあるデータの例としては、少し例を挙げれば、金融市場における株取引、ＲＦＩＤタグ・リーダによって推論されるイベント、ワイヤレス・センサから伝送された温度表示値、通信チャネル上のソフトウェアをモニターすることによって検出された侵入者検出イベント、コーヒー自動販売機のディスペンサの補給品状況を含む。
【００２２】
図面をより詳細に参照すると、図２は、本発明が適用可能なタスクを処理するマシンのネットワークの一例を示している。データ・プロデューサはデータのソースを表している。データの例としては、株式相場、コーヒー自動販売機の障害警報を含む。データ・コンシューマは、このデータについて実行された処理の結果に関心があるエンティティを表している。コンシューマの例としては、コーヒー自動販売機を修理する会社、または所与の日に値上がり率が最も高い上位１０銘柄の株に関心がある個人を含む。
【００２３】
タスク・フローはタスクの処理のシーケンスとして定義される。タスクの処理は、あるタスクの処理によるデータ結果がタスク・フロー内の次のタスクへの入力データとして働く階層的なものにすることができる。タスクは、データがそのタスクを通過して他のタスクに到達する前に完了する必要はない。さらに、いくつかのタスクは非階層的なものにすることができ、他のタスクからのデータを必要としない。いくつかのタスクは時には他のタスクからのデータ入力を必要とする場合があり、必要としない場合もある。図２ではタスクＦ１、Ｊ１、およびＪ２は共通タスク・フローにある。同様に、タスクＦ３およびＪ２は他のタスク・フローの一部である。
【００２４】
アップストリーム・ノードは、所与のノードｎに関して、ノードｎ上で処理されるタスクの親であるタスクを処理するノードとして定義される。特に、親タスクはタスク・フロー内で子タスクより先行する。親タスクは、直接または仲介を経由して、ノードｎ上のタスクのための入力の一部になる出力を生成する。図２では、たとえば、タスクＦ１を処理するノードＭ４は、タスクＪ２を処理するノードＭ５に関してアップストリーム・ノードである。ダウンストリーム・ノードは、所与のノードｎに関して、ノードｎによって処理されるタスクの子を処理するノードとして定義される。図２では、たとえば、タスクＪ２を処理するノードＭ５は、タスクＪ１を処理するノードＭ４に関してダウンストリーム・ノードである。
【００２５】
タスク・フロー内の第１のタスクの機能は、１組のメッセージ・ソースであるプロデューサからデータを受信することである。コンシューマは、データに対するタスクの処理の最終結果に関心がある。図２は、タスク・フロー内のプロデューサ（Ｐ１〜Ｐ５）およびコンシューマ（Ｃ１〜Ｃ４）の一例を示している。タスクは、あるイベントについて実行した後に状態を保持する場合もあれば、いずれの状態も保持しない場合がある。状態を保持するタスクはステートフル・タスクという。状態を保持しないものは、前の入力イベントが何であったか、またはそのうちのいくつが存在したか、または時間の経過につれてそれらがどのように到着したか、またはこのタスクの前の出力イベントが何であったかにかかわらず、新しい入力イベントについてほぼ同じ長さの時間で同じ導出イベントを出力するであろう。ステートレス・タスクは、それらが以前どのデータを受信したかまたはそれらが以前どのデータを生成したかとは無関係に動作する。ステートフル・タスクの例としては以下のものを含む。
金融データ・ストリームを合体するための結合演算子
地震データをモニターするための集約演算子
軍事監視のための信号処理演算子
イベントｅ１の直後にイベントｅ２が発生したことを検出するシーケンス演算子
個人が１日に行った購入後の売却操作（sell-after-buy operation）の回数をカウントするカウント演算子
【００２６】
状態を保持しないタスクはステートレス・タスクという。ステートレス・タスクの例としては以下のものを含む。
距離をフィートからメートルへ変換するかまたは温度を華氏から摂氏に変換するなど、計測系を変換するタスク
その株式に言及する際に企業の証券取引所証券コードを正式名称に変換するなど、識別記号を他の形式の識別記号で置換するタスク
たとえば、米国またはカナダの州名の略語が５０通りの２文字の米国州コードのうちの１つであるかカナダの州名の略語のうちの１つであるかに応じて、米国またはカナダの国名フィールドを追加するなど、メッセージ内の他のフィールドの関数であるかまたは定数であるメッセージにフィールドを追加するタスク
図書館の図書貸出日を、常に貸出日の３週間後である図書返却期限で置換するなど、定数でメッセージ・フィールドを調整するタスク
【００２７】
タスクはしばしば演算子と呼ばれる。「タスク」と「演算子」は交換可能な用語であり、どちらも本明細書全体を通して使用されることを理解されたい。
【００２８】
次に図３を参照すると、負荷分散問題が示されている。図３のノードＭ１２およびＭ１３など、いずれの処理も実行していないノードに負荷を移行する場合もあれば、タスクＦ３およびＪ２を処理しているノードＭ５など、他のタスクをすでに処理しているノードに負荷を移行する場合もある。図３は、以下のような動的負荷分散問題の特性も示している。
ノードが停止する可能性があるか、またはランタイム中に新しいノードがネットワークに追加される可能性がある。
データ転送速度が任意に変化する可能性がある。
タスクが終了し、タスク集合から除去される可能性があるか、またはいつでも新しいタスクが追加される可能性がある。
ランタイム中にタスクが２つ以上の部分に分割される可能性がある。
負荷を移行すべきかどうかを考慮するときに、コンピュータによって実行されるこの方法では、単一タスク、タスク・グループ、または分割タスクを負荷と見なす。
【００２９】
コンピュータによって実行されるこの方法では、タスクが状態を保持するかどうかを考慮に入れるが、これはそのタスクを処理するノードのメイン・メモリ内またはディスク上に保管されるデータの形である可能性がある。ステートフル・タスクを移行することを決定するときに、コンピュータによって実行されるこの方法では、移行すべきステートフル・タスク（ターゲット・タスク）を処理するドナー・ノードと、ステートフル・タスクを受信する受信側ノード（ターゲット・ノード）との間のデータ輸送リンクの速度を考慮に入れる。
【００３０】
また、コンピュータによって実行されるこの方法では、サイクルを防止し、アプリケーションのエンドツーエンド応答時間を最小限にするなど、アプリケーションのサービス品質要件を満たすために、タスクを移行する前のタスク間のデータ・フローも考慮する。
【００３１】
また、コンピュータによって実行されるこの方法では、その作業負荷が特定のパターンで頂点に達したときにノードが過熱するのを防止するために、タスクを移行する前にタスクによって予想される作業負荷も考慮する。予想作業負荷情報は、ノードが記録し計算する統計値から入手可能である。ノードは何らかの統計分析を実行することができ、それによりノードはデータ到着の平均および分散（variance）を計算し、曲線の当てはめ（curve fitting）を使用して入力到着イベントの分散を提案することができる。この分析を基礎として、ノードは、その入力データの到着率のパターンを判断し、それが静止モードになり得る期間の持続時間を決定することができる。
【００３２】
どの負荷を分散するかを決定する間に、コンピュータによって実行されるこの方法では、異なるタスクの負荷相関同士の関係も考慮し、これは負荷相関係数という。この負荷相関係数は、コンピュータによって実行されるこの方法が、そのノードによって処理される他のタスクと同時にその負荷が頂点に達するノードからターゲット・タスクを輸送し、ターゲット・タスクの負荷と同時にその負荷が頂点に達しないタスクを処理するノードにターゲット・タスクを移動することを保証する。
【００３３】
ターゲット・タスクを移行する前に、コンピュータによって実行されるこの方法は、何らかの仮定の場合に、ドナー・ノードおよびターゲット・ノードの移行後の使用率を推定することにより、ターゲット・タスクの移行がドナー・ノードおよびターゲット・ノードにとって良い決定になるかどうかを考慮する。使用率に加えて、本発明の一実施形態におけるコンピュータによって実行されるこの方法は、ドナー・ノードおよび受信側ノードの移行後の入口温度も推定することができ、したがって、受信側ノードの温度を許容できるしきい値以上に上昇させずにドナー・ノードの温度を低下させると思われる負荷移行を擁護することにより冷却コストの削減を提供することができる。
【００３４】
単一ターゲット・タスクを移行することに加えて、コンピュータによって実行されるこの方法は、ターゲット・タスクを分割できる複数の可能な方法を考慮し、したがって、ターゲット・タスクの１つまたは複数の部分を移行することを考慮する。
【００３５】
コンピュータによって実行されるこの方法は非集中方法であるので、ローカル負荷移行決定が相互に矛盾しないことを保証するためにすべてのノードが従わなければならない負荷分散に関するプロトコルが定義される。
【００３６】
移行を考慮する前に、本発明の一実施形態におけるコンピュータによって実行されるこの方法は、エネルギーを節約するために、ネットワーク内の特定のノードが静止モードに遷移しなければならないかどうかも考慮する。いつ静止モードに遷移すべきかに関する決定は、ノードが入力データについて処理を実行しているランタイム中、ならびに負荷分散決定を行う前または後のいつでも動的に行うことができる。負荷移行決定および静止決定は、矛盾する結果をもたらす可能性があるので、同時に行ってはならない。したがって、一方の決定（負荷移行または静止）はもう一方（静止または負荷移行）が完了する前または後に考慮することができる。しかし、ノードを静止するという決定が行われると、そのノード上で実行されているどのタスクにもいかなる追加の入力も送信されず、その結果、これらのタスクがその出力を生成すると、この静止はイベント・フローのどの部分も「オフライン」で要することはない。タスクが実行することになる新しいノードは、このタスクについてすべての追加の入力を受信する。ステートレス・タスクの場合、新しいタスクは、古いタスクがその入力を終了する前に次の入力を処理し始める可能性があるが、ステートフル・タスクの場合、新しいタスクは、古いノードからのタスク状態が完全に転送されるまで次の入力イベントを処理し始めてはならない。この転送は負荷交換プロトコル（以下に記載する）の一部である。
【００３７】
静止モードに遷移するプロセス中に、いくつかのタスクは完了途中で移行することができる。これは、それらのタスクが移動しているときに、すでにいくつかの出力を生成したが、今後、その新しい位置でそれ以上の出力を生成する可能性があることを意味する。
【００３８】
コンピュータによって実行されるこの方法は動的であり、いつ静止モードに遷移すべきかに関する決定は、ノードが入力データについて処理を実行しているランタイム中にいつでも動的に行うことができることを示している。静止モードに遷移するというノードの決定は、以下のものに関する予備的な１組の決定を必然的に伴う。
どのくらい長い間、静止モードであるべきか
静止状態にある期間の予想作業負荷
タスクを中断し、それを後で処理すべきかどうか、あるいは静止モード期間中により効率的に処理できるより効率的なノードにタスクを移行すべきかどうか
他のどの隣接ノードが静止モードに遷移できるか
【００３９】
これらの初期考慮に続いて、静止モードへの遷移の恩恵およびコストの詳細な分析が行われる。このような遷移のコストは以下のものを含む。
（１）静止モードに遷移するノードの電力コスト、（２）静止モードからアクティブ・モードに遷移して戻ること、（３）このノードから移行したタスクを受信し、これらのタスクを受信した結果として、静止モードからアクティブ・モードに遷移する可能性のある任意の他のノードの電力コストを含む遷移に関連する全電力コスト
タスク処理を停止し、適用可能であれば、新しいターゲット・マシン上でそれを再開するための時間
ターゲット・マシンに移行すべきタスクに関連する任意の状態を移行するコスト
状態を戻し、タスクを処理する元のホスト・マシン上で処理を再開するための時間
【００４０】
静止モードへの遷移の恩恵としては以下のものを含む。
静止モードへの遷移によりエネルギー節約に対して予定される影響ならびに静止モードで費やされる時間の長さ
ノードを静止モードにし、タスクを適切な受信側ノードに移行した結果得られるアプリケーションのサービス品質の改善
【００４１】
静止モードへの遷移の恩恵がコストより重要である場合、ノードは遷移を開始する。静止モードへの遷移に関するコンピュータによって実行される方法は、非集中方法として実装することができる。代わって、ネットワーク全体におけるリソースの可用性に関する知識を支配するセントラル・コントローラは、集中方式で静止モード遷移プロセスを制御することができる。
【００４２】
次に、本発明によるコンピュータによって実行される方法について詳細に論ずる。このプロセスは、論ずべきプロセス・ステップを各ノードが実践するという点で非集中型である。本発明によるコンピュータによって実行される方法を示す流れ図は図４に示されている。
【００４３】
ステップ１：入力データの受信
コンピュータによって実行される方法の第１のステップ（ブロック３０）は、ステートフルおよびステートレス・イベント処理コンポーネントを有するイベント・ドリブン・システム内の複数のノードで複数のタスクによって処理すべきデータ・フローを受信することを含む。この複数のタスクは、階層タスク、非階層タスク、またはこれらの組み合わせにすることができる。
【００４４】
ステップ２：ノードによる統計値の収集
コンピュータによって実行される方法の次のステップでは、各ノードはそれが処理している各イベント処理コンポーネント（タスクまたは演算子ともいう）について何らかの統計値を定期的に収集する（ブロック３２）。これらの統計値としては以下のものを含む。
タスクあたりの負荷：ユーザがシステムに関連して提供する定義が何であれ、これは、タスクあたりのＣＰＵ使用率またはタスクごとに評価されたルールの数として定義することができる。
タスクによって占有されるメモリ：タスクに関連するすべての状態が（ディスク上ではなく）メモリ内に常駐していると想定される。タスクを移行する場合、このメモリも輸送する必要がある。
ターゲット・タスクを処理しているノードと他のノードを接続するリンクのネットワーク使用量：ネットワーク使用量（ｕ（ｌ））は、所与の瞬間にリンクｌにより輸送中であるデータの量である。
【数１】
2013502642.tif 000003
ここで、Ｆはリンクｌによるイベント・フローの集合であり、ＤＲf（ｌ）はリンクｌによるフローｆのデータ転送速度であり、Ｌａｔ（ｌ）はリンクｌの待ち時間である。この測定基準は、リンクｌがどの程度使用中であるかという考え方を示すものであり、あるノードから他のノードへタスク関連状態を移行するのにどのくらいの時間を要するかを推定するために必要である。
【００４５】
本発明の一実施形態では、統計値としては、タスクを処理しているノードの熱特性を含む。
【００４６】
本発明の一実施形態では、統計値としては、データがタスクに流れる速度と、時間またはノードによって処理されるタスクのタイプに基づく着信データ転送速度における繰り返しパターンを含む。
【００４７】
各タスクに関する統計値の収集は、タスクが実行されている間にバックグラウンドで行われる。
【００４８】
このノードは、数値による統計値の時系列を維持し、その平均、分散、および標準偏差を定期的に計算することになる。すべてのＨＩＳＴＯＲＹ＿ＮＵＭＢＥＲ＿ＯＦ＿ＩＮＴＥＲＶＡＬＳ＿ＴＲＡＣＫＥＤの後に、ノードは各時系列のＨＩＳＴＯＲＹ＿ＩＮＴＥＲＶＡＬ＿ＣＯＵＮＴ＿ＣＬＥＡＮＵＰ＿ＳＩＺＥ項目のうち、最も古いものを削除し、新しい項目のためにスペースを作ることになる。
【００４９】
ステップ３：負荷交換隣接リストの作成
プロセスの次のステップは、それに対して１つのタスクを部分的にまたは全体的に転送できる隣接ノードのリストを作成することである（ブロック３４）。その隣接ノードからの定期的な統計値交換の後、各ノードはロード・バランシング・パートナのリストを維持管理する。ノードはこのリストをソートし、隣接ノードは全使用可能負荷およびメモリに関して降順に順序付けられる。
【００５０】
冷却コストが考慮される本発明の一実施形態では、現行ノードとの相互干渉熱係数（cross-interference heatcoefficient）が非常に高いパートナを除去することにより、隣接ノードのリストが洗練される。すなわち、各ノードは、サイズｎ×ｎの相互干渉行列にアクセスすることができ、ここでｎはデータ・センタ内のノードの総数である。この行列内の項目ａ＿ｉｊは、ノードｉがノードｊにもたらす熱量を表している。ノードはこの行列を参照し、相互干渉熱係数が非常に高くなるノードを除去することにより、最も近い隣接ノードのリストを洗練する。あるノードが負荷移行の開始を希望する場合、そのノードは単に隣接ノードのリストを参照して、潜在的な負荷交換パートナ・ノードを選択するだけである。負荷移行を考慮するという決定は、各ノード内で一定間隔で繰り返されるエピソード・イベント（episodic event）として実装される可能性があるか、あるいは最小必要電力節約、最大冷却コスト、最大ノード使用率、または最小ノード使用率などの何らかのしきい値の違反によってトリガされる場合もある。本発明のコンピュータによって実行される方法においてステップ４以降の考慮に至る正確なトリガは、ユーザによって各ノードについて個々に構成することができる。代わって、ネットワークが非常に大きい（たとえば、数千個のノード）場合、ユーザはノードのサブセットについて負荷移行トリガ設定を初期設定し、初期設定されたノードがその初期設定値をそれに関するしきい値が適切である他のノードに広げるために基本拡散または信念伝搬などの自律型非集中情報伝搬アルゴリズムを頼りにすることができる。拡散とは、その情報をほとんどまたはまったく持たない１組のノードに非常に集中しているネットワーク内で情報の正味輸送が１組のノードによってもたらされる技法である。拡散の結果は漸進的な情報の混合である。特定の条件下では、ノードの純粋に自発的なローカル・コーディネーションに基づいて、拡散プロセスの結果、最終的にネットワーク内の情報が完全に混合されることになる。この実施形態では、インストールのパラメータであるＬＯＡＤ＿ＤＩＳＴＲＩＢＵＴＩＯＮ＿ＩＮＴＥＲＶＡＬという長さの間隔後に発生するエピソード・イベントとして負荷移行決定を実装する。このようなパラメータは、ユーザによって各ノードについて個々に構成するか、または自動的に構成して、拡散ベースのプロトコルによって設定できるであろう（この実施形態において詳述する）。
【００５１】
ステップ４：移行のためのタスクの選択
プロセスの次のステップは、ターゲット・タスクを処理するシステム負荷を分散するために隣接ノード（すなわち、ターゲット・ノード）に移行するための考慮用のノードで少なくとも１つのタスク（すなわち、ターゲット・タスク）を選択することである（ブロック３６）。ステートフル・タスクとステートレス・タスクの両方が存在する場合、分散する負荷が少なくなるので、まずステートレス・タスクを移行する方が好ましい。ステートフル・タスクのみがノード上で処理されている場合、それらのうち、メモリ内状態（in-memory state）が最小量であるものが移行のために選択される。ステートフル・タスクに関しては、状態はディスク上およびメモリ内に存在する可能性がある。一般に、メモリ内にのみ状態を有するステートフル・タスクを移行する方が好ましい。たまたま単一タスクが事前設定のＳＴＡＴＥ＿ＭＩＧＲＡＴＩＯＮ＿ＬＩＭＩＴ以上のものを使用して単一タスクとして移行する可能性がある。この状況では、プロセスの任意選択ステップは、ターゲット・タスクを２つのターゲット・サブタスクに分割して移行することである。タスクの分割については、以下により詳細に論ずる。タスクの状態の量、状態のタイプ（ディスク上またはメモリ内）、およびそれを介してドナー・ノードから受信側ノードに状態を移行するためのリンク（複数も可）の速度を考慮に入れることにより、本発明のコンピュータによって実行される方法は、多くの既存の負荷移行技法とは異なり、ステートフル・タスクとステートレス・タスクの両方を処理する。実際の状態移行は、既存の研究に記載されているいくつかの方法で最適化できるであろう。
【００５２】
ステップ５：ターゲット・ノードの選択
プロセスの次のステップは、ターゲット・ノードが負荷分散品質に関して所定の基準を満たす場合にそれに対してターゲット・タスクを移行できるターゲット・ノードを選択することである（ブロック３８）。このノードは、ターゲット・タスクのための新しいホストとして働くための最小要件（基準）を満足しない潜在的な負荷交換パートナをリストから除去する。
【００５３】
冷却コストが削減される本発明のこの実施形態では、ターゲット・ノードを選択するこのステップは、ターゲット・ノードが負荷分散品質に関して所定の基準を満たす場合ではなく、冷却コストの削減が主要要因である場合に、冷却コストの削減に完全に依存する可能性がある。さらに、好ましい一実施形態では、ターゲット・ノードを選択するこのステップは、ターゲット・ノードが負荷分散品質に関して所定の基準を満たすことに加えて、冷却コストを削減することも考慮することができる。
【００５４】
所定の基準としては、ターゲット・ノードの物理接続、ターゲット・ノードの使用可能負荷およびメモリ、物理リンク数の最小化、サイクルの除去、ターゲット・ノード負荷相関、ならびにドナー・ノードとターゲット・ノードの移行後使用率を含む。これらの基準の少なくともいくつかは、ターゲット・ノードを選択するために満たさなければならない。好ましい一実施形態では、ターゲット・ノードを選択するためにこれらの基準のすべてを満たさなければならない。これらの基準のそれぞれについては詳細に論ずる。
【００５５】
図５に示されているように、ターゲット・ノードの物理接続に関する基準が示されている。ターゲット・ノードＭｔは、ノードＭｉ上で処理されるターゲット・タスクｉの親タスクｐを処理するノードＭｐおよび子タスクｃを処理するノードＭｃに物理的に接続しなければならない。ターゲット・ノードＭｔは、現在ターゲット・タスクｉを処理しているノードＭｉにも接続しなければならない。この特定の基準は図３に関連してより明らかになる。一例として、現在ノードＭ４によって処理されているタスクＪ１を他のノードに移行することが望ましい。この場合、タスクＪ１はターゲット・タスクである。ノードＭ２またはＭ３は親ノードになる可能性があり、Ｍ４はドナー・ノード（Ｍｉ）であり、ノードＭ７は子タスクを処理するノードＭｃである。このシナリオでは、ターゲット・タスクＪ１はＭ５またはＭ１３に移行することができ、どちらも親ノード、子ノード、およびドナー・ノードに（直接または間接的に）接続される。
【００５６】
次の基準はターゲット・ノードの使用可能負荷およびメモリである。ターゲット・ノードは、ターゲット・タスクを処理するために十分な使用可能負荷およびメモリを備えていなければならない。上述の統計値の収集は、使用可能負荷およびメモリを評価するために使用される。さらに、ターゲット・ノードと現在ターゲット・タスクを処理しているドナー・ノードとの物理マシン・リンクは、ターゲット・タスクがステートフルであり、メモリ内状態を有する場合、非常に高いネットワーク使用量を備えていてはならない。リンクの使用率が高いほど、ドナー・ノードからターゲット・ノードに状態を移動するのに要する時間が長くなる。
【００５７】
ターゲット・タスクの親タスクおよび子タスクを処理するノードにターゲット・ノードを接続する物理接続数を最小限にすることが望ましい。物理リンクはエンドツーエンド待ち時間を長くするものである。アプリケーションのサービス品質要件は、短いエンドツーエンド待ち時間を含む可能性がある。したがって、物理接続数の最小化は、アプリケーションのサービス品質要件を満たすために重要である。ターゲット・ノードのリストは、移行すべきターゲット・タスクとともに維持する物理接続数に関してソートしなければならない。図６（Ａ）はタスク・フローの一例を示している。図６（Ｂ）はフロー内の物理リンク数を増加し、したがって、望ましくない負荷移行の一例を示している。図６（Ｃ）はフロー内の物理リンク数を減少し、したがって、望ましい負荷移行の一例を示している。図６（Ｄ）はノードが行うことができる負荷移行決定のローカル集合と、それらが物理リンク数にどのように影響を与えるかを示している。図６（Ｄ）の決定１および２は物理リンク数を改善し（低下させ）、決定４はそれを悪化させ、決定３では物理リンク数が同じ数にとどまっている。
【００５８】
次の基準はサイクルの除去である。あるタスクから流れ出たメッセージが他のタスクに行き、その出力が、直接または間接的に、元のタスクへの入力になるときに、サイクルが発生する。ターゲット・ノードがターゲット・タスクのフロー内の先行点を表すタスクを処理している場合、それは除去しなければならない。この状況は図７に示されており、ノードＭｘはタスクｉのフロー内の先行点であるタスクを処理するので、ターゲット・タスクｉのために望ましくないターゲット・ノードである。
【００５９】
次の基準はターゲット・ノード負荷相関である。ターゲット・ノード上の平均負荷を調べることに加えて、負荷安定性も検査しなければならない。ターゲット・ノードにタスクを移行する前にこのノード上の平均負荷を考慮に入れるだけでは十分ではないことは公表された研究［上記のＸｉｎｇ，ＩＣＤＥ’０５］で実証されている。そのノード上の負荷変動も検査しなければならない。特に、あるノード上のタスク間の負荷相関係数が負である場合、これは有用になるであろう。２つのタスク間の負荷相関係数が負であることは、一方のタスクの負荷が頂点に達したときにもう一方のタスクの負荷が頂点に達していないことを示す。したがって、移行されるターゲット・タスクと受信側マシン上のタスクとの負荷相関係数の計算は、以下のように負荷移行意思決定プロセスに取り入れられる。
ｉ．ρ（ａ，Ｎ）：タスクａの負荷時系列と、ａを除くＮ上のすべてのタスクの全負荷時系列（合計）との相関係数
ｉｉ．ドナー・ノードＮ１の観点から、大きいρ（ａ，Ｎ１）を有するタスクを移動させることは良いことであり、受信側ノードＮ２の観点から、小さいρ（ａ，Ｎ２）を有するタスクを受け入れることは良いことである。
ｉｉｉ．したがって、ρ（ａ，Ｎ１）−ρ（ａ，Ｎ２）の値が大きいタスクを移動することが好ましい。これをスコアと呼ぶ。
ｉｖ．すべての潜在的なターゲット・ノードに関してタスクａに関する相関係数を計算し、最も大きいスコアを有するノードをターゲット・ノードとして選択する。
ｋ個の要素を有する負荷時系列Ｓ＝（ｓ1，ｓ2，．．．，ｓk）の場合、その平均および分散は以下のように定義される。
【数２】
2013502642.tif 000004
【数３】
2013502642.tif 000005
２つの負荷時系列Ｓ1＝（ｓ11，ｓ12，．．．，ｓ1k）およびＳ2＝（ｓ21，ｓ22，．．．，ｓ2k）の場合、その共分散ｃｏｖ（Ｓ1，Ｓ2）および相関係数ρは以下のように定義される。
【数４】
2013502642.tif 000006
【数５】
2013502642.tif 000007
【００６０】
好ましい一実施形態では、負荷相関係数ρは、ドナー・ノードの場合、不利な負荷相関、したがって、移行のために機が熟したことを示す正でなければならず、ターゲット・ノードの場合、ターゲット・ノードへのターゲット・タスクの移行のために有利な負荷相関を示す負でなければならない。
【００６１】
最後の基準はドナー・ノードとターゲット・ノードの移行後使用率である。あるタスクに関する移行決定プロセスの持続時間の間、イベント・トラフィックが同じままになると想定される場合、現行負荷統計値を使用して、ドナー・ノードとターゲット・ノードの移行後使用率を推定することができる。ドナー・ノードの使用率における移行後の減少は十分なもの、すなわち、事前設定のＬＯＡＤ＿ＤＥＣＲＥＡＳＥ＿ＴＨＲＥＳＨＯＬＤより大きいかまたはこれと等しくなければならず、ターゲット・ノードの使用率における移行後の増加は、タスクの移行を保証するために許容できるしきい値、すなわち、事前設定のＬＯＡＤ＿ＩＮＣＲＥＡＳＥ＿ＴＨＲＥＳＨＯＬＤを上回ってはならない。
【００６２】
ＣＰＵ使用率はシステム負荷と見なされる。ノードおよびタスクの負荷は、固定長の期間について測定される。バックグラウンドで実行される統計値の収集は、このために有用である。それぞれの期間では、タスクの負荷は、その期間の長さにわたりそのタスクによって必要とされるＣＰＵ時間の一部分として定義される。タスクａに関する期間ｉにおける平均イベント到着率がλ（ａ）であり、ａの平均イベント処理時間がｐ（ａ）である場合、期間ｉにおけるａの負荷はλ（ａ）・ｐ（ａ）である。したがって、ドナー・マシンの移行後使用率Ｕdおよびタスクａ１を移行した後の受信側マシンのＵrは以下の通りであり、ここで、ｎdおよびｎrはそれぞれドナー側および受信側のタスクの総数である。
【数６】
2013502642.tif 000008
【００６３】
移行は、ドナー・ノードの移行後使用率が事前設定のＬＯＡＤ＿ＭＡＸ＿ＴＨＲＥＳＨＯＬＤより小さく、ターゲット・ノードの移行後使用率が事前設定のＬＯＡＤ＿ＭＡＸ＿ＴＨＲＥＳＨＯＬＤより小さい場合に行わなければならない。これらの要件が満たされない場合、このノードは任意選択で、ターゲット・タスクを分割し、分割タスクが良好な移行後使用率につながるかどうかを確認することを試みることができる。分割については次に説明する（図４のブロック４０）。分割の結果、成功に至らない場合、このノードは上記のターゲット・ノード相関係数の計算に戻り、必要であれば、新しいターゲット・ノードを選択し、タスク分割を繰り返し続けることになる。潜在的なターゲット・ノードがまったく見つからない場合、コンピュータによって実行される方法は、所与の時間間隔後にタイムアウトし、前述の通り、統計値の収集からやり直すことになる。
【００６４】
ターゲット・タスクが非常に大きい場合、そのタスクは分割することができる。分割はいくつかの異なるタイプのものにすることができる。限定ではなく例示のために、タスク分割のための３通りの方法について以下に説明する。分割の方法はタスクのタイプによって導かれる。以下に記載する方法に加えて、そのほかの分割方法も存在する。
【００６５】
タスクの分割は、図８に例示されている通り、パーティションＩＤ別にすることができる。入力ストリームはパーティションＩＤに応じてパーティション化することができる。同じタスクについて複数の入力ストリームが存在する場合、同じパーティションＩＤを有するパーティションが、適合すべき最小ユニットとして、そのタスクのすべての入力ストリームにわたってグループ化される。したがって、入力ストリームを分割し、そのパーティションＩＤを有するパーティションを異なるノードにリダイレクトすることができる。
【００６６】
タスクの分割はコンテキスト別にすることができる。タスクのタイプ次第で、上記のようにパーティションＩＤ別に分割することが不可能な場合がある。たとえば、コンテキスト別に分割したいと希望する可能性もある。一例として、１月から６月までオンラインで商品を購入した顧客に関するすべてのイベントをタスクが処理すると仮定する。このタスクは２つのコンテキストに分割することができ、１つのコンテキストは１月から３月までに購入した顧客であり、もう１つのコンテキストは４月から６月までに購入した顧客である。この２つのコンテキストにおいて同じルールを異なるノード上で並行して評価することができる。効果的に、着信データ・ストリームは２つのノード間で分割され、特定の月に関するデータは適切なノードにリダイレクトされる。
【００６７】
第３の選択肢はルール別にタスクを分割することである。タスクは「りんごの販売とオレンジの返品を検出すること」など、いくつかのことを実行すると仮定する。効果的に、このタスクは２つのルールを実行しており、１つのルールは「りんごの販売を検出すること」であり、第２のルールは「オレンジの返品を検出すること」である。したがって、このタスクは２つのルールに分割され、並行して処理することができる。この場合、着信データ・ストリームは完全に複製され、この２つのルールを処理する２つのノードに並行してリダイレクトされる。
【００６８】
冷却コスト節約の目標
相当な負荷を有するタスクの移行はドナー・ノードの冷却時に費やされるエネルギーについて潜在的に相当な節約につながることになるので、ドナー・ノードはこのようなタスクを移行したいと希望する可能性がある［図４のブロック４６によって示される通り］。他の一実施形態では、ターゲット・ノードとして認定するための前述の基準のうちの１つまたは複数を満足し、それに加えて冷却コストを削減する、潜在的なターゲット・ノードをまず選択する。本発明のこの実施形態は、ターゲット・ノードを選択するステップ５に取り入れることができる［図４のブロック３８］。本発明のこの実施形態は、タスクがそこに移行されると仮説的に想定して、受信側ノードｉの出口温度
【数７】
2013502642.tif 000009
を計算することを含む。これは以下のように計算することができる。すなわち、ノードｉは、タスク集合Ｃiを実行しながら、速度Ｐiで電力を消費する。
Ｐi＝Ｇi（Ｃi）
【００６９】
べき関数Ｇiは、タスク集合Ｃi内のタスクを処理した結果として、そのノードが読み書きのためにディスクにどのくらい頻繁にアクセスしなければならないかなどの要因を考慮に入れる。
【００７０】
各ノードｉのファンは、流量ｆiおよび入口温度
【数８】
2013502642.tif 000010
でノードｉ上に冷気を引き込み、平均出口温度
【数９】
2013502642.tif 000011
で加熱空気を放散する。エネルギー保存の法則ならびにコンピューティング・デバイスによって引き込まれた電力のほとんどすべてが熱として放散されることにより、ノードの電力消費量と入口／出口温度との関係は以下のように概算することができる。
【数１０】
2013502642.tif 000012
ここで、Ｃpは空気の熱であり、ρは空気密度である。したがって、ノードｉの電力消費によって空気温度が、
【数１１】
2013502642.tif 000013
から、
【数１２】
2013502642.tif 000014
に上昇することになる。すでにＰiを計算したので、
【数１３】
2013502642.tif 000015
について以下のように解くことができる。
【数１４】
2013502642.tif 000016
【００７１】
移行すべきタスクがドナーによって処理されるタスク集合Ｃiから除去される場合、ドナー・ノードの仮説的移行後出口温度も上記と同じ計算を使用して計算しなければならない。提案された負荷移行は、移行を保証するためにドナー・ノードについて十分な冷却コスト節約を発生しなければならない。ドナー・ノードの仮説的移行後温度の低下は、移行を保証するためにＴＥＭＰＥＲＡＴＵＲＥ＿ＤＥＣＲＥＡＳＥ＿ＴＨＲＥＳＨＯＬＤとして知られるインストールのパラメータより大きいかまたはそれと等しくなければならない。このようなパラメータは、ユーザによって各ノードについて個々に構成するか、または自動的に構成して、拡散ベースのプロトコルによって設定できるであろう（この実施形態において詳述する）。
【００７２】
受信側ノードの移行後出口温度について推定された上昇が事前設定の熱しきい値であるＴＥＭＰＥＲＡＴＵＲＥ＿ＩＮＣＲＥＡＳＥ＿ＴＨＲＥＳＨＯＬＤより大きい場合、タスクを分割し、出口温度を再計算しなければならない。出口温度が依然として許容できない場合、繰り返しタスクを分割し、ターゲット・ノードの移行後温度を推定するためにこの計算を繰り返す。事前設定の熱しきい値はユーザによって設定することができ、ノードごとに様々になる可能性がある。このしきい値は、実行中のいつでも変更しリセットすることができる。タスク分割については以下により詳細に論ずる。タスクをそれ以上分割できない場合、ステップ５に戻り、他のターゲット・ノードを選択する。それ以上使用可能なターゲット・ノードがない場合、ステップ３に戻り、移行のために他のタスクを選択する。
【００７３】
どのタスクを移行すべきかと、そのソース・ノードおよび宛先ノードを選択しながら、推定された温度に対する影響および結果として得られる温度の節約を取り入れるのではなく、ユーザは、この推定をステップ５で定義された移行後使用率計算の一部にするためにいくつかの設定を構成することができる。したがって、移行後使用率情報に加えて、ドナー・ノードおよび受信側ノードの移行後温度は、ステップ５で上述したように推定されるであろう。この「結合意思決定」を優先するユーザは、いくつかの初期パラメータを設定する必要があるであろう。このようなパラメータとしては、タスクを移動するための確かな決定を行うためにドナー・ノード上の許容できる温度低減および冷却コスト節約に関する許容できる最小しきい値と、タスクを移動するための確かな決定を行うためにターゲット・ノード上の温度上昇および冷却コスト増加に関する許容できる最大しきい値を含む。この結合意思決定では、ユーザは、均一な負荷分散という第１の目標と冷却コストの妥当な節約を保証するという第２の目標を持って負荷移行を実行するという意図で本発明を使用する。
【００７４】
ステップ６：負荷交換プロトコル
プロセスの次のステップは、ターゲット・タスクの移行の回数を管理し、ローカルの独立したシステム負荷移行がイベント・ドリブン・システム内の全システムの負荷分散につながることを保証し、ローカル移行が相互に矛盾しないことを保証するために、各ノードで負荷交換プロトコルを確立することである（図４のブロック４２）。
【００７５】
コンピュータによって実行される方法は非集中プロセスであるので、負荷交換プロトコルは３つの特性を含まなければならず、すなわち、ターゲット・タスク移行は振動（oscillation）に至ってはならず、単一マシン・サイクルで２つ以上のターゲット・タスクの同時移行が行われてはならず、ターゲット・タスク移行の最終結果として何らかの方法で負荷分散を改善しなければならない。これらの特性の一部または全部が存在しなければならず、好ましい一実施形態では、これらの特性のすべてが存在しなければならない。
【００７６】
次に、これらの特性のそれぞれについて、より詳細に論ずる。
【００７７】
電力コストが以前の実行間隔（run-interval previous）と今後の実行間隔（run-interval coming up）との間で変化しない場合、振動を必要としないが、電力料金またはその他の何らかのコスト要因が十分大きい時間ウィンドウ中に変化する場合、振動は合法的である。たとえば、期間ｔにおいて負荷がノードＡからノードＢに移動する場合、期間ｔ＋１では、十分な電力節約によって変更が保証されない限り、ノードＢからノードＡに負荷を戻すことがあってはならない。換言すれば、振動とは、負荷分散決定の結果として、タスクが同じ２つのノード間で２回以上やりとりされることである。
【００７８】
同時移動を行ってはならない。たとえば、タスクＡをノードＸからノードＹに移動する場合、前の決定を最適とは言えないものにする恐れがあるので、Ａに接続されたダウンストリーム・タスクも同時に移動することがあってはならない。
【００７９】
入力データ転送速度が期間ごとに極めて変わりやすいわけではないと想定すると、ターゲット・タスク移行の最終結果は何らかの点で初期構成より良くなるはずである。
【００８０】
これらの特性を達成するために、各ノードについて以下のローカル負荷交換制約が定義される。
【００８１】
負荷シフトはすべてダウンストリームまたはすべてアップストリームでなければならない。すべてのノードはタスク・フロー内のダウンストリーム・コンポーネントを処理するノードにタスクを渡すが、フロー・タスク・グラフ内のルートおよびリーフを処理するノードは除く。あるいは、逆に、すべてのノードはそれが処理しているタスクのアップストリーム・コンポーネントを処理するノードにタスクを渡すが、フロー・タスク・グラフ内のルートおよびリーフを処理するノードは除く。どちらの方向が選択されたかにかかわらず、すべてのノードは、方向が逆転される前に所定の数の時間ステップの間、この方向にタスクを渡さなければならない。タスク・グラフ内のルートおよびリーフを処理するノードの場合、並列分割を試みることが推奨される。この負荷交換プリミティブ（primitive）は、強制的に一方向のみに負荷を交換させるので、振動に対する反発力（resilience）をもたらすものである。
【００８２】
時間ステップあたり多くても１回のタスク移行でなければならない。移行すべきターゲット・タスクについて決定を行う場合、このタスクのフロー内のダウンストリームにあって、多くても１つのマシン・リンクによってこのタスクから分離されたタスクはいずれも、同じ時間ステップ中に移動することができない。たとえば、図９に示されているように、タスクｃをＭ３からＭ５に移動しなければならないと決定した場合、タスクｄおよびｅ（タスクｃのフロー内のダウンストリームにあるもの）は同時に移動することができない。ドナー・ノードが負荷をターゲット・ノードにシフトすることを決定した後、ドナー・ノードは、アップストリームとダウンストリームの両方でそれに直接隣接するすべてのノードに通知しなければならない。この通知に基づいて、ノードは、それが負荷をシフトできるかどうかを判断することができる。この負荷交換プリミティブは、相互に矛盾する同時決定の可能性に対する反発力をもたらすものである。
【００８３】
負荷シフトの回数について制約がある。新しい位置にシフトされた後、ターゲット・タスクは、所定の数の追加の時間ステップの間、移動することができない。これは、タスクを最後にシフトしたときから経過した時間の長さに関して表すこともできる。この負荷交換プリミティブは、システムがその時間全体を負荷のシフトに費やすわけではなく、相当な長さの時間が処理にも費やされることを保証するものである。
【００８４】
２つのノードは同時にターゲット・タスクをターゲット・ノードに移行することができない。たとえば、ノードＢがその子ノードＣに負荷を送信しており、ノードＣの親でもあるノードＡもノードＣに負荷を送信しようと試みている場合、効果的に、ノードＢはノードＣに対する負荷交換ロックを有し、ノードＢがノードＣへの負荷移行を完了してロックを解除するまでノードＡはノードＣにいかなるタスクも移行することができない。ターゲット・ノードの負荷交換ロックを取得せずに、ドナー・ノードはターゲット・ノードに負荷を転送することができない。この負荷交換プリミティブは、正確に同時に他のノードから負荷を受信することにより受信側ノードが過負荷状態にならないことを保証するものである。
【００８５】
入力データ転送速度が２回の連続負荷シフト間で大幅に変動しないと想定した場合、コンピュータによって実行されるこの方法の前のステップで決定された要因により、それぞれのローカル移動が最適であることを保証することができる。したがって、コンピュータによって実行されるこのプロセスを実行した後のマシンに対するタスクの構成は、タスクにとって使用可能な使用可能負荷およびメモリに関してより最適なものになり、ユーザの全応答時間は初期構成に含まれるものより短くなるであろう。
【００８６】
ステップ７：移行
プロセスの最後のステップ［ブロック４４］では、ターゲット・タスクがターゲット・ノードに移行する。次に、ターゲット・ノード上でのターゲット・タスクの実行に進むことができる。その後、追加の調整が必要な場合にステップ３〜７による他のロード・バランシングを行えるように、ターゲット・ノード上でのターゲット・タスクの実行に関する統計値を収集すること［ブロック３２］が望ましい場合もある。
【００８７】
静止モード遷移および電力節約の目標
本発明の他の代替実施形態［図４のブロック４６］では、１つまたは複数のノードが静止モードになることが望ましい場合もある。所与のノードについて１つまたは複数のノードを静止モードに遷移すべきかどうかについて、いくつかの要因を伴う判断プロセスがある。このような判断は、静止ノード（ドナー・ノード）上の任意のタスク（ターゲット・タスク）を他のノード（ターゲット・ノード）に移行することを含むことができる。このようないくつかの要因は以下の通りである。
予想トラフィックおよび静止モード期間の持続時間
他のどのノードが同様に静止モードに遷移できるか
静止モードへの遷移のコストを評価すること
静止モードへの遷移の恩恵を評価すること
静止モードへの遷移は、遷移の恩恵がコストを超える場合にのみ行わなければならない。
【００８８】
恩恵がコストを超える場合、ターゲット・タスクをターゲット・ノードに移行することができ、ドナー・ノードは静止モードに移行して、電力を削減することができる。静止モードへの遷移は、上述のロード・バランシングの前または後に行うことができる。また、ロード・バランシングの代わりに、静止モードへの遷移を行うこともできる。
【００８９】
上記の要因のそれぞれについて詳細に論ずる。
【００９０】
第１の要因は、予想トラフィックおよび静止モード期間の持続時間である。前に受信した入力データ・トラフィックの到着率を分析することにより、ノードは、入力データ・トラフィックにパターンがあるかどうかを判断することができる。この分析は統計分析を含むことができ、それによりノードは到着の平均および分散を計算し、曲線の当てはめを使用して入力到着イベントの分散を提案することができる。この分析を基礎として、ノードは、その入力データの到着率のパターンを判断し、それが静止モードになり得る期間の持続時間を決定することができる。たとえば、毎日特定の期間内にデータがまったく到着しない場合、そのノードは、データがまったく予期されない期間中に静止モードに遷移することを決定することができる。静止期間の結果得られる電力の節約がＰＯＷＥＲ＿ＤＥＣＲＥＡＳＥ＿ＴＨＲＥＳＨＯＬＤより大きいかまたはそれと等しいという条件で、そのノードはこれを実行することを決定する。この状況は図１０に示されている。図１０では、ノードＭ１０は所与の持続時間の間、静止モードに遷移し、残りのノードＭ４、Ｍ９、およびＭ５はデータを処理し続ける。ノードＭ１０が静止状態なので、ノードＭ９がノードＭ１０から着信データを受信できない場合でも、Ｍ９は、Ｍ１０が静止モードに遷移する前にそれがＭ１０から受信したデータを処理し続けることができる。また、Ｍ９は、ネットワーク内でＭ９に物理的に接続されたＭ４から受信したデータを処理している可能性もある。各ノード上でソフトウェアを実行しているものとして現れる負荷分散のための本発明のコンピュータによって実行される方法は、静止モードに遷移すべきときと、そうではないときを決定するために、時間を参照するためのクロックに言及している。
【００９１】
図１１および図１２は、ドナー・ノードの集合といわれるノード・グループがそれぞれのタスクおよび処理を、受信側ノードの集合といわれる他のノード・グループに移行する状況を示している。受信側ノードは、ドナー・ノードがそこから入力データを受信するノード、ならびにドナー・ノードが入力データについて処理タスクを実行した結果得られる出力をそれに対して送信するノードに物理的に接続しなければならない。また、受信側ノードは、移行されたタスクを送受信するためにドナー・ノードにも物理的に接続しなければならない。物理接続のサイズは１つまたは複数のリンクにすることができるであろう。ドナー・ノードのグループは静止モードに遷移し始め、受信側ノードのグループは移行されたタスクの処理を扱う。この場合、受信側ノードの集合はドナー・ノードの集合より優れている可能性があり、その優位性は、処理能力、ＲＡＭおよびディスク上の両方のメモリ・スペース、効率、それらが処理している他のタスク・フローによるデフォルト使用率、またはシステムのユーザによって指定されるその他の要因に関して表すことができる。図１１では、このシナリオの一例として、毎日特定の期間中にノードＭ１２およびＭ１３によってデータのバーストが予期される。ノードＭ１２およびＭ１３は、それぞれのタスクおよび関連処理をノードＭ１０およびＭ９に移行することができ、これらのノードはこのデータを処理するときにより効率的であり、移行されたタスクを処理する期間中に全体的にドナー・ノードより少ないエネルギーを使用し、そうでなければ、この期間中、アイドル状態のままになるであろう。図１２は、移行されたタスクの入力データ・バーストの期間が終了したときにタスク処理がノードＭ１０およびＭ９からノードＭ１２およびＭ１３に戻され、Ｍ１２およびＭ１３上で処理を行う方がエネルギー効率が良くなる状況を示している。
【００９２】
もう１つの例は、入力データが非常に低速で到着した場合、すなわち、それがＢＵＦＦＥＲ＿ＲＡＴＥ＿ＴＨＲＥＳＨＯＬＤであるかまたはそれ未満である場合、ノードは半静止モードになることを選択することができ、そこでそのノードは処理を中断し、バッファに入れられた入力を処理する準備ができるまで、ＢＵＦＦＥＲ＿ＴＩＭＥ＿ＬＩＭＩＴなどの特定の期間の間、入力をバッファに入れる。
【００９３】
第２の要因は、他のどのノードが同様に静止モードに遷移できるかである。タスクの階層性のため、あるノードが静止モードになる場合、ダウンストリーム・ノード、すなわち、その唯一の入力として静止ノードのタスク出力を頼りにするタスクを処理するノードも静止モードに遷移できそうである。個々のノードのエネルギー節約は静止モードに遷移するというその決定を保証するために十分ではない可能性があり、すなわち、ＰＯＷＥＲ＿ＤＥＣＲＥＡＳＥ＿ＴＨＲＥＳＨＯＬＤより大きくない可能性がある。この場合、ノードは、それ自体とそのダウンストリームの隣接ノードが静止モードに集団遷移した結果得られるそれらの集団エネルギー節約を考慮し、静止モードへの遷移を保証するためにその集団エネルギー節約がＰＯＷＥＲ＿ＤＥＣＲＥＡＳＥ＿ＴＨＲＥＳＨＯＬＤより大きいかどうかを判断することができる。ダウンストリーム・ノードとのローカル通信に基づいて、ノードは、他のどのノードがそれ自体と同時に同様に静止モードに遷移できるかを判断することができる。ダウンストリーム・ノードがこの通信時に他のどのアクティブ・タスク・フローについてもタスクを処理していない場合、そのノードはそれに通信メッセージを送信したノードと同時に静止モードに遷移することができる。
【００９４】
第３の要因は、静止モードへの遷移のコストを評価することである。ノードは静止モードへの遷移のコストを推定することができ、この推定は時間原価とビジネス・コストとを含む。より具体的には、コストは以下のもので構成される。
現行処理を中断し、タスクの処理に関連する必要なメモリ内状態をディスクに保存するために要する時間
【００９５】
静止状態になることがタスクを移行するという決定を伴う場合、もう１つのコストは、タスクおよびそれに関連する状態を他のノードに移行するのに要する時間である。タスクそのものならびにタスクに関連するすべての状態はノードにとってローカルであると想定すると、ノードは、まず、タスクおよび状態を受信側ノードに移行するために使用されるリンクの速度および帯域幅を決定することにより、このコストを推定することができる。どのタスクを移行するかおよびどのノードにそれを移行するかを決定する際に、ノードは、この実施形態の上述のステップ１〜ステップ６を使用することができる。
【００９６】
タスクが移行され、他のノード上で再開する必要がある場合、もう１つのコストは、他のノード上でそのタスクの処理を再開する始動コストである。この始動コストは、タスクの処理が中断されたときの状態に到達し、その時点から再開するための時間を含む。
【００９７】
静止モードに移行するコストｃは、以下のようにｎ個の因数の加重結合（weighted combination）として量的に計算することができ、ここで、因数ｆ1は実行を中断するコストを表し、因数ｆ2は移行のコストを表し、ｆiは他のコスト要因を表し、ｍ1は因数ｆ1に対する重みを表し、ｍ2は因数ｆ2に対する重みを表し、ｍnは因数ｆnに対する重みを表す。
【数１５】
2013502642.tif 000017
【００９８】
第４の要因は、静止モードへの遷移の恩恵を評価することである。静止モードへの遷移の恩恵は、エネルギー節約とビジネス・コスト節約という２つの次元により評価することができる。より具体的には、以下のようにノードによって恩恵を推定することができる。
【００９９】
ノードは、それが静止モードになることを計画している期間の間に累積するエネルギー節約を推定することができる。これは、そのノードの以前のエネルギー使用量パターンを基礎として推定された節約電気または節約電力に関するものになるであろう。タスクがよりパワフルなマシンに移行される場合、これらの移行されたタスクに割り振られる受信側マシンの電力使用量の一部分は全電力節約量から減算しなければならない。ノードｉ上の移行されたタスク集合の電力使用量は以下のように推定することができ、ここで、Ｃiはタスクｔ１、ｔ２、．．．ｔｎからなるタスク集合であり、ｎは移行されるタスクの総数である。タスク集合Ｃiを実行している間に受信側ノードｉが電力を消費する速度をＰiとする。Ｐi用の単位の例は毎秒のワット数にすることができるであろう。Ｐiは以下のように計算することができる。
Ｐi＝Ｇi（Ｃi）
【０１００】
べき関数Ｇiは、タスク集合Ｃi内のタスクを処理した結果として、そのノードが読み書きのためにディスクにどのくらい頻繁にアクセスしなければならないかなどの要因を考慮に入れる。Ｇiは、Ｃiをノードｉに移行し、固定間隔の時間ｔについて電力消費量ｐの量を記録することによって推定することができ、ここで、着信データ転送速度における最新の傾向と最も一致するように上述の曲線の当てはめ技法を使用して、タスクに課せられたデータ転送速度が推定される。したがって、Ｇiは以下の通りである。
Ｇi（Ｃi）＝ｐ／ｔ
【０１０１】
Ｇiが計算されると、Ｐiを推定することができ、したがって、期間ｘにおけるタスク集合の電力使用量はＰi・ｘになる。
【０１０２】
遷移によってデータがより効率的に処理されるようになる場合、これはアプリケーションに関するエンドツーエンド待ち時間の短縮につながる可能性がある。ビジネス・コストに関するこの潜在的な恩恵は、タスクのエンドツーエンド待ち時間に関して推定することができる。
【０１０３】
静止モードへの遷移の恩恵ｂは、以下のようにｎ個の因数の加重結合として量的に計算することができ、ここで、因数ｆ1はエネルギー節約を表し、因数ｆ2はエンドツーエンド待ち時間を表し、ｆiは他の恩恵要因を表し、ｋ1は因数ｆ1に対する重みを表し、ｋ2は因数ｆ2に対する重みを表し、ｋnは因数ｆnに対する重みを表す。
【数１６】
2013502642.tif 000018
【０１０４】
コストまたは恩恵を決定する因数に対する重みはアフィンにすることができる。アフィン結合は、結合内のすべての重みを合計すると１になるような一次結合として定義される。重みは非線形または定数にすることもできるであろう。特定の重みを使用してコストおよび恩恵の式から意味のある値を抽出するために、因子の数値を正規化しなければならない。正規化は統計値において一般的なやり方である。
【０１０５】
静止モードへの遷移の決定は、遷移の恩恵がコストを超える場合にのみ行わなければならない。換言すれば、静止モードへの遷移を保証するために、ｂはｃより大きくなければならない。
【０１０６】
また、ｋiの値はノード上で定期的に更新できることにも留意されたい。たとえば、エネルギー・コストが時刻または曜日あるいは季節によって変化する場合、異なる状況の間にエネルギー節約に関する異なる値を適用することができるであろう。
【０１０７】
静止モードにまたは静止モードで遷移する場合、静止モード期間を他のノードと同期させることが重要である。同期とは、複数のノードがグループとしてまとめて電源オフするとき、ならびにそれらがグループとしてまもめてもう一度電源オンするときに、それらが固定時間について合意に達していることを意味する。データはあるタスクから他のタスクに流れているので、ノード間で静止モードを同期させることは重要であり、実行可能である。これは、アップストリーム・ノードが静止モードになる場合、他のフローに属しているタスクを処理していないという条件で、このアップストリーム・ノードに接続され、フロー内のダウンストリームにあるノードも静止モードになることができ、あるいは、ダウンストリーム・ノードが他のフローに属しているタスクを処理している場合、それらが処理している異なるすべてのデータ・フローのアップストリーム・ノードも静止モードに遷移するのであれば、ダウンストリーム・ノードは静止モードになることができるからである。この状況は図１３に示されている。図１３では、ノードＭ４は静止モードに遷移することを決定し、このメッセージをそのダウンストリーム・ノードにブロードキャストする。Ｍ４のダウンストリーム・ノードＭ５も静止モードに遷移することを決定する。というのは、そのノードＭ５は、Ｍ４が静止状態にある期間中、Ｍ４からいかなるデータも受信できないことを認識し、データ・パターン分析および予測を基礎としてＭ１からデータを受信しなくなると予想するからである。また、Ｍ５は，前に受信した入力データから残りの処理を実行させることはない。したがって、ノードＭ４はその静止モード期間の長さをノードＭ５と同期させ、合意した期間の間、どちらも静止モードに遷移する。同様に、図１３では、ノードＭ１０が静止モードに遷移することを決定し、このメッセージをそのダウンストリーム・ノードにブロードキャストすると、ノードＭ９は、ノードＭ１０が静止状態にある期間中、いかなるデータも受信できないことを認識し、残りの処理を実行させることはない。したがって、Ｍ１０はその静止モード期間をノードＭ９と同期させ、合意した期間の間、どちらも静止モードに遷移する。ノードが異なれば、静止状態への遷移の電力コストも異なる可能性がある。静止モードに遷移すべきかどうかを決定するときに、ノードは、それ自体をオフにするコストを推定し、それを推定電力節約から減算する。
【０１０８】
本発明で定義されたすべてのユーザ設定パラメータの表は以下の通りである。この表のパラメータは、いかなる時点でもユーザによって各ノードについて個々に構成することができる。１つのノードは複数のユーザを有する可能性がある。代わって、ネットワークが非常に大きい（たとえば、数千個のノード）場合、ユーザはノードのサブセットについて負荷移行トリガ設定を初期設定し、初期設定されたノードがその初期設定値をそれに関するしきい値が適切である他のノードに広げるために基本拡散または信念伝搬などの自律型非集中情報伝搬アルゴリズムを頼りにすることができる。拡散とは、その情報をほとんどまたはまったく持たない１組のノードに非常に集中しているネットワーク内で情報の正味輸送が１組のノードによってもたらされる技法である。拡散の結果は漸進的な情報の混合である。特定の条件下では、ノードの純粋に自発的なローカル・コーディネーションに基づいて、拡散プロセスの結果、最終的にネットワーク内の情報が完全に混合されることになる。
【表１】
2013502642.tif 000019
【０１０９】
本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、またはハードウェアとソフトウェアの両方の要素を含む実施形態の形を取ることができる。好ましい一実施形態では、本発明は、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むがこれらに限定されないソフトウェアで実装される。
【０１１０】
さらに、本発明は、コンピュータまたは任意の命令実行システムによりあるいはそれに関連して使用するためのプログラム・コードを提供するコンピュータ使用可能媒体またはコンピュータ可読媒体からアクセス可能なコンピュータ・プログラムの形を取ることができる。この説明では、コンピュータ使用可能媒体またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを収容、保管、伝達、伝搬、または移送することができる任意の有形装置にすることができる。
【０１１１】
この媒体は、電子、磁気、光、電磁、赤外線、または半導体のシステム（あるいは装置またはデバイス）、もしくは伝搬媒体にすることができる。コンピュータ可読媒体の例としては、半導体またはソリッド・ステート・メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、剛性磁気ディスク、および光ディスクを含む。光ディスクの現在の例としては、コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、書き換え可能なコンパクト・ディスク（ＣＤ−Ｒ／Ｗ）、およびＤＶＤを含む。
【０１１２】
プログラム・コードの保管あるいは実行またはその両方に適したデータ処理システムは、システム・バスを介して記憶素子に直接または間接的に結合された少なくとも１つのプロセッサを含むことになる。記憶素子としては、プログラム・コードの実際の実行中に使用されるローカル・メモリと、大容量記憶装置と、実行中に大容量記憶装置からコードを取り出さなければならない回数を削減するために少なくとも何らかのプログラム・コードの一時記憶を提供するキャッシュ・メモリとを含むことができる。クラウド・コンピューティング環境も本発明のために構想されている。
【０１１３】
入出力またはＩ／Ｏ装置（キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定されない）は、直接あるいは介在する入出力コントローラを介してシステムに結合することができる。
【０１１４】
データ処理システムが介在する私設網または公衆網を介してその他のデータ処理システムあるいはリモート・プリンタまたは記憶装置に結合された状態になれるようにするために、ネットワーク・アダプタもシステムに結合することができる。モデム、ケーブル・モデム、およびイーサネット・カードは、現在使用可能なタイプのネットワーク・アダプタのうちのいくつかに過ぎない。
【０１１５】
本明細書に具体的に記載された諸実施形態を超える本発明のその他の変更は本発明の精神を逸脱せずに行うことができることは、本発明に注視する当業者にとって明らかになるであろう。したがって、このような変更は、本発明の範囲内で、特許請求の範囲のみによって限定されるものと見なされる。
【図１】
2013502642.tif 000020
【図２】
2013502642.tif 000021
【図３】
2013502642.tif 000022
【図４】
2013502642.tif 000023
【図５】
2013502642.tif 000024
【図６】
2013502642.tif 000025
【図７】
2013502642.tif 000026
【図８】
2013502642.tif 000027
【図９】
2013502642.tif 000028
【図１０】
2013502642.tif 000029
【図１１】
2013502642.tif 000030
【図１２】
2013502642.tif 000031
【図１３】
2013502642.tif 000032
【手続補正書】
【提出日】平成24年2月21日(2012.2.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータにより実行されるイベント・ドリブン・システムにおける非集中負荷分散の方法であって、
前記方法が、
ステートフルおよびステートレス・イベント処理コンポーネントを有する前記イベント・ドリブン・システム内の複数のノードで複数のタス
クによって処理すべきデータ・フローを受信するステップであって、前記複数のタスクは、他のタスクの出力に依存するタスクである階層タスクと、他のタスク
の前記出力に依存しないタスクである非階層タスクと、それらの混合物からなるグループから選択される、ステップと、
各ノードで処理された各タスクおよびその熱特性を含む前記ノードの特性に関する統計値を収集するステップと、
前記収集した統計値を使用し、それに対して１つのタスクを部分的にまたは全体的に転送することができる隣接ノードのリストを作成するステップと、
少なくとも１つのタスクを処理するシステム負荷を分散し、冷却コストを削減するために、前記隣接ノードのリストからターゲット・ノード
と呼ばれる隣接ノードに移行するための考慮用のノードにおいて第１の温度を有し、ターゲット・タスクと呼ばれる前記少なくとも１つのタスクを選択するス
テップと、
それに対して前記少なくとも１つのターゲット・タスクを移行することができ、第２の温度を有する前記ターゲット・ノードを選択するステップと、
前記移行が前記第１の温度を低下させ、前記第２の温度が所定の許容できる熱しきい値未満であるという条件で、前記ターゲット・タスクを前記ターゲット・ノードに移行するステップと、
ターゲット・タスクの移行の回数を管理するために各ノードで負荷交換プロトコルを確立するステップであって、非集中負荷移行が前記イベント・ドリブン・システムにおける全システムの負荷分散につながり、冷却コストを削減する、ステップと
を含む、方法。
【請求項２】
前記少なくとも１つのターゲット・タスクを２つ以上のターゲット・サブタスクに分割することをさらに含む、請求項１記載の方法。
【請求項３】
前記負荷交換プロトコルが、
（ｉ）前記ターゲット・タスクを移行するという決定は振動に至ってはならないことと、
（ｉｉ）単一マシン・サイクルで単一ターゲット・ノードに対して２つ以上のタスクの同時移行が行われてはならないことと、
（ｉｉｉ）単一マシン・サイクルで１つのノードから２つ以上のタスクの同時移行が行われてはならないことと、
（ｉｖ）ターゲット・タスク移行の最終結果が何らかの方法で負荷分散を改善しなければならないこと
を含む、請求項１又は２に記載の方法。
【請求項４】
各ノードが、
（ｉ）第１の所定の期間中にすべてのターゲット・タスクがアップストリームまたはダウンストリームのいずれかに移行され、第２の所定の期間後にターゲット・タスク移行の方向を切り替えることができることと、
（ｉｉ）ターゲット・タスクがターゲット・ノードに移行される場合、所定の長さの時間の間、前記移行の前に最も近い隣接ダウンストリーム・ターゲット・タスクを移行することができないことと、
（ｉｉｉ）ターゲット・ノードへの移行後に、所定の長さの時間の間、ターゲット・タスクが前記ターゲット・ノードにとどまらなければならないことと、
（ｉｖ）２つのノードが同時にターゲット・タスクをターゲット・ノードに移行することはできないこと
という負荷交換制約を有する、請求項１乃至３のいずれかに記載の方法。
【請求項５】
少なくとも１つのターゲット・タスクをターゲット・ノードに移行し、前記ターゲット・ノード上で前記少なくとも１つのターゲット・タスクを実行するステップと、
前記ターゲット・ノード上での前記少なくとも１つのターゲット・タスクの前記実行に関する統計値を収集するステップと
をさらに含む、請求項１乃至４のいずれかに記載の方法。
【請求項６】
静止モードに遷移するために少なくとも１つのノードを選択するステップをさらに含む、請求項１乃至５のいずれかに記載の方法。
【請求項７】
コンピュータにより実行されるイベント・ドリブン・システムにおける非集中負荷分散の方法であって、
前記方法が、
ステートフルおよびステートレス・イベント処理コンポーネントを有する前記イベント・ドリブン・システム内の複数のノードで複数のタス
クによって処理すべきデータ・フローを受信するステップであって、前記複数のタスクは、他のタスクの出力に依存するタスクである階層タスクと、他のタスク
の前記出力に依存しないタスクである非階層タスクと、それらの混合物からなるグループから前記複数のタスクが選択される、ステップと、
各ノードで処理された各タスクに関する統計値を収集するステップと、
前記収集した統計値を使用し、それに対して１つのタスクを部分的にまたは全体的に転送することができる隣接ノードのリストを作成するステップと、
静止モードに遷移するためにドナー・ノードと呼ばれる少なくとも１つのノードを選択するステップと、
前記隣接ノードのリストからターゲット・ノードと呼ばれる隣接ノードに移行するための考慮用の前記ドナー・ノードにおいてターゲット・タスクと呼ばれるタスクを選択するステップと、
それに対して前記ターゲット・タスクを移行することができ、負荷分散品質に関して所定の基準を満たす前記ターゲット・ノードを選択するステップと、
ターゲット・タスクの移行の回数を管理するために各ノードで負荷交換プロトコルを確立するステップであって、非集中負荷移行が前記イベント・ドリブン・システムにおける全システムの負荷分散につながる、ステップと、
前記ターゲット・タスクを前記ドナー・ノードから前記ターゲット・ノードに移行し、前記ドナー・ノードを静止モードに遷移するステップと
を含む、方法。
【請求項８】
静止モードに遷移するために少なくとも１つのノードを選択する前記ステップが、
前記ドナー・ノードにおける着信トラフィックおよび静止モード期間の予想持続時間を分析することと、
同様に静止モードに遷移できる他のノードを評価することと、
静止モードへの遷移の前記ドナー・ノードにおける待ち時間および電力／冷却コストを評価することと、
静止モードへの遷移の前記ドナー・ノードにおける電力／冷却の恩恵を評価することと、
静止モードへの遷移の前記恩恵が静止モードへの遷移の前記コストを超える場合に、前記ターゲット・タスクを前記ドナー・ノードから前記ターゲット・ノードに移行し，前記ドナー・ノードを静止モードに遷移すること
を含む、請求項７記載の方法。
【請求項９】
前記ターゲット・タスクを２つ以上のターゲット・サブタスク・グループに分割することをさらに含む、請求項７又は８記載の方法。
【請求項１０】
負荷分散品質に関する前記所定の基準が、
（ｉ）前記ターゲット・ノードが、（ａ）前記ターゲット・タスクを処理する前記ノード、（ｂ）前記ターゲット・タスクにとって親である
タスクを処理するノード、および（ｃ）前記ターゲット・タスクにとって子であるタスクを処理するノードに物理的に接続しなければならないことと、
（ｉｉ）前記ターゲット・ノードが前記ターゲット・タスクを処理するために十分な使用可能負荷およびメモリを備えていなければならないことと、
（ｉｉｉ）前記ターゲット・タスクを通過するデータ・フロー内の物理リンクの数を最小化することと、
（ｉｖ）サイクルを除去することと、
（ｖ）ターゲット・ノードが負の負荷相関係数を備えていなければならないことと、
（ｖｉ）前記ターゲット・タスクを処理する前記ノードおよび前記ターゲット・ノードの移行後使用率が所定の最大しきい値より小さいこと
を含む、請求項７乃至９のいずれかに記載の方法。
【請求項１１】
前記負荷交換プロトコルが、
（ｉ）前記ターゲット・タスクを移行するという決定は振動に至ってはならないことと、
（ｉｉ）単一マシン・サイクルで単一ターゲット・ノードに対して２つ以上のタスクの同時移行が行われてはならないことと、
（ｉｉｉ）単一マシン・サイクルで１つのノードから２つ以上のタスクの同時移行が行われてはならないことと、
（ｉｖ）ターゲット・タスク移行の最終結果が何らかの方法で負荷分散を改善しなければならないこと
を含む、請求項７乃至１０のいずれかに記載の方法。
【請求項１２】
各ノードが、
（ｉ）第１の所定の期間中にすべてのターゲット・タスクがアップストリームまたはダウンストリームのいずれかに移行され、第２の所定の期間後にターゲット・タスク移行の方向を切り替えることができることと、
（ｉｉ）ターゲット・タスクがターゲット・ノードに移行される場合、所定の長さの時間の間、前記移行の前に最も近い隣接ダウンストリーム・ターゲット・タスクを移行することができないことと、
（ｉｉｉ）ターゲット・ノードへの移行後に、所定の長さの時間の間、ターゲット・タスクが前記ターゲット・ノードにとどまらなければならないことと、
（ｉｖ）２つのノードが同時にターゲット・タスクをターゲット・ノードに移行することはできないこと
という負荷交換制約を有する、請求項７乃至１１のいずれかに記載の方法。
【請求項１３】
前記ターゲット・ノード上での前記ターゲット・タスクの前記実行に関する統計値を収集するステップをさらに含む、請求項７乃至１２のいずれかに記載の方法。
【請求項１４】
コンピュータにより実行されることにより、前記コンピュータに請求項１乃至１３のいずれかに記載の方法の各ステップを行わせるコンピュータ・プログラム。
【国際調査報告】
2013502642.tif 000033