(57)【要約】【課題】分散処理システムの信頼性を向上させる。【解決手段】通信プログラムは、複数の部分処理を含む目的処理を実行する複数の通信装置の中の１つの通信装置において使用される。この通信プログラムにより提供される方法は、複数の部分処理の状態を表す証跡を参照して、複数の部分処理のうちから、同じ実行結果の数が目標数よりも少ない未完了部分処理を選択し、選択された未完了部分処理を実行し、選択された未完了部分処理の実行結果を証跡に記録する。【選択図】図３
2020113032.tif 000002
【特許請求の範囲】
【請求項１】
複数の部分処理を含む目的処理を実行する複数の通信装置の中の１つの通信装置において、
前記複数の部分処理の状態を表す証跡を参照して、前記複数の部分処理のうちから、同じ実行結果の数が目標数よりも少ない未完了部分処理を選択し、
前記未完了部分処理を実行し、
前記未完了部分処理の実行結果を前記証跡に記録する
処理をプロセッサに実行させる通信プログラム。
【請求項２】
前記未完了部分処理の実行結果は、他の各通信装置に送信され、
前記未完了部分処理の実行結果について前記複数の通信装置による合意が形成された後に、前記未完了部分処理の実行結果が前記証跡に記録される
ことを特徴とする請求項１に記載の通信プログラム。
【請求項３】
前記未完了部分処理に対して他の通信装置により得られている同じ実行結果の数が前記目標数よりも少ないときに、前記未完了部分処理の実行結果が前記証跡に記録される
ことを特徴とする請求項１に記載の通信プログラム。
【請求項４】
同じ実行結果の数が目標数よりも少ない部分処理が存在しないときは、前記目標処理の実行結果を出力する
処理をプロセッサにさらに実行させる請求項１に記載の通信プログラム。
【請求項５】
複数の通信装置を用いて複数の部分処理を含む目的処理を実行する分散処理システムにおいて使用される、前記複数の通信装置の中の１つの通信装置であって、
前記複数の部分処理の状態を表す証跡を記憶するメモリと、
前記証跡データを参照して、前記複数の部分処理のうちから、同じ実行結果の数が目標数よりも少ない未完了部分処理を選択する選択部と、
前記選択部により選択された未完了部分処理を実行する実行部と、
前記実行部により得られる実行結果を前記証跡に記録する証跡管理部と、
備える通信装置。
【請求項６】
複数の通信装置を含む分散処理システムにおいて複数の部分処理を含む目的処理を実行する分散処理方法であって、
各通信装置は、
前記複数の部分処理の状態を表す証跡を参照して、前記複数の部分処理のうちから、同じ実行結果の数が目標数よりも少ない未完了部分処理を選択し、
前記未完了部分処理を実行し、
前記未完了部分処理の実行結果を前記証跡に記録する
ことを特徴とする分散処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信プログラム、および分散処理方法に係わる。
【背景技術】
【０００２】
大型のコンピュータを用いることなく大容量の計算を実行するための技術の１つとして分散コンピューティングが提案されている。分散コンピューティングにおいては、プログラムが複数のプログラム部分に分割され、複数のプログラム部分が複数のコンピュータ上で実行される。このとき、複数のコンピュータは、ネットワークを介して互いに通信を行いながら、全体として処理を進行させる。
【０００３】
分散コンピューティングの一例として、ボランティアコンピューティングが実用化されている。ボランティアコンピューティングにおいては、分散して存在する余剰計算資源を活用して処理が実行される。例えば、地球外知的生命体探索のためにボランティアコンピューティングが利用されることがある。
【０００４】
図１は、従来の分散処理システムの一例を示す。この例では、分散処理システムは、制御ノードコンピュータおよび複数の実行ノードコンピュータを備える。なお、分散処理システムは、分散コンピューティングにより実現される。
【０００５】
各実行ノードコンピュータは、分散処理システムに余剰計算資源を提供する。制御ノードコンピュータは、ユーザから与えられたアプリケーションプログラムを複数のプログラム部分に分割して実行ノードコンピュータに分配する。このとき、制御ノードコンピュータは、どの実行ノードコンピュータにどのプログラム部分を実行させるのかを決定する。各実行ノードコンピュータは、与えられたプログラム部分を実行し、その計算結果を制御ノードコンピュータに送信する。そして、制御ノードコンピュータは、各実行ノードコンピュータによる計算結果を収集して検証する。
【０００６】
分散コンピューティングまたはボランティアコンピューティングのプラットフォームの１つとして、ＢＯＩＮＣ（Berkeley Open Infrastructure for Network Computing）が知られている。また、特許文献１〜２に関連技術が記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】ＷＯ２０１８／１４２９４８号
【特許文献２】特開２０１５−１４６１６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従来の分散処理システムにおいては、図１を参照しながら説明したように、制御ノードコンピュータが複数の実行ノードコンピュータの処理を制御する。したがって、制御ノードコンピュータに障害が発生すると、アプリケーションの実行を継続できなくなる。すなわち、従来の分散処理システムの信頼性（特に、耐障害性）は低い。また、各実行ノードコンピュータの計算結果は、制御ノードコンピュータにより検証される。換言すれば、制御ノードコンピュータは、計算結果を改ざんできる。したがって、この観点においても、従来の分散処理システムの信頼性は低い。
【０００９】
本発明の１つの側面に係わる目的は、分散処理システムの信頼性を向上させることである。
【課題を解決するための手段】
【００１０】
本発明の１つの態様の通信プログラムは、複数の部分処理を含む目的処理を実行する複数の通信装置の中の１つの通信装置において使用される。この通信プログラムにより提供される方法は、前記複数の部分処理の状態を表す証跡を参照して、前記複数の部分処理のうちから、同じ実行結果の数が目標数よりも少ない未完了部分処理を選択し、前記未完了部分処理を実行し、前記未完了部分処理の実行結果を前記証跡に記録する。
【発明の効果】
【００１１】
上述の態様によれば、分散処理システムの信頼性が向上する。
【図面の簡単な説明】
【００１２】
【図１】従来の分散処理システムの一例を示す図である。
【図２】本発明の実施形態に係わる分散処理システムの一例を示す図である。
【図３】実行ノードコンピュータの処理の一例を示すフローチャートである。
【図４】分散処理システムによる処理の流れの一例を示す図（その１）である。
【図５】分散処理システムによる処理の流れの一例を示す図（その２）である。
【図６】分散処理システムによる処理の流れの一例を示す図（その３）である。
【図７】分散処理システムの構成および機能の一例を示す図である。
【図８】処理一覧表の一例を示す図である。
【図９】実行ノード一覧表の一例を示す図である。
【図１０】証跡の一例を示す図である。
【図１１】開始フェーズのシーケンスの一例を示す図である。
【図１２】実行フェーズのシーケンスの一例を示す図である。
【図１３】合意フェーズのシーケンスの一例を示す図である。
【図１４】終了フェーズのシーケンスの一例を示す図である。
【図１５】証跡を更新する処理の一例を示すフローチャートである。
【図１６】通信装置として動作するコンピュータのハードウェア構成の一例を示す図である。
【図１７】分散処理システムの構成例を示す図である。
【発明を実施するための形態】
【００１３】
図２は、本発明の実施形態に係わる分散処理システムの一例を示す。本発明の実施形態に係わる分散処理システム１００は、複数の実行ノードコンピュータ１（１Ａ〜１Ｄ）を含む。実行ノードコンピュータ１Ａ〜１Ｄは、互いに通信可能に接続されている。実行ノードコンピュータ１Ａ〜１Ｄは、光ファイバリンクで接続されてもよいし、電気回線で接続されてもよいし、無線リンクで接続されてもよい。なお、各実行ノードコンピュータ１（１Ａ〜１Ｄ）は、本発明の実施形態に係わる通信装置の一例である。
【００１４】
分散処理システム１００に与えられるアプリケーションの処理は、複数の部分処理から構成される。例えば、分散処理システム１００に与えられるアプリケーションの処理は、予め複数の部分処理に分割されている。或いは、分散処理システム１００は、与えられたアプリケーションの処理を複数の部分処理に分割してもよい。
【００１５】
各実行ノードコンピュータ１Ａ〜１Ｄは、複数の部分処理の中から実行すべき部分処理を自律的に選択し、選択した部分処理を実行する。そして、各実行ノードコンピュータ１Ａ〜１Ｄは、選択した部分処理の実行結果を証跡に記録する。証跡は、例えば、選択した部分処理を実行したノードを識別する情報、選択した部分処理を識別する情報、選択した部分処理についての実行結果、および選択した部分処理についての実行が終了した時刻を表すタイムスタンプを含む。また、証跡は、この実施例では、各ノード内に保存される。ただし、あるノードにおいて証跡が更新されると、更新された内容は、ネットワーク内の全ノードに通知される。したがって、証跡は、実質的に、実行ノードコンピュータ１Ａ〜１Ｄにより共有される。或いは、証跡は、ネットワーク内の全実行ノードコンピュータ１Ａ〜１Ｄが閲覧可能な領域に保存されるようにしてもよい。
【００１６】
実行ノードコンピュータ１Ａ〜１Ｄは、部分処理ごとに実行結果について合意を形成する。合意は、各実行ノードコンピュータ１Ａ〜１Ｄにより記録される証跡の内容（たとえば、処理内容および処理順番）が互いに同じであることを確認することで実現される。この結果、各ノードに保存される証跡が互いに同じであることが保証される。
【００１７】
複数の部分処理は、例えば、予め決められた順番で実行されるように指定されている。この場合、ある部分処理について実行ノードコンピュータ１Ａ〜１Ｄにより合意が形成されると、次の部分処理が実行される。そして、すべての部分処理について合意が形成されると、分散処理システム１００は、与えられたアプリケーションについての実行結果を出力する。
【００１８】
図３は、実行ノードコンピュータ１の処理の一例を示すフローチャートである。このフローチャートの処理は、複数の部分処理を含むアプリケーションが分散処理システム１００に与えられたときに実行される。
【００１９】
Ｓ１において、実行ノードコンピュータ１は、自ノードに保存されている証跡を参照し、複数の部分処理の中から実行すべき部分処理を選択する。なお、各部分処理について、実行すべき順番が予め指定されているものとする。この場合、完了していない部分処理の中で、最も早く実行されるべき部分処理が選択される。
【００２０】
Ｓ２において、実行ノードコンピュータ１は、自ノードに保存されている証跡を参照し、選択した部分処理についての実行結果の個数（現状の回答数）が目標数（必要回答数）に達しているか否かを判定する。このとき、同じ実行結果の個数が目標数に達しているか否かが判定される。なお、目標数（必要回答数）は、分散処理システム１００において予め決められているものとする。
【００２１】
Ｓ１で選択した部分処理についての現状の回答数が必要回答数に達していれば、実行ノードコンピュータ１は、選択した部分処理が完了しており、且つ、その実行結果について合意が形成されていると判定する。この場合、実行ノードコンピュータ１の処理はＳ１に戻る。すなわち、次の部分処理が選択される。一方、Ｓ１で選択した部分処理についての現状の回答数が必要回答数より少なければ、実行ノードコンピュータ１の処理はＳ３に進む。
【００２２】
Ｓ３において、実行ノードコンピュータ１は、選択した部分処理の１つ前の部分処理の実行結果を利用して、選択した部分処理を実行する。なお、選択した部分処理の１つ前の部分処理の実行結果は、証跡に記録されている。
【００２３】
Ｓ４において、実行ノードコンピュータ１は、選択した部分処理についての実行結果を証跡に記録する。ただし、実行ノードコンピュータ１は、実行結果について複数またはすべての実行ノードコンピュータ１による合意が得られた後に、その実行結果を証跡に記録することが好ましい。また、実行ノードコンピュータ１は、現状の回答数が必要回答数より少ないときに限って、選択した部分処理についての実行結果を証跡に記録することが好ましい。更新された証跡は、分散処理システム１００内の全実行ノードコンピュータ１により共有される。
【００２４】
Ｓ５において、実行ノードコンピュータ１は、自ノードに保存されている証跡を参照し、すべての部分処理が完了したか否かを判定する。そして、完了してない部分処理が残っていれば、実行ノードコンピュータ１の処理はＳ１に戻る。すなわち、次の部分処理が選択される。一方、すべての部分処理が完了していれば、実行ノードコンピュータ１の処理は終了する。この後、分散処理システム１００は、実行結果を出力する。
【００２５】
図４〜図６は、分散処理システム１００による処理の流れの一例を示す。この実施例では、分散処理システム１００は、実行ノードコンピュータ１Ａ〜１Ｃを備える。分散処理システム１００に与えられるアプリケーションは、部分処理１、部分処理２、部分処理３を含む。部分処理１が最初に実行され、部分処理１の次に部分処理２が実行され、部分処理３が最後に実行される、ことが予め決められている。なお、図４〜図６では、部分処理１、部分処理２、部分処理３は、それぞれ「処理１」「処理２」「処理３」と表記されている。
【００２６】
各実行ノードコンピュータ１Ａ〜１Ｃに保存される証跡は、互いに同期しているものとする。すなわち、実行ノードコンピュータ１Ａ〜１Ｃがそれぞれ参照する証跡の内容は互いに同じである。証跡は、与えられたアプリケーションに含まれる複数の部分処理の状態を表す。図４〜図６に示す例では、証跡は、部分処理のリストおよび各部分処理についての実行状態を表す情報を含む。部分処理のリストにおいては、部分処理１、部分処理２、部分処理３が順番に並べられている。各部分処理についての実行状態を表す情報は、部分処理を実行したノードを識別する情報および実行結果を含む。
【００２７】
例えば、図４（ａ）に示す証跡は、部分処理１について、実行ノードコンピュータ１Ａによる実行結果が「１００」であり、実行ノードコンピュータ１Ｃによる実行結果も「１００」である状態を表している。また、この証跡は、部分処理２について、実行ノードコンピュータ１Ｂによる実行結果が「１５０」である状態を表している。
【００２８】
以下、図３に示すフローチャートを参照しながら、図４（ａ）に示す状態の後の実行ノードコンピュータ１の処理を説明する。なお、この実施例では、上述した目標数（必要回答数）は「２」である。この場合、ある部分処理について２個以上の同じ実行結果が得られていれば、その実行結果について分散処理システム１００内で合意が形成されていると判定される。即ち、ある部分処理について２個以上の同じ実行結果が得られていれば、その部分処理は正しく完了していると判定される。
【００２９】
Ｓ１：各実行ノードコンピュータ１は、自ノードに保存されている証跡を参照し、部分処理１〜３の中から実行すべき部分処理を選択する。ここで、部分処理１に対して、２個の同じ実行結果が記録されている。よって、各実行ノードコンピュータ１Ａ〜１Ｃは、証跡を参照することにより、部分処理１は既に完了していると判定する。よって、各実行ノードコンピュータ１Ａ〜１Ｃは、部分処理１の次の部分処理（すなわち、部分処理２）について証跡を参照する。
【００３０】
例えば、実行ノードコンピュータ１Ａは、図４（ａ）に示すように、部分処理２を選択する。同様に、実行ノードコンピュータ１Ｃも、部分処理２を選択する。なお、各実行ノードコンピュータ１Ａ〜１Ｃは、自律的に動作するので、複数の実行ノードコンピュータ１が同時またはほぼ同時に同じ部分処理を選択することがある。
【００３１】
Ｓ２：実行ノードコンピュータ１Ａ、１Ｃは、図４（ｂ）に示すように、それぞれ部分処理２についての同じ実行結果の個数（現状の回答数）が目標数（必要回答数）に達しているか否かを判定する。この例では、部分処理２に対して１個の実行結果が記録されている。すなわち、現状の回答数は、必要回答数よりも少ない。よって、実行ノードコンピュータ１Ａ、１Ｃの処理は、それぞれＳ３に進む。
【００３２】
Ｓ３：実行ノードコンピュータ１Ａ、１Ｃは、図５（ａ）に示すように、それぞれ部分処理２を実行する。このとき、部分処理２の１つ前の部分処理（すなわち、部分処理１）の実行結果を利用して、部分処理２が実行される。すなわち、実行ノードコンピュータ１Ａ、１Ｃは、それぞれ「部分処理１の実行結果＝１００」を利用して部分処理２を実行する。
【００３３】
このように、実行ノードコンピュータ１Ａ、１Ｃは、それぞれ部分処理２を実行する。ここで、実行ノードコンピュータ１Ｃによる部分処理２の実行を終了する前に、実行ノードコンピュータ１Ａによる部分処理２の実行を終了したものとする。
【００３４】
この場合、実行ノードコンピュータ１Ａは、証跡を参照し、部分処理２の状態を確認する。このとき、部分処理２に対して１個の実行結果が記録されている。すなわち、現状の回答数は、必要回答数よりも少ない。よって、実行ノードコンピュータ１Ａは、部分処理２の実行結果を証跡に記録する。この例では、図５（ｂ）に示すように、実行ノードコンピュータ１Ａにより「部分処理２の実行結果＝１５０」が証跡に書き込まれる。
【００３５】
続いて、実行ノードコンピュータ１Ｃは、部分処理２の実行が終了すると、証跡を参照し、部分処理２の状態を確認する。ところが、この時点では、部分処理２に対して２個の実行結果が記録されている。また、これら２個の実行結果は、互いに同じである。すなわち、部分処理２についての現状の回答数が必要回答数に達している。したがって、実行ノードコンピュータ１Ｃは、部分処理２が正しく完了していると判定し、部分処理２の実行結果を証跡に記録しない。
【００３６】
この後、同様の手順で部分処理３が実行され、図６に示す証跡が作成される。そして、すべての部分処理１〜３が完了すると、分散処理システム１００は、最終的な実行結果を出力する。すなわち、「実行結果＝２００」が出力される。
【００３７】
このように、分散処理システム１００は、各実行ノードコンピュータ１を制御する制御ノードコンピュータなしで分散処理を実現する。よって、図１に示す構成（すなわち、各実行ノードコンピュータを制御する制御ノードコンピュータを必要とする構成）と比較すると、耐障害性が高くなる。例えば、分散処理システム１００においては、複数の実行ノードコンピュータ１のうちの幾つかが故障しても、他の実行ノードコンピュータ１により処理を継続することが可能である。
【００３８】
また、各部分処理について複数の実行ノードコンピュータ１により複数の実行結果が生成され、所定数（目標数または必要回答数）以上の実行結果が一致したときに、その部分処理が完了する。したがって、１または少数の実行ノードコンピュータ１が不正または改ざんを行うことは困難である。或いは、１または少数の実行ノードコンピュータ１が悪意あるユーザに乗っ取られても、誤った実行結果が出力されることはない。
【００３９】
＜実施例＞
図７は、分散処理システム１００の構成および機能の一例を示す。この実施例では、分散処理システム１００は、要求ノードコンピュータ３および複数の実行ノードコンピュータ１（１Ａ、１Ｂ）を備える。なお、分散処理システム１００は、要求ノードコンピュータ３を含まなくてもよい。すなわち、要求ノードコンピュータ３は、分散処理システム１００の外部に設けられてもよい。また、実行ノードコンピュータ１の数は、特に限定されるものではない。
【００４０】
要求ノードコンピュータ３は、処理管理部３１、要求部３２、検証部３３、通信部３４を備える。ただし、要求ノードコンピュータ３は、図７に示していない他の機能を備えていてもよい。
【００４１】
処理管理部３１は、処理一覧表を用いて、実行ノードコンピュータ１に実行を要求すべきアプリケーションを管理する。なお、実行ノードコンピュータ１に実行を要求すべきアプリケーションは、例えば、ユーザから与えられる。
【００４２】
図８は、処理一覧表の一例を示す。この実施例では、処理一覧表には、アプリ名、部分処理リスト、処理内容コード、必要回答数などが登録される。アプリ名は、ユーザから受け付けたアプリケーションの名称（または、識別情報）を表す。部分処理リストは、ユーザから受け付けたアプリケーションに含まれる複数の部分処理の名称（または、識別別情報）を表す。この実施例では、動画像処理アプリケーションが、部分処理として、圧縮処理、音声加工処理、モザイク加工処理、字幕追加処理などを含んでいる。処理内容コードは、対応する部分処理の内容を記述する。必要回答数は、部分処理の完了までに必要な同じ実行結果の数を表す。例えば、圧縮処理の必要回答数は「３」である。この場合、互いに一致する３個の実行結果が得られるまで、異なる実行ノードコンピュータ１により圧縮処理が実行される。
【００４３】
なお、この実施例では、例えば、ユーザがアプリケーションを分割して複数の部分処理を定義する。この場合、各部分処理の必要回答数もそれぞれユーザにより定義される。
【００４４】
要求部３２は、実行ノードコンピュータ１に、処理一覧表に登録されているアプリケーションの実行を要求する。ここで、要求部３２は、実行ノード一覧表を備える。実行ノード一覧表には、図９に示すように、分散処理システム１００内で動作する実行ノードコンピュータ１が登録されている。この実施例では、実行ノード一覧表に実行ノードコンピュータ１Ａ、１Ｂ、１Ｃなどが登録されている。また、実行ノード一覧表には、各実行ノードコンピュータ１にアクセスするための情報も登録されている。
【００４５】
検証部３３は、実行ノードコンピュータ１に実行を要求したアプリケーションが正しく完了したか否かを検証する。通信部３４は、ネットワークを介して各実行ノードコンピュータ１と通信を行う。
【００４６】
実行ノードコンピュータ１は、証跡管理部１１、合意形成部１２、選択部１３、実行部１４、通信部１５を備える。ただし、実行ノードコンピュータ１は、図７に示していない他の機能を備えていてもよい。
【００４７】
証跡管理部１１は、実行ノードコンピュータ１が要求ノードコンピュータ３からアプリケーションの実行要求を受信したときに、そのアプリケーションに係わる情報を証跡に記録する。また、証跡管理部１１は、実行ノードコンピュータ１による実行結果を証跡に記録する。
【００４８】
図１０は、証跡の一例を示す。証跡は、この実施例では、実行対象アプリケーション毎に作成される。引数は、実行対象アプリケーションにより処理されるデータを指し示す。要求ノード名は、実行ノードコンピュータ１に対してアプリケーションの実行を要求したノードを識別する。部分処理リスト、処理内容コード、必要回答数は、図８に示す処理一覧表および図１０に示す証跡において実質的に同じなので、説明を省略する。
【００４９】
有効回答数は、対応する部分処理について得られている、互いに一致する実行結果（即ち、回答）の数を表す。状態は、対応する部分処理が完了しているか否かを表す。実行結果は、対応する部分処理についての実行ノードコンピュータ１による実行結果を表す。なお、実行結果は、情報量を削減するために、例えば、ハッシュ値で表される。実行ノードは、対応する部分処理を実行したノードを識別する。実行時刻は、対応する部分処理が実行された時刻を表す。
【００５０】
例えば、動画処理アプリケーションに含まれる圧縮処理は、実行ノードコンピュータ１Ａ、１Ｂ、１Ｃにより実行されている。ここで、実行ノードコンピュータ１Ａ、１Ｂ、１Ｃによる実行結果は、互いに同じである。したがって、有効回答数は「３」である。この場合、有効回答数が必要回答数に達しているので、圧縮処理の状態は「完了」である。
【００５１】
モザイク加工処理は、実行ノードコンピュータ１Ｄ、１Ｂ、１Ａにより実行されている。ところが、実行ノードコンピュータ１Ｄ、１Ａによる実行結果は互いに一致するが、実行ノードコンピュータ１Ｂによる実行結果は、他の２つの実行結果とは異なっている。したがって、有効回答数は「２」である。この場合、有効回答数は必要回答数より少ないので、モザイク加工処理の状態は「未完了」である。
【００５２】
合意形成部１２は、他のノードの合意形成部１２と連携して、実行ノードコンピュータ１による実行結果についての合意の形成を試みる。なお、合意形成部１２は、要求ノードコンピュータ３の要求部３２と同様に、図９に示す実行ノード一覧表を備える。
【００５３】
選択部１３は、実行対象アプリケーションに含まれる部分処理のうちから、完了していない部分処理を選択する。すなわち、選択部１３は、自ノードの証跡を参照し、複数の部分処理のうちから、同じ実行結果の数が必要回答数よりも少ない未完了部分処理を選択する。例えば、図１０に示す例では、圧縮処理および音声加工処理は完了しているが、モザイク可能処理および字幕追加処理は未だ完了していない。よって、この場合、選択部１３は、モザイク加工処理または字幕追加処理を選択する。ただし、各部分処理の実行順序が予め指定されているときは、選択部１３は、完了していない部分処理のうちで、実行順番が最も早い部分処理を選択する。
【００５４】
実行部１４は、選択部１３により選択された部分処理を実行する。尚、選択部１３および実行部１４は、一体的に動作してもよい。この場合、選択部１３および実行部１４は、完了していない部分処理を選択して実行する。通信部１５は、ネットワークを介して、要求ノードコンピュータ３および他の実行ノードコンピュータ１と通信を行う。
【００５５】
図１１〜図１４は、分散処理システム１００が与えられたアプリケーションを実行するときのシーケンスの一例を示す。このシーケンスは、図１１に示す開始フェーズ、図１２に示す実行フェーズ、図１３に示す合意フェーズ、および図１４に示す終了フェーズを含む。なお、このシーケンスが開始する前に、実行すべきアプリケーションがユーザから要求ノードコンピュータ３に与えられているものとする。この場合、このアプリケーションは、処理管理部３１が管理する処理一覧表に登録される。また、以下の記載では、分散処理システム１００に与えられるアプリケーションを「目的アプリケーション」または「目的処理」と呼ぶことがある。
【００５６】
図１１は、開始フェーズのシーケンスの一例を示す。開始フェーズは、例えば、ユーザから入力される指示に応じて、要求ノードコンピュータ３において起動される。
【００５７】
Ｓ１１において、要求部３２は、処理管理部３１に対して目的アプリケーションに係わる処理一覧表を要求する。この要求は、目的アプリケーションの名称を表す情報（又は、目的アプリケーションの識別情報）を含む。
【００５８】
Ｓ１２において、処理管理部３１は、要求部３２から受信する要求に応じて、対応するアプリケーションに係わる処理一覧表を要求部３１に送信する。処理一覧表は、例えば、図８に示すように、部分処理リストを含む。また、処理一覧表は、各部分処理についての必要解答数を表す情報を含む。
【００５９】
Ｓ１３において、要求部３２は、目的アプリケーションの実行を要求する実行要求を通信部３４に渡す。この実行要求は、目的アプリケーションに係わる処理一覧表および引数を含む。
【００６０】
Ｓ１４において、通信部３４は、要求部３１から受信した実行要求を、すべての実行ノードコンピュータ１に送信する。ただし、この実行要求は、目的アプリケーションに係わる処理一覧表および引数に加えて、実行要求の送信元（ここでは、要求ノードコンピュータ３）を識別する情報含む。
【００６１】
Ｓ１５〜Ｓ１６は、要求ノードコンピュータ３から実行要求を受信した各実行ノードコンピュータ１により実行される。すなわち、Ｓ１５において、通信部１５は、要求ノードコンピュータ３から受信した実行要求を証跡管理部１１に渡す。そうすると、証跡管理部１１は、受信した実行要求の内容を証跡に記録する。図１０に示す例では、証跡管理部１１は、受信した実行要求に基づいて、アプリケーション名、引数、要求ノード名、部分処理リスト、必要回答数などを証跡に記録する。
【００６２】
Ｓ１６において、通信部１５は、要求ノードコンピュータ３から受信した実行要求に基づいて、選択部１３に実行指示を与える。そうすると、実行フェーズが起動される。
【００６３】
図１２は、実行フェーズのシーケンスの一例を示す。実行フェーズは、要求ノードコンピュータ３から実行要求を受信した各実行ノードコンピュータ１において起動される。具体的には、図１１に示すＳ１６の実行指示が選択部１３に与えられると実行フェーズが起動される。
【００６４】
実行フェーズは、目的アプリケーションの各部分処理に対して実行される。すなわち、Ｓ２１〜Ｓ２８は繰り返し実行される。そして、すべての部分処理が完了すると、実行フェーズは終了する。具体的には以下の通りである。
【００６５】
Ｓ２１において、選択部１３は、未だ完了していない部分処理が残っている否かを証跡管理部１１に問い合わせる。このとき、選択部１３は、目的アプリケーションの名称を表す情報（又は、目的アプリケーションの識別情報）を証跡管理部１１に通知する。なお、以下の記載では、未だ完了していない部分処理を「未完了部分処理」と呼ぶことがある。
【００６６】
Ｓ２２において、証跡管理部１１は、証跡を参照し、未完了部分処理を検索する。図１０に示す例では、圧縮処理および音声加工処理は完了しているが、モザイク加工処理および字幕追加処理は未だ完了していない。そして、証跡管理部１１は、検索結果を選択部１１に通知する。ここで、未完了部分処理が残っているときは、証跡管理部１１は、すべての未完了部分処理を選択部１３に通知する。
【００６７】
Ｓ２３において、選択部１３は、証跡管理部１１から受信する検索結果に基づいて、未完了部分処理が残っているか否かを検出する。そして、未完了部分処理が残っているときは、Ｓ２４において、選択部１３は、通知された未完了部分処理のうちから実行すべき部分処理を選択する。このとき、選択部１３は、通知された未完了部分処理のうちで最も先に実行すべき部分処理を選択する。そして、選択部１３は、選択した部分処理についての実行指示を実行部１４に与える。この実行指示は、目的アプリケーションの名称および選択した部分処理の名称を含む。
【００６８】
Ｓ２５において、実行部１４は、選択部１１により選択された部分処理を実行する。そして、Ｓ２６において、実行部１４は、合意形成部１２に対して、実行結果についての合意の形成を要求する。合意形成要求は、目的アプリケーションの名称、実行した部分処理の名称、実行結果を含む。
【００６９】
Ｓ２７において合意フェーズが実行される。なお、合意フェーズについては、後で図１３を参照しながら説明する。ここでは、Ｓ２５の実行結果について、複数の実行ノードコンピュータ１により合意が形成されたものとする。
【００７０】
Ｓ２８において、合意形成部１２は、実行結果について合意が形成されたことを実行部１４に通知する。Ｓ２９において、実行部１４は、この通知を選択部１３に転送する。このとき、実行部１４は、Ｓ２５で得られている実行結果を選択部１３に渡す。
【００７１】
この後、実行フェーズのシーケンスはＳ２１に戻る。すなわち、実行ノードコンピュータ１は、未完了部分処理を１つずつ順番に選択して実行する。そして、すべての部分処理が完了すると、Ｓ２３において、選択部１３は、通信部１５に終了通知を与える。また、選択部１３は、選択部１３が各部分処理についての実行結果を通信部１５に与える。
【００７２】
なお、この実施例では、図４〜図６を参照して説明したように、実行ノードコンピュータ１は、選択した部分処理の１つ前の部分処理の実行結果を利用して、選択した部分処理を実行する。したがって、最後の部分処理の実行結果は、すべての部分処理についての実行結果（即ち、目的アプリケーションの実行結果）に相当する。すなわち、Ｓ２３において、すべての部分処理が完了すると、目的アプリケーションの実行結果が選択部１３から通信部１５に与えられる。
【００７３】
このように、実行フェーズにおいては、選択部１３により選択された部分処理が実行部１４により実行される。そして、すべての部分処理が完了すると、選択部１３から通信部１５に実行結果が与えられる。
【００７４】
図１３は、合意フェーズのシーケンスの一例を示す。合意フェーズは、図１２に示す実行フェーズ中のＳ２７に相当する。すなわち、選択された部分処理の実行結果が合意形成部１２に与えられると、合意フェーズが起動される。なお、以下の記載では、実行ノードコンピュータ１Ａの実行結果について、複数または全ての実行ノードコンピュータ１により合意形成が行われるものとする。また、図１３において、実行ノードコンピュータ１Ｂは、実行ノードコンピュータ１Ａ以外の任意の実行ノードコンピュータ１を表す。
【００７５】
Ｓ３１において、合意形成部１２は、実行部１４から受け取った合意形成要求を通信部１５に転送する。Ｓ３２において、通信部１５は、合意形成部１２から受け取った合意形成要求を全実行ノードコンピュータ１（図１３では、実行ノードコンピュータ１Ｂ）に送信する。このとき、合意形成要求は、合意形成要求の送信元（すなわち、実行ノードコンピュータ１Ａ）を識別する情報を含む。
【００７６】
Ｓ３３において、実行ノードコンピュータ１Ａ、１Ｂは、所定の合意形成プロトコルに従って、実行ノードコンピュータ１Ａの実行結果について合意を形成する。合意形成プロトコルとしては、例えば、ＰＢＦＴ（Practical Byzantine Fault Tolerance）、ＰｏＷ（Proof of Work）、またはＰｏＳ（Proof of Stake）が使用される。また、この実施例では、選択された部分処理を実行した実行ノード、実行結果、実行時刻などについて合意が形成される。そして、合意形成プロトコルによる合意内容を表す合意結果は、各実行ノードコンピュータ１に送信される。すなわち、各実行ノードコンピュータ１の通信部１５は、他の実行ノードコンピュータ１から合意結果を受信する。
【００７７】
Ｓ３４〜Ｓ３６は、実行ノードコンピュータ１Ｂにおいて実行される。具体的には、Ｓ３４において、通信部１５は、受信した合意結果を合意形成部１２に与える。合意形成部１２は、この合意内容を証跡管理部１２に与える。そして、証跡管理部１１は、各実行ノードコンピュータ１Ａ、１Ｂにより合意が形成された内容を証跡に記録する。なお、証跡を更新する方法については、後で図１５を参照して説明する。
【００７８】
Ｓ３７において、合意結果が実行ノードコンピュータ１Ａに送信される。そうすると、実行ノードコンピュータ１ＡにおいてＳ３８〜Ｓ４０が実行される。ここで、Ｓ３８〜Ｓ４０は、実質的にＳ３４〜Ｓ３６と同じである。すなわち、実行ノードコンピュータ１Ａにおいても、証跡管理部１１は、各実行ノードコンピュータ１Ａ、１Ｂにより合意が形成された内容を証跡に記録する。
【００７９】
Ｓ４１において、証跡管理部１１は、証跡の更新が完了したことを表す通知を合意形成部１２に与える。すなわち、Ｓ２５の実行結果について複数または全ての実行ノードコンピュータ１による合意が形成されたことを表す通知が、証跡管理部１１から合意形成部１２に与えられる。この後、合意形成部１２は、図１２に示すＳ２８を実行する。
【００８０】
このように、合意フェーズにおいては、ある実行ノードコンピュータ（図１２〜図１３では、実行ノードコンピュータ１Ａ）による実行結果について、複数または全ての実行ノードコンピュータ１により合意が形成される。そして、合意が得られた実行結果は、各実行ノードコンピュータ１の証跡に記録される。したがって、すべての実行ノードコンピュータ１は、同じ証跡を保持することになる。
【００８１】
図１４は、終了フェーズのシーケンスの一例を示す。終了フェーズは、図１２に示すＳ２３において、すべての部分処理が完了したと判定されたときに実行される。
【００８２】
Ｓ５１において、各実行ノードコンピュータ１の通信部１５は、図１２のＳ２３で選択部１３から受け取った実行結果を要求ノードコンピュータ３に送信する。よって、要求ノードコンピュータ３の通信部３４は、各実行ノードコンピュータ１から実行結果を受信する。
【００８３】
Ｓ５２において、通信部３４は、各実行ノードコンピュータ１から受信した実行結果を検証部３３に渡す。そうすると、Ｓ５３において、検証部３３は、各実行ノードコンピュータ１から受信した実行結果の正当性を確認するために、各実行ノードコンピュータ１の証跡を収集する。すなわち、検証部３３は、証跡の送信を要求する証跡要求を生成して要求部３２に渡す。この証跡要求は、目的アプリケーションの名称および目的アプリケーションを構成する各部分処理の名称を含む。
【００８４】
Ｓ５４〜Ｓ５６において、証跡要求は、要求ノードコンピュータ３の通信部３４を介して送信される。そうすると、各実行ノードコンピュータ１の通信部１５は、受信した証跡要求を証跡管理部１１に渡す。したがって、各実行ノードコンピュータ１の証跡管理部１１は、それぞれ証跡要求を受信する。そうすると、Ｓ５７において、証跡管理部１１は、証跡要求により指定された目的アプリケーションに係わる証跡データを取得する。このとき、証跡管理部１１は、自ノード内の所定の記憶領域に保存されている証跡データを取得する。そして、証跡管理部１１は、取得した証跡データを要求ノードコンピュータ３に送信する。
【００８５】
Ｓ５８〜Ｓ６０において、証跡データは、通信部３４および要求部３１を介して、検証部３３に与えられる。そうすると、Ｓ６１において、検証部３３は、各実行ノードコンピュータ１から収集した証跡データを互いに比較する。この結果、すべての証跡データが互いに一致すれば、その証跡データが正しいと判定される。或いは、収集した証跡データのうちの所定の割合以上の証跡データが互いに一致したときは、その証跡データを正しいと判定してもよい。いずれにしても、正しい証跡データが得られたときは、検証部３３は、Ｓ６２において、実行ノードコンピュータ１から受信した実行結果を要求部３２に渡す。そして、要求部３２は、実行結果を出力する。
【００８６】
この後、要求ノードコンピュータ３は、受信した証跡データを参照し、有効な実行結果を提供した実行ノードコンピュータ１に対して報酬を与えてもよい。すなわち、ある部分処理に対して必要回答数以上の同じ実行結果が提供されたときに、その実行結果を提供した各実行ノードコンピュータ１に報酬が与えられる。例えば、図４〜図６に示す実施例では、部分処理１に対して有効な実行結果を提供した実行ノードコンピュータ１Ａ、１Ｃに対して報酬が与えられ、部分処理２に対して有効な実行結果を提供した実行ノードコンピュータ１Ａ、１Ｂに対して報酬が与えられ、部分処理３に対して有効な実行結果を提供した実行ノードコンピュータ１Ａ、１Ｃに対して報酬が与えられる。
【００８７】
図１５は、証跡を更新する処理の一例を示すフローチャートである。このフローチャートの処理は、図１３に示すＳ３６またはＳ４０に相当する。すなわち、このフローチャートの処理は、実行結果について合意形成が行われたときに、各実行ノードコンピュータ１において証跡管理部１１により実行される。このとき、証跡管理部１１は、自ノード内に保存されている証跡データを参照する。
【００８８】
Ｓ７１において、証跡管理部１１は、各実行結果について、同じ実行結果の個数をそれぞれカウントする。例えば、各実行結果のハッシュ値が計算されている場合は、同じハッシュ値を有する実行結果の個数がそれぞれカウントされる。
【００８９】
Ｓ７２において、証跡管理部１１は、同じ実行結果の個数が必要回答数以上となっている実行結果があるか否かを判定する。なお、必要回答数は、部分処理ごとに予め指定されている。
【００９０】
同じ実行結果の個数が必要回答数以上となっている実行結果が存在するときは、認証管理部１１は、Ｓ７３において、最も早く必要回答数以上の同じ実行結果が集まった実行結果を特定する。そして、認証管理部１１は、特定した実行結果を証跡に記録する。Ｓ７４において、証跡管理部１１は、Ｓ７３で特定された実行結果の個数を「有効回答数」として記録する。Ｓ７５において、証跡管理部１１は「状態：完了」を記録する。
【００９１】
例えば、図１０に示す実施例において、実行ノードコンピュータ１により圧縮処理が実行されているものとする。この場合、ハッシュ値が「7d97...」である実行結果が、３個得られている。また、必要回答数は３である。よって、Ｓ７２の判定結果は「Ｙｅｓ」であり、Ｓ７３〜Ｓ７５が実行される。すなわち、圧縮処理の実行結果が確定する。また、「有効回答数：３」および「状態：完了」が記録される。
【００９２】
一方、同じ実行結果の個数が必要回答数以上となっている実行結果が存在しないときには、認証管理部１１は、Ｓ７６において、すべての実行結果を証跡に記録する。Ｓ７７において、証跡管理部１１は、同じ実行結果の個数の最大値を「有効回答数」として記録する。Ｓ７８において、証跡管理部１１は、「状態：未完了」を記録する。
【００９３】
例えば、図１０に示す実施例において、実行ノードコンピュータ１によりモザイク加工処理が実行されているものとする。この場合、ハッシュ値が「dead...」である実行結果が２個であり、ハッシュ値が「beaf...」である実行結果が１個である。また、必要回答数は３である。したがって、Ｓ７２の判定結果は「Ｎｏ」であり、Ｓ７６〜Ｓ７８が実行される。すなわち、モザイク加工処理の実行結果は未だ確定しない。また、「有効回答数：２」および「状態：未完了」が記録される。
【００９４】
図１６は、各ノードに実装される通信装置として動作するコンピュータのハードウェア構成の一例を示す。コンピュータ２００は、プロセッサ２０１、メモリ２０２、記憶装置２０３、Ｉ／Ｏデバイス２０４、記録媒体デバイス２０５、通信インタフェース２０６を備える。なお、コンピュータ２００は、実行ノードコンピュータ１に相当する。
【００９５】
プロセッサ２０１は、記憶装置２０３に格納されている通信プログラムを実行することにより、実行ノードコンピュータ１の機能を提供することができる。すなわち、プロセッサ２０１は、図３および図１５に示すフローチャートの処理、および図１１〜図１４に示すシーケンス中の実行ノードコンピュータ１の処理を記述した通信プログラムを実行することにより、証跡管理部１１、合意形成部１２、選択部１３、実行部１４、通信部１５の機能を提供する。
【００９６】
メモリ２０２は、例えば半導体メモリであり、プロセッサ２０１の作業領域として使用される。記憶装置２０３は、コンピュータ２００内に実装されていてもよいし、コンピュータ２００に接続されてもよい。なお、証跡は、メモリ２０２または記憶装置２０３に保存される。Ｉ／Ｏデバイス２０４は、ユーザまたはネットワーク管理者の指示を受け付ける。また、Ｉ／Ｏデバイス２０４は、プロセッサ２０１による処理結果を出力する。記録媒体デバイス２０５は、可搬型記録媒体２０７に記録されている信号を読み取る。なお、上述した通信プログラムは、可搬型記録媒体２０７に記録されていてもよい。通信インタフェース２０６は、データ通信のためのインタフェースおよび制御情報を通信するためのインタフェースを含む。
【００９７】
図１７は、分散処理システム１００の構成例を示す。なお、図１７においては、２台の実行ノードコンピュータが描かれているが、分散処理システム１００はより多くの実行ノードコンピュータを備えていてもよい。
【００９８】
各実行ノードコンピュータは、計算資源５１、計算資源制御部５２、アプリケーション実行制御部５３、分散台帳制御部５４、分散台帳５５を備える。計算資源５１、計算資源制御部５２、およびアプリケーション実行制御部５３は、図７に示す選択部１３および実行部１４に対応する。分散台帳制御部５４は、証跡管理部１１および合意形成部１２に対応する。分散台帳制御部５４は、ＨＬＦ（Hyperledger Fabric）で実現してもよい。分散台帳５５は、証跡管理部１１により管理される証跡に対応する。なお、各ノードにおいて保存される分散台帳５５の内容は、互いに一致している。また、分散台帳５５は、例えば、ブロックチェーン技術を利用して実現してもよい。
【符号の説明】
【００９９】
１（１Ａ〜１Ｄ）  実行ノードコンピュータ
３  要求ノードコンピュータ
１１  証跡管理部
１２  合意形成部
１３  選択部
１４  実行部
１５  通信部
２０１  プロセッサ
【図１】
2020113032.tif 000003
【図２】
2020113032.tif 000004
【図３】
2020113032.tif 000005
【図４】
2020113032.tif 000006
【図５】
2020113032.tif 000007
【図６】
2020113032.tif 000008
【図７】
2020113032.tif 000009
【図８】
2020113032.tif 000010
【図９】
2020113032.tif 000011
【図１０】
2020113032.tif 000012
【図１１】
2020113032.tif 000013
【図１２】
2020113032.tif 000014
【図１３】
2020113032.tif 000015
【図１４】
2020113032.tif 000016
【図１５】
2020113032.tif 000017
【図１６】
2020113032.tif 000018
【図１７】
2020113032.tif 000019