(57)【要約】【課題】一部のサーバに障害が発生しても処理を継続させ、かつ、データの一貫性を確保しながら、出力集合を適切に管理する。【解決手段】  本発明は、ネットワークを介して接続された複数の計算機でデータの半順序配信を行う分散処理方法であって、前記計算機が、前記データを受信する受信ステップと、前記計算機が、前記半順序配信によって前記データの出力順序を決定する出力順序決定ステップと、前記計算機が、前記出力するデータを出力集合へ格納する際に、前記計算機間で等価な複数の部分集合に分割して前記出力集合へ格納して管理する管理ステップと、を含む。【選択図】図１
2020187526.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して接続された複数の計算機でデータの半順序配信を行う分散処理方法であって、
前記計算機が、前記データを受信する受信ステップと、
前記計算機が、前記半順序配信によって前記データの出力順序を決定する出力順序決定ステップと、
前記計算機が、前記出力するデータを出力集合へ格納する際に、前記計算機間で等価な複数の部分集合に分割して前記出力集合に格納して管理する管理ステップと、
を含むことを特徴とする分散処理方法。
【請求項２】
請求項１に記載の分散処理方法であって、
前記計算機が、前記半順序配信の対象のデータと非可換なデータである分割命令を出力する分割命令出力ステップをさらに含み、
前記管理ステップでは、
前記分割命令に基づいて、当該分割命令を前記出力集合へ格納する際に分割点を生成し、前記分割点により前記出力集合を前記部分集合の単位で分割して管理することを特徴とする分散処理方法。
【請求項３】
請求項２に記載の分散処理方法であって、
前記管理ステップでは、
前記分割命令に基づいて生成された前記分割点により前記出力集合を複数の部分集合に分割し、前記分割点の出力順に番号を付与して前記部分集合を管理することを特徴とする分散処理方法。
【請求項４】
請求項３に記載の分散処理方法であって、
前記出力順序決定ステップでは、
前記半順序配信を行うデータを可換性の関係を有するデータ同士に分類し、前記分類ごとに分割命令を予め定義した可換性判定情報に基づいて、前記データの出力順序を決定することを特徴とする分散処理方法。
【請求項５】
請求項２に記載の分散処理方法であって、
前記分割命令出力ステップでは、
前記分割命令を所定の周期又は所定のタイミングで出力することを特徴とする分散処理方法。
【請求項６】
請求項２に記載の分散処理方法であって、
前記計算機は、
前記データを出力するクライアント装置と、
前記受信ステップと、出力順序決定ステップと、管理ステップを実行するサーバを含み、
前記クライアント装置と前記サーバのいずれか一方で、前記分割命令出力ステップを実行することを特徴とする分散処理方法。
【請求項７】
請求項３に記載の分散処理方法であって、
前記計算機が、前記番号順に前記部分集合を削除する削除ステップをさらに含み、
前記出力順序決定ステップでは、
前記半順序配信により前記計算機間で前記データを交換する際に前記番号を含めて交換を実施し、既に削除済みデータを破棄することを特徴とする分散処理方法。
【請求項８】
請求項３に記載の分散処理方法であって、
前記管理ステップでは、
前記部分集合を単一のデータとして扱うことで、前記半順序配信の出力集合を全順序配信の出力集合として扱うことを特徴とする分散処理方法。
【請求項９】
請求項３に記載の分散処理方法であって、
前記出力順序決定ステップでは、
非可換なデータを受け付けた場合には他の計算機との合意に応じて出力順序を決定し、
前記管理ステップでは、
前記出力順序が決定された非可換のデータを前記分割命令として扱うことを特徴とする分散処理方法。
【請求項１０】
ネットワークを介して接続された複数の計算機でデータの半順序配信を行う分散処理システムであって、
前記計算機は、前記データを受信し、前記半順序配信によって前記データの出力順序を決定し、前記出力するデータを出力集合へ格納する際に、前記計算機間で等価な複数の部分集合に分割して前記出力集合へ格納して管理することを特徴とする分散処理システム。
【請求項１１】
請求項１０に記載の分散処理システムであって、
前記計算機は、
前記半順序配信の対象のデータと非可換なデータである分割命令を出力する分割制御部と、
前記分割命令を受け付けて、当該分割命令を前記出力集合に格納する際に分割点を生成し、前記分割点により前記出力集合を前記部分集合の単位で分割して管理する分割点管理部と、
を有することを特徴とする分散処理システム。
【請求項１２】
請求項１１に記載の分散処理システムであって、
前記分割点管理部は、
前記分割命令に基づいて生成された前記分割点により前記出力集合を複数の部分集合に分割し、前記分割点の出力順に番号を付与して前記部分集合を管理することを特徴とする分散処理システム。
【請求項１３】
データの半順序配信を行うサーバであって、
前記サーバは、
前記データを受信し、前記半順序配信によって前記データの出力順序を決定し、前記出力するデータを出力集合へ格納する際に、前記サーバ間で等価な複数の部分集合に分割して前記出力集合へ格納して管理することを特徴とするサーバ。
【請求項１４】
請求項１３に記載のサーバであって、
前記サーバは、
前記半順序配信の対象のデータと非可換なデータである分割命令を出力する分割制御部と、
前記分割命令を受け付けて、当該分割命令を前記出力集合に格納する際に分割点を生成し、前記分割点により前記出力集合を前記部分集合の単位で分割して管理する分割点管理部と、
を有することを特徴とするサーバ。
【請求項１５】
請求項１４に記載のサーバであって、
前記分割点管理部は、
前記分割命令に基づいて生成された前記分割点により前記出力集合を複数の部分集合に分割し、前記分割点の出力順に番号を付与して前記部分集合を管理することを特徴とするサーバ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを複数のサーバで処理する分散処理システムに関する。
【背景技術】
【０００２】
分散処理システムは、データを複数のサーバで多重化し、障害が発生したサーバの処理を他のサーバに切り替えることで可用性を確保する。近年のハードウェア性能の向上により、単位時間当たりの処理能力は向上しており、上記のような切替が完了するまでの時間に応じて生じる損失も比例して大きくなる。証券取引分野では、取引件数が利益に直結するため、障害が発生したサーバの切替の高速化は重要な関心事である。
【０００３】
障害発生時に高速な切替を実現する手法として、リーダレスの分散合意の一つである半順序配信技術が知られている（例えば、特許文献１）。
【０００４】
半順序配信技術は、リーダを持たず全サーバが同質となることで、いずれかのサーバに障害が発生しても、処理を継続することができる。さらに、半順序配信技術は、障害の発生したサーバが完全に停止しきっていない状態で切替が発生しても、分散合意によるデータの一貫性を保証できるという特徴があり、可用性を確保する上で重要な技術となっている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第2015/186191号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記半順序配信技術は、複数の処理部にデータを配信し、処理部にとって一貫性がある順にデータを出力する技術である。半順序配信では、重複するデータの出力を抑止するために過去の出力データの集合（出力集合）を各サーバで保持するが、この出力集合の要素を適切に削除する方法が存在せず、分散処理システムへ実装する際には、多量の記憶容量が必要になるという課題があった。
【０００７】
そこで本発明は、上記問題点に鑑みてなされたもので、一部のサーバに障害が発生しても処理を継続させ、かつ、データの一貫性を確保しながら、出力集合を適切に管理することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、ネットワークを介して接続された複数の計算機でデータの半順序配信を行う分散処理方法であって、前記計算機が、前記データを受信する受信ステップと、前記計算機が、前記半順序配信によって前記データの出力順序を決定する出力順序決定ステップと、前記計算機が、前記出力するデータを出力集合へ格納する際に、前記計算機間で等価な複数の部分集合に分割して前記出力集合に格納して管理する管理ステップと、を含む。
【発明の効果】
【０００９】
したがって、本発明は、分割命令を生成して半順序配信のデータへ投入することにより、サーバ間の出力集合の削除、重複出力防止や、補完などを効率的に管理することができる。
【００１０】
本明細書において開示される主題の、少なくとも一つの実施の詳細は、添付されている図面と以下の記述の中で述べられる。開示される主題のその他の特徴、態様、効果は、以下の開示、図面、請求項により明らかにされる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施例１を示し、分散処理システムの構成の一例を示すブロック図である。
【図２】本発明の実施例１を示し、出力集合の一例を示す図である。
【図３】本発明の実施例１を示し、可換性判定テーブルの一例を示す図である。
【図４】本発明の実施例１を示し、分割制御部で行われる処理の一例を示すフローチャートである。
【図５】本発明の実施例１を示し、サーバで行われる処理の一例を示すフローチャートである。
【図６】従来例を示し、出力履歴の一例を示す図である。
【図７】本発明の実施例２を示し、サーバで行われる処理の一例を示すフローチャートである。
【図８】本発明の実施例３を示し、可換性判定テーブルの一例を示す図である。
【図９】本発明の実施例４を示し、分散処理システムの構成の一例を示すブロック図である。
【図１０】本発明の実施例５を示し、分散処理システムの構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態を添付図面に基づいて説明する。
【実施例１】
【００１３】
図１は、本発明の実施例１を示し、分散処理システムの構成の一例を示すブロック図である。分散処理システムは、複数のクライアント装置３−１〜３−Ｎからのデータを受け付けて、データに対する処理を実行する複数のサーバ１−１〜１−Ｎと、サーバ１−１〜１−Ｎへデータの分割情報を送信する分割制御装置２と、各装置及びサーバを接続するネットワーク４を有する。
【００１４】
なお、以下の説明では、サーバを個々に特定しない場合には、「−」以降を省略した符号「１」を用いる。他の、構成要素の符号についても同様である。また、サーバ１−１〜１−Ｎは同様の構成である。また、クライアント装置３−１〜３−Ｎは、同様の構成である。
【００１５】
クライアント装置３は、プロセッサ３１と、メモリ３２と、インターフェース３３を有する計算機である。メモリ３２には、アプリケーション３４と、送受信部３５がプログラムとしてロードされてプロセッサ３１によって実行される。
【００１６】
アプリケーション３４は、サーバ１に処理させるデータを生成し、送受信部３５がデータをサーバ１に送信する。
【００１７】
サーバ１は、プロセッサ１１と、メモリ１２と、インターフェース１０を有する計算機である。メモリ１２には、送受信部１３と、半順序配信部１００と、処理部１９と、出力集合２００と、可換性判定テーブル３００が格納される。
【００１８】
半順序配信部１００は、可換性判定部１４と、提案集積部１５と、合意判定部１６と、競合解決部１７と、分割点管理部１８から構成される。半順序配信部１００は、送受信部１３から受け付けたデータを、半順序配信技術により他のサーバ１との間で、データの一貫性を保証して、処理部１９へ出力する。処理部１９は、半順序配信部１００から出力されたデータの順序で所定の処理を実施する。なお、半順序配信技術における一貫性は、受け付けたデータが順序を交換可能（可換）であれば、サーバ１ごとに処理部へ異なる順序で前記データを出力しても、出力された前記データを処理部が処理した最終的な結果が、すべてのサーバ１の処理部で同じとなることであり、例えば、前記特許文献１の実施例２、実施例３の記載と同様である。
【００１９】
送受信部１３と、可換性判定部１４と、提案集積部１５と、合意判定部１６と、競合解決部１７と、分割点管理部１８と、処理部１９は、プログラムとしてメモリ１２へロードされてプロセッサ１１によって実行される。
【００２０】
プロセッサ１１は、各機能部のプログラムに従って処理を実行することによって、所定の機能を提供する機能部として稼働する。例えば、プロセッサ１１は、合意判定プログラムを実行することで合意判定部１６として機能する。他のプログラムについても同様である。さらに、プロセッサ１１は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
【００２１】
半順序配信部１００の各機能を実現するプログラム、テーブル等の情報は、図示しないストレージサブシステムや不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、又は、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【００２２】
半順序配信部１００は、クライアント装置３又は分割制御装置２から受信したデータの可換性を判定し（可換性判定部１４）、可換性の判定結果とデータを他のサーバ１間で交換して提案集積部１５に集める。
【００２３】
そして、半順序配信部１００は、集積した可換性判定結果とデータが合意可能かを判定し（合意判定部１６）、可換性判定結果の中に競合が含まれている場合には、他のサーバ１間で競合するデータの出力順序を解決し（競合解決部１７）、出力データの部分集合に出力集合２００内の集合番号を付与し（分割点管理部１８）、出力データを合意値として処理部１９へ出力する。また、半順序配信部１００は、出力データの履歴を出力集合２００へ格納して、集合番号でデータの管理を行う。
【００２４】
図２は、出力集合２００の一例を示す図である。図示の例では、サーバ１−１の出力集合２００−１と、サーバ１−２の出力集合２００−２を比較する例を示す。
【００２５】
出力集合２００は、出力順序２０１と、集合番号２０２と、データ２０３から構成される。出力順序２０１は、分割点管理部１８が出力データに付与する番号を格納する。この番号としては、例えば、シリアル番号等を用いることができる。データ２０３は、受信したデータの内容を格納する。
【００２６】
集合番号２０２は、分割点管理部１８が付与する出力データの集合の識別子で、サーバ１内でユニークな値である。本実施例では、集合番号２０２としてシリアル番号を採用する例を示す。分割点管理部１８は、分割制御装置２から分割命令を受信すると、現在の集合番号２０２に「１」を加算して、次の出力データを新たな集合番号２０２の部分集合に所属させる。
【００２７】
したがって、集合番号２０２が付与されたひとつの部分集合は、前回の分割命令の次に出力された出力データから、次の分割命令までの出力データが含まれる。
【００２８】
本実施例では、分割点管理部１８が分割命令を受け付けると、分割点（分割情報）として「／」のデータを出力集合２００へ格納する例を示す。なお、出力集合２００では、集合番号２０２で出力データの集合を管理できるので、データ２０３としての分割点は省略してもよい。
【００２９】
図示の例では、サーバ１−１は、データ２０３を「Ａ」、「Ｂ」、「Ｃ」の順序で出力し、出力順序２０１＝「４」で分割点が格納される。サーバ１−２では、データ２０３を「Ｂ」、「Ａ」、「Ｃ」の順序で出力し、出力順序２０１＝「４」で分割点が格納される。
【００３０】
そして、図示の例では、可換性判定部１４は、データ「Ａ」と「Ｂ」は「可換」と判定し、「Ａ」と「Ｃ」および「Ｂ」と「Ｃ」は「競合」と判定したため、半順序配信部１００は、サーバ１間で可換なもの同士の順序は揃えることなく出力するが、競合する者同士の順序は揃えて出力する。
【００３１】
各サーバ１の集合番号２０２内のデータは半順序であるが、当該集合番号２０２内のデータを処理部１９で処理した結果は、全てのサーバ１間でデータの順序を揃えた全順序と等価となる。したがって、本実施例の半順序配信部１００から出力される集合番号２０２ごとのデータ集合は全順序として扱うことが可能である。
【００３２】
図３は、可換性判定テーブル３００の一例を示す図である。可換性判定テーブル３００は、比較対象データ３０１と、これまでに受け付けたデータの内、未出力のデータ３０２について、各カラムに「可換」又は「競合」のいずれかが予め設定される。
【００３３】
可換性判定部１４は、例えば、現在受け付けた比較対象データ３０１が「データＢ」、これまでに受け付けたデータの内、未出力のデータ３０２が「データＡ」の場合、可換性判定テーブル３００を参照して「データＢ」は可換と判定する。また、可換性判定部１４は、分割命令を受信した場合は、いずれの組み合わせでも「競合」と判定する。
【００３４】
すなわち、分割制御装置２が出力した分割命令は、全てのデータに対して非可換なデータとして定義される。また、分割命令は半順序配信内の制御用のデータであるため、半順序配信部１００は分割命令を処理部１９へ出力しない。あるいは、処理部１９が分割命令を受信しても無視又は破棄するようにしてもよい。
【００３５】
図４は、分割制御装置２で行われる処理の一例を示すフローチャートである。このフローチャートは、所定のタイミングで実行される。なお、所定のタイミングとしては、例えば、所定の周期や、他の計算機からの要求を受け付けた場合などである。
【００３６】
分割制御部４００は、所定のタイミングになると予め定義された分割命令を生成する（Ｓ１５）。次に、送受信部２３は、分割制御部４００で生成された分割命令を各サーバ１へ送信する。
【００３７】
分割制御装置２が分割命令を送信したタイミングで、クライアント装置３がサーバ１へデータを送信した場合、各サーバ１は、分割命令とデータの出力順序を決定するために、後述する競合解決部１７で順序を決定する。
【００３８】
一方、クライアント装置３からデータが送信されていないタイミングで、分割制御装置２が分割命令を送信した場合、サーバ１は分割命令だけを受信するため、競合とは判定せず、競合解決部１７を使用せずに処理することになる。
【００３９】
データと分割命令の競合が発生した場合、サーバ１は競合解決部１７により他のサーバ１と合意を行って、分割命令とデータの順序を全てのサーバ１で一致させる。一方、サーバ１が分割命令だけを受信した場合、他のデータが存在しないため出力順序の入れ替えは発生せず、全てのサーバ１で出力順序は一致する。これらにより、各サーバ１では、受信した分割命令の出力順序が一致することになる。
【００４０】
クライアント装置３からのデータと分割命令は、出力順序の前後が非可換であるため、あるサーバ１が分割命令よりも前に出力したデータは、他のサーバ１でも必ず分割命令よりも前に出力されるという性質を有する。従って、サーバ１間では、分割命令を跨いでデータが前後することはなく、分割命令を境界として生成された出力集合２００の部分集合（集合番号２０２）内のデータは等価となる。
【００４１】
本実施例において、等価な部分集合は、データ２０３と出力順序２０１がサーバ１間で一致しなくとも、処理部１９の出力結果が一致することを意味する。各サーバ１の分割点管理部１８は、部分集合を識別する値としてシリアル番号の集合番号２０２を付与する。
【００４２】
集合番号２０２内のデータは、全てのサーバ１間で等価なため、出力集合２００に対するデータの削除や、重複出力の防止や、データの補完等は、集合番号２０２で管理することが可能となる。
【００４３】
図５は、サーバ１で行われる制御の一例を示すフローチャートである。この処理は、サーバ１が、クライアント装置３又は分割制御装置２からデータ又は分割命令を受信すると実行される。
【００４４】
サーバ１の送受信部１３は、クライアント装置３又は分割制御装置２からデータ又は分割命令を受信する（Ｓ１）。可換性判定部１４は、予め設定された可換性判定テーブル３００を参照して、送受信部１３から取得したデータが順序に関係なく処理可能であれば「可換」と判定し、データの順序をサーバ１間で揃えてから処理する必要があれば「競合」と判定する。
【００４５】
競合解決部１７は、受信したデータと可換性の判定結果を他のサーバ１へ送信する（Ｓ３）。次に、提案集積部１５は、他のサーバ１からデータと可換性の判定結果を受け付ける（Ｓ４）。
【００４６】
合意判定部１６は、他のサーバ１から受信したデータ及び可換性の判定結果から合意可能か否かを判定する（Ｓ５）。合意判定部１６は、合意の判定が可能な数のサーバ１からデータ及び可換性の判定結果を受信していれば合意の判定を行い、合意の判定ができない場合にはステップＳ４へ戻って、他のサーバ１からのデータ及び判定結果を受け付ける。なお、合意を行うサーバ１の数は、全サーバ１のうち所定数のサーバ数であればよい。
【００４７】
データと判定結果の交換によってサーバ１間の合意が可能と判定すると、可換性判定部１４は上記ステップＳ２の可換性の判定結果に基づいて、提案集積部１５で受け付けたデータが可換であるか否かを判定する（Ｓ６）。受信した全データが互いに可換であれば、現在のデータを出力データとしてステップＳ８の処理へ進み、競合するデータが含まれている場合にはステップＳ７へ進む。
【００４８】
ステップＳ７では、競合解決部１７が、非可換（競合）と判定されたデータについて他のサーバ１の競合解決部１７との間で順序の決定を行い、出力データを決定する。なお、競合解決部１７が、順序を決定する手法としては、ＰＡＸＯＳ合意などの周知又は公知の技術を適用すればよい。
【００４９】
分割点管理部１８は、ステップＳ６又はステップＳ７で決定された出力データに集合番号２０２と出力順序２０１を付与して、出力集合２００へデータ２０３として格納する（Ｓ８）。
【００５０】
次に、分割点管理部１８は、現在処理中のデータが分割命令であるか否かを判定する（Ｓ９）。分割命令であればステップＳ１０へ進み、そうでない場合にはステップＳ１１へ進む。
【００５１】
ステップＳ１０では、分割点管理部１８が、集合番号２０２に「１」を加算して次回のデータを格納する部分集合を新たに設定する。そして、ステップＳ１１では、ステップＳ８で集合番号２０２を付与したデータを合意値として処理部１９へ出力して処理を終了する。
【００５２】
なお、本実施例では、半順序配信によるサーバ１間の通信が１回の例を示したが、これに限定されるものではなく、サーバ１間の通信が２回以上であってもよい。
【００５３】
また、本実施例では、競合解決部１７で競合の解決を行った場合、データの出力順序は全てのサーバ１で一致することから、分割命令と同様に出力集合２００の部分集合の生成に利用することができる。例えば、競合解決部１７が決定した出力順序の最後のデータを分割命令と同様に扱うことで、分割点の生成数を抑制することができる。あるいは、出力順序に一定個数ごとのデータを分割命令と同様に扱うことで、部分集合のサイズを平準化することが可能である。
【００５４】
＜従来例との対比＞
前記従来例の半順序配信技術は、処理部間で不整合が生じない順序で、クライアント装置から送信されたデータを処理部へ出力する。サーバは、クライアント装置から受信したデータを相互に交換して、サーバ間でデータの出力順序について競合が生じないことを合意してから、データを処理部へ出力している。
【００５５】
半順序配信技術では、一部のサーバに障害が発生した場合、分散処理システムが停止しないように、全てのサーバ間で合意を形成するのではなく、規定数のサーバと合意を形成した時点で、データを処理部へ出力する。サーバは、規定数に含まれないサーバから遅延してデータを受信した場合、当該遅延したデータを重複して出力するのを防止するため、過去の出力履歴を保持している。
【００５６】
従来例の半順序配信技術では、出力履歴をどのように削除するかは規定されていないため、出力履歴が増大し続けるという課題があった。例えば、従来例の半順序配信技術による出力履歴を図６に示す。
【００５７】
図６はサーバＡ１の出力履歴２１０−１と、サーバＡ２の出力履歴２１０−２の例を示す。従来例のサーバＡ１、Ａ２は、本実施例のサーバ１と同様にクライアント装置３からのデータを受信する。出力履歴２１０は、出力順序２１１とデータ２１２で構成される。
【００５８】
サーバＡ１の出力履歴２１０−１では、出力順序２１１が「４」のデータ２１２＝「Ｄ」となっているが、サーバＡ２の出力履歴２１０−２では、データ２１２＝「Ｄ」の出力順序２１１は「６」となっており遅延してサーバＡ２に到着したことを示している。
【００５９】
この従来例で、出力順序２１１＝１〜４のデータ２１２を削除した場合、「Ｄ」のデータ２１２を遅延して受信するサーバＡ２は、出力履歴２１０−２に「Ｄ」は削除されて存在しないため、他のサーバへ重複して送信することになる。
【００６０】
なお、従来例に対して、各サーバＡ間でデータの突き合わせを行って、削除可能なデータを調整することも考えられる。しかしながら、出力履歴２１０の要素数やサーバ数が増大するにつれて組み合わせ数が膨大なり、処理量や通信量が過大になるため、現実的ではない。
【００６１】
これに対して、本実施例では半順序配信に分割命令を投入することで、出力集合２００の要素を複数の部分集合に分割し、各部分集合にはシーケンシャルな集合番号２０２を付与することで、部分集合単位でデータの管理を実現する。
【００６２】
上述したように、部分集合（集合番号２０２）内のデータは、全てのサーバ１間で等価なため、出力集合２００に対するデータの削除や重複出力の防止等は、集合番号２０２で管理することが可能となる。
【００６３】
これにより、一部のサーバ１に障害が発生しても処理を継続させて、かつ、出力するデータの一貫性を確保しながら、出力集合２００を適切に管理することが可能となる。
【００６４】
なお、上記実施例１では、サーバ１の半順序配信部１００に競合解決部１７を配置する例を示したが、これに限定されるものでなはい。競合解決部１７は、サーバ１以外の計算機で実行されてもよい。
【実施例２】
【００６５】
図７は、本発明の実施例２を示し、サーバ１で行われる処理の一例を示すフローチャートである。図７のフローチャートは、前記実施例１の図４のフローチャートの一部を変更したもので、ステップＳ１、Ｓ２、Ｓ５〜Ｓ１１は前記実施例１と同様である。
【００６６】
本実施例では、集合番号２０２をサーバ１間で交換して、削除された部分集合を検出する例を示す。なお、部分集合の削除は他の処理で所定のタイミングで実施するものとする。また、前記実施例１と同様の部分については重複する説明を省略する。
【００６７】
ステップＳ２３では、合意判定部１６が、受信したデータと可換性の判定結果及び現在の集合番号２０２を他のサーバ１へ送信する。次に、ステップＳ２４では、提案集積部１５が、他のサーバ１からデータと可換性の判定結果及び現在の集合番号を受け付ける（Ｓ４）。
【００６８】
ステップＳ２５では、分割点管理部１８が、他のサーバ１から受け付けた集合番号２０２が、既に削除されたか否かを判定する。分割点管理部１８は、集合番号２０２が削除済みであれば、受け付けたデータを破棄してステップＳ２４へ戻って他のサーバ１からのデータと判定結果及び集合番号２０２を受け付ける。一方、分割点管理部１８は、集合番号２０２が出力集合２００に存在する場合にはステップＳ６へ進んで前記実施例１に示した処理を実施する。
【００６９】
サーバ１間で集合番号２０２を交換し、当該サーバ１の出力集合２００に他のサーバ１から受け付けた集合番号２０２が自身の出力集合２００の最小の集合番号２０２よりも小さい場合、分割点管理部１８は、当該集合番号２０２が既に削除済みと判定し、当該データを破棄する。これにより、他のサーバ１から受け付けたデータが遅延していた場合、当該サーバ１が重複して出力するのを防止することが可能となる。
【００７０】
なお、各サーバ１は、分割命令で部分集合に分割された出力集合２００を保持し、分割数（集合番号２０２の値）又はデータ量の合計が所定の閾値を超えた場合、集合番号２０２の小さい部分集合から順番に削除する。これにより、各サーバ１が使用する計算機資源が増大するのを防ぐことが可能となり、サーバ１の構成を簡易にしてコストを低減することが可能となる。
【００７１】
なお、サーバ１の分割点管理部１８は、他のサーバ１から受け付けた集合番号２０２が、自身の出力集合２００の最小の集合番号２０２よりも小さい場合には、受け付けた集合番号２０２は削除済みであると判定して、受け付けたデータを破棄する。
【００７２】
一方、分割点管理部１８は、他のサーバ１から受け付けた集合番号２０２が、自身の出力集合２００の最小の集合番号２０２以上であった場合には、合意判定部１６での処理へ移行する。
【実施例３】
【００７３】
図８は、本発明の実施例３を示し、可換性判定テーブル３００の一例を示す図である。クライアント装置３からのデータが、独立したグループ（又は系列）が存在する場合、本実施例ではデータの系列毎に可換性判定テーブル３００を分割する。
【００７４】
クライアント装置３から受け付けるデータが、相互に独立したＸの系列とＹの系列に分類される場合、Ｘの系列の可換性判定テーブル３００Ｘと、Ｙの系列の可換性判定テーブル３００Ｙに分割する。そして、異なる系列間では可換であると定義し、分割命令もデータ系列毎に配信される。すなわち、Ｘの系列に対しては分割命令Ｘが配信され、Ｙの系列に対しては分割命令Ｙが配信される。また、出力集合２００では、集合番号２０２をデータの系列ごとに操作する。なお、その他の構成は前記実施例１と同様である。
【００７５】
半順序配信技術では、半順序配信部１００が出力するデータの順序によって処理部１９の最終状態（処理結果）が異なる複数のデータを受け付けた場合には、競合解決部１７を用いて順序の決定を行う。
【００７６】
競合解決部１７で競合の解決を実施している期間は、出力データが確定しないため、半順序配信部１００は、データを出力することができず、競合解決部１７の処理時間に応じてレイテンシが増大することになる。そして、サーバ１が分割命令と他のデータを受け付けた場合、競合解決部１７にて競合を解決することになる。
【００７７】
そこで、本実施例のように、データの系列（分類）ごとに可換性判定テーブル３００Ｘ、３００Ｙを分割し、データの系列ごとに分割命令Ｘ、Ｙを分離することで、分割命令Ｘ、Ｙと競合する範囲が元の可換性判定テーブル３００に対して縮小されるため、競合の発生を低減して競合解決部１７によるレイテンシを抑制することが可能となる。
【００７８】
なお、複数の系列に跨がるデータが存在する場合には、各系列の可換性判定テーブル３００Ｘ、３００Ｙのそれぞれに当該データを定義する必要がある。また、複数の系列に跨がるデータの集合番号２０２は、分割点管理部１８がそれぞれの集合番号２０２を管理して、各系列の分割命令Ｘ、Ｙ毎に操作を行うようにすればよい。
【実施例４】
【００７９】
図９は、本発明の実施例４を示し、分散処理システムの構成の一例を示すブロック図である。本実施例では、分割命令を生成する分割制御部４００をクライアント装置３に配置したもので、その他の構成は前記実施例１と同様である。
【００８０】
クライアント装置３−１〜３−Ｎ毎に、サーバ１へ送信するデータの系列が異なる場合、分割制御部４００をクライアント装置３で稼働させることで、分割命令とデータを送信するタイミングを制御することが可能となる。
【００８１】
分割制御部４００をクライアント装置３とは異なる計算機で稼働させる場合、分割命令を送信するタイミングを制御するためには、クライアント装置３と協調する必要があり、協調のための通信が必要となる。
【００８２】
これに対して本実施例のように、クライアント装置３で分割制御部４００を稼働させることで、他の計算機（クライアント装置３や分割制御装置２）と協調することなく、分割命令とデータを送信するタイミングを制御することが可能となる。
【実施例５】
【００８３】
図１０は、本発明の実施例５を示し、分散処理システムの構成の一例を示すブロック図である。本実施例では、分割命令を生成する分割制御部４００をサーバ１に配置したもので、その他の構成は前記実施例１と同様である。
【００８４】
クライアント装置３−１〜３−Ｎ毎に、サーバ１へ送信するデータの系列が不定の場合、分割制御部４００をサーバ１で稼働させることで、分割命令とデータを送信するタイミングを制御することが可能となる。
【００８５】
この場合、クライアント装置３から全てのサーバ１へデータを送信するのではなく、特定の分類のデータを、特定のサーバ１へ送信する。特定の分類のデータを受信したサーバ１は、分割制御を行った後に各サーバへ当該データを配信することで、前記実施例３と同様に、分割命令とデータを送信するタイミングを制御することが可能となる。
【実施例６】
【００８６】
前記実施例１、２で示したように、集合番号２０２ごとのデータの部分集合が、全てのサーバ１で等価であることから、部分集合を単一のデータとして扱う場合、全順序配信と出力集合２００の形が一致するとみなすことができる。
【００８７】
したがって、公知又は周知の全順序配信技術に対して本発明の半順序配信技術を適用することが可能となる。例えば、出力集合２００の復旧や、スケールアウトや、リバランス等に半順序配信部１００及び分割制御部４００を利用することができる。
【００８８】
ただし、スケールアウトのようにサーバ１の数を変更するような処理では、データ交換の規定数が変化するため、集合番号２０２＝Ｘでサーバ１の数を変更する命令を配信した場合、即座に規定数を変えてしまうと、サーバ１間で規定数のずれが生じて配信結果の不整合につながってしまう。
【００８９】
したがって集合番号２０２＝Ｘでサーバ数の変更について配信した後、集合番号Ｘ＋α以降にその変更を反映すると言った制御が必要となる（ただし、α≧１）。
【００９０】
上記を実現するためには、以下の２点が必要になる。
【００９１】
（Ａ）分割制御部４００が送信する分割命令の合計数をα未満に抑える。これは、データの分類（データの系列）ごとに分割命令を分けている場合は、分割命令数のカウントも分類ごとになる。また、分割制御部４００を複数のクライアント装置３やサーバ１上に配置した場合は、全ての分割制御部４００から送信される分割命令数を抑制する必要がある。単純な例では、分割命令の数を、各分割制御部４００でα／台数以下になるように制御すればよい。
【００９２】
（Ｂ）提案集積部１５は、データ交換で受け取ったデータと可換性の判定結果に付与された集合番号２０２が、Ｘ＋α以上だった場合、その内容を一時的に退避させ、集合番号２０２＝Ｘの情報を他のサーバ１から補完してから処理を継続する。
【００９３】
なお、上記実施例１〜６では、クライアント装置３がデータを送信する間に分割命令を送信する例を示したが、予め分割フラグを設定したデータを分割命令として機能させてもよく、当該分割フラグを有するデータを受信したサーバ１は、上記分割命令と同様の処理を行うことができる。
＜結び＞
【００９４】
以上のように、上記実施例１〜６の分散処理システムは以下のような構成とすることができる。
【００９５】
（１）．ネットワーク（４）を介して接続された複数の計算機（サーバ１、クライアント装置３）でデータの半順序配信を行う分散処理方法であって、前記計算機（１）が、前記データを受信する受信ステップ（送受信部１３）と、前記計算機（１）が、前記半順序配信によって前記データの出力順序を決定する出力順序決定ステップ（可換性判定部１４、提案集積部１５、合意判定部１６、競合解決部１７、）と、前記計算機（１）が、前記出力するデータを出力集合（２００）へ格納する際に、前記計算機間で等価な複数の部分集合に分割して前記出力集合（２００）に格納して管理する管理ステップ（分割点管理部１８）と、を含む。
【００９６】
上記構成により、サーバ１は、出力集合２００の要素を複数の部分集合に分割して、各部分集合にはシーケンシャルな集合番号２０２を付与することで、部分集合単位でデータの管理を実現する。これにより、一部のサーバ１に障害が発生しても処理を継続させて、かつ、データの一貫性を確保しながら、出力集合２００を適切に管理することが可能となる。
【００９７】
（２）．上記（１）に記載の分散処理方法であって、前記計算機（１）が、前記半順序配信の対象のデータと非可換なデータである分割命令を出力する分割命令出力ステップ（分割制御部４００）をさらに含み、前記管理ステップ（分割点管理部１８）では、前記分割命令に基づいて、当該分割命令を前記出力集合（２００）へ格納する際に分割点（集合番号２０２）を生成し、前記分割点により前記出力集合（２００）を前記部分集合の単位で分割して管理する。
【００９８】
上記構成により、サーバ１は、分割命令を受け付けると出力集合２００を分割点（集合番号２０２）で区切ることで、データを部分集合の単位で管理することができる。各サーバ１は、集合番号２０２内のデータは半順序であるが、当該集合番号２０２内のデータを処理部１９で処理した結果は、全てのサーバ１間でデータの順序を揃えた全順序と等価となり、出力するデータの一貫性をサーバ１間で保証しながら、出力集合２００を適切に管理することが可能となる。
【００９９】
（３）．上記（２）に記載の分散処理方法であって、前記管理ステップ（分割点管理部１８）では、前記分割命令に基づいて生成された前記分割点により前記出力集合（２００）を複数の部分集合に分割し、前記分割点の出力順に番号（集合番号２０２）を付与して前記部分集合を管理する。
【０１００】
上記構成により、集合番号２０２内のデータは、全てのサーバ１間で等価なため、出力集合２００に対するデータの削除や、重複出力の防止や、データの補完等は、集合番号２０２で管理することが可能となる。
【０１０１】
（４）．上記（３）に記載の分散処理方法であって、前記出力順序決定ステップ（可換性判定部１４）では、前記半順序配信を行うデータを可換性の関係を有するデータ同士に分類し、前記分類ごとに分割命令を予め定義した可換性判定情報（可換性判定テーブル３００Ｘ、３００Ｙ）に基づいて、前記データの出力順序を決定する。
【０１０２】
上記構成により、データの系列（分類）ごとに可換性判定テーブル３００Ｘ、３００Ｙを分割し、データの系列ごとに分割命令Ｘ、Ｙを分けることで、分割命令Ｘ、Ｙと競合する範囲を縮小し、競合の発生を低減して競合解決部１７によるレイテンシを抑制することが可能となる。
【０１０３】
（５）．上記（２）に記載の分散処理方法であって、前記分割命令出力ステップ（分割制御部４００）では、前記分割命令を所定の周期又は所定のタイミングで出力する。
【０１０４】
上記構成により、分割制御部４００は、データの削除の頻度などを考慮して分割命令を出力する周期やタイミングを調整することが可能となる。また、分割制御部４００は、アプリケーションからのリクエストが送信される時間帯を考慮して、データの衝突の可能性が低いタイミングで分割命令を出力することが可能となる。
【０１０５】
（６）．上記（２）に記載の分散処理方法であって、前記計算機は、前記データを出力するクライアント装置（３）と、前記受信ステップ（送受信部１３）と、出力順序決定ステップ（１４、１５、１６、１７）と、管理ステップ（１８）を実行するサーバ（１）を含み、前記クライアント装置（３）と前記サーバ（１）のいずれか一方で、前記分割命令出力ステップ（分割制御部４００）を実行する。
【０１０６】
上記構成により、クライアント装置３で分割制御部４００を稼働させることで、他の計算機（クライアント装置３や分割制御装置２）と協調することなく、分割命令とデータを送信するタイミングを制御することが可能となる。
【０１０７】
また、サーバ１で分割制御部４００を稼働させる場合、特定の分類のデータを受信したサーバ１は、分割制御を行った後に各サーバへ当該データを配信することで、分割命令とデータを送信するタイミングを制御することが可能となる。
【０１０８】
（７）．上記（３）に記載の分散処理方法であって、前記計算機（１）が、前記番号（２０２）順に前記部分集合を削除する削除ステップをさらに含み、前記出力順序決定ステップ（１４、１５、１６）では、前記半順序配信により前記計算機（１）間で前記データを交換する際に前記番号を含めて交換（Ｓ２３）を実施し、既に削除済みデータを破棄する（Ｓ２５）。
【０１０９】
上記構成により、サーバ１は、出力集合２００の集合番号２０２を交換することで既に削除済みの部分集合を判定でき、データを重複して配信することを防止できる。
【０１１０】
（８）．上記（３）に記載の分散処理方法であって、前記管理ステップ（分割点管理部１８）では、前記部分集合を単一のデータとして扱うことで、前記半順序配信の出力集合を全順序配信の出力集合として扱う。
【０１１１】
上記構成により、全順序配信の技術に半順序配信を組み合わせることが可能となる。
【０１１２】
（９）．上記（３）に記載の分散処理方法であって、前記出力順序決定ステップ（１４、１５，１６，１７）では、非可換なデータを受け付けた場合には他の計算機との合意に応じて出力順序を決定し、前記管理ステップ（分割点管理部１８）では、前記出力順序が決定された非可換のデータを前記分割命令として扱う。
【０１１３】
上記構成により、分割命令の生成及び送信を省略して、分散処理システムの構成を簡易にすることが可能となる。
【０１１４】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
【０１１５】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、又は、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０１１６】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０１１７】
１  サーバ
２  分割制御装置
３  クライアント装置
１１  プロセッサ
１２  メモリ
１４  可換性判定部
１５  提案集積部
１６  合意判定部
１７  競合解決部
１８  分割点管理部
１９  処理部
１００  半順序配信部
２００  出力集合
２０２  集合番号
３００  可換性判定テーブル
４００  分割制御部
【図１】
2020187526.tif 000003
【図２】
2020187526.tif 000004
【図３】
2020187526.tif 000005
【図４】
2020187526.tif 000006
【図５】
2020187526.tif 000007
【図６】
2020187526.tif 000008
【図７】
2020187526.tif 000009
【図８】
2020187526.tif 000010
【図９】
2020187526.tif 000011
【図１０】
2020187526.tif 000012