【実施例1】
【0016】
図1は、分散処理を行う分散処理システムの一例を示すブロック図である。サーバ1−1〜1−nはネットワーク2を介してクライアント3−1、3−2に接続される。サーバ1−1〜1−nは、クライアント3−1、3−2から受け付けた要求を分散して処理する分散処理システムを構成する。なお、以下の説明ではサーバ1−1〜1−nの総称を「−」以降を省略した符号1で表し、クライアント3−1、3−2の総称を「−」以降を省略した符号3で表す。
【0017】
図2は、サーバ1−1の構成の一例を示すブロック図である。なお、サーバ1−2〜1−nも同様の構成であるので、重複した説明は省略する。サーバ1−1は、演算を行うプロセッサ11と、プログラムやデータを保持するメモリ12と、データやプログラムを格納するストレージ装置14と、ネットワーク2に接続されて通信を行うインターフェース13と、所定の演算処理を実行するアクセラレータ16を有する分散合意処理ボード15含む計算機である。
【0018】
なお、アクセラレータ16としては、例えば、ASIC(Application Specific Integrated Circuit)や、FPGA(Field Programmable Gate Array)や、GPGPU(General−Purpose Graphics Processing Unit)等のハードウェアを採用することができる。
【0019】
上記FPGAを採用した場合には、ソフトエラーによるビザンチン障害が知られており、本実施例1は、アクセラレータ16を有する装置(サーバ)のビザンチン障害を回避することを意図している。
【0020】
なお、本実施例1において、ビザンチン障害は、ソフトエラーや、ソフトウェアのバグや、ハードウェアの故障や、装置への侵入や攻撃などに起因する不正な処理や装置の停止などを含む幅広い障害を意味する。
【0021】
メモリ12には、インターフェース13を介してデータの送受信を行う送受信部20と、受信したデータと他のサーバ1のデータの一貫性(同一性)を判定する更新部30と、更新部30が出力したデータを格納するデータ格納部50が保持される。なお、データ格納部50はストレージ装置14に設定されてもよいし、ストレージ装置14とメモリ12の双方に設定されてもよい。
【0022】
更新部30は、補助的な合意アルゴリズムとしてPAXOSアルゴリズムを実行するPAXOS合意部40が含まれる。
【0023】
送受信部20と、更新部30を構成するPAXOS合意部40の各機能部はプログラムとしてメモリ12にロードされる。送受信部20は、主に、PAXOS合意部40が他のサーバ1と合意を行う際に利用される。
【0024】
プロセッサ11は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、プロセッサ11は、送受信プログラムに従って処理することで送受信部20として機能し、PAXOS合意プログラムに従って処理することでPAXOS合意部40として機能する。他のプログラムについても同様である。さらに、プロセッサ11は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
【0025】
サーバ1−1の各機能を実現するプログラム、テーブル等の情報は、ストレージ装置14や不揮発性半導体メモリ、ハードディスクドライブ、SSD(Solid State Drive)等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【0026】
分散合意処理ボード15には、更新部130で分散合意処理と受信した要求を実行するアクセラレータ16が搭載される。アクセラレータ16は、インターフェース13を介して他のサーバ1と通信を行う送受信部110と、所定の処理の条件を設定する条件設定部120と、他のサーバ1との分散合意処理を行う更新部130と、PAXOS合意部40の合意値を判定するPAXOS合意値判定部400と、クライアント3からの要求に応じて所定の処理を行った結果などを格納するデータ格納部140を含む。
【0027】
更新部130は、低レイテンシ合意アルゴリズム実行部200と、正常値選択部250と、衝突解決値選択部260と、組み合わせ部240を有する。低レイテンシ合意アルゴリズム実行部200は、サーバ1が受信した要求(またはデータ)と他のサーバ1の要求の一貫性(同一性)を判定するために、省プロセス1ステップ合意アルゴリズムを実行する省プロセス1ステップ合意部210と、2ステップ合意アルゴリズムを実行する2ステップ合意部220と、を含む。なお、2ステップ合意部220は、
図3で示すように、前段部220−Aと、後段部220−Bで構成され、全体を符号220で表す。
【0028】
送受信部110は、クライアント3から処理の要求を受信すると、当該サーバ1−1が受信した要求を他のサーバ1−2〜1−nへ送信する。その後、送受信部110は、全てのサーバ1−2〜1−nから送信された要求を受信し、受信した要求を更新部130へ送信し、更新部130が要求の一貫性について判定を行う。
【0029】
そして、更新部130は、他のサーバ1の要求と一貫性が保証された要求を出力し、当該要求に対応する処理を行って、処理結果をデータ格納部140へ書き込む。更新部130は、書き込みが完了するとクライアント3に処理結果を送信し、処理を完了する。
【0030】
クライアント3の構成は、図示しないプロセッサと、メモリと、インターフェース及びストレージ装置を含む計算機である。クライアント3は、サーバ1に対してデータの登録、更新、参照を要求するアプリケーションを実行する。
【0031】
次に、更新部130の構成について説明する。更新部130には、上述のように送受信部110がクライアント3から受信した要求と、他のサーバ1が受信したクライアント3の要求が入力される。
【0032】
更新部130では、これらの要求を省プロセス1ステップ合意部210(第1の判定部)と、2ステップ合意部220(第2の判定部)へそれぞれ入力して要求の一貫性(または同一性)の判定を実行する。
【0033】
省プロセス1ステップ合意部210は、一貫性の判定結果として確定値または推定値あるいは無確定を出力する。本実施例1の省プロセス1ステップ合意部210では、ビザンチン障害に対処するため、全てのサーバ1から受信した要求の一致が過半数未満の場合には、無確定を出力して組み合わせ部240へ通知する。
【0034】
2ステップ合意部220は、一貫性の判定結果として確定値または推定値あるいは無確定を出力する。本実施例1の2ステップ合意部220では、ビザンチン障害に対処するため、全てのサーバ1から受信した要求の一致数が所定の値以下の場合には無確定を出力して組み合わせ部240へ通知する。
【0035】
組み合わせ部240はこれらの確定値または推定値、無確定を入力する。組み合わせ部240は、クライアント3から受信した要求と、他のサーバ1へ送信されたクライアント3の要求が同一であると判定した場合、入力された要求について一貫性を保証した確定値(合意値)として所定の処理を実行し、処理結果をデータ格納部140へ格納する。
【0036】
確定値は一貫性(または同一性)が保証された要求であり、合意値は一貫性について他のサーバ1との間で合意された要求で、サーバ1間で一貫性が保証される。一方、確定値や推定値が得られない場合、組み合わせ部240はビザンチン障害等による異常値を出力するのを防ぐため、後述するように、任意値として組み合わせ空を出力する。
【0037】
正常値選択部250は、省プロセス1ステップ合意部210、もしくは2ステップ合意部220の前段部220−Aが、一貫性の判定のために、送受信部110から受け付けた要求(またはデータ)を収集し、一致数が所定値(許容ビザンチン故障数)b3より大きい値を正常値と判定して、正常値テーブル330へ出力する。
【0038】
衝突解決値選択部260は、各サーバ1のアクセラレータ16の組み合わせ部240から確定値と、推定値と、組み合わせ空の値及び正常値を収集し、一致数が所定値(許容ビザンチン故障数)b4よりも大きい値(衝突解決値)で、サーバ1のPAXOS合意部40にPAXOSアルゴリズムによる合意を依頼する。
【0039】
PAXOS合意値判定部400は、PAXOS合意部40でPAXOSアルゴリズムを実行した結果、合意が得られた場合には、出力部450(
図3参照)を介して合意値をデータ格納部140へ入力して処理結果をクライアント3へ応答する。一方、PAXOS合意値判定部400は、PAXOS合意部40からの応答(合意値)が空であった場合には、合意が得られなかった通知をクライアント3に送信する。
【0040】
本実施例1では、省プロセス1ステップ合意部210と、2ステップ合意部220と、組み合わせ部240と、正常値選択部250と、衝突解決値選択部260と、PAXOS合意値判定部400をアクセラレータ16によるハードウェア処理とし、補助合意部としてのPAXOS合意部40をソフトウェア処理とする例を示したが、これに限定されるものではない。例えば、衝突解決値選択部260等の一部をソフトウェア処理で行うようにしてもよい。
【0041】
<テーブル>
次に、分散処理で利用されるテーブルについて以下に説明する。なお、以下のテーブルは、アクセラレータ16内で保持している例を示すが、これに限定されるものではない。例えば、各テーブルはメモリ12等にロードされ、保持してもよい。アクセラレータ16内でテーブルを保持する場合、ソフトエラーのようなビザンチン障害が問題にならない装置を使ってもよい。アクセラレータ16にFPGAを採用した場合、上述の装置例としては、各テーブルの保持部を、FPGAの小面積な論理リソース、少量のレジスタ、ECC(Error Correction Code)等によってソフトエラーが自動訂正されるブロックRAM等で構成してもよい。
【0042】
図4は、組み合わせ部240が利用する優先順位テーブル300の一例を示す図である。組み合わせ部240は、優先順位テーブル300の優先順位301に従って、省プロセス1ステップ合意部210の値と、2ステップ合意部220の値を組み合わせて出力する。なお、
図4の例は、正常値選択部250の出力を利用する場合を示す。
【0043】
優先順位=1では、省プロセス1ステップ合意部210の確定値または2ステップ合意部220の確定値、いずれかの確定値を出力し、優先順位=2では2ステップ合意部220の推定値を出力し、優先順位=3では、省プロセス1ステップ合意部210の推定値を出力する例を示す。なお、
図4の優先順位テーブル300は、条件設定部120に保持される。
【0044】
図5は、組み合わせ部240が利用する優先順位テーブル300Aの一例を示す図である。なお、
図5の例は、正常値選択部250の出力のうち一致数が最大の値を格納する最頻値テーブルを利用する場合を示す。優先順位テーブル300Aは、
図4の優先順位テーブル300と同様に構成される。
【0045】
図6は、正常値選択部250が利用する正常値テーブル330の一例を示す図である。正常値テーブル330は、処理番号331と、データ332と、一致数333からひとつのエントリが構成される。
【0046】
処理番号331は、送受信部110で付与された値である。データ332は、正常値選択部250で決定された値が格納される。一致数333には、他のサーバ1からのデータとデータ332が一致した数が格納される。また、正常値テーブル330は、正常値選択部250で保持される。
【0047】
図7は、正常値選択部250が利用する最頻値テーブル340の一例を示す図である。最頻値テーブル340は、処理番号341と、データ342と、一致数343からひとつのエントリが構成される。
【0048】
処理番号341は、送受信部110で付与された値である。データ342は、正常値選択部250で決定された値が格納される。一致数343には、他のサーバ1のデータとデータ342が一致した数が格納される。また、最頻値テーブル(図示省略)は、最頻値(正常値)を保持するテーブルで、正常値選択部250で保持される。
【0049】
<省プロセス1ステップ合意部>
図17は、省プロセス1ステップ合意部210のクォーラムの一例を示す図である。省プロセス1ステップ合意アルゴリズムによるデータの一貫性(同一性)の判定と、一貫性が保証されない場合(以下、衝突とする)の解決手法は、次の通りである。
【0050】
・データの一貫性:確定値同士は必ず一致する。
【0051】
・衝突の解決:確定値がいずれかのサーバ1に存在する可能性がある場合、推定値は必ず前記確定値と一致する。(確定値がいずれかのサーバ1に存在する可能性がある場合、確定値と一致する推定値が必ず存在し、解決値(推定値)となる)。それ以外の場合、無確定とする。
【0052】
図17は、
図1のサーバ1の各送受信部110が、クライアント3からデータ「A」、「B」及びビザンチン障害によるデータ「β」を受信した例を示す。
【0053】
省プロセス1ステップ合意アルゴリズムを実行する省プロセス1ステップ合意部210では、送受信部110から受信したデータを確定クォーラムと推定クォーラムの2つのクォーラムに分け、各クォーラムのデータの一貫性を各サーバ1の間の合意で決定する。なお、クォーラムは、分散処理を実行する要素の部分集合を示す。
【0054】
次に、確定クォーラムを構成する送受信部110(サーバ1)の数をQeとし、推定クォーラムを構成する送受信部110(サーバ1)の数をQfとし、送受信部110(サーバ1)の総数(プロセス数)をn1とする。
【0055】
また、省プロセス1ステップ合意部210において、最小レイテンシを維持可能な許容故障数をqとし、ビザンチン障害が発生する送受信部110の数(許容ビザンチン故障数)をb1とし、省プロセス1ステップ合意アルゴリズムが動作可能な許容故障数をf1とすると、省プロセス1ステップ合意アルゴリズムで必要とするプロセス数n1は次式を満たせばよい。
n1>2q+f1+2b1を満たせばよい。
【0056】
また、省プロセス1ステップ合意で許容される許容停止故障数は、f1−b1で定義される。許容停止故障数は、b1台のサーバ1にビザンチン障害が発生している場合に、故障による停止が許容されるサーバの数を示す。
【0057】
最小レイテンシを維持可能な許容故障数qは確定クォーラムQeの大きさに関係するパラメータである。本実施例1では、f1=3、b1=1、q=1とし、n1=8の例を示す。
【0058】
確定クォーラムQeを上記パラメータで表すと、
Qe=n1−q
を満たせばよい。一方、推定クォーラムQfの大きさは、
【0059】
n1−f1≧Qf≧2q+2b1+1
を満たせばよい。
【0060】
各クォーラムの大きさはデータの一致性(一貫性)の要件から定まっている。これらの条件によって、データの一致性が保たれる例を
図17に示す。
【0061】
確定クォーラムQe内に、確定値が存在する場合、推定クォーラムQfでは必ず確定値と同じ値を推定値として得ることができる。以下の例では、ビザンチン障害による異常値βが、正常だが推定値としてはいけないリクエストBと一致した場合でも、問題なく推定値Aを算出することができる。なお、推定値の判定は、推定クォーラムQf内で過半数が一致している値を推定値とする。
【0062】
次に、省プロセス1ステップ合意部210における確定値と推定値の判定処理について説明する。
【0063】
(1)確定値の判定
確定値の判定は、全ての値が一致した場合、一致した値を確定値とする
【0064】
(2)推定値の判定
推定値の判定は、推定クォーラムQf内の過半数以上の一致数を持つ値を推定値とする
【0065】
上記のように省プロセス1ステップ合意部210は、定足数を用いた判定処理により、b1台の装置(サーバ1)で、ビザンチン障害が発生しても、省プロセス1ステップ合意部210では正常なリクエストを出力として選択できる。
【0066】
なお、省プロセス1ステップ合意部210は、次のいずれかの条件が成立するまで、送受信部110からの受信を待つ。
【0067】
(条件1)待機中に受信した入力のうち、Qe(n1−q)台の送受信部110からの値が一致する
(条件2)全ての送受信部110(他のサーバ1)から受信する
(条件3)設定された時間が経過する
【0068】
なお、上記条件1の判定タイミングは、送受信部110から新たな入力が到着する都度が最適であるが、これに限定されるものではない。例えば、設定された個数の入力が到着した場合と、それ以降は到着する都度、など他のタイミングでもよい。設定された時間とは、定義ファイルなどで定められた一定のタイムアウト時間、もしくは、稼働中の統計情報から、その都度自動算出される動的なタイムアウト時間のどちらでもよい。
【0069】
以上のように、省プロセス1ステップ合意部210は、プロセス数n1が、n1>2q+f1+2b1を満たし、確定クォーラムQeが、Qe=n1−qを満たし、推定クォーラムQfが、n1−f1≧Qf≧2q+2b1+1を満たし、上記確定値の判定と上記推定値の判定を行えばよい。これにより、省プロセス1ステップ合意部210は、b1台の送受信部110(またはサーバ1)でビザンチン障害が生じても、確定値および推定値を正しく得ることが可能となる。
【0070】
<2ステップ合意部>
図18、
図19は、2ステップ合意部220の一例を示すブロック図である。
図18は、2ステップ合意部220の前段部220−Aと選択クォーラムの一例を示す図である。
図19は、2ステップ合意部220の後段部220−Bと計数クォーラムの一例を示す図である。
図18、
図19では、
図1のサーバ1−1、1−2の更新部130を図中更新部1、2とし、前段部220−Aを、それぞれ前段部1、2とし、後段部220−Bを、後段部1、2とする。また、2ステップ合意部220(サーバ1)の総数(プロセス数)をn2とする。
【0071】
図18では、前段部220−Aが受信する選択クォーラムの大きさが5の例を示す。前段部1では、5つの要求Aを受け付け、前段部2では、2つの要求Aと、2つの要求Bと、送受信部110のビザンチン障害による1つの異常値βを受け付けた例を示す。
【0072】
2ステップ合意部220では、2ステップ合意部220において、ビザンチン障害が発生する数(許容ビザンチン故障数)をb2とし、2ステップ合意アルゴリズムが動作可能な許容故障数をf2と仮定し、選択クォーラムと、計数クォーラムを設定する。なお、2ステップ合意で許容される許容停止故障数は、f2−b2で定義される。許容停止故障数は、b2台のサーバ1にビザンチン障害が発生している場合に、故障による停止が許容されるサーバの数を示す。
【0073】
選択クォーラムにおいて、選択クォーラムが許容可能な故障数をf21とし、許容可能なビザンチン故障数をb21とし、f21はf2、b21はb2と同値とし、プロセス数(サーバ1の数)をn21とした場合、
【0074】
n21>2f21+b21を満たすプロセス数(サーバ1の数)n21において、選択クォーラムQ1の大きさをQ1=n21−f21とする。前段部220−Aにおける一致値の判定と空の判定は以下のように行う。
【0075】
一致値の判定
・選択クォーラムQ1内の一致値の判定は全ての値が一致した場合、当該値を一致値とする。
空の判定
・選択クォーラムQ1内で一致値が存在しない場合、値を空とする
【0076】
次に、計数クォーラムQ2について説明する。
【0077】
図19では、後段部220−Bが受信する計数クォーラムQ2の大きさが6の例を示す。後段部1(220−B)では、6つの要求Aを受け付け、後段部2(220−B)では、3つの要求Aと、2つの空の値と、ビザンチン障害による1つの異常値βを受け付けた例を示す。
【0078】
計数クォーラムQ2では、定足数比較を用いる場合、選択クォーラムQ1とはプロセス数(サーバ1の数)等の条件が異なり、許容可能なサーバ1(プロセス数)の故障数をf22とし、許容可能なビザンチン故障数をb22とし、f22はf2、b22はb2と同値とし、プロセス数をn22とした場合、
【0079】
n22>2f22+2b22
を満たすプロセス数n22で、確定値および推定値の判定を実施することができる。また、計数クォーラムQ2の大きさは
Q2=n22−f22
を満たす。後段部220−Bでは、確定値および推定値の判定が以下のように行われる。
【0080】
確定値の判定
・計数クォーラムQ2内の確定値の判定は、全ての値が一致した場合、当該値を確定値とする
【0081】
推定値の判定
・計数クォーラムQ2内の推定値の判定は、確定値が存在しない場合に行い、v>b22を満たす一致数vを有する値を推定値とする。条件を満たす値が存在しない場合は、空と判定する。
【0082】
2ステップ合意部220では、定足数の比較を用いた確定値及び推定値の判定処理は、省プロセス1ステップ合意部210と同様に要求やデータの受信の度に行ってもよい。このタイミングは、新たに前段部220−Aからの出力が後段部220−Bへ到着する都度が最適であるが、これに限定されるものではない。
【0083】
2ステップ合意部220では、ビザンチン障害が発生した場合、次の2つの問題があった。
【0084】
・問題1:送受信部110でビザンチン障害が発生した場合、選択クォーラムQ1で本来得られた一致値が空の判定になってしまう場合がある。
・問題2:前段部220−Aでビザンチン障害が発生した場合、後段部220−Bの計数クォーラムQ2で本来得られた確定値および推定値を得られない場合がある。加えて、異常値が推定値となる場合がある。
【0085】
これに対して、前段部220−Aと後段部220−Bにおいて定足数を用いた判定処理を行うことにより、次のような効果を得ることができる。
【0086】
まず、送受信部110のうちb21台のサーバ1でビザンチン障害が生じても、選択クォーラムQ1は一致値と空の判定を正しく行うことが可能となる。さらに、前段部220−Aのうちb22台でビザンチン障害が発生しても、計数クォーラムQ2は確定値と推定値を正しく得ることが可能となる。加えて、異常値が推定値となることはない。
【0087】
なお、2ステップ合意部220では、後段部220−Bが、次のいずれかの条件が成立するまで、前段部220−Aからの受信を待つ。
【0088】
(条件4)待機中に受信した入力のうち、計数クォーラムQ2(n22−f22)台の前段部220−Aからの入力の値が一致する
(条件5)全てのアクセラレータ16(他のサーバ1)の前段部220−Aから受信する
(条件6)設定された時間が経過する
【0089】
ただし、後段部220−Bにおける上記条件の判定タイミングは、新たに前段部220−Aからの入力の値が到着する都度が最適であるが、これに限定されるものではない。例えば、後段部220−Bが設定された個数の入力を受信したときと、それ以降は受信する都度、など他のタイミングでもよい。また、予め設定された時間や、定義ファイルなどで定められた一定のタイムアウト時間、もしくは、稼働中の統計情報から、その都度自動的に算出される動的なタイムアウト時間のどちらでもよい。
【0090】
<組み合わせ部>
上記省プロセス1ステップ合意部210及び2ステップ合意部220のそれぞれにおいて、b1もしくはb2台のビザンチン障害が発生しても、正しく確定値および推定値を得ることが可能となる。
【0091】
しかし、多数のリクエストが衝突し、一致数が少ない場合には、確定値および推定値を得られず、組み合わせ部240は、送受信部110で受信した値の中から任意の値(任意値)を出力する。この場合に異常値が選択される可能性がある。
【0092】
本実施例1では、アクセラレータ16が異常値の出力を抑止するために、任意値を出力するタイミングにおいて、処理しても問題のない値(正常値)を判定する。これにより、任意値として、正常な値を出力できる。加えて、任意値が推定値と一致する可能性が高くなる。
【0093】
組み合わせ部240では、
図4で示した優先順位テーブル300に従って、省プロセス1ステップ合意部210または2ステップ合意部220の出力を次のように判定する。
【0094】
(1)省プロセス1ステップ合意部210または2ステップ合意部220のいずれかの確定値
(2)2ステップ合意部220の推定値
(3)省プロセス1ステップ合意部210の推定値
(4)組み合わせ空を出力。但し、省プロセス1ステップ合意部210または2ステップ合意部220の入力から正常値テーブル330と一致する値が存在する場合には、当該値も出力する。
【0095】
上記の判定処理により、組み合わせ部240では、省プロセス1ステップ合意部210及び2ステップ合意部220の確定値または推定値を選択して出力部450(
図3参照)へ出力し、推定値が存在しない場合には組み合わせ空の値を出力し、後述する衝突解決値選択部260で正常値を設定する。
【0096】
上記の構成により、組み合わせ部240では、ビザンチン障害による異常値の出力を抑止することが可能となる。
【0097】
<正常値選択部>
多数のリクエストが衝突し、リクエストの一致数が少ない場合には、組み合わせ部240は、確定値および推定値を得られず、任意値を出力する。この任意値として異常値が選択されるのを防止するため、正常値選択部250を機能させる。
【0098】
正常値選択部250は、任意値を出力するタイミングにおいて、処理しても問題の無い値(正常値)を判定し、正常値テーブル330に保持する。後述の衝突解決値選択部260では、各サーバ1の組み合わせ確定値、組み合わせ推定値、組み合わせ空の値及び正常値テーブル330の値を定足数比較することで、正常な値を選択し、PAXOS合意部40を実行できる。加えて、任意値が推定値と一致する可能性が高くなる。
【0099】
正常値選択部250では、省プロセス1ステップ合意部210、もしくは2ステップ合意部220の前段部220−Aが、各クォーラムを実行するために受信した値を収集し、許容ビザンチン故障数b3より大きい一致数を持つ値を、処理しても問題の無い値(正常値)と判定し、正常値テーブル330に保持する。許容ビザンチン故障数b3は、正常値選択アルゴリズムにおいて、ビザンチン障害が発生する送受信部110の数(許容ビザンチン故障数)であり、b1、b21と同値としてよい。正常値選択部250が収集する受信値の数(収集数c1)は、n3−f3≧c1≧b3+1でよい。f3は、正常値選択部250が動作可能な許容故障数であり、f1、f21、f22と同値としてよい。正常値選択部250において、許容される許容停止故障数は、f3−b3で定義される。なお、アクセラレータ16内で正常値選択部250を実現する場合、ソフトエラーのようなビザンチン障害が問題にならない装置を使ってもよい。アクセラレータ16にFPGAを採用した場合、上述の装置例としては、正常値選択部250を、FPGAの小面積な論理リソース、少量のレジスタ、ECC(Error Correction Code)等によってソフトエラーが自動訂正されるブロックRAM等で構成してもよい。また、n3は正常値選択部250の数(サーバ数)である。
【0100】
なお、正常値選択部250では、正常値の判定について、省プロセス1ステップ合意部210、もしくは2ステップ合意部220の前段部220−Aからリクエストを受信する度に実施してもよい。また、正常値選択部250が、正常値の判定及び保持する処理は、組み合わせ部240が組み合わせ空を決定し、PAXOS合意アルゴリズムを実行する以前であれば、所望のタイミングで実施してもよい。あるいは、正常値選択部250が、正常値を判定及び処理するタイミングは組み合わせ部240の処理以前に、省プロセス1ステップ合意部210や、2ステップ合意部220が無確定を決定するタイミングで実施することができる。
【0101】
<衝突解決値選択部>
上記省プロセス1ステップ合意部210、2ステップ合意部220及び組み合わせ部240の判定処理によって、送受信部110等でビザンチン障害が生じても、確定値、推定値、任意値のいずれも正常な値を出力することができる。しかし、アクセラレータ16内の各判定部および組み合わせ部240にビザンチン障害が発生した場合、以下のような課題が生じる。
【0102】
(1)衝突解決値(推定値および任意値)として、異常値を出力しPAXOS合意部40で合意を実行する
(2)確定値として、異常値を出力してデータ処理を実行する
【0103】
本実施例1では、まず、上記(1)の課題を解決するために、PAXOS合意部40へ合意を依頼する前に、衝突解決値選択部260で定足数の比較を行う
【0104】
衝突解決値選択部260は、各アクセラレータ16から組み合わせ確定値、組み合わせ推定値、組み合わせ空の値及び正常値(最頻値)を収集し、許容ビザンチン故障数b4より大きい一致数を持つ値(衝突解決値)でPAXOS合意部40に合意を実行させる。b4は、衝突解決値選択アルゴリズムにおいて、ビザンチン障害が発生する各判定部および組み合わせ部240の数(許容ビザンチン故障数)であり、b1、b21、b22、b3と同値としてよい。衝突解決値選択部260が収集する衝突解決値の数(収集数c2)は、n4−f4≧c2≧b4+1でよい。f4は、衝突解決値選択部260が動作可能な許容故障数であり、f1、f21、f22、f3と同値としてよい。衝突解決値選択部260において、許容される許容停止故障数は、f4−b4で定義される。なお、アクセラレータ16内で衝突解決値選択部260を実現する場合、ソフトエラーのようなビザンチン障害が問題にならない装置を使ってもよい。アクセラレータ16にFPGAを採用した場合、上述の装置例としては、衝突解決値選択部260を、FPGAの小面積な論理リソース、少量のレジスタ、ECC(Error Correction Code)等によってソフトエラーが自動訂正されるブロックRAM等で構成してもよい。また、n4は衝突解決値選択部の数(サーバ数)である。
【0105】
上記の処理により、衝突解決値選択部260は上記(1)の課題を解決することができる。しかし、後述するように、PAXOS合意部40で合意できない場合がある。
【0106】
例えば、確定値及び推定値が得られる入力がされた場合、1つのアクセラレータ16のみが推定値を得た場合、衝突解決値選択部260は、PAXOS合意部40に合意を実行させることはできない。これは、一つのアクセラレータ16(サーバ1)以外に、衝突解決値選択部260に推定値をマルチキャストする他のアクセラレータ16が存在せず、一致数を比較できないためである。PAXOS合意部40を実行できない場合、アクセラレータ16は処理すべきリクエストを得ることができない。
【0107】
PAXOS合意部40で合意を行うことができないケースとしては、以下の3つが挙げられる。
【0108】
(1−1)組み合わせ部240から確定値を得るサーバ1(アクセラレータ16)と、組み合わせ部240から推定値を得るサーバ1が混在するようなリクエストが入力され、かつ推定値を得たサーバ1の数が、許容ビザンチン故障数b4+1台未満の場合
(1−2)推定値を得るサーバ1と、任意値を得るサーバ1が混在するようなリクエストが入力され、かつ推定値を得たサーバ1の数が、許容ビザンチン故障数b4+1台未満である場合
(1−3)リクエストの衝突が激しく、各サーバ1の組み合わせ部240の出力(推定値、組み合わせ空及び正常値)が、許容ビザンチン故障数b4+1個以上の一致数を満たさない場合
【0109】
上記(1−1)を解決する手法について説明する。
【0110】
確定値を得るサーバ1と、推定値を得るサーバ1が混在し、推定値を得たサーバ1が、許容ビザンチン故障数b4+1台未満である状態では、組み合わせ部240で確定値を得ることができたサーバ1が、実行済みの確定値、もしくは実行直前の確定値を、各アクセラレータ16の衝突解決値選択部260にマルチキャストすればよい。
【0111】
これによって、衝突解決値選択部260は、実行すべき確定値と同一の値でPAXOS合意部40に合意処理を実行できる(上述したように、推定値と確定値は必ず同値である)。
【0112】
次に、上記(1−2)を解決する手法について説明する。
【0113】
推定値を得るサーバ1と任意値を得るサーバ1が混在し、推定値を得たサーバ1が、許容ビザンチン故障数b4+1台未満である状態では、以下のように解決する。
【0114】
まず、各サーバ1の組み合わせ部240が、確定値および推定値を得られなかったという情報(これを「組み合わせ空」の判定と呼ぶ)を衝突解決値選択部260に送信する。
【0115】
衝突解決値選択部260は、「組み合わせ空」の判定を、許容ビザンチン故障数b4+1個収集した場合、いずれのサーバ1でも確定値を得ていないことを判定できる。確定値を得たサーバ1が存在する場合、確定値を得られなかったサーバ1は必ず同値の推定値を得る。そのため、「組み合わせ空」を出力するサーバ1が存在する場合、確定値を得たサーバ1は存在しないと判定することができる。
【0116】
許容ビザンチン故障数b4+1個の「組み合わせ空」の出力を収集するのは、許容ビザンチン故障数b4台のビザンチン障害であるサーバ1が不正な「組み合わせ空」を送信することを考慮しているためである。
【0117】
「組み合わせ空」の出力が許容ビザンチン故障数b4+1個以上となった場合、衝突解決値選択部260は、確定値が存在せず、いずれかの正常な値(衝突解決値)でPAXOS合意部40に合意を実行させればよいことを判定できる。以降、各組み合わせ部240が正常値(もしくは最頻値でもよい)を選択し、出力するため、衝突解決値選択部260はそれらの出力をc2個収集し、許容ビザンチン故障数b4+1個以上の一致数を持つ値でPAXOS合意部40に合意を実行させればよい。
【0118】
収集数c2は、n4−f4≧c2≧b4+1の条件を満たし、最良のケースでは許容ビザンチン故障数b4+1で問題ない。また、衝突解決値選択部260は、確定値が存在しないため、推定値以外の値でPAXOS合意部40を実行させてもよい。正常値及び最頻値は推定値と一致する可能性が高く、PAXOS合意部40で合意を実行させるまでの待機時間が低減されるため、合意を形成するまでのレイテンシの低下が期待できる。
【0119】
上述した各判定は、値を受信するごとに判定を行ってもよい。この場合も、PAXOS合意部40で合意を実行させるまでの待機時間が低減されるため、合意を形成するまでのレイテンシの低下が期待できる。
【0120】
次に、上記(1−3)を解決する手法について説明する。
【0121】
衝突解決値選択部260で、各組み合わせ部240の出力をc2個収集した際に、許容ビザンチン故障数b4+1個以上の一致数を持つ値が存在しない場合や、「組み合わせ空」の判定で許容ビザンチン故障数b4個未満の場合、PAXOS合意部40で合意を実行できない状態となる。この状態は次の(a)、(b)で生じ得る。
【0122】
(a)リクエストの衝突が激しく、衝突解決値選択部260において、各サーバ1の正常値(もしくは最頻値)が許容ビザンチン故障数b4+1個以上の一致数を持たない
【0123】
(b)リクエストの衝突が激しく、衝突解決値選択部260において、各サーバ1が推定値として選択した値が許容ビザンチン故障数b4+1個以上の一致数を持たず、かつ「組み合わせ空」の判定が許容ビザンチン故障数b4未満
【0124】
上記(a)、(b)は、リクエストの衝突が激しいため、衝突解決値選択部260がc2個の値を収集しても、PAXOS合意部40への入力を決定できず、合意処理が停止する可能性がある状態である。
【0125】
本実施例1では、上記(a)、(b)のように、c2個の値を収集しても、PAXOS合意部40への入力を決定できなかった場合、PAXOS合意部40に「空」の値を入力し、PAXOS合意部40によって衝突が解決された値を待つ。
【0126】
PAXOS合意部40によって、衝突が解決された値が「空」であった場合、各サーバ1は上記(a)、(b)に示したような合意不可能な入力がされたことを判定することができる。PAXOS合意値判定部400は、この判定を得ることで、自動リトライによる再合意の実行や、処理の中断が可能となる。他の衝突解決値選択部260で、衝突が解決された値が「空」ではない値がPAXOS合意部40へ入力され、当該値が衝突を解決した値であった場合は、そのまま処理を継続する。
【0127】
以下に、合意不可能な入力を判定する動作例を示す。
【0128】
PAXOS合意値判定部400は、合意不可能な入力であることを判定した場合、以下の(i)、(ii)のいずれかの処理を行う。なお、アクセラレータ16内でPAXOS合意値判定部400を実現する場合、ソフトエラーのようなビザンチン障害が問題にならない装置を使ってもよい。アクセラレータ16にFPGAを採用した場合、上述の装置例としては、PAXOS合意値判定部400を、FPGAの小面積な論理リソース、少量のレジスタ、ECC(Error Correction Code)等によってソフトエラーが自動訂正されるブロックRAM等で構成してもよい。
【0129】
(i)PAXOS合意値判定部400は、クライアント3に合意不可であったことを通知する。これにより、レイテンシの低下が期待できる。これは、タイムアウト等による処理中断より、先に合意不可であった結果をクライアントに通知することが可能であることを意味している。
【0130】
(ii)再度、分散合意を試みる(継続モード)
この場合、自動リトライにより、合意値を得ることが期待できる。各アクセラレータ16内の送受信部110の受信値、もしくは正常値又は最頻値を選択し、各アクセラレータ16の送受信部110にマルチキャストすることで、もう一度分散合意を行う。
【0131】
合意不可能な入力がされた場合、上記(i)、(ii)のどちらの処理を行うかは、分散処理システムが継続モードであるか否かによって決定する。継続モードの有効/無効は、分散処理システムの起動時などに読み込まれる定義ファイル等で管理すればよい。なお、定義ファイルは、例えば、メモリ12に格納することができる。なお、PAXOS合意値判定部400のビザンチン障害を考慮する場合は、PAXOS合意値判定部400で合意が形成されたかの判定を行わずに、PAXOS合意部40からの応答(合意値)を、出力部450に出力し、後述するようにデータ格納部140を冗長化すればよい。上記「空」の処理結果(合意不可であったことの結果)も含めて、定足数比較を行った後に、上記(i)、(ii)のどちらの処理を行えば、不正な処理結果がクライアントに返却されることを防ぐことができる。
【0132】
次に、上記(2)の課題の解決は、クライアント3に処理結果を返却する部分(データ格納部140)を冗長化構成にし、不正な処理結果がクライアントに返却されることを防ぐ技術が知られている。各サーバ1が、クライアント3に応答する処理結果を定足数によって比較している場合、他2台のアクセラレータ16の処理結果を収集し、より大きい一致数を持つ処理結果をクライアント3に応答する。収集数は2b5+1であり、最良のケースではb5+1とすることができる。b5は、ビザンチン障害が発生するデータ格納部140の数(許容ビザンチン故障数)であり、b1、b21、b22、b3、b4と同値としてよい。上記の定足数比較は、各アクセラレータ16ではなく、処理結果を受け取るクライアント3側で行ってもよい。
【0133】
<通信回数>
省プロセス1ステップ合意部210と、2ステップ合意部220での合意に必要なプロセス(サーバ)数、最小通信回数δ、最小通信回数δを維持可能な許容故障数eについて、以下に説明する。また、以下では、f3=f4=3、b3=b4=b5=1としている。
【0134】
まず、省プロセス1ステップ合意部210と正常値選択部250及び衝突解決値選択部260で合意を行う場合、プロセス数をn1とし、許容故障数をf1、最小レイテンシを維持可能な許容故障数をq、許容ビザンチン故障数をb1とすると、必要なプロセス数n1は、
n1>2q+f1+2b1
となる。
【0135】
そして、最小レイテンシを維持可能な許容故障数q=1、許容故障数f1=3、許容ビザンチン故障数b1=1の場合、必要なプロセス数n1の最小値は8となる。
【0136】
次に、省プロセス1ステップ合意部210と正常値選択部250及び衝突解決値選択部260で合意を行う場合、最小通信回数δ=2となる。最小通信回数δは、クライアント3の要求からサーバ1間での合意に至るまでの通信回数である。
なお、最小通信回数δを維持可能な許容故障数eについては、最小レイテンシを維持可能な許容故障数q(=1)に相当する。
【0137】
図3で示したように、クライアント3−1からデータの更新要求で1回の通信となり、各サーバ1の送受信部110は受信したデータを他のサーバ1へ送信することで2回の通信となる(M2、
図3参照)。そして、省プロセス1ステップ合意部210で、確定値が得られれば合計2回の通信でサーバ1間の合意値を得られることができる。
【0138】
一方、2ステップ合意では、2ステップ合意部220と正常値選択部250及び衝突解決値選択部260で合意を行う場合、プロセス数をn2とし、許容故障数等は2ステップ合意部220の前段部220−A(選択クォーラムQ1)と後段部220−B(計数クォーラムQ2)では値が異なるので、次のように定義する。
【0139】
前段部220−Aにおける許容故障数をf21、許容ビザンチン故障数をb21とし、後段部220−Bにおける許容故障数をf22、許容ビザンチン故障数をb22とすると、プロセス数n2は次式で表される。
n2>max(2f21+b21,2f22+2b22)
ただし、max(x,y)は、xとyのうち大きい値を出力する関数である。
【0140】
2ステップ合意では、許容故障数f21=f22=3、許容ビザンチン故障数b21=b22=1の場合、プロセス数n2=9が最小値となる。
【0141】
また、2ステップ合意の最小通信回数δは、
図3で示したように、クライアント3−1からデータの更新要求で1回の通信となり、各サーバ1の送受信部110は受信したデータを他のサーバ1の前段部220−Aへ送信することで2回の通信となり、次に前段部220−Aの結果を各サーバ1の後段部220−Bへ送信することで3回の通信となる(M2、M3、
図3参照)。そして、2ステップ合意部220では、計数クォーラムQ2で確定値が得られれば合計3回の通信でサーバ1間の合意値を得られることができ、最小通信回数δ=3となる。
【0142】
なお、最小通信回数δを維持可能な許容故障数eについては、2ステップ合意の許容故障数f2であり、f2は次式で表される。
f2=min(f21,f22)
ただし、min(x,y)は、xとyのうち小さい値を出力する関数である。
f21=f22=3の場合、f2=3であり、e=3となる。したがって、2ステップ合意は省プロセス1ステップ合意より、最小通信回数δが多くなるが、分散データ管理システムの可用性は高くなる。
【0143】
さらに、省プロセス1ステップ合意部210と2ステップ合意部220に組み合わせ部240を加えて、正常値選択部250及び衝突解決値選択部260を用いて合意を行う場合、プロセス数をnとし、他の値を上記の通りとすると、プロセス数nは、次式で定義される。
n=max(2q+f1+2b1,2f21+b21,2f22+2b22)
ただし、max(x,y,z)は、xとyとzのうち大きい値を出力する関数である。
【0144】
省プロセス1ステップ合意部210と2ステップ合意部220を組み合わせた場合では、許容故障数q=1、許容故障数f1=f21=f22=3、許容ビザンチン故障数b1=b21=b22=1の場合、プロセス数n=9が最小値となる。なお、このプロセス数nについては、後述する実施例2および実施例3に記載の方法を用いることで、最小通信回数δと許容故障数eを維持しながら、この装置数を低減することが可能である。
【0145】
また、省プロセス1ステップ合意部210と2ステップ合意部220を組み合わせた場合の最小通信回数δは、上述のように、省プロセス1ステップ合意部210で確定値が得られた場合であり、最小通信回数δ=2となる。
【0146】
なお、最小通信回数δを維持可能な許容故障数eについては、2ステップ合意と同等であり、e=3となる。したがって、省プロセス1ステップ合意部210と2ステップ合意部220を組み合わせた場合は、省プロセス1ステップ合意の最小通信回数δ、サーバ数(プロセス数)を維持しながら、2ステップ合意と同等の可用性を確保することができるのである。
【0147】
<処理の概要>
図3は、本発明のサーバ1で行われる分散データ管理の一例を示す図である。図示の例ではクライアント3−1がデータAの処理要求をサーバ1−1〜1−nへマルチキャストで送信する例を示す。なお、クライアント3−1から各サーバ1へのマルチキャストによる送信は、図示しない管理計算機などが行ってもよい。
【0148】
各サーバ1の送受信部110は、クライアント3−1から受信したデータを他のサーバ1へマルチキャストで送信する(図中M2)。サーバ1は、サーバ1から受信したデータを更新部130へ送信し、一貫性の判定を行う。
【0149】
更新部130は、
図17に示した確定クォーラム(または推定クォーラム)のデータを省プロセス1ステップ合意部(
図3のSP1−STEP)210へ入力する。また、更新部130は、
図18、
図19に示した選択クォーラム(または計数クォーラム)のデータを2ステップ合意部220へ入力する。
【0150】
省プロセス1ステップ合意部210は、確定クォーラムから入力されたデータが全て一致した場合、当該データを確定した値(確定値)とする。また、省プロセス1ステップ合意部210は、推定クォーラムから入力されたデータのうち過半数のデータが一致した場合、当該データを推定値とする。
【0151】
一方、上記以外の場合は、省プロセス1ステップ合意部210が、出力は無確定として組み合わせ部240に通知する。
【0152】
次に、2ステップ合意部220では、前段部220−A(
図3の2−STEP(1))で選択クォーラムから入力されたデータが全て一致した場合、当該データを一致値とし、後段部220−B(
図3の2−STEP(2))へ送信する(M3)。
【0153】
後段部220−Bでは、計数クォーラムから入力されたデータが全て一致した場合、当該データを確定値として出力する。また、後段部220−Bは、計数クォーラムから入力されたデータが部分一致した場合、当該データを推定値とする。
【0154】
一方、上記以外の場合は、後段部220−Bが、出力は無確定として組み合わせ部240に通知する。
【0155】
次に、更新部130では、省プロセス1ステップ合意部210と2ステップ合意部220の出力が組み合わせ部240へ入力される。組み合わせ部240は、
図4または
図5で示したように予め設定された優先順位に従って省プロセス1ステップ合意部210または2ステップ合意部220の出力を選択する。
【0156】
まず、組み合わせ部240は、第1の優先順位として、省プロセス1ステップ合意部210の確定値または2ステップ合意部220の確定値のいずれかを合意値(組み合わせ確定値)として選択する。
【0157】
なお、省プロセス1ステップ合意部210の確定値は、サーバ1の確定クォーラムQe内でデータの全数が一致した値である。また、2ステップ合意部220の確定値は、後段部220−Bがサーバ1の計数クォーラム(Q2)から受信したデータの全数が一致した値である。
【0158】
組み合わせ部240は、第2の優先順位として、2ステップ合意部220の推定値を選択する。この推定値は、2ステップ合意部220の後段部220−Bがサーバ1の計数クォーラムから受信したデータのうち部分一致した値である。
【0159】
また、組み合わせ部240は、第3の優先順位として、省プロセス1ステップ合意部210の推定値を選択する。この推定値は、省プロセス1ステップ合意部210がサーバ1の推定クォーラムから受信したデータのうち過半数が一致した値である。
【0160】
組み合わせ部240は、第4の優先順位として、組み合わせ空のみ、または組み合わせ空と正常値を選択する。この正常値は、省プロセス1ステップ合意部210または2ステップ合意部220の入力から正常値テーブル330と一致する値である。
【0161】
組み合わせ部240は、
図4の優先順位に従って省プロセス1ステップ合意部210または2ステップ合意部220の出力を選択した後、選択したデータが確定値であればそのまま出力する。
【0162】
一方、組み合わせ部240は、推定値または組み合わせ空(もしくは組み合わせ空及び正常値)を選択した場合には、他のサーバ1との間で合意を行う必要がある。サーバ1では、PAXOS合意部40で合意を形成する前に、衝突解決値選択部260で上述した定足数の比較を行ってからPAXOS合意部40へ合意を依頼する。
【0163】
衝突解決値選択部260は、正常値選択部250で正常値または最頻値を用いて、PAXOS合意部40へ異常値を入力するのを抑止して、かつ、合意を実行可能な値を選択して、PAXOS合意部40へ合意を依頼する。
【0164】
各サーバ1のPAXOS合意部40の結果はPAXOS合意値判定部400へ入力され、合意が形成された場合には、合意値をデータ格納部140へ入力して所定の処理を実行してクライアント3に応答する。
【0165】
PAXOS合意値判定部400は、合意が形成されなかった場合には、合意が得られなかった通知をクライアント3に送信する。また、PAXOS合意値判定部400は、合意が形成された場合には、合意値を出力部450(
図3参照)に出力する。
【0166】
このように、本実施例1では、省プロセス1ステップ合意部210と2ステップ合意部220の2つの合意アルゴリズムを組み合わせ、さらに、これら2つの合意アルゴリズムから確定値や推定値が得られない場合には、組み合わせ部240が「組み合わせ空」または正常値や最頻値を出力する。さらに、衝突解決値選択部260は、組み合わせ部240の出力がPAXOS合意部40で合意を実行可能な値を選択して合意を依頼する。
【0167】
これにより、アクセラレータ16の各部でビザンチン障害が発生した場合であっても、異常値が使用または出力されるのを抑止して、プロセス数(またはサーバ数)nの増大を抑制しながらも、クライアント3がデータの処理をサーバ1に要求してから、サーバ1で合意に達するまでの最小の通信回数を低減することができる。本実施例1では、ビザンチン障害を検知または訂正することなく、ビザンチン障害が発生しても正常に処理を継続して、処理結果をクライアント3に応答することが可能となる。
【0168】
また、本実施例1では、アクセラレータ16の各部におけるビザンチン障害に対する対処は、次のようになる。
【0169】
省プロセス1ステップ合意部210では、送受信部110にビザンチン障害が発生した場合でも、1ステップ合意の際に、確定値と推定値を正常に判定することができる。また、2ステップ合意部220では、ビザンチン障害による異常値が入力されても、確定値と推定値を正常に判定することができる。また、省プロセス1ステップ合意部210または2ステップ合意部220では、確定値または推定値が得られない場合には無確定を出力する。
【0170】
組み合わせ部240は、省プロセス1ステップ合意部210または2ステップ合意部220でビザンチン障害が発生し、確定値や推定値が存在しない場合には、正常な値を任意値として出力し、異常値を出力するのを抑止する。
【0171】
また、衝突解決値選択部260は、省プロセス1ステップ合意部210、2ステップ合意部220または組み合わせ部240でビザンチン障害が発生しても正常な値でPAXOS合意を実行することができる。また、データ格納部140では、ビザンチン障害が生じても、クライアント3には正常な処理結果を応答することができる。
【0172】
<処理の詳細>
図8は、各サーバ1で行われる処理の一例を示すフローチャートである。この処理は、クライアント3からデータの処理要求を受信した場合に実行される。
【0173】
まず、サーバ1では、クライアント3からマルチキャストで送信された処理要求に含まれるデータを、アクセラレータ16の送受信部110が受信する(S1)。
【0174】
次にアクセラレータ16の送受信部110は、受信したデータを他のサーバ1へマルチキャストで送信し、受信したデータを省プロセス1ステップ合意部210と2ステップ合意部220へ入力する(S2)。
【0175】
次に、ステップS3では、省プロセス1ステップ合意部210が、上記入力された処理要求について1ステップ合意処理を後述する
図9のように実行する。ステップS4では、2ステップ合意部220が、上記入力された処理要求について2ステップ合意処理を後述する
図10のように実行する。なお、図示の例では、省プロセス1ステップ合意処理(S3)と2ステップ合意処理(S4)を並列して実行する例を示すが、順次実行してもよい。
【0176】
ステップS5では、組み合わせ部240が省プロセス1ステップ合意部210の出力(確定値、推定値または無確定)と、2ステップ合意部220の出力(確定値、推定値または無確定)を受け付けて、
図11で示す組み合わせ処理を実行する。
【0177】
ステップS6では、サーバ1の更新部130が、組み合わせ部240の出力に確定値が含まれているか否かを判定する。更新部130は、確定値が含まれていればステップS7へ進み確定値を合意値として出力する。更新部130は、出力した合意値をデータ格納部140へ入力し、所定の処理を行った結果は送受信部110を介してクライアント3へ応答する。
【0178】
一方、更新部130は、組み合わせ部240の出力に確定値が含まれていない場合には、ステップS8に進んで推定値が含まれているか否かを判定する。更新部130は、推定値が含まれていれば、ステップS11に進んで衝突解決値選択部260で衝突解決値選択処理を実行する。一方、推定値が含まれていなければ、ステップS9に進んで正常値選択部250で正常値選択を実行する。
【0179】
ステップS9では、正常値選択部250が
図13で示すように、省プロセス1ステップ合意部210(あるいは2ステップ合意部220)が、合意処理のために各送受信部110から受信した値に基づいて正常値テーブル330にデータを追加する。ステップS10では、正常値選択部250が、正常値テーブル330に追加した正常値と組み合わせ空の値を衝突解決値選択部260へ送信し、ステップS11に進む。
【0180】
ステップS11では、衝突解決値選択部260が、組み合わせ部240からの推定値、または正常値選択部250から正常値と組み合わせ空の値を受け付けて、
図12に示す衝突解決値選択処理を実行する。衝突解決値選択部260は、各アクセラレータ16から組み合わせ部240の出力を収集してPAXOS合意部40への入力(衝突解決値)を生成し、PAXOS合意部40へ入力する。
【0181】
ステップS12では、PAXOS合意部40がPAXOSアルゴリズムを用いて各サーバ1間で衝突解決値(提案)の合意を実行し、アクセラレータ16の更新部130に応答する。PAXOSアルゴリズムについては、周知のアルゴリズムであるので本実施例では詳述しない。
【0182】
ステップS13では、PAXOS合意値判定部400が、PAXOS合意部40の応答(衝突解決値)が「空」であるか否かを判定し、「空」でない場合にはステップS14へ進み、「空」の場合にはステップS15に進む。
【0183】
ステップS14では、PAXOS合意値判定部400が、PAXOS合意部40からの応答(確定値)を合意値として出力する。なお、合意値は上述のようにデータ格納部140へ入力され、クライアント3に処理結果を応答する。
【0184】
ステップS15では、PAXOS合意値判定部400がメモリ12等を参照し、当該アクセラレータ16が継続モードであるか否かを判定し、継続モードであればステップS16へ進み、継続モードでなければステップS17へ進む。
【0185】
ステップS16では、送受信部110が既に受信しているデータを各サーバ1の送受信部110へマルチキャストで送信して、合意の再実行(再合意)を実施する。なお、再合意には、各サーバ1の正常値選択部250に保持されている正常値又は最頻値を使用してもよい。ステップS17では、各サーバ1との間で合意が形成されなかったため、合意不可を示す通知をクライアント3に送信する。
【0186】
上記処理によって、合意値が得られた場合には、データ格納部140が合意値で所定の処理を行って、アクセラレータ16は処理結果をクライアント3に応答する。一方、合意値が得られなかった場合には、アクセラレータ16が合意の再実行または合意不可の通知を送信して処理を終了する。
【0187】
<省プロセス1ステップ合意処理>
図9は、省プロセス1ステップ合意部210で行われる合意処理の一例を示す図である。この処理は、
図8のステップS3で行われる。
【0188】
省プロセス1ステップ合意部210は、推定クォーラムの大きさQf(n1−f1≧Qf≧2q+2b1+1)の台数のサーバ1からの入力(処理要求)を待機する(S21)。
【0189】
次に、省プロセス1ステップ合意部210は、推定クォーラムの大きさQfの数だけ入力を受けると、Qfの数の入力の値が全て一致するか否かを判定する(S22)。Qfの全数の値が一致した場合にはステップS23へ進み、そうでない場合にはステップS26へ進む。
【0190】
ステップS23では、省プロセス1ステップ合意部210が、上述した条件1〜3のいずれかを満たすまで、送受信部110から入力を受け付ける。省プロセス1ステップ合意部210は、確定クォーラムQe台の送受信部110からの入力の値が一致する(条件1)か、全てのサーバ1から入力を受け付ける(条件2)か、所定時間が経過する(条件3)かの条件を満たすと、ステップS24へ進む。
【0191】
ステップS24では、省プロセス1ステップ合意部210が、上記ステップS23で受信した確定クォーラムの数Qeの入力が一致したか否かを判定する。確定クォーラムQe内で、入力された値が一致していればステップS25へ進む。ステップS25では、省プロセス1ステップ合意部210が確定クォーラムQe内で一致した値を確定値として組み合わせ部240へ出力する。
【0192】
ステップS22で、推定クォーラムQf内で全数の値が一致しなかったステップS26では、省プロセス1ステップ合意部210は、推定クォーラムQf内の過半数で値が一致したか否かを判定する。推定クォーラムQf内の過半数で値が一致する場合にはステップS27へ進み、一致しない場合にはステップS28へ進む。
【0193】
ステップS27では、推定クォーラムQf内で値が一致し、確定クォーラムQe内で値が一致しない場合または、推定クォーラムQf内で過半数の値が一致した場合で、省プロセス1ステップ合意部210は、推定クォーラムQf内で過半数が一致した値を推定値として組み合わせ部240に出力する。
【0194】
ステップS28では、推定クォーラムQf内の過半数で値が一致しないので、省プロセス1ステップ合意部210は、無確定を組み合わせ部24に出力する。
【0195】
上記の合意処理によって、省プロセス1ステップ合意部210は、確定値または推定値あるいは無確定を組み合わせ部240へ出力する。
【0196】
<2ステップ合意処理>
図10は、2ステップ合意部220で行われる処理の一例を示す図でフローチャートである。この処理は、
図8のステップS4で実行される。
【0197】
まず、ステップS31では、2ステップ合意部220の前段部220−Aは、送受信部110から選択クォーラムの数Q1(n21−f21)の入力を受け付けるまで待機する。選択クォーラムの数Q1の入力を受け付けると、ステップS32に進む。ステップS32では、2ステップ合意部220が、選択クォーラムQ1の入力の値が全て一致したか否かを判定する。
【0198】
選択クォーラムQ1内で入力の値が全て一致した場合、2ステップ合意部220は、ステップS33で、受信した入力の値を各アクセラレータ16へ送信する。一方、選択クォーラムQ1内で入力の値が全て一致しない場合、2ステップ合意部220は、ステップS34で、空の値を各アクセラレータ16へ送信する。
【0199】
ステップS35では、2ステップ合意部220の後段部220−Bが、上述した条件4〜6のいずれかを満たすまで、前段部220−Aから入力を受け付ける。なお、後段部220−Bは、上記ステップS33またはステップS34で、各アクセラレータ16の前段部220−Aが送信した値を待ち受ける。
【0200】
すなわち、2ステップ合意部220の後段部220−Bは、計数クォーラムQ2(n22−f22)台の前段部220−Aからの入力の値が一致する(条件4)か、全てのアクセラレータ16の前段部220−Aから入力の値を受信する(条件5)か、設定された時間が経過する(条件6)かのいずれかの条件を満たすと、ステップS36へ進む。
【0201】
ステップS36では、後段部220−Bが、入力の値のうち、計数クォーラムQ2の数(n22−f22)で値が一致したか否かを判定する。後段部220−Bは、入力の値が計数クォーラムQ2の数以上で一致していればステップS37へ進み、一致した値を確定値として組み合わせ部240に出力する。
【0202】
一方、入力の値が計数クォーラムQ2の数以上で一致していなければステップS38へ進んで、後段部220−Bは、一致した値の数が許容ビザンチン故障数b22+1以上であるか否かを判定する。後段部220−Bは、一致した値の数が許容ビザンチン故障数b22+1以上であればステップS39で、許容ビザンチン故障数b22+1以上で一致した値を推定値として組み合わせ部240へ出力する。
【0203】
一方、ステップS38の判定で、部分一致した数が許容ビザンチン故障数b22+1未満の場合、後段部220−Bは、値を無確定として組み合わせ部240へ出力する。
【0204】
以上の処理によって、2ステップ合意部220は、前段部220−Aが選択クォーラムQ1で一致した値を配信し、後段部220−Bは、配信された値で計数クォーラムQ2の数以上で一致したか否かによって確定値または推定値を決定し、合意が形成できない場合には値を無確定として出力する。
【0205】
<組み合わせ処理>
図11は、組み合わせ部240で行われる処理の一例を示す図でフローチャートである。この処理は、
図8のステップS5で実行される。
【0206】
まず、ステップS41では、組み合わせ部240が、省プロセス1ステップ合意部(図中SP1−step)210及び2ステップ合意部(図中2−step)220から出力(確定値、推定値、無確定)を取得する。ステップS41では、組み合わせ部240が、省プロセス1ステップ合意部210及び2ステップ合意部220から出力のいずれかに確定値が含まれるか否かを判定する。組み合わせ部240は、確定値が含まれる場合はステップS43へ進み、そうでない場合にはステップS45へ進む。
【0207】
ステップS43では、組み合わせ部240が、省プロセス1ステップ合意部210の確定値、または2ステップ合意部220のいずれかの確定値を選択する。ステップS44では、組み合わせ部240が、この選択した確定値を組み合わせ確定値として出力する。
【0208】
確定値が存在しない場合のステップS45では、組み合わせ部240が、2ステップ合意部220の出力に推定値があるか否かを判定する。2ステップ合意部220の出力が推定値の場合、組み合わせ部240は、この推定値を組み合わせ推定値として出力する(S46)。
【0209】
2ステップ合意部220に推定値が存在しない場合、組み合わせ部240は、ステップS47で省プロセス1ステップ合意部210の出力が推定値であるか否かを判定する。省プロセス1ステップ合意部210の出力が推定値であれば、組み合わせ部240は、この推定値を組み合わせ推定値として出力する(S48)。
【0210】
一方、確定値も推定値も存在しない場合には、組み合わせ部240は、組み合わせ空の値を出力する(S49)。
【0211】
上記処理により、組み合わせ部240は、省プロセス1ステップ合意部210と2ステップ合意部220の出力を組み合わせて確定値または推定値を決定し、いずれも存在しない場合には組み合わせ空の値を出力する。
【0212】
<正常値選択処理>
図13は、正常値選択部250で行われる処理の一例を示す図でフローチャートである。この処理は、
図8のステップS9で実行される。なお、
図8の例では、組み合わせ処理(S5)後に、正常値選択処理実行する例を示すが、正常値選択処理の実行順序はこれに限定されない。例えば、省プロセス1ステップ合意処理(S3)や、2ステップ合意処理(S4)と、並列して実行してもよい。
【0213】
まず、ステップS71では、正常値選択部250が、省プロセス1ステップ合意部210(あるいは2ステップ合意部220)が、合意処理のために受信した値(各サーバ1の送受信部110がマルチキャストで配信したクライアント3からの処理要求)を、許容ビザンチン故障数b3+1の個数まで収集する。
【0214】
ステップS72では、正常値選択部250が、収集した入力の値の一致数が許容ビザンチン故障数b3よりも大きい値があるか否かを判定する。正常値選択部250は、許容ビザンチン故障数b3よりも大きい値がある場合にはステップS73へ進み、そうでない場合には、ステップS74へ進む。
【0215】
ステップS72では、正常値選択部250が、一致数が許容ビザンチン故障数b3よりも大きい値を、正常値テーブル330に追加して処理を終了する。
【0216】
一方、一致数が許容ビザンチン故障数b3以下の場合、正常値選択部250は、ステップS74で、省プロセス1ステップ合意部210(あるいは2ステップ合意部220)から新たな入力の値を追加して受信し、収集する。次に、ステップS75では、正常値選択部250が、収集した入力の値の一致数が許容ビザンチン故障数b3よりも大きい値があるか否かを判定する。正常値選択部250は、許容ビザンチン故障数b3よりも大きい値がある場合には上記ステップS73へ進み、そうでない場合には、ステップS76へ進む。
【0217】
ステップS76では、正常値選択部250が、収集した値の数が最大値(n3−f3)に達したか否かを判定する。収集した値の数がn3−f3に達していれば、正常値選択部250は正常値テーブル330に空の値を追加する。一方、収集した値の数がn3−f3に達していなければ、正常値選択部250は、ステップS74に戻って上記処理を繰り返す。
【0218】
上記処理によって、正常値選択部250は、一致数が所定の条件に達した値または空の値を正常値テーブル330に追加していく。
【0219】
<衝突解決値選択処理>
図12は、衝突解決値選択部260で行われる合意処理の一例を示す図である。この処理は、
図8のステップS11で行われる。
【0220】
まず、ステップS51では、各アクセラレータ16は、組み合わせ部240の出力(組み合わせ確定値、組み合わせ推定値、組み合わせ空)と正常値選択部250からの正常値(または最頻値)を、各サーバ1の衝突解決値選択部260へマルチキャストで送信し(M4)、衝突解決値選択部260は、許容ビザンチン故障数b4+1の数まで収集する。なお、最頻値については
図14で後述する。
【0221】
衝突解決値選択部260は、許容ビザンチン故障数b4+1の値を収集すると、ステップS52へ進む。ステップS52では、収集した確定値及び推定値の中で一致する値の数(一致数)が許容ビザンチン故障数b4よりも大きい値があるか否かを判定する。衝突解決値選択部260は、一致数が許容ビザンチン故障数b4よりも大きい値が存在する場合にはステップS53へ進み、そうでない場合にはステップS54へ進む。
【0222】
ステップS53では、衝突解決値選択部260は、一致数が許容ビザンチン故障数b4よりも大きい値をPAXOS合意部40への入力(衝突解決値)として出力し、処理を終了する。
【0223】
一方、確定値や推定値の一致数が許容ビザンチン故障数b4以下の場合のステップS54では、衝突解決値選択部260は、組み合わせ空の値の一致数が許容ビザンチン故障数b4よりも大きいか否かを判定する。衝突解決値選択部260は、組み合わせ空の値の一致数が許容ビザンチン故障数b4よりも大きい場合には、ステップS55へ進み、そうでない場合にはステップS61へ進む。
【0224】
ステップS55では、衝突解決値選択部260が、組み合わせ部240の確定値が存在しないと判定し、ステップS56へ進む。ステップS56では、衝突解決値選択部260が、空ではない正常値(最頻値)を含めて、収集した値の中の一致数が許容ビザンチン故障数b4よりも大きい値が存在するか否かを判定する。衝突解決値選択部260は、一致数が許容ビザンチン故障数b4よりも大きい値が存在する場合には、ステップS57へ進み、そうでない場合にはステップS58へ進む。
【0225】
ステップS57では、衝突解決値選択部260が、一致数が許容ビザンチン故障数b4よりも大きい値をPAXOS合意部40への入力(衝突解決値)として出力し、処理を終了する。
【0226】
ステップS54の判定で、組み合わせ空の値の一致数が許容ビザンチン故障数b4以下の場合のステップS61では、衝突解決値選択部260が、収集した値の総数が最大値(n4−f4)の大きさに達したか否かを判定する。
【0227】
衝突解決値選択部260は、収集した値の総数がn4−f4に達していればステップS59へ進み、PAXOS合意部40への入力(衝突解決値)を空として出力し、処理を終了する。
【0228】
衝突解決値選択部260は、収集した値の総数がn4−f4に達していなければステップ62へ進み、各アクセラレータ16から組み合わせ部240の出力を追加で収集してから、上記ステップS52へ戻って上記処理を繰り返す。
【0229】
ステップS56の判定で、一致数が許容ビザンチン故障数b4以下のステップS58では、衝突解決値選択部260が、収集した値の総数がn4−f4の大きさに達したか否かを判定する。
【0230】
衝突解決値選択部260は、収集した値の総数がn4−f4に達していればステップS59へ進み、PAXOS合意部40への入力を空として出力し、処理を終了する。
【0231】
一方、衝突解決値選択部260は、収集した値の総数がn4−f4に達していなければステップ60へ進み、各アクセラレータ16から組み合わせ部240の出力を追加で収集してから、上記ステップS56へ戻って上記処理を繰り返す。
【0232】
上記処理によって、衝突解決値選択部260は、組み合わせ部240の出力と正常値選択部250の出力に基づいて、PAXOS合意部40への入力を決定して出力する。
【0233】
以上の処理により、衝突解決値選択部260は、組み合わせ部240の出力に確定値が存在しない場合には、衝突解決値選択部260が収集した値の一致数に基づいてPAXOS合意部40への入力(衝突解決値)を決定する。
【0234】
<最頻値選択処理>
図14は、正常値選択部250で行われる処理の一例を示す図でフローチャートである。この処理は、正常値に代わって最頻値を用いる場合に
図8のステップS9で実行される。なお、正常値選択処理と同様に、最頻値選択処理の実行順序はこれに限定されない。
【0235】
まず、ステップS81では、正常値選択部250が、
図13に示した正常値選択処理を実施して正常値テーブル330を更新する。ステップS82では、正常値選択部250が、正常値テーブル330に値が存在するか否かを判定する。正常値選択部250は、正常値テーブル330に値が存在すればステップS83へ進み、そうでない場合にはステップS84へ進む。
【0236】
ステップS83では、正常値選択部250が、正常値テーブル330の値の中で一致数が最大の値を最頻値テーブル340に追加する。なお、一致数は、
図13のステップS71で示したように、各送受信部110がクライアント3から受信した値との一致数である。
【0237】
一方、ステップS83では、正常値選択部250が、最頻値テーブル340に空の値を追加する。
【0238】
上記処理によって、各送受信部110がクライアント3から受信した値のうち一致数が最大の値が最頻値テーブル340に追加される。
【0239】
以上、説明したように、本実施例1の分散処理システムでは、アクセラレータ16の各部でビザンチン障害が発生した場合であっても、異常値が使用または出力されるのを抑止して、プロセス数(またはサーバ数)の増大を抑制しながらも、低レイテンシで処理を実現することができる。そして、本実施例1では、ビザンチン障害を検知または訂正することなく、ビザンチン障害が発生しても正常に処理を継続して、正常な処理結果をクライアント3に応答することが可能となる。