(57)【要約】  リアルタイムストリーム計算システムにおいて計算資源の容量を増大させる方法が提供される。このシステムでは、分散メッセージ待ち行列によって計算タスクが伝送される。この方法は、所定の条件を超える作業負荷を有する第１の計算ユニットをこのシステムが含むかどうかを判定することと、分散メッセージ待ち行列を通して伝送された計算タスクであり、所定の条件を超える作業負荷を有する第１の計算ユニットによって処理される予定の計算タスクを分割して、分割されたいくつかの計算タスクにすることと、分割された計算タスクを、処理用のいくつかの第２の計算ユニットに割り当てることとを含み、第２の計算ユニットの数は、分割された計算タスクの数と一致する。
2017510899.tif 000002
【特許請求の範囲】
【請求項１】
リアルタイムストリーム計算システムにおいて計算資源の容量を増大させる方法であって、分散メッセージ待ち行列によって計算タスクが伝送され、前記方法が、
所定の条件を超える作業負荷を有する第１の計算ユニットを前記システムが含むかどうかをプロセッサによって判定することと、
前記分散メッセージ待ち行列を通して伝送された計算タスクであり、前記所定の条件を超える作業負荷を有する前記第１の計算ユニットによって処理される予定の計算タスクを、前記プロセッサによって分割して、分割されたいくつかの計算タスクにすることと、
前記分割された計算タスクを、前記プロセッサによって、処理用のいくつかの第２の計算ユニットに割り当てることと、
を含み、第２の計算ユニットの数が、分割された計算タスクの数と一致する
方法。
【請求項２】
前記計算タスクが、１つまたは複数のメッセージスプリットを含む第１のメッセージスプリットクラスタを含み、前記メッセージスプリットがそれぞれ１つまたは複数のメッセージを含む、請求項１に記載の方法。
【請求項３】
所定の条件を超える作業負荷を有する第１の計算ユニットがあるかどうかの前記判定が、
前記第１のメッセージスプリットクラスタを処理する際の前記第１の計算ユニットの処理ステータスを取得すること
を含み、前記処理ステータスが、前記第１の計算ユニットのメッセージ処理プログレスと、前記第１の計算ユニットによって１秒間に処理されるいくつかのメッセージとを含み、前記メッセージ処理プログレスが、前記第１の計算ユニットによってメッセージが処理された第１の時刻と前記メッセージが生み出された時刻との差であり、前記判定がさらに、
前記所定の条件を超える作業負荷を前記第１の計算ユニットが有するかどうかを、取得した前記処理ステータスに基づいて判定すること
を含む、請求項２に記載の方法。
【請求項４】
前記第１の計算ユニットの前記メッセージ処理プログレスが所定のプログレスしきい値よりも大きく、かつ
前記第１の計算ユニットによって１秒間に処理されるメッセージの数が、前記第１の計算ユニットによって１秒間に処理される理論上の数のメッセージよりも大きいかまたはそれに等しい
ときに、前記第１の計算ユニットが前記所定の条件を超える作業負荷を有すると判定され、
前記計算タスクの前記分割が、作業中の全体の数の計算ユニットが、所定の最大数の計算ユニットよりも少ないときに実行される、
請求項３に記載の方法。
【請求項５】
前記計算タスクの前記分割が、前記第１のメッセージスプリットクラスタを２つの第２のメッセージスプリットクラスタに分割することを含み、
前記分割された計算タスクの前記割当てが、前記２つの第２のメッセージスプリットクラスタをそれぞれ、処理用の２つの第２の計算ユニットに割り当てることを含む、
請求項２に記載の方法。
【請求項６】
前記２つの第２のメッセージスプリットクラスタがそれぞれ実質的に等しい数のメッセージを含むような前記２つの第２のメッセージスプリットクラスタを形成するように、前記第１のメッセージスプリットクラスタが分割される、請求項５に記載の方法。
【請求項７】
前記２つの第２のメッセージスプリットクラスタを２つの第２の計算ユニットに割り当てる前記割当てが、
前記第１のメッセージスプリットクラスタの処理を停止するよう前記第１の計算ユニットに命令する停止コマンドを前記第１の計算ユニットに送信することと、
前記２つの第２のメッセージスプリットクラスタを、前記２つの第２の計算ユニットに対して準備することと、
前記２つの第２のメッセージスプリットクラスタの処理を始めるために前記２つの第２の計算ユニットに開始コマンドを送信することと
を含む、請求項６に記載の方法。
【請求項８】
リアルタイムストリーム計算において計算資源の容量を増大させる装置であって、
所定の条件を超える作業負荷を有する第１の計算ユニットがあるかどうかを判定するように構成された作業負荷判定ユニットと、
前記分散メッセージ待ち行列を通して伝送された第１の計算タスクであり、前記第１の計算ユニットによって処理される予定の第１の計算タスクを、前記所定の条件を超える作業負荷を前記第１の計算ユニットが有すると前記作業負荷判定ユニットが判定したときに分割するように構成された計算タスク分割ユニットと、
分割された前記計算タスクを、処理用のいくつかの第２の計算ユニットに割り当てるタスク割当てユニットと
を備え、第２の計算ユニットの数が、いくつかの分割された計算タスクと一致する
装置。
【請求項９】
前記計算タスクが、１つまたは複数のメッセージスプリットを含む第１のメッセージスプリットクラスタを含み、前記メッセージスプリットがそれぞれ１つまたは複数のメッセージを含む、請求項８に記載の装置。
【請求項１０】
前記作業負荷判定ユニットが、
前記第１のメッセージスプリットクラスタを処理する際の前記第１の計算ユニットの処理ステータスを取得するように構成された処理ステータス取得サブユニット
を備え、前記処理ステータスが、前記第１の計算ユニットのメッセージ処理プログレスと、前記第１の計算ユニットによって１秒間に処理されるいくつかのメッセージとを含み、前記メッセージ処理プログレスが、前記第１の計算ユニットによってメッセージが処理された第１の時刻と前記メッセージが生み出された時刻との差であり、前記作業負荷判定ユニットがさらに、
前記所定の条件を超える作業負荷を前記第１の計算ユニットが有するかどうかを、取得した処理ステータスに基づいて判定するように構成された作業負荷判定サブユニット
を備える、請求項９に記載の装置。
【請求項１１】
前記作業負荷判定サブユニットが、前記第１の計算ユニットについて、
前記第１の計算ユニットの前記メッセージ処理プログレスが所定のプログレスしきい値よりも大きいという条件、
前記第１の計算ユニットによって１秒間に処理されるメッセージの数が、前記第１の計算ユニットによって１秒間に処理される理論上の数のメッセージよりも大きいかまたはそれに等しいという条件、および
作業中の全体の数の計算ユニットが、最大数の所定の計算ユニットよりも少ないという条件
を判定するように構成された、請求項１０に記載の装置。
【請求項１２】
前記計算タスク分割ユニットが、前記第１のメッセージスプリットクラスタを２つの第２のメッセージスプリットクラスタに分割するように構成され、
前記タスク割当てユニットが、前記２つの第２のメッセージスプリットクラスタをそれぞれ、処理用の２つの第２の計算ユニットに割り当てるように構成された、
請求項９に記載の装置。
【請求項１３】
前記２つの第２のメッセージスプリットクラスタがそれぞれ実質的に等しい数のメッセージを含むよう前記第１のメッセージスプリットクラスタを分割するように、前記計算タスク分割ユニットが構成された、請求項１２に記載の装置。
【請求項１４】
前記タスク割当てユニットが、
前記第１のメッセージスプリットクラスタの処理を停止するよう前記第１の計算ユニットに命令する停止コマンドを前記第１の計算ユニットに送信するように構成された停止コマンド送信サブユニットと、
前記２つの第２のメッセージスプリットクラスタを、前記２つの第２の計算ユニットに対して準備するように構成されたタスク設定サブユニットと、
前記２つの第２のメッセージスプリットクラスタの処理を始めるために前記２つの第２の計算ユニットに開始コマンドを送信するように構成された開始コマンド送信サブユニットと
を備える、請求項１３に記載の装置。
【請求項１５】
リアルタイムストリーム計算システムにおいて計算資源を解放する方法であって、分散メッセージ待ち行列によって計算タスクが伝送され、前記システムが複数の計算ユニットを有し、前記方法が、
所定の条件よりも軽い作業負荷を有する第１の計算ユニットの第１の計算タスクを併合する必要があるかどうかをプロセッサによって判定することと、
前記判定が「はい」である場合に、前記第１の計算タスクを前記プロセッサによって併合して第２の計算タスクを形成することと
を含み、前記計算タスクがそれぞれ、１つまたは複数のメッセージスプリットを含むメッセージスプリットクラスタを含み、前記メッセージスプリットがそれぞれ１つまたは複数のメッセージを含み、前記方法がさらに、
前記第２の計算タスクを、前記プロセッサによって処理用の第２の計算ユニットに割り当てること
を含む方法。
【請求項１６】
前記第１の計算ユニットを１つまたは複数のグループにグループ化すること
をさらに含み、
前記第１の計算タスクの前記併合が、それぞれのグループの第１の計算ユニットの第１の計算タスクを併合することを含む、
請求項１５に記載の方法。
【請求項１７】
所定の条件よりも軽い作業負荷を有する第１の計算ユニットの第１の計算タスクを併合する必要があるかどうかの前記判定が、
第１のメッセージスプリットクラスタを処理する際の前記第１の計算ユニットの処理ステータスを取得すること
を含み、前記処理ステータスが、前記第１の計算ユニットのうちのそれぞれのメッセージ処理プログレスと、前記第１の計算ユニットのうちのそれぞれによって１秒間に処理されるいくつかのメッセージとを含み、前記メッセージ処理プログレスが、第１の計算ユニットによってメッセージが処理された第１の時刻と前記メッセージが生み出された時刻との差であり、前記判定がさらに、
取得した前記処理ステータスに基づいて、
２つ以上の第１の計算ユニットが、所定のプログレスしきい値よりも小さいかまたはそれに等しいメッセージ処理プログレスを有するかどうか、および
作業中の全体の数の第１の計算ユニットが、所定の最小数の計算ユニットよりも大きいかどうか
を判定すること
を含む、請求項１６に記載の方法。
【請求項１８】
前記グループがそれぞれ２つの第１の計算ユニットを含むように、前記第１の計算ユニットの前記グループ化が実行され、
第１のメッセージスプリットクラスタを処理する際の前記第１の計算ユニットの前記取得した処理ステータスに基づくと、それぞれのグループの前記２つの第１の計算ユニットによって１秒間に処理されるメッセージの数の和が、第１の計算ユニットによって１秒間に処理される理論上の数のメッセージよりも小さい、
請求項１７に記載の方法。
【請求項１９】
前記第２の計算タスクを前記第２の計算ユニットに割り当てる前記割当てが、
前記第１のメッセージスプリットクラスタの処理を停止するよう前記第１の計算ユニットに命令する停止コマンドを、それぞれのグループの前記第１の計算ユニットに送信することと、
第２のメッセージスプリットクラスタを、処理用の第２の計算ユニットに対して準備することと
を含み、前記第２のメッセージスプリットクラスタが、グループの前記第１の計算ユニットの２つの第１のメッセージスプリットクラスタを併合することによって形成され、前記割当てがさらに、
前記第２のメッセージスプリットクラスタの処理を始めるために前記第２の計算ユニットに開始コマンドを送信すること
を含む、請求項１８に記載の方法。
【請求項２０】
リアルタイムストリーム計算システムにおいて計算資源を解放する装置であって、
併合する必要がある第１の計算タスクを有する第１の計算ユニットがあるかどうかを判定するように構成された資源併合判定ユニットと、
分散メッセージ待ち行列を通して伝送された前記第１の計算タスクであり、前記第１の計算ユニットによって処理される予定の前記第１の計算タスクを併合して、第２の計算タスクを形成するように構成された計算タスク併合ユニットと、
前記第２の計算タスクを第２の計算ユニットに割り当てるように構成された併合済みタスク割当てユニットと
を備え、前記計算タスクがそれぞれ、１つまたは複数のメッセージスプリットを含むメッセージスプリットクラスタを含み、前記メッセージスプリットがそれぞれ１つまたは複数のメッセージを含む
装置。
【請求項２１】
前記第１の計算ユニットを１つまたは複数のグループにグループ化するように構成されたグループ化ユニット
をさらに備え、
前記計算タスク併合ユニットが、それぞれのグループの第１の計算ユニットの計算タスクを併合するように構成された、
請求項２０に記載の装置。
【請求項２２】
前記資源併合判定ユニットが、
第１のメッセージスプリットクラスタを処理する際の前記第１の計算ユニットの処理ステータスを取得するように構成された処理ステータス取得サブユニット
を備え、前記処理ステータスが、前記第１の計算ユニットのうちのそれぞれのメッセージ処理プログレスと、前記第１の計算ユニットのうちのそれぞれによって１秒間に処理されるいくつかのメッセージとを含み、前記メッセージ処理プログレスが、前記第１の計算ユニットによってメッセージが処理される第１の時刻と前記メッセージが生み出された時刻との差であり、前記資源併合判定ユニットがさらに、
取得した前記処理ステータスに基づいて、
２つ以上の第１の計算ユニットが、所定のプログレスしきい値よりも小さいかまたはそれに等しいメッセージ処理プログレスを有するかどうか、および
作業中の全体の数の第１の計算ユニットが、所定の最小数の計算ユニットよりも大きいかどうか
を判定するように構成された併合判定実行サブユニット
を備える、請求項２１に記載の装置。
【請求項２３】
前記グループ化ユニットが、前記グループがそれぞれ２つの第１の計算ユニットを含むようなグループ化を実行するように構成されており、
前記第１のメッセージスプリットクラスタを処理する際の前記第１の計算ユニットの取得された処理ステータスに基づくと、それぞれのグループの前記２つの第１の計算ユニットによって１秒間に処理されるメッセージの数の和が、第１の計算ユニットによって１秒間に処理される理論上の数のメッセージよりも小さい、
請求項２２に記載の装置。
【請求項２４】
前記併合済みタスク割当てユニットが、
前記第１のメッセージスプリットクラスタの処理を停止するよう前記第１の計算ユニットに命令する停止コマンドを、それぞれのグループの前記第１の計算ユニットに送信するように構成された停止コマンド送信サブユニットと、
第２のメッセージスプリットクラスタを、処理用の第２の計算ユニットに対して準備するように構成されたタスク設定サブユニットと
を備え、前記第２のメッセージスプリットクラスタが、それぞれのグループの前記第１の計算ユニットの２つの第１のメッセージスプリットクラスタを併合することによって形成され、前記併合済みタスク割当てユニットがさらに、
前記第２のメッセージスプリットクラスタの処理を始めるために前記第２の計算ユニットに開始コマンドを送信するように構成された開始コマンド送信サブユニット
を備える、請求項２３に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
[001]関連出願の相互参照
本出願は、２０１４年４月９日に出願された中国特許出願第２０１４１０１４０８６９．６号に基づき、この特許出願の優先権を主張するものである。この特許出願の内容は、その全体が参照によって本明細書に組み込まれる。
【０００２】
[002]技術分野
本開示は一般に、リアルタイムストリーム計算（real-time stream computing）の分野に関し、より詳細には、リアルタイムストリーム計算において計算資源（computing resource）の容量（capacity）を増大させる方法および装置、ならびに該容量を解放する方法および装置に関する。
【背景技術】
【０００３】
[003]  情報技術の急速な発展に伴って、入手可能な情報は爆発的ペースで拡大している。また、人々が情報を得る経路の多様性および便宜性も増している。同時に、タイムリーな情報に対する要求も増している。この発展と増大する要求とを合致させるため、大量のデータを計算し処理する主たる１つの方法は、分散クラスタ（distributed-cluster）リアルタイムストリーム処理システムを使用する方法である。リアルタイムストリーム処理システムでは一般に、大量のリアルタイムデータが別個のメッセージとして抽出される。これらのメッセージは次いで、予め割り当てられた計算ユニット（computing unit）に送信される。１つの計算ユニットがその計算を完了した後、その計算結果は、予め設定されたメッセージストリーム処理シーケンス（トポグラフィ関係（topographical relationship））に基づいて後続の計算ユニット（下流ノードとも呼ばれる）に伝送され、これが、メッセージストリーム処理が完了するまで続けられる。上流計算ノードと下流計算ノードの間のメッセージストリーム伝送に対してポイントツーポイント伝送同期モデルを使用することができ、伝送に対して分散メッセージ待ち行列（distributed message queue）を使用することができる。
【０００４】
[004]  データ量が安定しているとき、上述の分散ストリーム処理システムは一般に、固定された計算資源を使用することができる。しかしながら、リアルタイムデータ処理シナリオをビッグデータ（big data）に適用する際には、上流データ源からのデータストリームがしばしば変動する。システムがハイピークにあるときデータフローは増す。システムが低レベルにあるときデータフローは減る。他方、フォアグラウンドサービス論理（foreground service logic）の調整もデータフローの変動（fluctuation）を引き起こす。例えば、ショッピングウェブサイトが販売促進イベントを掲載しているときには、販売者の操作が頻繁にあり、通常にはない商品変更の増大が起こりうる。イベントが終わった後、商品変更率は通常に戻る。これらのイベントは、データフローの非常に大きな変動を引き起こす。
【０００５】
[005]  さらに、リアルタイムストリーム処理システムは、データフローの変動の可能性を予測することができない。リアルタイムシステムにおけるデータ処理の要求を満たすため、ハイピーク時にデータを処理するシステムの最大容量に基づいて、計算資源（すなわち計算ノード）を割り当てることができる。この方法は、システムのリアルタイム性を保証するが、システムが低データ処理期間にあるときには、大きな計算資源がアイドル状態（idle state）となり、無駄になる。さらに、データフローが大きく変動するビッグデータシナリオでは、計算資源の浪費がよりいっそう重大になる。
【０００６】
[006]  従来の分散ストリーム処理システムでは、メッセージの抽出および管理を主に、メッセージスプリット（message split）、メッセージ伝送および他の伝統的なビッグデータ概念などの技法に頼っている。これらの技法は、システムがどれくらいビジー（busy）であるのかを自動的に監視する能力を持たない。したがって、これらの技法は、計算資源を自動的に増大させる能力または計算資源を自動的に解放する能力を持たない。したがって、システム内の非常に大きなデータフロー変動に起因する問題を解決するため、計算ノードの動作を制御してシステムの計算資源を調整することが望まれている。すなわち、システムの作業負荷（workload）がより大きくなったことまたはより小さくなったことを見出した後に、システムに新たな計算ノードを追加し、またはシステムから計算ノードを除き、計算ノード間の結合関係を修正し、メッセージスプリットを変更して、システム計算資源を増大させまたはシステム計算資源を解放する必要があることがある。さらに、ポイントツーポイント同期モデルを使用してメッセージを伝送するストリーム計算システムは通常、緊密に結合された上流計算ノードおよび下流計算ノードを有する。計算資源の増大または解放は、上流および下流の全ての計算ノードに影響を及ぼしうる。これらの変更は、広域トポロジ構造（global topological structure）を変化させるため、一般に、最初に既存のサービスを停止してトポロジ割当てを変更し、次いでサービスを再開することが望ましい。これらの方策は、処理システム全体を複雑にし、かなりの時間を消費する。
【発明の概要】
【課題を解決するための手段】
【０００７】
[007]  いくつかの実施形態によれば、本開示は、リアルタイムストリーム計算システムにおいて計算資源の容量を増大させる方法を提供する。このシステムでは、分散メッセージ待ち行列によって計算タスク（computing task）が伝送される。この方法は、所定の条件を超える作業負荷を有する第１の計算ユニットをこのシステムが含むかどうかを判定することと、分散メッセージ待ち行列を通して伝送された計算タスクであり、所定の条件を超える作業負荷を有する第１の計算ユニットによって処理される予定の計算タスクを分割して、分割されたいくつかの計算タスクにすることと、分割された計算タスクを、処理用のいくつかの第２の計算ユニットに割り当てることとを含み、第２の計算ユニットの数は、分割された計算タスクの数と一致する。
【０００８】
[008]  いくつかの実施形態によれば、本開示は、リアルタイムストリーム計算において計算資源の容量を増大させる装置を提供する。この装置は、所定の条件を超える作業負荷を有する第１の計算ユニットがあるかどうかを判定するように構成された作業負荷判定ユニットと、分散メッセージ待ち行列を通して伝送された第１の計算タスクであり、第１の計算ユニットによって処理される予定の第１の計算タスクを、所定の条件を超える作業負荷を第１の計算ユニットが有すると作業負荷判定ユニットが判定したときに分割するように構成された計算タスク分割ユニットと、分割された計算タスクを、処理用のいくつかの第２の計算ユニットに割り当てるタスク割当てユニットとを備え、第２の計算ユニットの数は、いくつかの分割された計算タスクと一致する。
【０００９】
[009]  いくつかの実施形態によれば、本開示は、リアルタイムストリーム計算システムにおいて計算資源を解放する方法が提供される。このシステムでは、分散メッセージ待ち行列によって計算タスクが伝送される。このシステムは複数の計算ユニットを有する。この方法は、所定の条件よりも軽い作業負荷を有する第１の計算ユニットの第１の計算タスクを併合する必要があるかどうかを判定することと、この判定が「はい」である場合に、第１の計算タスクを併合して第２の計算タスクを形成することと、この第２の計算タスクを、処理用の第２の計算ユニットに割り当てることとを含む。計算タスクはそれぞれ、１つまたは複数のメッセージスプリットを含むメッセージスプリットクラスタを含む。メッセージスプリットはそれぞれ１つまたは複数のメッセージを含む。
【００１０】
[010]  いくつかの実施形態によれば、本開示は、リアルタイムストリーム計算システムにおいて計算資源を解放する装置を提供する。この装置は、併合する必要がある第１の計算タスクを有する第１の計算ユニットがあるかどうかを判定するように構成された資源併合判定ユニットと、分散メッセージ待ち行列を通して伝送された第１の計算タスクであり、第１の計算ユニットによって処理される予定の第１の計算タスクを併合して、第２の計算タスクを形成するように構成された計算タスク併合ユニットと、この第２の計算タスクを第２の計算ユニットに割り当てるように構成された併合済みタスク割当てユニットとを含む。計算タスクはそれぞれ、１つまたは複数のメッセージスプリットを含むメッセージスプリットクラスタを含む。メッセージスプリットはそれぞれ１つまたは複数のメッセージを含む。
【００１１】
[011]  本明細書に組み込まれ、本明細書の一部を構成する添付図面は、本発明に基づく実施形態を示し、本明細書の説明とともに、本発明の原理を説明する役目を果たす。
【図面の簡単な説明】
【００１２】
【図１】[012]本開示の技術結果を達成するいくつかの技術態様を示す略図である。
【図２】[013]リアルタイムストリーム計算において計算資源の容量を増大させる、本開示のいくつかの実施形態に基づく例示的な方法の流れ図である。
【図３】[014]本開示のいくつかの実施形態に従ってメッセージを処理している計算ユニットの時系列図である。
【図４】[015]本開示のいくつかの実施形態に基づく例示的な分割プロセスの略図である。
【図５】[016]本開示のいくつかの実施形態に基づく例示的な方法の流れ図である。
【図６Ａ】[017]本開示のいくつかの実施形態に基づく例示的な装置を示す図である。
【図６Ｂ】[018]本開示のいくつかの実施形態に基づく例示的な作業負荷判定ユニットを示す図である。
【図６Ｃ】[019]本開示のいくつかの実施形態に基づく例示的なタスク割当てユニットを示す図である。
【図７】[020]本開示のいくつかの実施形態に基づく例示的な併合プロセスの略図である。
【図８Ａ】[021]計算資源を解放する、本開示のいくつかの実施形態に基づく例示的な方法の流れ図である。
【図８Ｂ】[022]計算資源を解放する、本開示のいくつかの実施形態に基づく例示的な方法の流れ図である。
【図８Ｃ】[023]計算資源を解放する、本開示のいくつかの実施形態に基づく例示的な方法の流れ図である。
【図９】[024]計算タスクを併合する、本開示のいくつかの実施形態に基づく例示的な方法の流れ図である。
【図１０Ａ】[025]計算タスクを併合する、本開示のいくつかの実施形態に基づく例示的な装置を示す図である。
【図１０Ｂ】[026]本開示のいくつかの実施形態に基づく例示的な資源併合判定ユニットを示す図である。
【図１０Ｃ】[027]本開示のいくつかの実施形態に基づく例示的な併合済みタスク割当てユニットを示す図である。
【図１１】[028]本開示のいくつかの実施形態に基づく例示的なコンピュータを示す図である。
【発明を実施するための形態】
【００１３】
[029]  次に、例示的な実施形態を詳細に参照する。添付図面には、それらの例示的な実施形態の例が示されている。以下の説明では添付図面を参照する。添付図面では、そうではないと表示されていない限り、異なる図面の同じ符号が同じ要素または類似の要素を表す。例示的な実施形態の以下の説明に記載された実施態様は、本発明に基づく全ての実施態様を表しているわけではない。記載されたそれらの実施態様は、添付された特許請求の範囲に列挙された本発明に関する諸態様に基づく装置および方法の単なる例である。
【００１４】
[030]  図１は、本開示の技術結果を達成するいくつかの技術態様を示す略図である。
【００１５】
[031]  図１に示されているように、リアルタイムストリーム計算システム１００は、分散メッセージ待ち行列１０２を使用して計算タスクを伝送する。以下では、本開示に基づく例示的ないくつかの技術結果について説明する。システム１００は、計算ユニット１０４があまりに多くのタスクを有すること、すなわち分散メッセージ待ち行列１０２の量がハイピークにあることを自動的に検出する。次いで、図１の右側に示されているように、計算ユニット１０４の数が自動的に増やされる。さらに、分散メッセージ待ち行列１０２の量が小さいときにも同様に、システム１００がこの状態を検出し、計算ユニット１０４の数を、図１の左側に示されているように自動的に減らすことも可能である。
【００１６】
[032]  本開示のいくつかの実施形態によれば、リアルタイムストリーム計算において計算資源を増大させる方法および計算資源を解放する方法が提供される。これらの方法はともに、計算ユニット１０４の数、すなわち計算資源の数を、分散メッセージ待ち行列１０２を通して伝送された計算タスクに基づいて調整することを含む。前者の方法では、計算タスクがより大きくなったときに計算資源が増やされ、後者の方法では、計算タスクがより小さくなったときに計算資源が減らされる。
【００１７】
[033]  図２は、リアルタイムストリーム計算において計算資源の容量を増大させる、本開示のいくつかの実施形態に基づく例示的な方法２００の流れ図である。図２は、リアルタイムストリーム計算システム内で実行されるさまざまな工程を示す。
【００１８】
[034]  図２を参照すると、工程Ｓ２０１で、このシステムは、メッセージスプリットクラスタを処理する際のそれぞれの計算ユニットのステータスを取得する。
【００１９】
[035]  図１を再び参照すると、計算ユニット１０４はそれぞれ、分散メッセージ待ち行列１０２を通して計算タスクを取得する。メッセージ待ち行列１０２は、待ち行列内に配置されたいくつかのメッセージを含む。タスク割当てを容易にするため、それらのメッセージは分割されて、メッセージスプリットを形成している。１つのメッセージスプリットは複数のメッセージを含むことができ、それぞれのメッセージスプリットに含まれるメッセージの数は、スプリットメッセージ数（SplitIOPs）と呼ばれる。１つのメッセージ待ち行列はいくつかのメッセージスプリットを含むことができ、１つのメッセージ待ち行列をメッセージスプリットクラスタと呼ぶことができる。以下の説明では、計算ユニット１０４によって処理される予定のメッセージ待ち行列１０２をメッセージスプリットクラスタと呼ぶ。
【００２０】
[036]  いくつかの実施形態では、メッセージスプリットクラスタを処理する際の計算ユニット１０４のステータスが、計算ユニット１０４の作業負荷を示すある種の指標を含むことができる。例示的な指標には、計算タスクを処理する際の計算ユニット１０４のメッセージ処理プログレス（message processing progress）を示す指標、および計算ユニット１０４によって１秒間に処理されるいくつかのメッセージ（TPS）を示す指標を含めることができる。
【００２１】
[037]  図３は、メッセージを処理する計算ユニットの時系列図を示す。以下では、図３を参照して、計算ユニット１０４のメッセージ処理プログレス指標、および計算ユニット１０４によって１秒間に処理されるメッセージ数指標について説明する。
【００２２】
[038]  図３では、ストリーム計算システム１００によって処理される一片の情報をそれぞれメッセージと呼ぶ。計算ユニット１０４は、１つまたは複数の遠隔メッセージ源３０２からメッセージを受け取る。メッセージはそれぞれ、そのメッセージが作り出されまたは生み出された生成時刻（production time）ＴＰを有する。システム１００は時刻ＴＲにそのメッセージを受け取り、そのメッセージは、時刻ＴＣにおいて計算ユニット１０４によって完全に処理される。
【００２３】
[039]  メッセージ処理プログレスＰは例えば、ストリーム計算システム１００内における、メッセージが処理されたときの時刻ＴＨとメッセージ生成時刻ＴＰとの差と定義することができる。このシステム内に設定されたしきい値よりもＰが大きい場合、それは「プロセス遅延」と呼ばれ、そうでない場合、それは「通常のプロセス」と呼ばれる。このしきい値は、通常の計算作業負荷の範囲内で１つのメッセージを処理するのに１つの計算ユニットが使用する時間に従って設定することができる。計算ユニット１０４により多くの計算タスクが割り当てられた場合には、計算ユニット１０４の処理プログレスＰがこのしきい値を超えることがありうる。計算ユニット１０４が受け取る計算タスクがより少ない場合には、その計算ユニットの処理プログレスＰがこのしきい値よりも低くなることがありうる。
【００２４】
[040]  図３を参照すると、計算ユニット１０４はそれぞれ、遠隔メッセージ源３０２からメッセージを読み取る１つまたは複数のスレッド（thread）３０４を含むことができる。計算ユニット１０４によって１秒間に処理されるメッセージの数（TPS）を定義するため、計算ユニット１０４に含まれるスレッド３０４の数、および計算ユニット１０４内でメッセージを処理するための時間、すなわち待ち時間（latency）を考える。以下に詳細な説明を示す。
【００２５】
[041]  ストリーム計算システム１００では、１つのメッセージを処理するのに必要な時間を「待ち時間」と呼ぶ。いくつかの実施形態では、待ち時間がＴＣ−ＴＲに等しい。待ち時間の単位は一般にミリ秒である。通常の作業負荷の下では、計算ユニット１０４の待ち時間が通常、平均値を有する。以下の説明では、待ち時間が、この平均値を表すために使用され、待ち時間は、計算ユニット１０４が特定のメッセージの処理を終えるための実際の時間ではない。
【００２６】
[042]  リアルタイムストリーム計算システム１００内の計算ユニット１０４はＮ個のメッセージスプリットを処理する。それぞれのメッセージスプリットは、計算ユニット１０４の１つのスレッド３０４によって読み取ることができる。一般に、計算ユニット１０４は、多数のスレッドを利用してメッセージスプリットを同時に読み取る。計算ユニット１０４内のスレッドの数は図３に示されたＭである。メッセージスプリットの数量Ｎとスレッドの数量Ｍの間に相関はない。一般に、ＮはＭよりもはるかに大きい。
【００２７】
[043]  １秒間に処理されるメッセージの数を得るため、計算ユニット１０４によって処理される１つのメッセージの待ち時間、および計算ユニット１０４内のスレッド３０４の数を考慮する。例示的な式を以下に示す。
１秒間に処理されるメッセージの理論上の数（理論TPS）＝１０００／待ち時間×Ｍ
【００２８】
[044]  理論ＴＰＳは、計算ユニット１０４の関連パラメータに基づいて取得されるのであり、実際に計算ユニット１０４によって１秒間に処理されるメッセージの数に基づいて取得されるわけではない。
【００２９】
[045]  実際のＴＰＳは、計算ユニット１０４によって１秒間に処理される実際の数のメッセージである。
【００３０】
[046]  図３を参照すると、受け取られたメッセージスプリットは分散メッセージ待ち行列３０６を形成し、形成された分散メッセージ待ち行列３０６は次いで、１つまたは複数のプロセッサ３０８で処理される。
【００３１】
[047]  図２を再び参照すると、工程Ｓ２０１で、計算ユニット１０４の実際のメッセージ処理プログレスおよび実際のＴＰＳを使用して、計算ユニット１０４の処理ステータスを決定する。
【００３２】
[048]  工程Ｓ２０２で、システム１００は、所定の条件を超える作業負荷を有する計算ユニット１０４があるかどうかを、上で説明した計算ユニット１０４の処理ステータスに基づいて判定する。作業負荷が所定の条件を超えると判定された場合（はい）、この方法は工程Ｓ２０３へ進む。作業負荷が所定の条件を超えないと判定された場合（いいえ）、この方法は工程Ｓ２０１に戻る。
【００３３】
[049]  計算ユニット１０４の処理ステータスを決定する例示的な方法は、計算ユニット１０４について、以下の３つの条件が存在するかどうかを判定することを含む。
【００３４】
[050]  Ａ．計算ユニット１０４のメッセージ処理プログレスが所定のプログレスしきい値よりも大きい。
【００３５】
[051]  Ｂ．計算ユニット１０４が１秒間に処理するいくつかのメッセージが、ＴＰＳの理論値よりも大きいかまたはそれに等しい。
【００３６】
[052]  Ｃ．作業中の全体の数の計算ユニット１０４が、所定の最大数の計算ユニット１０４よりも少ない。
【００３７】
[053]  条件Ａのプログレスしきい値は、計算ユニット１０４が通常の条件で動作しているときに測定された処理プログレスパラメータに基づいて予め決められている。メッセージ処理プログレスが所定のプログレスしきい値よりも大きい場合、計算ユニット１０４は、計算ユニット１０４がプログレス遅延の状態にあると判定することができ、システムが計算資源を追加する必要がある可能性、すなわちシステムが計算資源を増大させる必要がある可能性がある。
【００３８】
[054]  条件Ｂが存在する場合、それは、計算ユニット１０４の作業負荷が大き過ぎることを意味し、システムが計算資源を追加する必要がある可能性がある。
【００３９】
[055]  条件Ｃは、計算資源を増大させる目的に使用することができる計算ユニットがあるかどうかを判定するために使用される。作業中の計算ユニットの総数が所定の最大値に等しい場合、その時点のシステムに計算ユニットを追加することは不可能である。すなわち、たとえプログレスに遅延がありそうであり、計算ユニットの作業負荷が大き過ぎるとしても、計算資源を増大させる目的に使用可能な資源がない。
【００４０】
[056]  所定の条件を超える作業負荷を有する（例えば上述の条件A、BおよびCを満たす）計算ユニット１０４がないと判定された場合、この方法は工程Ｓ２０１に戻り、メッセージスプリットクラスタを処理する際の計算ユニット１０４のステータスの監視を続ける。いくつかの実施形態では、処理ステータスを監視する資源を減らすため、工程Ｓ２０１に戻る前に、システム１００がある時間、遅延することができる。
【００４１】
[057]  工程Ｓ２０３で、システム１０１は、分散メッセージ待ち行列を通して伝送された計算タスクであり、所定の条件を超える作業負荷を有する計算ユニット１０４によって処理される予定の計算タスクを分割する。
【００４２】
[058]  一実施形態によれば、本開示は、計算タスクを分割するプロセスを説明するため、１つの計算ユニットによって処理される予定の一組の計算タスクを、２つの計算ユニット（担当計算ユニット（responsible computing unit））によって処理される２つのグループに分割する例を提供する。いくつかの実施形態では、一組の計算タスクを３つまたは４つのグループに分割することも可能である。しかしながら、一般に、一組の計算タスクを２つのグループに分割する方法はより単純であり、計算資源の増大を達成することができる。
【００４３】
[059]  分散メッセージ待ち行列を通して伝送された計算タスクを分割する際には、１つのメッセージスプリットが１単位として処理される。図４は、例示的な分割プロセスの略図である。
【００４４】
[060]  この分割プロセスでは、第１の工程が、計算ユニット１０４によって処理される予定のメッセージスプリットクラスタを２つのメッセージスプリットクラスタに分割する工程である。図４を参照すると、計算ユニットであるワーカ（Worker）Ａが、メッセージスプリットである４つのスプリットＡ〜スプリットＤを含むメッセージスプリットクラスタ４０２の処理を担当する。分割後には、スプリットＡおよびスプリットＢを含む第１のメッセージスプリットクラスタ４０４と、スプリットＣおよびスプリットＤを含む第２のメッセージスプリットクラスタ４０６とが形成されている。この２つのメッセージスプリットクラスタ４０４、４０６を処理する担当計算ユニットの作業負荷がほぼ等しくなるように、いくつかの実施形態では、この分割プロセスにおいて、第１のメッセージスプリットクラスタ４０４と第２のメッセージスプリットクラスタ４０６とが、実質的に等しい数のメッセージを含むことができる。
【００４５】
[061]  図２を再び参照すると、工程Ｓ２０４で、システム１００は、メッセージスプリットクラスタ４０４、４０６を担当計算ユニットに割り当てる。さらなる処理のため、担当計算ユニットの数は、クラスタの新たな数と一致させることができる。
【００４６】
[062]  図４に示されているように、分割が完了した後に、２つのメッセージスプリットクラスタ４０４、４０６はそれぞれ、処理用の２つの計算ユニット、すなわちワーカＡ１およびワーカＡ２に割り当てられる。
【００４７】
[063]  いくつかの実施形態では、このメッセージスプリットクラスタの割当てが、以下に示す３つの工程を含むことができる。
【００４８】
[064]  最初に、システム１００は、所定の条件を超える作業負荷を有するワーカＡに、現在のメッセージスプリットクラスタの処理を停止するようワーカＡに命令する停止コマンド（stop command）を送信する。
【００４９】
[065]  第２に、システム１００は、計算タスク、すなわちメッセージスプリットクラスタ４０４、４０６を、それらの計算タスクのさらなる処理を担当するそれぞれの計算ユニットに対して準備する。
【００５０】
[066]  システム１００は、所定の条件を超える作業負荷を有する図４のワーカＡなどの計算ユニット１０４に、メッセージスプリットクラスタの処理を停止させるコマンドを送信し、それによってワーカＡに処理を停止させる。このコマンドが送信される前に、システム１００は、ワーカＡの計算タスクを引き継ぐために他の計算ユニットが使用可能であると判定することができる。そのようにしないと、計算資源が無駄になる可能性がある。同時に、システム１００は、ワーカＡのメッセージスプリットクラスタの処理を担当する２つの計算ユニット、ワーカＡ１およびワーカＡ２に対するメッセージスプリットクラスタを準備する。例えば、図４に示されているように、処理用のワーカＡ１には、第１のメッセージスプリットクラスタ４０４のスプリットＡおよびスプリットＢが割り当てられ、処理用のワーカＡ２には、第２のメッセージスプリットクラスタ４０６のスプリットＣおよびスプリットＤが割り当てられる。
【００５１】
[067]  第３に、システム１００は、２つの計算ユニット、ワーカＡ１およびワーカＡ２に開始コマンド（start command）を送信して、それらの計算ユニットが、それらの計算ユニットに割り当てられた計算タスクの処理を始めることができるようにする。
【００５２】
[068]  割り当てられた計算タスクの準備ができた後、システム１００は、計算ユニットであるワーカＡ１およびワーカＡ２に、それらの計算ユニットに割り当てられた対応するそれぞれのメッセージスプリットクラスタの処理を始めさせることができる。いくつかの実施形態では、システム１００が、これらの２つの計算ユニットに開始コマンドを送信して、これらの２つの計算ユニットに、対応するそれぞれのメッセージスプリットクラスタ４０４、４０６の処理を開始させることができる。
【００５３】
[069]  上述の例示的な方法を使用して、元の計算ユニットのメッセージスプリットクラスタを２つに分割し、それらを２つの担当計算ユニットによって処理し、それによって計算資源を増大させる。
【００５４】
[070]  いくつかの実施形態では、この分割方法によって生成された新たな計算タスクを、元の計算ユニットとは異なる処理用のアイドル計算ユニットに割り当てることができる。計算ユニットの数がメッセージスプリットクラスタの数と一致する限りにおいて、それらの新たな計算タスクは、処理用の１つのアイドル計算ユニットおよび元の計算ユニットに割り当てることもできる。
【００５５】
[071]  例えば、図４を参照すると、元の計算ユニットであるワーカＡからの２つのメッセージスプリットクラスタ４０４、４０６を、２つのアイドル計算ユニット、すなわちワーカＡ１およびワーカＡ２に割り当てることができる。他の実施形態では、２つのメッセージスプリットクラスタ４０４、４０６を、処理用の１つのアイドル計算ユニット（ワーカA1）および処理用の元の計算ユニット（ワーカA）に割り当てることができる。すなわち、ワーカＡの元の計算タスクの処理をワーカＡおよびワーカＡ１が担当する。新たなメッセージスプリットクラスタを処理する計算ユニットを選び出す２つの例を上で説明したが、新たな計算ユニットを選び出す方法は、それらが本開示の着想から逸脱しない限りにおいて限定されない。
【００５６】
[072]  処理効率を向上させるため、いくつかの実施形態では、この分割方法によって生成される新たなメッセージスプリットクラスタが、実質的に等しい数のメッセージを含むことができる。メッセージスプリットに含まれるメッセージの数は常に同じであるとは限らないため、本開示はさらに、新たなそれぞれのメッセージスプリットクラスタ内のメッセージの数を実質的に等しくする方法を提供する。以下では、例示的な方法を詳細に説明する。
【００５７】
[073]  上で論じたとおり、所定の条件を超える作業負荷を有する計算ユニットのメッセージスプリットクラスタは、多数の新たなメッセージスプリットクラスタに分割される。異なる分割方法を使用すると、その結果として、元のクラスタが、異なる数の新たなクラスタに分割されることがある。システム１００は、システムのリアルタイム監視を実行するため、いくつかの実施形態では、システム１００が、元のそれぞれの計算ユニット１０４の、メッセージスプリットクラスタを処理する際のリアルタイム処理ステータスを得ることができる。このことによって、システム１００が過負荷状態にあるのかどうかを即座に見出すことができ、また、計算タスクを分割する必要がある可能性がある過負荷がかかった計算ユニットの位置を正確に突き止めることができる。この場合、元の計算ユニットによって処理される予定の元のメッセージスプリットクラスタは、さらなる処理のため、２つの新たなメッセージスプリットクラスタに分割され、これによって、元の計算ユニットにかかる作業負荷圧力を効果的に軽減することができる。
【００５８】
[074]  特定の必要性に基づいて元のメッセージスプリットクラスタを分割するため、さまざまな分割方法を使用することができる。一般に、リアルタイムストリーム処理システム１００において計算ユニット１０４が処理する基本的な対象はメッセージである。処理するメッセージが多いほど、計算ユニットは多忙になる。したがって、本開示は、元の計算ユニットによって処理される予定の元のメッセージスプリットクラスタを、できるだけ等しいいくつかのメッセージをそれぞれが有する２つのメッセージスプリットクラスタに分割するために、いくつかのメッセージに基づいてメッセージスプリットクラスタを分割する例示的なアルゴリズムを提供する。すなわち、それらの２つの新たなメッセージスプリットクラスタは、実質的に等しい数のメッセージを含む。以下では、この例示的なアルゴリズムを詳細に説明する。
【００５９】
[075]  所定の条件を超える作業負荷を有する計算ユニットによって処理される予定の元のメッセージスプリットクラスタ（例えば図４に示された元のメッセージスプリットクラスタ４０２）を、２つのクラスタ、すなわち第１のメッセージスプリットクラスタ４０４および第２のメッセージスプリットクラスタ４０６に分割する多くの方法が存在する場合がある。要件を満たす分割方法を見つけるために全ての可能な分割方法をシステムが試みる場合には、効率が相対的に低くなりうる。メッセージスプリットクラスタを効率的に分割するため、本開示は、元のメッセージスプリットクラスタのメッセージスプリットを、それぞれのメッセージスプリットに含まれるメッセージの数に従って分類（sort）する方法を提供する。例えば、メッセージスプリットを分類し、メッセージの数が最も少ないメッセージスプリット（最も小さいメッセージスプリット）から、メッセージの数が最も多いメッセージスプリット（最も大きなメッセージスプリット）まで順位付けする。システム１００は次いで、最初は空である第１のメッセージスプリットクラスタ４０４に、最も小さなメッセージスプリットから始めて、順位に従って小さいメッセージスプリットから大きなメッセージスプリットへと、メッセージスプリットを入れることを始める。第１のメッセージスプリットクラスタ４０４に蓄積されたメッセージの数が、元のメッセージスプリットクラスタ４０２の全メッセージの半分よりも少ない限りにおいて、システム１００は、第１のメッセージスプリットクラスタ４０４にメッセージスプリットを追加し続けることができる。第１のメッセージスプリットクラスタ４０４に蓄積されたメッセージが、元のメッセージスプリットクラスタ４０２のメッセージの半分よりも多くなったら、システム１００は、第１のメッセージスプリットクラスタ４０４にメッセージスプリットを追加するのを止め、それによって、第１のメッセージスプリットクラスタ４０４の作製を完了させる。残ったメッセージスプリットは、第２のメッセージスプリットクラスタ４０６に割り当てることができる。
【００６０】
[076]  元のメッセージスプリットクラスタ４０２を分割する上述の方法を用いると、最も効率的な方法を見つけるために、全ての可能な分割方法を試す必要がない。元のメッセージスプリットクラスタ４０２を２つの新たなクラスタ４０４、４０６に実質的に等しく分割するのに、分類を何回も実行する必要はなく、１回の線形分類（linear sorting）の実行で済む。このことは、システム１００が、１つの分割プロセスを実行する必要があることを意味し、このことは、元のメッセージスプリットクラスタ４０２の不均等な分割および多数回の試行錯誤につながる傾向がある手動操作に完全に依存する分割方法の使用を回避する。図５は、この分割アルゴリズム５００の諸工程の例示的な流れ図を示す。
【００６１】
[077]  工程Ｓ５０１で、元のメッセージスプリットクラスタ４０２に含まれるメッセージの総数ＱＳを算出する。
【００６２】
[078]  工程Ｓ５０２で、元のメッセージスプリットクラスタ４０２内のメッセージスプリットを、それぞれのメッセージスプリットに含まれるメッセージの数に基づいて分類し、小さなものから大きなものへ順位付けする。分類後のクラスタがＳであり、Ｓｉは、Ｓに含まれるｉ番目のメッセージスプリットを表し、Ｑｓｉは、メッセージスプリットＳｉに含まれるメッセージの数であり、ＳＮは、Ｓに含まれるメッセージスプリットの総数である。
【００６３】
[079]  工程Ｓ５０３で、初期化を実行する。この初期化では、ｉ＝０がセットされ、第１のメッセージスプリットクラスタ４０４および第２のメッセージスプリットクラスタ４０６が空であり（すなわちメッセージスプリットを含まず）、クラスタＡ４０４内のメッセージの数がゼロである（QA=0）。
【００６４】
[080]  工程Ｓ５０４で、Ｑｓｉ＋ＱＡ＜ＱＳ／２が真であるかどうかを判定する。これが真である場合（はい）、このプロセスは工程Ｓ５０５へ移動し、そうでない場合（いいえ）、プロセスは工程Ｓ５０７へ移動する。
【００６５】
[081]  工程Ｓ５０５で、第１のメッセージスプリットクラスタ４０４にメッセージスプリットＳｉを追加し、ＱＡを更新する。
【００６６】
[082]  工程Ｓ５０６で、システムはｉ＝ｉ＋１を実行し、工程５０４に戻る。
【００６７】
[083]  工程Ｓ５０７で、この分割プロセスは終了し、クラスタ４０４のメッセージスプリットを元のクラスタＳから減じて、新たな別のクラスタ４０６を得る。
【００６８】
[084]  工程Ｓ５０４で、この分割アルゴリズムがＱｓｉ＋ＱＡ＜ＱＳ／２を満たさないときには、分割プロセスを終了することができる。これは、メッセージスプリットは、メッセージスプリットに含まれるメッセージの数に基づいて小さなものから大きなものへ順位付けされているとき、メッセージスプリットＳｉの後の順位を有するメッセージスプリットは、Ｑｓｉよりも大きいかまたはそれに等しいにちがいないためである。したがって、ＳｉがＱｓｉ＋ＱＡ＜ＱＳ／２を満たすことができないとき、Ｓｉの後の順位を有するメッセージスプリットはいずれも要件Ｑｓｉ＋ＱＡ＜ＱＳ／２を満たすことができない。このような状況下で工程Ｓ５０４〜Ｓ５０６の反復を続ける必要はなく、分割プロセスは停止する。
【００６９】
[085]  上で論じたアルゴリズムでは、所定の条件を超える作業負荷を有する計算ユニットによって処理される予定の元のメッセージスプリットクラスタが、２つの新たなクラスタに分割される。他の実施形態では、このシステムが、元のメッセージスプリットクラスタを３つ以上の新たなクラスタに分割し、それらのクラスタを、新たなクラスタの数と一致するいくつかの計算ユニットに割り当てることができる。すなわち、例えば３つのクラスタを３つの計算ユニットに割り当てる。このシステムは、計算ユニットのプロセス遅延がこのシステムによって検出されたことに基づいて、または計算ユニットによって報告された他のデータに基づいてこの分割方法を実行することができ、このシステムは、システム内のデータフローの急速な増大の傾向があると判定する。
【００７０】
[086]  本開示はさらに、リアルタイムソース計算において計算資源の容量を増大させる装置を提供する。例示的な装置６００が図６Ａに示されている。図６Ａを参照すると、装置６００は、所定の条件を超える作業負荷を有する計算ユニットがあるかどうかを判定するように構成された作業負荷判定ユニット６０１を含む。装置６００はさらに、所定の条件を超える作業負荷を有すると作業負荷判定ユニット６０１が判定した計算ユニットの計算タスクであり、分散メッセージ待ち行列を通して伝送された計算タスクを分割するように構成された計算タスク分割ユニット６０２を含む。装置６００はさらに、分割された計算タスクを、メッセージスプリットクラスタの数と一致したいくつかの計算ユニットに割り当てるように構成されたタスク割当てユニット６０３を含む。
【００７１】
[087]  いくつかの実施形態では、計算タスク分割ユニット６０２が、１つまたは複数のメッセージスプリットを含むメッセージスプリットクラスタを分割することができ、それらのメッセージスプリットはそれぞれ１つまたは複数のメッセージを含むことができる。
【００７２】
[088]  他の実施形態では、図６Ｂに示されているように、作業負荷判定ユニット６０１が、処理ステータス取得サブユニット６０１−１および作業負荷判定サブユニット６０１−２を含むことができる。
【００７３】
[089]  処理ステータス取得サブユニット６０１−１は、メッセージスプリットクラスタを処理する際の計算ユニットの処理ステータスを取得するように構成されている。この処理ステータスは、計算ユニットのメッセージ処理プログレス、および計算ユニットによって１秒間に処理されるいくつかのメッセージを含むことができる。メッセージ処理プログレスは、計算ユニットによってメッセージが処理された時刻とそのメッセージが生み出された時刻との差とすることができる。
【００７４】
[090]  作業負荷判定サブユニット６０１−２は、所定の条件を超える作業負荷を有する計算ユニットがあるかどうかを、処理ステータス取得サブユニット６０１−１によって取得された計算ユニットの処理ステータスに基づいて判定するように構成されている。
【００７５】
[091]  いくつかの実施形態では、作業負荷判定サブユニット６０１−２が、以下の３つの条件が満たされているかどうかを判定するように構成されている。
【００７６】
[092]  第１に、計算ユニット１０４のメッセージ処理プログレスが所定のプログレスしきい値よりも大きいと判定される。
【００７７】
[093]  第２に、計算ユニット１０４が１秒間に処理するいくつかのメッセージが、ＴＰＳの理論値よりも大きいかまたはそれに等しいと判定される。
【００７８】
[094]  第３に、現在作業中の計算ユニット１０４の総数が、所定の最大数の計算ユニットよりも少ないと判定される。
【００７９】
[095]  いくつかの実施形態では、計算タスク分割ユニット６０２が、元の計算ユニットによって処理される予定のメッセージスプリットクラスタを２つのメッセージスプリットクラスタに分割するように構成されている。
【００８０】
[096]  これに対応して、タスク割当てユニット６０３は、それらの２つのメッセージスプリットクラスタをそれぞれ、処理用の２つの担当計算ユニットに割り当てるように構成される。
【００８１】
[097]  いくつかの実施形態では、計算タスク分割ユニット６０２が、元の計算ユニットによって処理される予定のメッセージスプリットクラスタを、実質的に等しい数のメッセージをそれぞれが含む２つのメッセージスプリットクラスタに分割するように構成されている。
【００８２】
[098]  いくつかの実施形態では、タスク割当てユニット６０３が、図６Ｃに示された停止コマンド送信サブユニット６０３−１、タスク設定サブユニット６０３−２および開始コマンド送信サブユニット６０３−３を含む。
【００８３】
[099]  停止コマンド送信サブユニット６０３−１は、所定の条件を超える作業負荷を有する計算ユニットに、現在のメッセージスプリットクラスタの処理を停止するようその計算ユニットに命令するコマンドを送信するように構成される。
【００８４】
[0100]  タスク設定サブユニット６０３−２は、２つ以上の対応するそれぞれの計算ユニットによって処理される新たなメッセージスプリットクラスタを準備するように構成される。
【００８５】
[0101]  開始コマンド送信サブユニット６０３−３は、それらの２つ以上の計算ユニットのうちのそれぞれの計算ユニットに、それらの新たなメッセージスプリットクラスタの処理を始めるようそれらの計算ユニットに命令する開始コマンドを送信するように構成される。
【００８６】
[0102]  リアルタイムストリーム計算において計算資源の容量を増やす上述の方法に加えて、本開示はさらに、リアルタイムストリーム計算において計算資源を解放する方法を提供する。図７は、リアルタイムストリーム計算において計算資源を解放する例示的な略図を示す。
【００８７】
[0103]  以下では、図７を参照して、分散メッセージ待ち行列を使用して計算タスクを伝送するリアルタイムストリーム計算システムにおいて計算資源を解放する技術態様を説明する。システム１００は、軽すぎる計算ユニット１０４の作業負荷を自動的に検出することができる。すなわち、システム１００は、分散メッセージ待ち行列のデータフロー量が低レベルにあるときを自動的に検出することができる。システム１００は、所定の条件よりも軽い作業負荷を有する計算ユニット１０４の計算タスクを併合する必要があるかどうかを判定する。システム１００は、併合アルゴリズムを使用して、２つ以上の計算ユニット、例えばワーカＡおよびワーカＢのタスク７０２、７０４を併合し、併合されたタスク７０６を、計算ユニット、例えば処理用のワーカＡ１に送信することができる。計算ユニットの数が減らされたときに計算資源を解放することができる。
【００８８】
[0104]  本開示は、リアルタイムストリーム計算において計算資源を解放する方法を提供する。以下ではこの方法を詳細に説明する。
【００８９】
[0105]  図８Ａは、リアルタイムストリーム計算において計算資源を解放する例示的な方法８００の流れ図である。
【００９０】
[0106]  工程Ｓ８０１で、システム１００は、そのメッセージスプリットクラスタを処理する際のそれぞれの計算ユニットの処理ステータスを取得する。
【００９１】
[0107]  計算ユニットの処理ステータスは、計算ユニットの作業負荷を評価するための指標を含むことができる。このような指標は一般に、計算ユニット１０４のメッセージ処理プログレスを示す指標、および計算ユニット１０４によって１秒間に処理されるいくつかのメッセージを示す指標を含む。これらの２つのパラメータの意味については図３に関する実施形態で既に詳細に説明しており、ここでは繰り返さない。
【００９２】
[0108]  工程Ｓ８０２で、システム１００は、メッセージスプリットクラスタを処理する計算ユニットの処理ステータスに基づいて、システム１００内で以下の２つの条件が満たされているかどうかを判定する。
【００９３】
[0109]  Ａ．２つ以上の計算ユニット１０４が、所定のプログレスしきい値よりも小さいかまたはそれに等しいメッセージ処理プログレスを有する。
【００９４】
[0110]  Ｂ．作業中の全体の数の計算ユニット１０４が、所定の最小数の計算ユニットよりも大きい。
【００９５】
[0111]  これらの両方の条件が満たされている場合（はい）、この方法は工程Ｓ８０３に移動し、そうでない場合（いいえ）、この方法は工程Ｓ８０１に戻って、処理ステータスの監視を続ける。
【００９６】
[0112]  上記の条件Ａは、リアルタイムストリーム計算システム全体の中に、メッセージスプリットクラスタを処理する軽い作業負荷を有するあるいくつかの計算ユニットがあるかどうかを判定する。計算タスクの併合は、少なくとも２つの計算ユニット（すなわち2つ以上の計算ユニット）が軽い作業負荷を有するときに実行可能である。
【００９７】
[0113]  プログレスしきい値は、計算ユニットの作業負荷が軽いかどうかを判定する基礎である。このプログレスしきい値は、工程Ｓ２０２に関連して論じたプログレスしきい値と同様の概念である。しかしながら、プログレスしきい値は、それぞれの実施形態において異なる役割を演じるため、プログレスしきい値の値は互いに異なりうる。計算ユニット１０４のメッセージ処理プログレスが所定のプログレスしきい値よりも小さいとき、計算ユニット１０４の作業負荷は軽いと判定することができる。ストリーム計算システム全体の中で２つ以上の計算ユニットがこの状態にある場合、システム１００は、資源を解放するための方策をとることができる。
【００９８】
[0114]  条件Ｂは、リアルタイムストリーム計算システム１００の全体で、作業中の計算ユニットの総数が、所定の最小数の計算ユニット１０４よりも大きいかどうかを判定するために使用される。リアルタイムストリーム計算システム１００の動作は通常、入って来る計算タスクの変動を考慮する必要がある。変動に応答して計算資源を受動的に増やすことを回避するため、システム１００は一般に、タスクを処理するために最小数の計算ユニットを維持するであろう。条件Ｂは、リアルタイムストリーム計算システム１００内の作業中の計算ユニット１０４が、この要件を満たしているかどうかを判定するために使用される。作業中の全体の数の計算ユニットが既に、計算ユニットの所定の最小数よりも少ないかまたはそれに等しい場合、計算タスクを併合する必要はない。
【００９９】
[0115]  条件Ａと条件Ｂのうちの一方の条件が満たされていないと判定された場合、この方法は工程Ｓ８０１に戻って、メッセージスプリットクラスタを処理する際の計算ユニットの処理ステータスの監視を続ける。処理ステータスを監視する際に費やされる資源を減らすため、工程Ｓ８０１に戻る前に、システム１００は、ある時間、遅延することができる。
【０１００】
[0116]  工程Ｓ８０３で、このシステムは、分散メッセージ待ち行列を通して伝送された計算タスクであり、低作業負荷レベルにある計算ユニットによって処理される予定の計算タスクを併合する。
【０１０１】
[0117]  上記の実施形態において説明したとおり、計算タスクは、１つまたは複数のメッセージスプリットを含むメッセージスプリットクラスタを含む。それらのメッセージスプリットはそれぞれ１つまたは複数のメッセージを含む。
【０１０２】
[0118]  併合を実行するためにさまざまな方法を使用することができる。以下では、図８Ｂを参照して例示的な方法を提供する。
【０１０３】
[0119]  工程Ｓ８０３−１で、システム１００は、タスクを併合する必要がある計算ユニットをグループ化する。
【０１０４】
[0120]  いくつかの実施形態では、グループがそれぞれ２つの計算ユニットを含むことができる。２つの計算ユニットを分類して１つのグループにすることはより容易であり、それは、リアルタイムストリーム計算システム１００に大きな柔軟性を提供する。他の実施形態では、ある種の状況下において、グループがそれぞれ３つ以上の計算ユニットを含むことができる。
【０１０５】
[0121]  計算ユニットをグループ化する際に、システム１００は、結合された計算タスクが、その結合されたタスクの処理に割り当てられるであろう担当計算ユニットの１秒間に処理されるメッセージの理論上の数（理論TPS）よりも小さいことを保証するために、１つのグループのそれぞれの計算ユニットによって１秒間に処理されるメッセージの数を取得することができる。理論ＴＰＳの概念については既に上で論じた。このことは、資源の解放が原因で、計算タスクを処理する際にその後に遅延が生じることがないことを保証する。このような遅延は、結合されたタスクが大き過ぎてタスクを適時に処理することができないために生じる。
【０１０６】
[0122]  工程Ｓ８０３−２で、システム１００は、分散メッセージ待ち行列を通して伝送された計算タスクであり、計算タスクを併合する必要がある計算ユニットによって処理される予定の計算タスクを併合する。
【０１０７】
[0123]  いくつかの実施形態では、２つの計算ユニットによって処理される予定の計算タスクが１つの計算タスクに併合される。併合によって形成されるメッセージスプリットクラスタは、後に論じる工程Ｓ８０４で割り当てられる１つの担当計算ユニットによって処理される。
【０１０８】
[0124]  工程Ｓ８０４で、システム１００は、併合された計算タスクの処理に１つの計算ユニットを割り当てる。
【０１０９】
[0125]  工程Ｓ８０４は、図８Ｃに示された３つの下位工程を含むことができる。
【０１１０】
[0126]  図８Ｃを参照すると、工程Ｓ８０４−１で、システム１００は、元のメッセージスプリットクラスタの処理を停止するよう計算ユニットに命令する停止コマンドを、１つのグループの計算ユニットに送信する。工程Ｓ８０４−２で、システム１００は、併合された計算タスクを、併合された計算タスクの処理に割り当てられた担当計算ユニットに対して準備する。工程Ｓ８０４−３で、システム１００は、併合された計算タスクの処理を始めるよう計算ユニットに命令する開始コマンドを、担当計算ユニットに送信する。
【０１１１】
[0127]  計算ユニットが、メッセージスプリットクラスタの処理を停止すると、タスクの繰り返される処理および計算資源の浪費を回避することが可能である。システム１００はさらに、担当計算ユニットに対して、併合された計算タスク（メッセージスプリットクラスタ）を準備する。１つのグループの２つの元の計算ユニットによって処理される予定の元のメッセージスプリットクラスタが、１つのメッセージスプリットクラスタに併合される。
【０１１２】
[0128]  併合されたメッセージスプリットクラスタの処理を担当計算ユニットが始めることを可能にするため、併合された計算タスクの処理を担当する担当計算ユニットに開始コマンドが送信される。
【０１１３】
[0129]  いくつかの実施形態では、併合された計算タスクが、処理用の元の計算ユニットとは異なるアイドル計算ユニットに割り当てられるか、または処理用の元の計算ユニットのうちの１つの計算ユニットに割り当てられる。これらの割当て方法はともに、計算資源を解放する目的を達成することができ、本開示の実施形態と整合する。しかしながら、割当て方法はこれらの方法だけに限定されない。
【０１１４】
[0130]  他の実施形態では、このシステムが、所定の条件よりも軽い作業負荷を有する全ての計算ユニットを決定し、それらの計算タスクを併合して１つの計算タスクとし、併合された計算タスクを担当計算ユニットに割り当てることができる。この方法は単純であり、元の２つ以上の計算ユニットによって処理されたであろう併合された計算タスクを１つの担当計算ユニットが処理するため、多くの計算資源を解放することができる。この方法は多くの計算資源を解放することができるが、併合された計算タスクが大きくなりすぎることがあり、それによって、併合された計算タスクの処理を担当する担当計算ユニットに過負荷がかかることがあり、その結果、その後に追加の分割操作を実行する必要が生じることがある。この問題を回避するため、本開示は、計算ユニットをグループ化する方法を提供する。以下では、計算ユニットをグループ化する例示的な方法を説明する。
【０１１５】
[0131]  最初に、システムは、計算タスクを併合する必要がある計算ユニットを複数のグループに分ける。システムは次いで、それぞれのグループの計算ユニットの計算タスクを併合する。上で論じたとおり、計算タスク（メッセージスプリットクラスタ）は、分散メッセージ待ち行列を通して計算ユニットに伝送される。このシステムは、１つのグループ内の計算ユニットの数が大きくなりすぎること、および大き過ぎて計算ユニットが処理できない併合された計算タスクを生み出すことを回避することができる。さまざまなグループ化戦略を使用して計算ユニットをグループ化することができる。例えば、計算ユニットによって処理されるいくつかのメッセージ、またはメッセージスプリットクラスタを処理する際の計算ユニットの処理ステータスに基づいて、グループ化を実行することができる。それぞれのグループのサイズを変更することもできる。例えば、いくつかの実施形態では、グループがそれぞれ３つの計算ユニットを含むことができる。他の実施形態では、グループがそれぞれ２つの計算ユニットを含むことができる。
【０１１６】
[0132]  本開示は、実施形態を提供する際に上記の技術態様を企図する。例えば、計算タスクを併合する必要がある計算ユニットを１つまたは複数のグループに分ける。グループはそれぞれ２つの計算ユニットを含むことができる。いくつかの実施形態では、それぞれのグループの計算ユニットの取得された処理ステータスデータに基づいて、それぞれのグループの２つの計算ユニットに対する１秒間に処理されるメッセージの数が加算される。その和は、担当計算ユニットによって１秒間に処理されるメッセージの理論上の数よりも少ないであろう。以下では、例示的な併合アルゴリズムをより詳細に説明する。
【０１１７】
[0133]  上述のとおり、このシステムは、軽い作業負荷を有する２つの計算ユニットを１つのグループに割り当てることができる。このシステムは、計算ユニットを割り当てるさまざまな方法を有することができ、それぞれのグループの計算ユニットの計算タスクを併合することによって得られた併合された計算タスクが、併合された計算タスクの処理を担当するコンピュータユニット（担当計算ユニット）に過負荷をかけないことを保証するため、さまざまな組合せを試みることができる。しかしながら、試行錯誤の性質上、効率は相対的に低いことがある。併合された計算タスクが、担当計算ユニットの容量を超えないという要件を満たすため、および併合効率を高めるために、いくつかの実施形態では、このシステムが、全ての計算ユニットを、その計算ユニットの１秒間に処理されるいくつかのメッセージ（RealTPS）に基づいて、例えば小さなものから大きなものへ順に順位付けして、プール（pool）を得ることができる。このシステムは次いで、このプールから、最も小さなＲｅａｌＴＰＳを有する最初の計算ユニットおよび最も大きなＲｅａｌＴＰＳを有する最後の計算ユニットを選び出すことができる。このシステムは、これらの２つのＲｅａｌＴＰＳを足し合わせ、その和が、担当計算ユニットの理論ＴＰＳよりも小さいかどうかを判定する。小さくない場合、システムは、２番目に大きなＲｅａｌＴＰＳをプールから選び出し、それを最も小さなＲｅａｌＴＰＳに足し合わせ、その和が、担当計算ユニットの理論ＴＰＳよりも小さいかどうかを判定する。これらの加算操作および判定操作を、この和が、担当計算ユニットの理論ＴＰＳよりも小さくなるまで続けることができる。このことは、足し合わされているＲｅａｌＴＰＳに対応する２つの元の計算ユニットを１つのグループに割り当てることができることを意味する。それらの２つの計算ユニットは次いでプールから除かれる。同じ方法を実行して、プール内の残りの計算ユニットをグループに割り当てることができる。
【０１１８】
[0134]  担当計算ユニットに過負荷をかけることを回避するため、元の計算ユニットをグループ化する上述の方法は、併合された計算タスクが、担当計算ユニットの処理容量を超えないことを保証することができる。さらに、このグループ化法は、プール内の最も小さなＲｅａｌＴＰＳを選び出し、それを、プール内の大きなＲｅａｌＴＰＳ（最も大きなものから始める）に足し合わせることに基づいて実行されるため、この方法は、担当計算ユニットが処理するのにはその中の併合された計算タスクが非常に小さいグループを形成することを回避することができる。これによって、計算資源の浪費を回避することができ、計算資源の解放を最大化にすることができる。これらの２つの態様が考慮されるため、本開示のアルゴリズムを実行するシステムは、このグループ化プロセスを首尾よく実行することができ、また、不均等な作業負荷および調整を繰り返す必要性につながる手動操作に完全に依存して併合を実行することを回避することができる。図９は、リアルタイムストリームシステムによって実行される併合アルゴリズムの基本的な工程を説明する例示的な方法９００の流れ図である。
【０１１９】
[0135]  以下の説明では、ＭＱが、計算ユニットによって１秒間に処理されるメッセージの理論上の数である。
【０１２０】
[0136]  工程Ｓ９０１で、このシステムは、所定の条件よりも軽い作業負荷を有する計算ユニットを、それらの計算ユニットのＲｅａｌＴＰＳに基づいて、小さなものから大きなものへ分類して、計算ユニットプールＡを得る。プール内の全体の数の計算ユニットがＡＮである。Ａ０、Ａ１、．．．、ＡＡＮ−１はプールＡ内の計算ユニットを表す。ＲＱ［ｉ］は、ｉ番目の計算ユニットのＲｅａｌＴＰＳを表す。このアルゴリズムを実行すると、計算ユニットがグループに割り当てられた後に計算ユニットはプールから除かれる。さらに、ＡＮの値が変化し、残りの計算ユニットの指数（index）がそれに応じて調整される。
【０１２１】
[0137]  工程Ｓ９０２で、このシステムは、ＡＮ＞１が満たされているかどうかを判定する。この条件が満たされていると判定された場合（はい）、それは、プールＡに少なくとも２つの計算ユニットがあることを示している。方法９００は次いで工程Ｓ９０３に進む。そうでない場合（いいえ）、この方法は工程Ｓ９０９で終了となる。
【０１２２】
[0138]  工程Ｓ９０３で、このシステムは、プールＡ内の最初の計算ユニット（A0）としてＴをセットし、ＴをプールＡから除く。システムはＡＮ＝ＡＮ−１を実行する。すなわち、残りの計算ユニットの数がＡＮ−１個になる。
【０１２３】
[0139]  工程Ｓ９０４で、このシステムはｊ＝ＡＮを確立する。これは、プールＡに現在ある計算ユニットの数である。
【０１２４】
[0140]  工程Ｓ９０５で、このシステムはｊ＝ｊ−１を確立する。工程Ｓ９０４に続いてこの工程が実行される場合、ｊは、プールＡに現在ある最後の計算ユニットの指数値を表す。後に論じる工程Ｓ９０７に続いてこの工程が実行される場合、ｊは、プールＡ内の最後の計算ユニットＡｊの前の計算ユニットの指数値を表す。
【０１２５】
[0141]  工程Ｓ９０６で、このシステムはｊ＞０であるかどうかを判定する。この条件が満たされていると判定された場合（はい）、この方法は工程Ｓ９０７に進む。そうでない場合（いいえ）、それは、プールＡに計算ユニットが残っていないことを意味し、この方法は工程Ｓ９０２に戻り、他の計算タスクと併合することができる計算タスクを有する計算ユニットの捜索を続ける。
【０１２６】
[0142]  工程Ｓ９０７で、このシステムは、ＲＱ［Ａｊ］＋ＲＱ［Ｔ］＜ＭＱであるかどうかを判定する。この条件が満たされていると判定された場合（はい）、それは、Ｔと一緒にグループ化することができる計算ユニットがあることを意味し、この方法９００は工程Ｓ９０８に進む。そうでない場合（いいえ）、この方法は工程Ｓ９０５に戻る。
【０１２７】
[0143]  工程Ｓ９０８で、このシステムは、ＴおよびＡｊからなるグループを形成し、ＡｊをプールＡから除く。システムはＡＮ＝ＡＮ−１を実行し、工程Ｓ９０２に戻る。
【０１２８】
[0144]  上述の実施形態は、リアルタイムストリーム計算において計算資源を解放する方法を提供する。本開示はさらに、リアルタイムストリーム計算においてコンピュータ資源を解放する装置を提供する。例示的な装置が図１０Ａに示されている。
【０１２９】
[0145]  図１０Ａを参照すると、リアルタイムストリーム計算において計算資源を解放する装置１０００は、併合する必要がある計算タスクを有する計算ユニットがあるかどうかを判定するように構成された資源併合判定ユニット１００１、分散メッセージ待ち行列を通して伝送された計算タスクであり、計算ユニットによって処理される予定の計算タスクを併合するように構成された計算タスク併合ユニット１００２、および併合された計算タスクを、計算タスク併合ユニット１００２によって出力された併合された計算タスクの処理を担当する計算ユニット（担当計算ユニット）に割り当てるように構成された併合済みタスク割当てユニット１００３を含む。計算タスクは、１つまたは複数のメッセージスプリットを有するメッセージスプリットクラスタを指す。メッセージスプリットはそれぞれ１つまたは複数のメッセージを含む。
【０１３０】
[0146]  いくつかの実施形態では、装置１０００がさらに、元の計算ユニットをグループ化するグループ化ユニット１００４を含む。
【０１３１】
[0147]  これに対応して、計算タスク併合ユニット１００２は、それぞれのグループ内の計算ユニットの計算タスクを併合することができる。
【０１３２】
[0148]  他の実施形態では、図１０Ｂに示されているように、資源併合判定ユニット１００１が、処理ステータス取得サブユニット１００１−１および併合判定実行サブユニット１００１−２を含む。
【０１３３】
[0149]  処理ステータス取得サブユニット１００１−１は、メッセージスプリットクラスタを処理する際の計算ユニットの処理ステータスを取得するように構成されている。この処理ステータスは、計算ユニットのメッセージ処理プログレス、および計算ユニットによって１秒間に処理されるいくつかのメッセージを含むことができる。メッセージ処理プログレスは、計算ユニットによってそのメッセージが処理された時刻とそのメッセージが生み出された時刻との差である。
【０１３４】
[0150]  併合判定実行サブユニット１００１−２は、処理ステータス取得サブユニット１００１−１によって取得された計算ユニットの処理ステータスに基づいて、以下の２つの条件が満たされているかどうかを判定するように構成されている。
【０１３５】
[0151]  １．２つ以上の計算ユニットが、所定のプログレスしきい値よりも小さいかまたはそれに等しいメッセージ処理プログレスＰを有する。
【０１３６】
[0152]  ２．作業中の全体の数の計算ユニットが、所定の最小数の計算ユニットよりも大きい。
【０１３７】
[0153]  いくつかの実施形態では、グループ化ユニット１００４が、２つの元の計算ユニットをそれぞれが含む複数のグループを形成するように構成されている。グループ化ユニット１００４は、以下の条件に基づいて計算ユニットをグループ化することができる。
【０１３８】
[0154]  処理ステータス取得サブユニット１００１−１によって取得された計算ユニットの処理ステータスデータに基づくと、それぞれのグループ内の２つの計算ユニットによって１秒間に処理されるメッセージの数の和が、１つの計算ユニットによって１秒間に処理されるメッセージの理論上の数よりも少ない。
【０１３９】
[0155]  いくつかの実施形態では、図１０Ｃに示されているように、併合タスク割当てユニット１００３が、停止コマンド送信サブユニット１００３−１、タスク設定サブユニット１００３−２および開始コマンド送信サブユニット１００３−３を含むことができる。
【０１４０】
[0156]  停止コマンド送信サブユニット１００３−１は、メッセージスプリットクラスタの処理を停止するよう計算ユニットに命令する停止コマンドを、グループの計算ユニットに送信するように構成されている。
【０１４１】
[0157]  タスク設定サブユニット１００３−２は、併合されたメッセージスプリットクラスタの処理を担当する計算ユニットに対して、併合されたメッセージスプリットクラスタ（併合された計算タスク）を準備するように構成されている。
【０１４２】
[0158]  開始コマンド送信サブユニット１００３−３は、併合された計算タスクの処理を始めるよう担当計算ユニットに命令する開始コマンドを、併合された計算タスクの処理を担当する計算ユニットに送信するように構成されている。
【０１４３】
[0159]  図１１を参照すると、上述の実施形態は、１つまたは複数のプロセッサ（CPU）１１０１、入力／出力インタフェース１１０２、ネットワーキングインタフェース１１０３および内部記憶装置１１０４を含むコンピュータ１１００によって実行することができる。例えば、リアルタイムストリーム計算システム１００は、１台のコンピュータまたは一連のコンピュータによって実現することができる。このコンピュータは、ＰＣ、ラップトップ、サーバ、モバイル装置、またはプロセッサを含む他の装置とすることができる。
【０１４４】
[0160]  内部記憶装置１１０４は、上記の実施形態を実行するためにＣＰＵ１１０１によって実行可能な命令を記憶することができる。内部記憶装置１１０４は、揮発性コンピュータ可読記憶媒体、ランダムアクセスメモリ（RAM）、および／またはリードオンリーメモリ（ROM）、フラッシュＲＡＭなどの不揮発性メモリを含むことができる、内部記憶装置１１０４はコンピュータ可読媒体の例である。
【０１４５】
[0161]  コンピュータ-可読媒体には例えば、任意の方法または技術によって情報を記憶することができる非一時的な、揮発性および不揮発性の、ポータブルおよび非ポータブル媒体が含まれる。情報は、コンピュータ可読の命令、データ構造体、プログラムモジュールまたは他のデータとすることができる。コンピュータ記憶媒体は、限定はされないが、相変化ランダムアクセスメモリ（PRAM）、スタティックランダムアクセスメモリ（SRAM）、ダイナミックランダムアクセスメモリ（DRAM）、他のタイプのランダムアクセスメモリ（RAM）、リードオンリーメモリ（ROM）、電気的に消去可能なプログラマブルリードオンリーメモリ（EEPROM）、フラッシュメモリもしくは他のメモリ技術、コンパクトディスクリードオンリーメモリ（CD-ROM）、ディジタルバーサタイルディスク（DVD）もしくは他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、または他の任意の非伝送媒体（non-transmitting medium）を含むことができる。これらのコンピュータ可読記憶媒体は、コンピュータがアクセス可能な情報を記憶することができる。
【０１４６】
[0162]  上述の実施形態は、ハードウェアもしくはソフトウェア（プログラムコード）、またはハードウェアとソフトウェアの組合せによって実現することができることを当業者は理解するであろう。ソフトウェアによって実現される場合には、それを、上述のコンピュータ可読媒体に記憶することができる。そのソフトウェアは、プロセッサによって実行されたときに、開示された方法を実行することができる。本開示に記載された計算ユニットおよび他の機能ユニットは、ハードウェアもしくはソフトウェア、またはハードウェアとソフトウェアの組合せによって実現することができる
【０１４７】
[0163]  本発明の他の実施形態は、当業者が、本明細書を検討することによって、また、本明細書に開示された発明を実施することによって、明白になるであろう。本出願は、当技術分野の知られている実践または慣習的実践に含まれる本開示からの逸脱を含む、本発明の一般原理に従う本発明の一切の変形、使用または適合をカバーすることが意図されている。本明細書および例は単なる例とみなされることが意図されており、本発明の真の範囲および趣旨は、以下の特許請求の範囲に示されている。
【０１４８】
[0164]  本発明が、上に記載されとおりの構造および添付図面に示されたとおりの構造だけに限定されないこと、および、本発明の範囲から逸脱することなくさまざまな変更および改変を加えることができることが理解される。本発明の範囲は、添付の特許請求の範囲のみによって限定されるべきであることが意図されている。
【図１】
2017510899.tif 000003
【図２】
2017510899.tif 000004
【図３】
2017510899.tif 000005
【図４】
2017510899.tif 000006
【図５】
2017510899.tif 000007
【図６Ａ】
2017510899.tif 000008
【図６Ｂ】
2017510899.tif 000009
【図６Ｃ】
2017510899.tif 000010
【図７】
2017510899.tif 000011
【図８Ａ】
2017510899.tif 000012
【図８Ｂ】
2017510899.tif 000013
【図８Ｃ】
2017510899.tif 000014
【図９】
2017510899.tif 000015
【図１０Ａ】
2017510899.tif 000016
【図１０Ｂ】
2017510899.tif 000017
【図１０Ｃ】
2017510899.tif 000018
【図１１】
2017510899.tif 000019
【国際調査報告】
2017510899.tif 000020
2017510899.tif 000021
2017510899.tif 000022
2017510899.tif 000023