JP2020115315A - 分散処理方法及び分散処理システム - Google Patents

分散処理方法及び分散処理システム Download PDF

Info

Publication number
JP2020115315A
JP2020115315A JP2019006800A JP2019006800A JP2020115315A JP 2020115315 A JP2020115315 A JP 2020115315A JP 2019006800 A JP2019006800 A JP 2019006800A JP 2019006800 A JP2019006800 A JP 2019006800A JP 2020115315 A JP2020115315 A JP 2020115315A
Authority
JP
Japan
Prior art keywords
unit
data
value
servers
distributed processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2019006800A
Other languages
English (en)
Other versions
JP6804572B2 (ja
Inventor
智亮 杉澤
Tomoaki Sugisawa
智亮 杉澤
展之 山本
Nobuyuki Yamamoto
展之 山本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2019006800A priority Critical patent/JP6804572B2/ja
Priority to US16/561,063 priority patent/US11106552B2/en
Publication of JP2020115315A publication Critical patent/JP2020115315A/ja
Application granted granted Critical
Publication of JP6804572B2 publication Critical patent/JP6804572B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2023Failover techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2094Redundant storage or storage space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/18Error detection or correction of the data by redundancy in hardware using passive fault-masking of the redundant circuits
    • G06F11/187Voting techniques
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/82Solving problems relating to consistency
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/40Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass for recovering from a failure of a protocol instance or entity, e.g. service redundancy protocols, protocol state redundancy or protocol service redirection

Abstract

【課題】サーバ数の増大を抑制し、データの一貫性を保証するまでの通信回数を低減しながら、ビザンチン障害が発生した場合でも、正常に処理を継続する。【解決手段】複数のサーバで受信したデータを多重化して処理する分散処理システムで、前記多重化された前記データの一貫性を判定する第1の判定部と、前記第1の判定部から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータを含む場合には、当該一貫性が保証されたデータを出力する出力部と、を有し、前記第1の判定部は、前記データを受信する第1のサーバ数が、故障が発生したサーバを許容する所定の許容故障数と、ビザンチン障害が発生したサーバを許容する許容ビザンチン故障数に基づいて予め設定される。【選択図】図20

Description

本発明は、複数のサーバで分散処理を行って、可用性を確保する分散処理システムに関する。
インメモリ型分散KVS(Key Value Store)等の分散処理システムでは、サーバに障害が発生した場合にデータが消失するのを防止するため、データを複数のサーバに分散して格納し、可用性を確保している。
データを複数のサーバに格納する多重化において、データの一貫性を保証するには、分散合意アルゴリズムを利用する手法が知られている。分散合意アルゴリズムとしてはPAXOSアルゴリズムが知られている。
分散処理システムでは、データの一貫性を保証したまま低レイテンシを実現するために、PAXOSアルゴリズムより必要なプロセス数を増やす手法が知られているが、この手法では、合意に至るまでの通信回数を低減できるものの、プロセス数が増大するのに加え、最小の通信回数を維持可能な許容故障数が減少してしまう。
これに対して、サーバ(またはプロセス数)の増大を抑制しながらも、データの更新(または参照)をサーバに要求してから、データの一貫性を保証するまでの通信回数を低減する技術として、特許文献1が知られている。
国際公開第2015/186191号 特開2014−178793号公報
しかしながら、上記特許文献1では、サーバの故障については考慮されているが、特許文献2で開示されるようなビザンチン障害がサーバに発生した場合については考慮されていない、という問題があった。
ビザンチン障害は、ソフトウェアのエラーや、ソフトウェアのバグや、ハードウェアの故障や、装置への侵入などに起因する不正な処理や装置の停止などを含む障害である。
上記特許文献1では、装置の故障停止による影響を回避することは可能であるが、ビザンチン障害によって、不正な処理を行う装置が存在する場合には、ビザンチン障害の影響を回避することができない。上記特許文献1の構成では、ビザンチン障害が発生する個所によって、影響を受ける部分は異なり、例えば、合意処理部でビザンチン障害が発生すると、分散合意処理が不正となる。また、データ格納部でビザンチン障害が発生すると、リクエストの処理が不正となってしまうという問題があった。
そこで本発明は、上記問題点に鑑みてなされたもので、サーバ(またはプロセス数)の増大を抑制し、データの一貫性を保証するまでの通信回数を低減しながら、ビザンチン障害が発生した場合でも、正常に処理を継続することを目的とする。
本発明は、プロセッサとメモリを含むサーバを複数有し、データを前記複数のサーバで受信し、前記データを多重化して処理する分散処理方法であって、前記サーバが、前記多重化された前記データを受信して、第1の判定部で前記受信したデータの一貫性を判定する第1判定ステップと、前記サーバが、前記第1の判定部から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータを含む場合には、当該一貫性が保証されたデータを出力する出力ステップと、を含み、前記第1判定ステップは、前記データを受信する第1のサーバ数が、故障が発生したサーバを許容する所定の許容故障数と、ビザンチン障害が発生したサーバを許容する許容ビザンチン故障数に基づいて予め設定される。
本発明によれば、サーバの数の増大を抑制し、データの一貫性を保証するまでの通信回数を低減しながら、ビザンチン障害が発生した場合でも、ビザンチン障害を検知または訂正することなく、正常に処理を継続することが可能となる。
本明細書において開示される主題の、少なくとも一つの実施の詳細は、添付されている図面と以下の記述の中で述べられる。開示される主題のその他の特徴、態様、効果は、以下の開示、図面、請求項により明らかにされる。
本発明の実施例1を示し、分散処理を行う分散処理システムの一例を示すブロック図である。 本発明の実施例1を示し、サーバの一例を示すブロック図である。 本発明の実施例1を示し、サーバで行われる分散処理の一例を示す図である。 本発明の実施例1を示し、組み合わせ部が利用する優先順位テーブルの一例を示す図である。 本発明の実施例1を示し、組み合わせ部が利用する優先順位テーブルの他の例を示す図である。 本発明の実施例1を示し、正常値テーブルの一例を示す図である。 本発明の実施例1を示し、最頻値テーブルの一例を示す図である。 本発明の実施例1を示し、各サーバで行われる分散合意処理の一例を示すフローチャートである。 本発明の実施例1を示し、省プロセス1ステップ合意処理の一例を示すフローチャートである。 本発明の実施例1を示し、2ステップ合意処理の一例を示すフローチャートである。 本発明の実施例1を示し、組み合わせ処理の一例を示すフローチャートである。 本発明の実施例1を示し、衝突解決値選択処理の一例を示すフローチャートである。 本発明の実施例1を示し、正常値選択処理の一例を示すフローチャートである。 本発明の実施例1を示し、最頻値選択処理の一例を示すフローチャートである。 本発明の実施例2を示し、分散処理を行う計算機システムの一例を示すブロック図である。 本発明の実施例3を示し、2ステップ合意処理の一例を示すフローチャートである。 本発明の実施例1を示し、省プロセス1ステップ合意部のクォーラムの一例を示す図である。 本発明の実施例1を示し、2ステップ合意部の選択クォーラムの一例を示す図である。 本発明の実施例1を示し、2ステップ合意部の計数クォーラムの一例を示す図である。 本発明の実施例4を示し、分散処理を行う計算機システムの一例を示すブロック図である。
以下、本発明の実施形態を添付図面に基づいて説明する。
図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で表す。
図2は、サーバ1−1の構成の一例を示すブロック図である。なお、サーバ1−2〜1−nも同様の構成であるので、重複した説明は省略する。サーバ1−1は、演算を行うプロセッサ11と、プログラムやデータを保持するメモリ12と、データやプログラムを格納するストレージ装置14と、ネットワーク2に接続されて通信を行うインターフェース13と、所定の演算処理を実行するアクセラレータ16を有する分散合意処理ボード15含む計算機である。
なお、アクセラレータ16としては、例えば、ASIC(Application Specific Integrated Circuit)や、FPGA(Field Programmable Gate Array)や、GPGPU(General−Purpose Graphics Processing Unit)等のハードウェアを採用することができる。
上記FPGAを採用した場合には、ソフトエラーによるビザンチン障害が知られており、本実施例1は、アクセラレータ16を有する装置(サーバ)のビザンチン障害を回避することを意図している。
なお、本実施例1において、ビザンチン障害は、ソフトエラーや、ソフトウェアのバグや、ハードウェアの故障や、装置への侵入や攻撃などに起因する不正な処理や装置の停止などを含む幅広い障害を意味する。
メモリ12には、インターフェース13を介してデータの送受信を行う送受信部20と、受信したデータと他のサーバ1のデータの一貫性(同一性)を判定する更新部30と、更新部30が出力したデータを格納するデータ格納部50が保持される。なお、データ格納部50はストレージ装置14に設定されてもよいし、ストレージ装置14とメモリ12の双方に設定されてもよい。
更新部30は、補助的な合意アルゴリズムとしてPAXOSアルゴリズムを実行するPAXOS合意部40が含まれる。
送受信部20と、更新部30を構成するPAXOS合意部40の各機能部はプログラムとしてメモリ12にロードされる。送受信部20は、主に、PAXOS合意部40が他のサーバ1と合意を行う際に利用される。
プロセッサ11は、各機能部のプログラムに従って処理することによって、所定の機能を提供する機能部として稼働する。例えば、プロセッサ11は、送受信プログラムに従って処理することで送受信部20として機能し、PAXOS合意プログラムに従って処理することでPAXOS合意部40として機能する。他のプログラムについても同様である。さらに、プロセッサ11は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
サーバ1−1の各機能を実現するプログラム、テーブル等の情報は、ストレージ装置14や不揮発性半導体メモリ、ハードディスクドライブ、SSD(Solid State Drive)等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
分散合意処理ボード15には、更新部130で分散合意処理と受信した要求を実行するアクセラレータ16が搭載される。アクセラレータ16は、インターフェース13を介して他のサーバ1と通信を行う送受信部110と、所定の処理の条件を設定する条件設定部120と、他のサーバ1との分散合意処理を行う更新部130と、PAXOS合意部40の合意値を判定するPAXOS合意値判定部400と、クライアント3からの要求に応じて所定の処理を行った結果などを格納するデータ格納部140を含む。
更新部130は、低レイテンシ合意アルゴリズム実行部200と、正常値選択部250と、衝突解決値選択部260と、組み合わせ部240を有する。低レイテンシ合意アルゴリズム実行部200は、サーバ1が受信した要求(またはデータ)と他のサーバ1の要求の一貫性(同一性)を判定するために、省プロセス1ステップ合意アルゴリズムを実行する省プロセス1ステップ合意部210と、2ステップ合意アルゴリズムを実行する2ステップ合意部220と、を含む。なお、2ステップ合意部220は、図3で示すように、前段部220−Aと、後段部220−Bで構成され、全体を符号220で表す。
送受信部110は、クライアント3から処理の要求を受信すると、当該サーバ1−1が受信した要求を他のサーバ1−2〜1−nへ送信する。その後、送受信部110は、全てのサーバ1−2〜1−nから送信された要求を受信し、受信した要求を更新部130へ送信し、更新部130が要求の一貫性について判定を行う。
そして、更新部130は、他のサーバ1の要求と一貫性が保証された要求を出力し、当該要求に対応する処理を行って、処理結果をデータ格納部140へ書き込む。更新部130は、書き込みが完了するとクライアント3に処理結果を送信し、処理を完了する。
クライアント3の構成は、図示しないプロセッサと、メモリと、インターフェース及びストレージ装置を含む計算機である。クライアント3は、サーバ1に対してデータの登録、更新、参照を要求するアプリケーションを実行する。
次に、更新部130の構成について説明する。更新部130には、上述のように送受信部110がクライアント3から受信した要求と、他のサーバ1が受信したクライアント3の要求が入力される。
更新部130では、これらの要求を省プロセス1ステップ合意部210(第1の判定部)と、2ステップ合意部220(第2の判定部)へそれぞれ入力して要求の一貫性(または同一性)の判定を実行する。
省プロセス1ステップ合意部210は、一貫性の判定結果として確定値または推定値あるいは無確定を出力する。本実施例1の省プロセス1ステップ合意部210では、ビザンチン障害に対処するため、全てのサーバ1から受信した要求の一致が過半数未満の場合には、無確定を出力して組み合わせ部240へ通知する。
2ステップ合意部220は、一貫性の判定結果として確定値または推定値あるいは無確定を出力する。本実施例1の2ステップ合意部220では、ビザンチン障害に対処するため、全てのサーバ1から受信した要求の一致数が所定の値以下の場合には無確定を出力して組み合わせ部240へ通知する。
組み合わせ部240はこれらの確定値または推定値、無確定を入力する。組み合わせ部240は、クライアント3から受信した要求と、他のサーバ1へ送信されたクライアント3の要求が同一であると判定した場合、入力された要求について一貫性を保証した確定値(合意値)として所定の処理を実行し、処理結果をデータ格納部140へ格納する。
確定値は一貫性(または同一性)が保証された要求であり、合意値は一貫性について他のサーバ1との間で合意された要求で、サーバ1間で一貫性が保証される。一方、確定値や推定値が得られない場合、組み合わせ部240はビザンチン障害等による異常値を出力するのを防ぐため、後述するように、任意値として組み合わせ空を出力する。
正常値選択部250は、省プロセス1ステップ合意部210、もしくは2ステップ合意部220の前段部220−Aが、一貫性の判定のために、送受信部110から受け付けた要求(またはデータ)を収集し、一致数が所定値(許容ビザンチン故障数)b3より大きい値を正常値と判定して、正常値テーブル330へ出力する。
衝突解決値選択部260は、各サーバ1のアクセラレータ16の組み合わせ部240から確定値と、推定値と、組み合わせ空の値及び正常値を収集し、一致数が所定値(許容ビザンチン故障数)b4よりも大きい値(衝突解決値)で、サーバ1のPAXOS合意部40にPAXOSアルゴリズムによる合意を依頼する。
PAXOS合意値判定部400は、PAXOS合意部40でPAXOSアルゴリズムを実行した結果、合意が得られた場合には、出力部450(図3参照)を介して合意値をデータ格納部140へ入力して処理結果をクライアント3へ応答する。一方、PAXOS合意値判定部400は、PAXOS合意部40からの応答(合意値)が空であった場合には、合意が得られなかった通知をクライアント3に送信する。
本実施例1では、省プロセス1ステップ合意部210と、2ステップ合意部220と、組み合わせ部240と、正常値選択部250と、衝突解決値選択部260と、PAXOS合意値判定部400をアクセラレータ16によるハードウェア処理とし、補助合意部としてのPAXOS合意部40をソフトウェア処理とする例を示したが、これに限定されるものではない。例えば、衝突解決値選択部260等の一部をソフトウェア処理で行うようにしてもよい。
<テーブル>
次に、分散処理で利用されるテーブルについて以下に説明する。なお、以下のテーブルは、アクセラレータ16内で保持している例を示すが、これに限定されるものではない。例えば、各テーブルはメモリ12等にロードされ、保持してもよい。アクセラレータ16内でテーブルを保持する場合、ソフトエラーのようなビザンチン障害が問題にならない装置を使ってもよい。アクセラレータ16にFPGAを採用した場合、上述の装置例としては、各テーブルの保持部を、FPGAの小面積な論理リソース、少量のレジスタ、ECC(Error Correction Code)等によってソフトエラーが自動訂正されるブロックRAM等で構成してもよい。
図4は、組み合わせ部240が利用する優先順位テーブル300の一例を示す図である。組み合わせ部240は、優先順位テーブル300の優先順位301に従って、省プロセス1ステップ合意部210の値と、2ステップ合意部220の値を組み合わせて出力する。なお、図4の例は、正常値選択部250の出力を利用する場合を示す。
優先順位=1では、省プロセス1ステップ合意部210の確定値または2ステップ合意部220の確定値、いずれかの確定値を出力し、優先順位=2では2ステップ合意部220の推定値を出力し、優先順位=3では、省プロセス1ステップ合意部210の推定値を出力する例を示す。なお、図4の優先順位テーブル300は、条件設定部120に保持される。
図5は、組み合わせ部240が利用する優先順位テーブル300Aの一例を示す図である。なお、図5の例は、正常値選択部250の出力のうち一致数が最大の値を格納する最頻値テーブルを利用する場合を示す。優先順位テーブル300Aは、図4の優先順位テーブル300と同様に構成される。
図6は、正常値選択部250が利用する正常値テーブル330の一例を示す図である。正常値テーブル330は、処理番号331と、データ332と、一致数333からひとつのエントリが構成される。
処理番号331は、送受信部110で付与された値である。データ332は、正常値選択部250で決定された値が格納される。一致数333には、他のサーバ1からのデータとデータ332が一致した数が格納される。また、正常値テーブル330は、正常値選択部250で保持される。
図7は、正常値選択部250が利用する最頻値テーブル340の一例を示す図である。最頻値テーブル340は、処理番号341と、データ342と、一致数343からひとつのエントリが構成される。
処理番号341は、送受信部110で付与された値である。データ342は、正常値選択部250で決定された値が格納される。一致数343には、他のサーバ1のデータとデータ342が一致した数が格納される。また、最頻値テーブル(図示省略)は、最頻値(正常値)を保持するテーブルで、正常値選択部250で保持される。
<省プロセス1ステップ合意部>
図17は、省プロセス1ステップ合意部210のクォーラムの一例を示す図である。省プロセス1ステップ合意アルゴリズムによるデータの一貫性(同一性)の判定と、一貫性が保証されない場合(以下、衝突とする)の解決手法は、次の通りである。
・データの一貫性:確定値同士は必ず一致する。
・衝突の解決:確定値がいずれかのサーバ1に存在する可能性がある場合、推定値は必ず前記確定値と一致する。(確定値がいずれかのサーバ1に存在する可能性がある場合、確定値と一致する推定値が必ず存在し、解決値(推定値)となる)。それ以外の場合、無確定とする。
図17は、図1のサーバ1の各送受信部110が、クライアント3からデータ「A」、「B」及びビザンチン障害によるデータ「β」を受信した例を示す。
省プロセス1ステップ合意アルゴリズムを実行する省プロセス1ステップ合意部210では、送受信部110から受信したデータを確定クォーラムと推定クォーラムの2つのクォーラムに分け、各クォーラムのデータの一貫性を各サーバ1の間の合意で決定する。なお、クォーラムは、分散処理を実行する要素の部分集合を示す。
次に、確定クォーラムを構成する送受信部110(サーバ1)の数をQeとし、推定クォーラムを構成する送受信部110(サーバ1)の数をQfとし、送受信部110(サーバ1)の総数(プロセス数)をn1とする。
また、省プロセス1ステップ合意部210において、最小レイテンシを維持可能な許容故障数をqとし、ビザンチン障害が発生する送受信部110の数(許容ビザンチン故障数)をb1とし、省プロセス1ステップ合意アルゴリズムが動作可能な許容故障数をf1とすると、省プロセス1ステップ合意アルゴリズムで必要とするプロセス数n1は次式を満たせばよい。
n1>2q+f1+2b1を満たせばよい。
また、省プロセス1ステップ合意で許容される許容停止故障数は、f1−b1で定義される。許容停止故障数は、b1台のサーバ1にビザンチン障害が発生している場合に、故障による停止が許容されるサーバの数を示す。
最小レイテンシを維持可能な許容故障数qは確定クォーラムQeの大きさに関係するパラメータである。本実施例1では、f1=3、b1=1、q=1とし、n1=8の例を示す。
確定クォーラムQeを上記パラメータで表すと、
Qe=n1−q
を満たせばよい。一方、推定クォーラムQfの大きさは、
n1−f1≧Qf≧2q+2b1+1
を満たせばよい。
各クォーラムの大きさはデータの一致性(一貫性)の要件から定まっている。これらの条件によって、データの一致性が保たれる例を図17に示す。
確定クォーラムQe内に、確定値が存在する場合、推定クォーラムQfでは必ず確定値と同じ値を推定値として得ることができる。以下の例では、ビザンチン障害による異常値βが、正常だが推定値としてはいけないリクエストBと一致した場合でも、問題なく推定値Aを算出することができる。なお、推定値の判定は、推定クォーラムQf内で過半数が一致している値を推定値とする。
次に、省プロセス1ステップ合意部210における確定値と推定値の判定処理について説明する。
(1)確定値の判定
確定値の判定は、全ての値が一致した場合、一致した値を確定値とする
(2)推定値の判定
推定値の判定は、推定クォーラムQf内の過半数以上の一致数を持つ値を推定値とする
上記のように省プロセス1ステップ合意部210は、定足数を用いた判定処理により、b1台の装置(サーバ1)で、ビザンチン障害が発生しても、省プロセス1ステップ合意部210では正常なリクエストを出力として選択できる。
なお、省プロセス1ステップ合意部210は、次のいずれかの条件が成立するまで、送受信部110からの受信を待つ。
(条件1)待機中に受信した入力のうち、Qe(n1−q)台の送受信部110からの値が一致する
(条件2)全ての送受信部110(他のサーバ1)から受信する
(条件3)設定された時間が経過する
なお、上記条件1の判定タイミングは、送受信部110から新たな入力が到着する都度が最適であるが、これに限定されるものではない。例えば、設定された個数の入力が到着した場合と、それ以降は到着する都度、など他のタイミングでもよい。設定された時間とは、定義ファイルなどで定められた一定のタイムアウト時間、もしくは、稼働中の統計情報から、その都度自動算出される動的なタイムアウト時間のどちらでもよい。
以上のように、省プロセス1ステップ合意部210は、プロセス数n1が、n1>2q+f1+2b1を満たし、確定クォーラムQeが、Qe=n1−qを満たし、推定クォーラムQfが、n1−f1≧Qf≧2q+2b1+1を満たし、上記確定値の判定と上記推定値の判定を行えばよい。これにより、省プロセス1ステップ合意部210は、b1台の送受信部110(またはサーバ1)でビザンチン障害が生じても、確定値および推定値を正しく得ることが可能となる。
<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とする。
図18では、前段部220−Aが受信する選択クォーラムの大きさが5の例を示す。前段部1では、5つの要求Aを受け付け、前段部2では、2つの要求Aと、2つの要求Bと、送受信部110のビザンチン障害による1つの異常値βを受け付けた例を示す。
2ステップ合意部220では、2ステップ合意部220において、ビザンチン障害が発生する数(許容ビザンチン故障数)をb2とし、2ステップ合意アルゴリズムが動作可能な許容故障数をf2と仮定し、選択クォーラムと、計数クォーラムを設定する。なお、2ステップ合意で許容される許容停止故障数は、f2−b2で定義される。許容停止故障数は、b2台のサーバ1にビザンチン障害が発生している場合に、故障による停止が許容されるサーバの数を示す。
選択クォーラムにおいて、選択クォーラムが許容可能な故障数をf21とし、許容可能なビザンチン故障数をb21とし、f21はf2、b21はb2と同値とし、プロセス数(サーバ1の数)をn21とした場合、
n21>2f21+b21を満たすプロセス数(サーバ1の数)n21において、選択クォーラムQ1の大きさをQ1=n21−f21とする。前段部220−Aにおける一致値の判定と空の判定は以下のように行う。
一致値の判定
・選択クォーラムQ1内の一致値の判定は全ての値が一致した場合、当該値を一致値とする。
空の判定
・選択クォーラムQ1内で一致値が存在しない場合、値を空とする
次に、計数クォーラムQ2について説明する。
図19では、後段部220−Bが受信する計数クォーラムQ2の大きさが6の例を示す。後段部1(220−B)では、6つの要求Aを受け付け、後段部2(220−B)では、3つの要求Aと、2つの空の値と、ビザンチン障害による1つの異常値βを受け付けた例を示す。
計数クォーラムQ2では、定足数比較を用いる場合、選択クォーラムQ1とはプロセス数(サーバ1の数)等の条件が異なり、許容可能なサーバ1(プロセス数)の故障数をf22とし、許容可能なビザンチン故障数をb22とし、f22はf2、b22はb2と同値とし、プロセス数をn22とした場合、
n22>2f22+2b22
を満たすプロセス数n22で、確定値および推定値の判定を実施することができる。また、計数クォーラムQ2の大きさは
Q2=n22−f22
を満たす。後段部220−Bでは、確定値および推定値の判定が以下のように行われる。
確定値の判定
・計数クォーラムQ2内の確定値の判定は、全ての値が一致した場合、当該値を確定値とする
推定値の判定
・計数クォーラムQ2内の推定値の判定は、確定値が存在しない場合に行い、v>b22を満たす一致数vを有する値を推定値とする。条件を満たす値が存在しない場合は、空と判定する。
2ステップ合意部220では、定足数の比較を用いた確定値及び推定値の判定処理は、省プロセス1ステップ合意部210と同様に要求やデータの受信の度に行ってもよい。このタイミングは、新たに前段部220−Aからの出力が後段部220−Bへ到着する都度が最適であるが、これに限定されるものではない。
2ステップ合意部220では、ビザンチン障害が発生した場合、次の2つの問題があった。
・問題1:送受信部110でビザンチン障害が発生した場合、選択クォーラムQ1で本来得られた一致値が空の判定になってしまう場合がある。
・問題2:前段部220−Aでビザンチン障害が発生した場合、後段部220−Bの計数クォーラムQ2で本来得られた確定値および推定値を得られない場合がある。加えて、異常値が推定値となる場合がある。
これに対して、前段部220−Aと後段部220−Bにおいて定足数を用いた判定処理を行うことにより、次のような効果を得ることができる。
まず、送受信部110のうちb21台のサーバ1でビザンチン障害が生じても、選択クォーラムQ1は一致値と空の判定を正しく行うことが可能となる。さらに、前段部220−Aのうちb22台でビザンチン障害が発生しても、計数クォーラムQ2は確定値と推定値を正しく得ることが可能となる。加えて、異常値が推定値となることはない。
なお、2ステップ合意部220では、後段部220−Bが、次のいずれかの条件が成立するまで、前段部220−Aからの受信を待つ。
(条件4)待機中に受信した入力のうち、計数クォーラムQ2(n22−f22)台の前段部220−Aからの入力の値が一致する
(条件5)全てのアクセラレータ16(他のサーバ1)の前段部220−Aから受信する
(条件6)設定された時間が経過する
ただし、後段部220−Bにおける上記条件の判定タイミングは、新たに前段部220−Aからの入力の値が到着する都度が最適であるが、これに限定されるものではない。例えば、後段部220−Bが設定された個数の入力を受信したときと、それ以降は受信する都度、など他のタイミングでもよい。また、予め設定された時間や、定義ファイルなどで定められた一定のタイムアウト時間、もしくは、稼働中の統計情報から、その都度自動的に算出される動的なタイムアウト時間のどちらでもよい。
<組み合わせ部>
上記省プロセス1ステップ合意部210及び2ステップ合意部220のそれぞれにおいて、b1もしくはb2台のビザンチン障害が発生しても、正しく確定値および推定値を得ることが可能となる。
しかし、多数のリクエストが衝突し、一致数が少ない場合には、確定値および推定値を得られず、組み合わせ部240は、送受信部110で受信した値の中から任意の値(任意値)を出力する。この場合に異常値が選択される可能性がある。
本実施例1では、アクセラレータ16が異常値の出力を抑止するために、任意値を出力するタイミングにおいて、処理しても問題のない値(正常値)を判定する。これにより、任意値として、正常な値を出力できる。加えて、任意値が推定値と一致する可能性が高くなる。
組み合わせ部240では、図4で示した優先順位テーブル300に従って、省プロセス1ステップ合意部210または2ステップ合意部220の出力を次のように判定する。
(1)省プロセス1ステップ合意部210または2ステップ合意部220のいずれかの確定値
(2)2ステップ合意部220の推定値
(3)省プロセス1ステップ合意部210の推定値
(4)組み合わせ空を出力。但し、省プロセス1ステップ合意部210または2ステップ合意部220の入力から正常値テーブル330と一致する値が存在する場合には、当該値も出力する。
上記の判定処理により、組み合わせ部240では、省プロセス1ステップ合意部210及び2ステップ合意部220の確定値または推定値を選択して出力部450(図3参照)へ出力し、推定値が存在しない場合には組み合わせ空の値を出力し、後述する衝突解決値選択部260で正常値を設定する。
上記の構成により、組み合わせ部240では、ビザンチン障害による異常値の出力を抑止することが可能となる。
<正常値選択部>
多数のリクエストが衝突し、リクエストの一致数が少ない場合には、組み合わせ部240は、確定値および推定値を得られず、任意値を出力する。この任意値として異常値が選択されるのを防止するため、正常値選択部250を機能させる。
正常値選択部250は、任意値を出力するタイミングにおいて、処理しても問題の無い値(正常値)を判定し、正常値テーブル330に保持する。後述の衝突解決値選択部260では、各サーバ1の組み合わせ確定値、組み合わせ推定値、組み合わせ空の値及び正常値テーブル330の値を定足数比較することで、正常な値を選択し、PAXOS合意部40を実行できる。加えて、任意値が推定値と一致する可能性が高くなる。
正常値選択部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の数(サーバ数)である。
なお、正常値選択部250では、正常値の判定について、省プロセス1ステップ合意部210、もしくは2ステップ合意部220の前段部220−Aからリクエストを受信する度に実施してもよい。また、正常値選択部250が、正常値の判定及び保持する処理は、組み合わせ部240が組み合わせ空を決定し、PAXOS合意アルゴリズムを実行する以前であれば、所望のタイミングで実施してもよい。あるいは、正常値選択部250が、正常値を判定及び処理するタイミングは組み合わせ部240の処理以前に、省プロセス1ステップ合意部210や、2ステップ合意部220が無確定を決定するタイミングで実施することができる。
<衝突解決値選択部>
上記省プロセス1ステップ合意部210、2ステップ合意部220及び組み合わせ部240の判定処理によって、送受信部110等でビザンチン障害が生じても、確定値、推定値、任意値のいずれも正常な値を出力することができる。しかし、アクセラレータ16内の各判定部および組み合わせ部240にビザンチン障害が発生した場合、以下のような課題が生じる。
(1)衝突解決値(推定値および任意値)として、異常値を出力しPAXOS合意部40で合意を実行する
(2)確定値として、異常値を出力してデータ処理を実行する
本実施例1では、まず、上記(1)の課題を解決するために、PAXOS合意部40へ合意を依頼する前に、衝突解決値選択部260で定足数の比較を行う
衝突解決値選択部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は衝突解決値選択部の数(サーバ数)である。
上記の処理により、衝突解決値選択部260は上記(1)の課題を解決することができる。しかし、後述するように、PAXOS合意部40で合意できない場合がある。
例えば、確定値及び推定値が得られる入力がされた場合、1つのアクセラレータ16のみが推定値を得た場合、衝突解決値選択部260は、PAXOS合意部40に合意を実行させることはできない。これは、一つのアクセラレータ16(サーバ1)以外に、衝突解決値選択部260に推定値をマルチキャストする他のアクセラレータ16が存在せず、一致数を比較できないためである。PAXOS合意部40を実行できない場合、アクセラレータ16は処理すべきリクエストを得ることができない。
PAXOS合意部40で合意を行うことができないケースとしては、以下の3つが挙げられる。
(1−1)組み合わせ部240から確定値を得るサーバ1(アクセラレータ16)と、組み合わせ部240から推定値を得るサーバ1が混在するようなリクエストが入力され、かつ推定値を得たサーバ1の数が、許容ビザンチン故障数b4+1台未満の場合
(1−2)推定値を得るサーバ1と、任意値を得るサーバ1が混在するようなリクエストが入力され、かつ推定値を得たサーバ1の数が、許容ビザンチン故障数b4+1台未満である場合
(1−3)リクエストの衝突が激しく、各サーバ1の組み合わせ部240の出力(推定値、組み合わせ空及び正常値)が、許容ビザンチン故障数b4+1個以上の一致数を満たさない場合
上記(1−1)を解決する手法について説明する。
確定値を得るサーバ1と、推定値を得るサーバ1が混在し、推定値を得たサーバ1が、許容ビザンチン故障数b4+1台未満である状態では、組み合わせ部240で確定値を得ることができたサーバ1が、実行済みの確定値、もしくは実行直前の確定値を、各アクセラレータ16の衝突解決値選択部260にマルチキャストすればよい。
これによって、衝突解決値選択部260は、実行すべき確定値と同一の値でPAXOS合意部40に合意処理を実行できる(上述したように、推定値と確定値は必ず同値である)。
次に、上記(1−2)を解決する手法について説明する。
推定値を得るサーバ1と任意値を得るサーバ1が混在し、推定値を得たサーバ1が、許容ビザンチン故障数b4+1台未満である状態では、以下のように解決する。
まず、各サーバ1の組み合わせ部240が、確定値および推定値を得られなかったという情報(これを「組み合わせ空」の判定と呼ぶ)を衝突解決値選択部260に送信する。
衝突解決値選択部260は、「組み合わせ空」の判定を、許容ビザンチン故障数b4+1個収集した場合、いずれのサーバ1でも確定値を得ていないことを判定できる。確定値を得たサーバ1が存在する場合、確定値を得られなかったサーバ1は必ず同値の推定値を得る。そのため、「組み合わせ空」を出力するサーバ1が存在する場合、確定値を得たサーバ1は存在しないと判定することができる。
許容ビザンチン故障数b4+1個の「組み合わせ空」の出力を収集するのは、許容ビザンチン故障数b4台のビザンチン障害であるサーバ1が不正な「組み合わせ空」を送信することを考慮しているためである。
「組み合わせ空」の出力が許容ビザンチン故障数b4+1個以上となった場合、衝突解決値選択部260は、確定値が存在せず、いずれかの正常な値(衝突解決値)でPAXOS合意部40に合意を実行させればよいことを判定できる。以降、各組み合わせ部240が正常値(もしくは最頻値でもよい)を選択し、出力するため、衝突解決値選択部260はそれらの出力をc2個収集し、許容ビザンチン故障数b4+1個以上の一致数を持つ値でPAXOS合意部40に合意を実行させればよい。
収集数c2は、n4−f4≧c2≧b4+1の条件を満たし、最良のケースでは許容ビザンチン故障数b4+1で問題ない。また、衝突解決値選択部260は、確定値が存在しないため、推定値以外の値でPAXOS合意部40を実行させてもよい。正常値及び最頻値は推定値と一致する可能性が高く、PAXOS合意部40で合意を実行させるまでの待機時間が低減されるため、合意を形成するまでのレイテンシの低下が期待できる。
上述した各判定は、値を受信するごとに判定を行ってもよい。この場合も、PAXOS合意部40で合意を実行させるまでの待機時間が低減されるため、合意を形成するまでのレイテンシの低下が期待できる。
次に、上記(1−3)を解決する手法について説明する。
衝突解決値選択部260で、各組み合わせ部240の出力をc2個収集した際に、許容ビザンチン故障数b4+1個以上の一致数を持つ値が存在しない場合や、「組み合わせ空」の判定で許容ビザンチン故障数b4個未満の場合、PAXOS合意部40で合意を実行できない状態となる。この状態は次の(a)、(b)で生じ得る。
(a)リクエストの衝突が激しく、衝突解決値選択部260において、各サーバ1の正常値(もしくは最頻値)が許容ビザンチン故障数b4+1個以上の一致数を持たない
(b)リクエストの衝突が激しく、衝突解決値選択部260において、各サーバ1が推定値として選択した値が許容ビザンチン故障数b4+1個以上の一致数を持たず、かつ「組み合わせ空」の判定が許容ビザンチン故障数b4未満
上記(a)、(b)は、リクエストの衝突が激しいため、衝突解決値選択部260がc2個の値を収集しても、PAXOS合意部40への入力を決定できず、合意処理が停止する可能性がある状態である。
本実施例1では、上記(a)、(b)のように、c2個の値を収集しても、PAXOS合意部40への入力を決定できなかった場合、PAXOS合意部40に「空」の値を入力し、PAXOS合意部40によって衝突が解決された値を待つ。
PAXOS合意部40によって、衝突が解決された値が「空」であった場合、各サーバ1は上記(a)、(b)に示したような合意不可能な入力がされたことを判定することができる。PAXOS合意値判定部400は、この判定を得ることで、自動リトライによる再合意の実行や、処理の中断が可能となる。他の衝突解決値選択部260で、衝突が解決された値が「空」ではない値がPAXOS合意部40へ入力され、当該値が衝突を解決した値であった場合は、そのまま処理を継続する。
以下に、合意不可能な入力を判定する動作例を示す。
PAXOS合意値判定部400は、合意不可能な入力であることを判定した場合、以下の(i)、(ii)のいずれかの処理を行う。なお、アクセラレータ16内でPAXOS合意値判定部400を実現する場合、ソフトエラーのようなビザンチン障害が問題にならない装置を使ってもよい。アクセラレータ16にFPGAを採用した場合、上述の装置例としては、PAXOS合意値判定部400を、FPGAの小面積な論理リソース、少量のレジスタ、ECC(Error Correction Code)等によってソフトエラーが自動訂正されるブロックRAM等で構成してもよい。
(i)PAXOS合意値判定部400は、クライアント3に合意不可であったことを通知する。これにより、レイテンシの低下が期待できる。これは、タイムアウト等による処理中断より、先に合意不可であった結果をクライアントに通知することが可能であることを意味している。
(ii)再度、分散合意を試みる(継続モード)
この場合、自動リトライにより、合意値を得ることが期待できる。各アクセラレータ16内の送受信部110の受信値、もしくは正常値又は最頻値を選択し、各アクセラレータ16の送受信部110にマルチキャストすることで、もう一度分散合意を行う。
合意不可能な入力がされた場合、上記(i)、(ii)のどちらの処理を行うかは、分散処理システムが継続モードであるか否かによって決定する。継続モードの有効/無効は、分散処理システムの起動時などに読み込まれる定義ファイル等で管理すればよい。なお、定義ファイルは、例えば、メモリ12に格納することができる。なお、PAXOS合意値判定部400のビザンチン障害を考慮する場合は、PAXOS合意値判定部400で合意が形成されたかの判定を行わずに、PAXOS合意部40からの応答(合意値)を、出力部450に出力し、後述するようにデータ格納部140を冗長化すればよい。上記「空」の処理結果(合意不可であったことの結果)も含めて、定足数比較を行った後に、上記(i)、(ii)のどちらの処理を行えば、不正な処理結果がクライアントに返却されることを防ぐことができる。
次に、上記(2)の課題の解決は、クライアント3に処理結果を返却する部分(データ格納部140)を冗長化構成にし、不正な処理結果がクライアントに返却されることを防ぐ技術が知られている。各サーバ1が、クライアント3に応答する処理結果を定足数によって比較している場合、他2台のアクセラレータ16の処理結果を収集し、より大きい一致数を持つ処理結果をクライアント3に応答する。収集数は2b5+1であり、最良のケースではb5+1とすることができる。b5は、ビザンチン障害が発生するデータ格納部140の数(許容ビザンチン故障数)であり、b1、b21、b22、b3、b4と同値としてよい。上記の定足数比較は、各アクセラレータ16ではなく、処理結果を受け取るクライアント3側で行ってもよい。
<通信回数>
省プロセス1ステップ合意部210と、2ステップ合意部220での合意に必要なプロセス(サーバ)数、最小通信回数δ、最小通信回数δを維持可能な許容故障数eについて、以下に説明する。また、以下では、f3=f4=3、b3=b4=b5=1としている。
まず、省プロセス1ステップ合意部210と正常値選択部250及び衝突解決値選択部260で合意を行う場合、プロセス数をn1とし、許容故障数をf1、最小レイテンシを維持可能な許容故障数をq、許容ビザンチン故障数をb1とすると、必要なプロセス数n1は、
n1>2q+f1+2b1
となる。
そして、最小レイテンシを維持可能な許容故障数q=1、許容故障数f1=3、許容ビザンチン故障数b1=1の場合、必要なプロセス数n1の最小値は8となる。
次に、省プロセス1ステップ合意部210と正常値選択部250及び衝突解決値選択部260で合意を行う場合、最小通信回数δ=2となる。最小通信回数δは、クライアント3の要求からサーバ1間での合意に至るまでの通信回数である。
なお、最小通信回数δを維持可能な許容故障数eについては、最小レイテンシを維持可能な許容故障数q(=1)に相当する。
図3で示したように、クライアント3−1からデータの更新要求で1回の通信となり、各サーバ1の送受信部110は受信したデータを他のサーバ1へ送信することで2回の通信となる(M2、図3参照)。そして、省プロセス1ステップ合意部210で、確定値が得られれば合計2回の通信でサーバ1間の合意値を得られることができる。
一方、2ステップ合意では、2ステップ合意部220と正常値選択部250及び衝突解決値選択部260で合意を行う場合、プロセス数をn2とし、許容故障数等は2ステップ合意部220の前段部220−A(選択クォーラムQ1)と後段部220−B(計数クォーラムQ2)では値が異なるので、次のように定義する。
前段部220−Aにおける許容故障数をf21、許容ビザンチン故障数をb21とし、後段部220−Bにおける許容故障数をf22、許容ビザンチン故障数をb22とすると、プロセス数n2は次式で表される。
n2>max(2f21+b21,2f22+2b22)
ただし、max(x,y)は、xとyのうち大きい値を出力する関数である。
2ステップ合意では、許容故障数f21=f22=3、許容ビザンチン故障数b21=b22=1の場合、プロセス数n2=9が最小値となる。
また、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となる。
なお、最小通信回数δを維持可能な許容故障数eについては、2ステップ合意の許容故障数f2であり、f2は次式で表される。
f2=min(f21,f22)
ただし、min(x,y)は、xとyのうち小さい値を出力する関数である。
f21=f22=3の場合、f2=3であり、e=3となる。したがって、2ステップ合意は省プロセス1ステップ合意より、最小通信回数δが多くなるが、分散データ管理システムの可用性は高くなる。
さらに、省プロセス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のうち大きい値を出力する関数である。
省プロセス1ステップ合意部210と2ステップ合意部220を組み合わせた場合では、許容故障数q=1、許容故障数f1=f21=f22=3、許容ビザンチン故障数b1=b21=b22=1の場合、プロセス数n=9が最小値となる。なお、このプロセス数nについては、後述する実施例2および実施例3に記載の方法を用いることで、最小通信回数δと許容故障数eを維持しながら、この装置数を低減することが可能である。
また、省プロセス1ステップ合意部210と2ステップ合意部220を組み合わせた場合の最小通信回数δは、上述のように、省プロセス1ステップ合意部210で確定値が得られた場合であり、最小通信回数δ=2となる。
なお、最小通信回数δを維持可能な許容故障数eについては、2ステップ合意と同等であり、e=3となる。したがって、省プロセス1ステップ合意部210と2ステップ合意部220を組み合わせた場合は、省プロセス1ステップ合意の最小通信回数δ、サーバ数(プロセス数)を維持しながら、2ステップ合意と同等の可用性を確保することができるのである。
<処理の概要>
図3は、本発明のサーバ1で行われる分散データ管理の一例を示す図である。図示の例ではクライアント3−1がデータAの処理要求をサーバ1−1〜1−nへマルチキャストで送信する例を示す。なお、クライアント3−1から各サーバ1へのマルチキャストによる送信は、図示しない管理計算機などが行ってもよい。
各サーバ1の送受信部110は、クライアント3−1から受信したデータを他のサーバ1へマルチキャストで送信する(図中M2)。サーバ1は、サーバ1から受信したデータを更新部130へ送信し、一貫性の判定を行う。
更新部130は、図17に示した確定クォーラム(または推定クォーラム)のデータを省プロセス1ステップ合意部(図3のSP1−STEP)210へ入力する。また、更新部130は、図18、図19に示した選択クォーラム(または計数クォーラム)のデータを2ステップ合意部220へ入力する。
省プロセス1ステップ合意部210は、確定クォーラムから入力されたデータが全て一致した場合、当該データを確定した値(確定値)とする。また、省プロセス1ステップ合意部210は、推定クォーラムから入力されたデータのうち過半数のデータが一致した場合、当該データを推定値とする。
一方、上記以外の場合は、省プロセス1ステップ合意部210が、出力は無確定として組み合わせ部240に通知する。
次に、2ステップ合意部220では、前段部220−A(図3の2−STEP(1))で選択クォーラムから入力されたデータが全て一致した場合、当該データを一致値とし、後段部220−B(図3の2−STEP(2))へ送信する(M3)。
後段部220−Bでは、計数クォーラムから入力されたデータが全て一致した場合、当該データを確定値として出力する。また、後段部220−Bは、計数クォーラムから入力されたデータが部分一致した場合、当該データを推定値とする。
一方、上記以外の場合は、後段部220−Bが、出力は無確定として組み合わせ部240に通知する。
次に、更新部130では、省プロセス1ステップ合意部210と2ステップ合意部220の出力が組み合わせ部240へ入力される。組み合わせ部240は、図4または図5で示したように予め設定された優先順位に従って省プロセス1ステップ合意部210または2ステップ合意部220の出力を選択する。
まず、組み合わせ部240は、第1の優先順位として、省プロセス1ステップ合意部210の確定値または2ステップ合意部220の確定値のいずれかを合意値(組み合わせ確定値)として選択する。
なお、省プロセス1ステップ合意部210の確定値は、サーバ1の確定クォーラムQe内でデータの全数が一致した値である。また、2ステップ合意部220の確定値は、後段部220−Bがサーバ1の計数クォーラム(Q2)から受信したデータの全数が一致した値である。
組み合わせ部240は、第2の優先順位として、2ステップ合意部220の推定値を選択する。この推定値は、2ステップ合意部220の後段部220−Bがサーバ1の計数クォーラムから受信したデータのうち部分一致した値である。
また、組み合わせ部240は、第3の優先順位として、省プロセス1ステップ合意部210の推定値を選択する。この推定値は、省プロセス1ステップ合意部210がサーバ1の推定クォーラムから受信したデータのうち過半数が一致した値である。
組み合わせ部240は、第4の優先順位として、組み合わせ空のみ、または組み合わせ空と正常値を選択する。この正常値は、省プロセス1ステップ合意部210または2ステップ合意部220の入力から正常値テーブル330と一致する値である。
組み合わせ部240は、図4の優先順位に従って省プロセス1ステップ合意部210または2ステップ合意部220の出力を選択した後、選択したデータが確定値であればそのまま出力する。
一方、組み合わせ部240は、推定値または組み合わせ空(もしくは組み合わせ空及び正常値)を選択した場合には、他のサーバ1との間で合意を行う必要がある。サーバ1では、PAXOS合意部40で合意を形成する前に、衝突解決値選択部260で上述した定足数の比較を行ってからPAXOS合意部40へ合意を依頼する。
衝突解決値選択部260は、正常値選択部250で正常値または最頻値を用いて、PAXOS合意部40へ異常値を入力するのを抑止して、かつ、合意を実行可能な値を選択して、PAXOS合意部40へ合意を依頼する。
各サーバ1のPAXOS合意部40の結果はPAXOS合意値判定部400へ入力され、合意が形成された場合には、合意値をデータ格納部140へ入力して所定の処理を実行してクライアント3に応答する。
PAXOS合意値判定部400は、合意が形成されなかった場合には、合意が得られなかった通知をクライアント3に送信する。また、PAXOS合意値判定部400は、合意が形成された場合には、合意値を出力部450(図3参照)に出力する。
このように、本実施例1では、省プロセス1ステップ合意部210と2ステップ合意部220の2つの合意アルゴリズムを組み合わせ、さらに、これら2つの合意アルゴリズムから確定値や推定値が得られない場合には、組み合わせ部240が「組み合わせ空」または正常値や最頻値を出力する。さらに、衝突解決値選択部260は、組み合わせ部240の出力がPAXOS合意部40で合意を実行可能な値を選択して合意を依頼する。
これにより、アクセラレータ16の各部でビザンチン障害が発生した場合であっても、異常値が使用または出力されるのを抑止して、プロセス数(またはサーバ数)nの増大を抑制しながらも、クライアント3がデータの処理をサーバ1に要求してから、サーバ1で合意に達するまでの最小の通信回数を低減することができる。本実施例1では、ビザンチン障害を検知または訂正することなく、ビザンチン障害が発生しても正常に処理を継続して、処理結果をクライアント3に応答することが可能となる。
また、本実施例1では、アクセラレータ16の各部におけるビザンチン障害に対する対処は、次のようになる。
省プロセス1ステップ合意部210では、送受信部110にビザンチン障害が発生した場合でも、1ステップ合意の際に、確定値と推定値を正常に判定することができる。また、2ステップ合意部220では、ビザンチン障害による異常値が入力されても、確定値と推定値を正常に判定することができる。また、省プロセス1ステップ合意部210または2ステップ合意部220では、確定値または推定値が得られない場合には無確定を出力する。
組み合わせ部240は、省プロセス1ステップ合意部210または2ステップ合意部220でビザンチン障害が発生し、確定値や推定値が存在しない場合には、正常な値を任意値として出力し、異常値を出力するのを抑止する。
また、衝突解決値選択部260は、省プロセス1ステップ合意部210、2ステップ合意部220または組み合わせ部240でビザンチン障害が発生しても正常な値でPAXOS合意を実行することができる。また、データ格納部140では、ビザンチン障害が生じても、クライアント3には正常な処理結果を応答することができる。
<処理の詳細>
図8は、各サーバ1で行われる処理の一例を示すフローチャートである。この処理は、クライアント3からデータの処理要求を受信した場合に実行される。
まず、サーバ1では、クライアント3からマルチキャストで送信された処理要求に含まれるデータを、アクセラレータ16の送受信部110が受信する(S1)。
次にアクセラレータ16の送受信部110は、受信したデータを他のサーバ1へマルチキャストで送信し、受信したデータを省プロセス1ステップ合意部210と2ステップ合意部220へ入力する(S2)。
次に、ステップS3では、省プロセス1ステップ合意部210が、上記入力された処理要求について1ステップ合意処理を後述する図9のように実行する。ステップS4では、2ステップ合意部220が、上記入力された処理要求について2ステップ合意処理を後述する図10のように実行する。なお、図示の例では、省プロセス1ステップ合意処理(S3)と2ステップ合意処理(S4)を並列して実行する例を示すが、順次実行してもよい。
ステップS5では、組み合わせ部240が省プロセス1ステップ合意部210の出力(確定値、推定値または無確定)と、2ステップ合意部220の出力(確定値、推定値または無確定)を受け付けて、図11で示す組み合わせ処理を実行する。
ステップS6では、サーバ1の更新部130が、組み合わせ部240の出力に確定値が含まれているか否かを判定する。更新部130は、確定値が含まれていればステップS7へ進み確定値を合意値として出力する。更新部130は、出力した合意値をデータ格納部140へ入力し、所定の処理を行った結果は送受信部110を介してクライアント3へ応答する。
一方、更新部130は、組み合わせ部240の出力に確定値が含まれていない場合には、ステップS8に進んで推定値が含まれているか否かを判定する。更新部130は、推定値が含まれていれば、ステップS11に進んで衝突解決値選択部260で衝突解決値選択処理を実行する。一方、推定値が含まれていなければ、ステップS9に進んで正常値選択部250で正常値選択を実行する。
ステップS9では、正常値選択部250が図13で示すように、省プロセス1ステップ合意部210(あるいは2ステップ合意部220)が、合意処理のために各送受信部110から受信した値に基づいて正常値テーブル330にデータを追加する。ステップS10では、正常値選択部250が、正常値テーブル330に追加した正常値と組み合わせ空の値を衝突解決値選択部260へ送信し、ステップS11に進む。
ステップS11では、衝突解決値選択部260が、組み合わせ部240からの推定値、または正常値選択部250から正常値と組み合わせ空の値を受け付けて、図12に示す衝突解決値選択処理を実行する。衝突解決値選択部260は、各アクセラレータ16から組み合わせ部240の出力を収集してPAXOS合意部40への入力(衝突解決値)を生成し、PAXOS合意部40へ入力する。
ステップS12では、PAXOS合意部40がPAXOSアルゴリズムを用いて各サーバ1間で衝突解決値(提案)の合意を実行し、アクセラレータ16の更新部130に応答する。PAXOSアルゴリズムについては、周知のアルゴリズムであるので本実施例では詳述しない。
ステップS13では、PAXOS合意値判定部400が、PAXOS合意部40の応答(衝突解決値)が「空」であるか否かを判定し、「空」でない場合にはステップS14へ進み、「空」の場合にはステップS15に進む。
ステップS14では、PAXOS合意値判定部400が、PAXOS合意部40からの応答(確定値)を合意値として出力する。なお、合意値は上述のようにデータ格納部140へ入力され、クライアント3に処理結果を応答する。
ステップS15では、PAXOS合意値判定部400がメモリ12等を参照し、当該アクセラレータ16が継続モードであるか否かを判定し、継続モードであればステップS16へ進み、継続モードでなければステップS17へ進む。
ステップS16では、送受信部110が既に受信しているデータを各サーバ1の送受信部110へマルチキャストで送信して、合意の再実行(再合意)を実施する。なお、再合意には、各サーバ1の正常値選択部250に保持されている正常値又は最頻値を使用してもよい。ステップS17では、各サーバ1との間で合意が形成されなかったため、合意不可を示す通知をクライアント3に送信する。
上記処理によって、合意値が得られた場合には、データ格納部140が合意値で所定の処理を行って、アクセラレータ16は処理結果をクライアント3に応答する。一方、合意値が得られなかった場合には、アクセラレータ16が合意の再実行または合意不可の通知を送信して処理を終了する。
<省プロセス1ステップ合意処理>
図9は、省プロセス1ステップ合意部210で行われる合意処理の一例を示す図である。この処理は、図8のステップS3で行われる。
省プロセス1ステップ合意部210は、推定クォーラムの大きさQf(n1−f1≧Qf≧2q+2b1+1)の台数のサーバ1からの入力(処理要求)を待機する(S21)。
次に、省プロセス1ステップ合意部210は、推定クォーラムの大きさQfの数だけ入力を受けると、Qfの数の入力の値が全て一致するか否かを判定する(S22)。Qfの全数の値が一致した場合にはステップS23へ進み、そうでない場合にはステップS26へ進む。
ステップS23では、省プロセス1ステップ合意部210が、上述した条件1〜3のいずれかを満たすまで、送受信部110から入力を受け付ける。省プロセス1ステップ合意部210は、確定クォーラムQe台の送受信部110からの入力の値が一致する(条件1)か、全てのサーバ1から入力を受け付ける(条件2)か、所定時間が経過する(条件3)かの条件を満たすと、ステップS24へ進む。
ステップS24では、省プロセス1ステップ合意部210が、上記ステップS23で受信した確定クォーラムの数Qeの入力が一致したか否かを判定する。確定クォーラムQe内で、入力された値が一致していればステップS25へ進む。ステップS25では、省プロセス1ステップ合意部210が確定クォーラムQe内で一致した値を確定値として組み合わせ部240へ出力する。
ステップS22で、推定クォーラムQf内で全数の値が一致しなかったステップS26では、省プロセス1ステップ合意部210は、推定クォーラムQf内の過半数で値が一致したか否かを判定する。推定クォーラムQf内の過半数で値が一致する場合にはステップS27へ進み、一致しない場合にはステップS28へ進む。
ステップS27では、推定クォーラムQf内で値が一致し、確定クォーラムQe内で値が一致しない場合または、推定クォーラムQf内で過半数の値が一致した場合で、省プロセス1ステップ合意部210は、推定クォーラムQf内で過半数が一致した値を推定値として組み合わせ部240に出力する。
ステップS28では、推定クォーラムQf内の過半数で値が一致しないので、省プロセス1ステップ合意部210は、無確定を組み合わせ部24に出力する。
上記の合意処理によって、省プロセス1ステップ合意部210は、確定値または推定値あるいは無確定を組み合わせ部240へ出力する。
<2ステップ合意処理>
図10は、2ステップ合意部220で行われる処理の一例を示す図でフローチャートである。この処理は、図8のステップS4で実行される。
まず、ステップS31では、2ステップ合意部220の前段部220−Aは、送受信部110から選択クォーラムの数Q1(n21−f21)の入力を受け付けるまで待機する。選択クォーラムの数Q1の入力を受け付けると、ステップS32に進む。ステップS32では、2ステップ合意部220が、選択クォーラムQ1の入力の値が全て一致したか否かを判定する。
選択クォーラムQ1内で入力の値が全て一致した場合、2ステップ合意部220は、ステップS33で、受信した入力の値を各アクセラレータ16へ送信する。一方、選択クォーラムQ1内で入力の値が全て一致しない場合、2ステップ合意部220は、ステップS34で、空の値を各アクセラレータ16へ送信する。
ステップS35では、2ステップ合意部220の後段部220−Bが、上述した条件4〜6のいずれかを満たすまで、前段部220−Aから入力を受け付ける。なお、後段部220−Bは、上記ステップS33またはステップS34で、各アクセラレータ16の前段部220−Aが送信した値を待ち受ける。
すなわち、2ステップ合意部220の後段部220−Bは、計数クォーラムQ2(n22−f22)台の前段部220−Aからの入力の値が一致する(条件4)か、全てのアクセラレータ16の前段部220−Aから入力の値を受信する(条件5)か、設定された時間が経過する(条件6)かのいずれかの条件を満たすと、ステップS36へ進む。
ステップS36では、後段部220−Bが、入力の値のうち、計数クォーラムQ2の数(n22−f22)で値が一致したか否かを判定する。後段部220−Bは、入力の値が計数クォーラムQ2の数以上で一致していればステップS37へ進み、一致した値を確定値として組み合わせ部240に出力する。
一方、入力の値が計数クォーラムQ2の数以上で一致していなければステップS38へ進んで、後段部220−Bは、一致した値の数が許容ビザンチン故障数b22+1以上であるか否かを判定する。後段部220−Bは、一致した値の数が許容ビザンチン故障数b22+1以上であればステップS39で、許容ビザンチン故障数b22+1以上で一致した値を推定値として組み合わせ部240へ出力する。
一方、ステップS38の判定で、部分一致した数が許容ビザンチン故障数b22+1未満の場合、後段部220−Bは、値を無確定として組み合わせ部240へ出力する。
以上の処理によって、2ステップ合意部220は、前段部220−Aが選択クォーラムQ1で一致した値を配信し、後段部220−Bは、配信された値で計数クォーラムQ2の数以上で一致したか否かによって確定値または推定値を決定し、合意が形成できない場合には値を無確定として出力する。
<組み合わせ処理>
図11は、組み合わせ部240で行われる処理の一例を示す図でフローチャートである。この処理は、図8のステップS5で実行される。
まず、ステップS41では、組み合わせ部240が、省プロセス1ステップ合意部(図中SP1−step)210及び2ステップ合意部(図中2−step)220から出力(確定値、推定値、無確定)を取得する。ステップS41では、組み合わせ部240が、省プロセス1ステップ合意部210及び2ステップ合意部220から出力のいずれかに確定値が含まれるか否かを判定する。組み合わせ部240は、確定値が含まれる場合はステップS43へ進み、そうでない場合にはステップS45へ進む。
ステップS43では、組み合わせ部240が、省プロセス1ステップ合意部210の確定値、または2ステップ合意部220のいずれかの確定値を選択する。ステップS44では、組み合わせ部240が、この選択した確定値を組み合わせ確定値として出力する。
確定値が存在しない場合のステップS45では、組み合わせ部240が、2ステップ合意部220の出力に推定値があるか否かを判定する。2ステップ合意部220の出力が推定値の場合、組み合わせ部240は、この推定値を組み合わせ推定値として出力する(S46)。
2ステップ合意部220に推定値が存在しない場合、組み合わせ部240は、ステップS47で省プロセス1ステップ合意部210の出力が推定値であるか否かを判定する。省プロセス1ステップ合意部210の出力が推定値であれば、組み合わせ部240は、この推定値を組み合わせ推定値として出力する(S48)。
一方、確定値も推定値も存在しない場合には、組み合わせ部240は、組み合わせ空の値を出力する(S49)。
上記処理により、組み合わせ部240は、省プロセス1ステップ合意部210と2ステップ合意部220の出力を組み合わせて確定値または推定値を決定し、いずれも存在しない場合には組み合わせ空の値を出力する。
<正常値選択処理>
図13は、正常値選択部250で行われる処理の一例を示す図でフローチャートである。この処理は、図8のステップS9で実行される。なお、図8の例では、組み合わせ処理(S5)後に、正常値選択処理実行する例を示すが、正常値選択処理の実行順序はこれに限定されない。例えば、省プロセス1ステップ合意処理(S3)や、2ステップ合意処理(S4)と、並列して実行してもよい。
まず、ステップS71では、正常値選択部250が、省プロセス1ステップ合意部210(あるいは2ステップ合意部220)が、合意処理のために受信した値(各サーバ1の送受信部110がマルチキャストで配信したクライアント3からの処理要求)を、許容ビザンチン故障数b3+1の個数まで収集する。
ステップS72では、正常値選択部250が、収集した入力の値の一致数が許容ビザンチン故障数b3よりも大きい値があるか否かを判定する。正常値選択部250は、許容ビザンチン故障数b3よりも大きい値がある場合にはステップS73へ進み、そうでない場合には、ステップS74へ進む。
ステップS72では、正常値選択部250が、一致数が許容ビザンチン故障数b3よりも大きい値を、正常値テーブル330に追加して処理を終了する。
一方、一致数が許容ビザンチン故障数b3以下の場合、正常値選択部250は、ステップS74で、省プロセス1ステップ合意部210(あるいは2ステップ合意部220)から新たな入力の値を追加して受信し、収集する。次に、ステップS75では、正常値選択部250が、収集した入力の値の一致数が許容ビザンチン故障数b3よりも大きい値があるか否かを判定する。正常値選択部250は、許容ビザンチン故障数b3よりも大きい値がある場合には上記ステップS73へ進み、そうでない場合には、ステップS76へ進む。
ステップS76では、正常値選択部250が、収集した値の数が最大値(n3−f3)に達したか否かを判定する。収集した値の数がn3−f3に達していれば、正常値選択部250は正常値テーブル330に空の値を追加する。一方、収集した値の数がn3−f3に達していなければ、正常値選択部250は、ステップS74に戻って上記処理を繰り返す。
上記処理によって、正常値選択部250は、一致数が所定の条件に達した値または空の値を正常値テーブル330に追加していく。
<衝突解決値選択処理>
図12は、衝突解決値選択部260で行われる合意処理の一例を示す図である。この処理は、図8のステップS11で行われる。
まず、ステップS51では、各アクセラレータ16は、組み合わせ部240の出力(組み合わせ確定値、組み合わせ推定値、組み合わせ空)と正常値選択部250からの正常値(または最頻値)を、各サーバ1の衝突解決値選択部260へマルチキャストで送信し(M4)、衝突解決値選択部260は、許容ビザンチン故障数b4+1の数まで収集する。なお、最頻値については図14で後述する。
衝突解決値選択部260は、許容ビザンチン故障数b4+1の値を収集すると、ステップS52へ進む。ステップS52では、収集した確定値及び推定値の中で一致する値の数(一致数)が許容ビザンチン故障数b4よりも大きい値があるか否かを判定する。衝突解決値選択部260は、一致数が許容ビザンチン故障数b4よりも大きい値が存在する場合にはステップS53へ進み、そうでない場合にはステップS54へ進む。
ステップS53では、衝突解決値選択部260は、一致数が許容ビザンチン故障数b4よりも大きい値をPAXOS合意部40への入力(衝突解決値)として出力し、処理を終了する。
一方、確定値や推定値の一致数が許容ビザンチン故障数b4以下の場合のステップS54では、衝突解決値選択部260は、組み合わせ空の値の一致数が許容ビザンチン故障数b4よりも大きいか否かを判定する。衝突解決値選択部260は、組み合わせ空の値の一致数が許容ビザンチン故障数b4よりも大きい場合には、ステップS55へ進み、そうでない場合にはステップS61へ進む。
ステップS55では、衝突解決値選択部260が、組み合わせ部240の確定値が存在しないと判定し、ステップS56へ進む。ステップS56では、衝突解決値選択部260が、空ではない正常値(最頻値)を含めて、収集した値の中の一致数が許容ビザンチン故障数b4よりも大きい値が存在するか否かを判定する。衝突解決値選択部260は、一致数が許容ビザンチン故障数b4よりも大きい値が存在する場合には、ステップS57へ進み、そうでない場合にはステップS58へ進む。
ステップS57では、衝突解決値選択部260が、一致数が許容ビザンチン故障数b4よりも大きい値をPAXOS合意部40への入力(衝突解決値)として出力し、処理を終了する。
ステップS54の判定で、組み合わせ空の値の一致数が許容ビザンチン故障数b4以下の場合のステップS61では、衝突解決値選択部260が、収集した値の総数が最大値(n4−f4)の大きさに達したか否かを判定する。
衝突解決値選択部260は、収集した値の総数がn4−f4に達していればステップS59へ進み、PAXOS合意部40への入力(衝突解決値)を空として出力し、処理を終了する。
衝突解決値選択部260は、収集した値の総数がn4−f4に達していなければステップ62へ進み、各アクセラレータ16から組み合わせ部240の出力を追加で収集してから、上記ステップS52へ戻って上記処理を繰り返す。
ステップS56の判定で、一致数が許容ビザンチン故障数b4以下のステップS58では、衝突解決値選択部260が、収集した値の総数がn4−f4の大きさに達したか否かを判定する。
衝突解決値選択部260は、収集した値の総数がn4−f4に達していればステップS59へ進み、PAXOS合意部40への入力を空として出力し、処理を終了する。
一方、衝突解決値選択部260は、収集した値の総数がn4−f4に達していなければステップ60へ進み、各アクセラレータ16から組み合わせ部240の出力を追加で収集してから、上記ステップS56へ戻って上記処理を繰り返す。
上記処理によって、衝突解決値選択部260は、組み合わせ部240の出力と正常値選択部250の出力に基づいて、PAXOS合意部40への入力を決定して出力する。
以上の処理により、衝突解決値選択部260は、組み合わせ部240の出力に確定値が存在しない場合には、衝突解決値選択部260が収集した値の一致数に基づいてPAXOS合意部40への入力(衝突解決値)を決定する。
<最頻値選択処理>
図14は、正常値選択部250で行われる処理の一例を示す図でフローチャートである。この処理は、正常値に代わって最頻値を用いる場合に図8のステップS9で実行される。なお、正常値選択処理と同様に、最頻値選択処理の実行順序はこれに限定されない。
まず、ステップS81では、正常値選択部250が、図13に示した正常値選択処理を実施して正常値テーブル330を更新する。ステップS82では、正常値選択部250が、正常値テーブル330に値が存在するか否かを判定する。正常値選択部250は、正常値テーブル330に値が存在すればステップS83へ進み、そうでない場合にはステップS84へ進む。
ステップS83では、正常値選択部250が、正常値テーブル330の値の中で一致数が最大の値を最頻値テーブル340に追加する。なお、一致数は、図13のステップS71で示したように、各送受信部110がクライアント3から受信した値との一致数である。
一方、ステップS83では、正常値選択部250が、最頻値テーブル340に空の値を追加する。
上記処理によって、各送受信部110がクライアント3から受信した値のうち一致数が最大の値が最頻値テーブル340に追加される。
以上、説明したように、本実施例1の分散処理システムでは、アクセラレータ16の各部でビザンチン障害が発生した場合であっても、異常値が使用または出力されるのを抑止して、プロセス数(またはサーバ数)の増大を抑制しながらも、低レイテンシで処理を実現することができる。そして、本実施例1では、ビザンチン障害を検知または訂正することなく、ビザンチン障害が発生しても正常に処理を継続して、正常な処理結果をクライアント3に応答することが可能となる。
図15は、実施例2を示し、サーバ1の構成の一例を示すブロック図である。本実施例2のサーバ1は、前記実施例1のアクセラレータ16で行っていた処理のうち2ステップ合意部220の後段部220−Bの処理を、サーバ1のメモリ12の2ステップ合意部220の後段部220−BPに置き換えて、アクセラレータ16とは異なるハードウェアで実行するもので、その他の構成は前記実施例1と同様である。
本実施例2では、上記実施例1に示したアクセラレータ16の機能の少なくとも一つを、サーバ1のソフトウェアとして実行する例を示す。すなわち、2ステップ合意部220の後段部220−BPは、サーバ1のメモリ12にプログラムとしてロードされ、プロセッサ11によって実行される。プロセッサ11は、2ステップ合意プログラムを実行することにより2ステップ合意部220の後段部220−BPとして機能する。
本実施例2の2ステップ合意部220では、前段部220−Aとして機能する前段部220−Aをアクセラレータ16のハードウェアで処理し、後段部220−Bとして機能する2ステップ合意部(220−BP)はサーバ1のソフトウェアで処理する。すなわち、前段部220−Aと後段部220−Bを異なるハードウェアで実行する。
2ステップ合意部220の一部をサーバ1のソフトウェアで処理することにより、FPGAのソフトエラーのようなビザンチン障害が発生する確率は極めて低いため、選択クォーラムQ1または計数クォーラムQ2におけるビザンチン障害の発生を無視することができ、全体のサーバ数(プロセス数)を低減することが可能となる。
前記実施例1で示したように、2ステップ合意部220で必要なプロセス数n2は、n2>max(2f21+b21,2f22+2b22)である。前段部220−A、許容故障数f21=3、許容ビザンチン故障数b21=1、後段部220−Bにおける許容故障数f22=2、許容ビザンチン故障数b22=0となるので、プロセス数n2の最小値=8となる。
なお、本実施例2では、2ステップ合意の経路の一部をソフトウェアで実施する例を示したが、2ステップ合意の全体をソフトウェアで実行するようにしてもよい。
以上のように、2ステップ合意部220の一部または全てを、アクセラレータ16とは異なるハードウェア(サーバ1)で実現し、パラメータを変化させることで、2ステップ合意で必要なサーバ1の数を低減することが可能となる。この時、前記実施例1と同様に、省プロセス1ステップ合意部210と2ステップ合意部220を組み合わせた場合、プロセス数nは次式で定義される。
n=max(2q+f1+2b1,2f21+b21,2f22+2b22)
q=1、f1=f21=3、f22=2、b1=b21=1、b22=0の時、n=8となる。したがって、省プロセス1ステップ合意部210と2ステップ合意部220を組み合わせた場合でも、必要なサーバ1の数を低減することが可能である。
図16は、実施例3を示す。本実施例3では、クライアント3が出力する処理要求に署名が含まれている例を示す。本実施例3では2ステップ合意部220の処理の一部を変更したもので、その他の構成は前記実施例1と同様である。
図16は、2ステップ合意部220で行われる処理の一例を示すフローチャートである。図16のフローチャートにおいて、ステップS91〜S94及びS96〜S97は、前記実施例1のステップS31〜S34及びS36〜S37と同一である。
ステップS95では、2ステップ合意部220の後段部220−Bが、前段部220−Aから受信した処理要求(入力)に付与された署名を検証し、署名が不正な入力を破棄し、署名が正当な入力について処理を実施する点が前記実施例1と相違する。
なお、プロセス(サーバ1)数n2の条件については、署名を利用する本実施例3ではプロセス数n2は、前記実施例1と同様の変数を用いると、
n2>max(2f21+b21,2f22+b22)
となる。
許容故障数f21=f22=3、許容ビザンチン故障数b21=b22=1の場合、署名を利用する本実施例3では、プロセス数n2=8が最小値となる。これにより、前記実施例1よりも、サーバ1の総数を低減することが可能となる。
また、本実施例3で用いる署名は、クライアント3が付与した暗号学的ハッシュ関数(Secure Hash Algorithm等)や誤り検出符号(CRC等)といった周知の技術を適用した認証情報である。
次に、図10のステップS38〜S40と異なるステップS98〜S100について説明する。ステップS98では、2ステップ合意部220が全ての値が空であるか否かを判定して、空であればステップS100へ進み、空でない場合にはステップS99へ進む。
ステップS99では、定足数比較を行わず、空でない値があった場合、2ステップ合意部220は当該値を推定値として組み合わせ部240へ通知する。一方、ステップS100では、全ての値が空であるので、2ステップ合意部220は、値が無確定として組み合わせ部240へ通知する。ステップS98〜S100では、2ステップ合意部220が不正な入力を破棄し、正常な値のみで計数クォーラムを実施できるため、一致数を判定する必要がない。
本実施例3では、2ステップ合意部220の後段部220−Bで署名が正しいかを検証する。検証の結果、不正な署名がある場合、その値を捨て、正当な署名のデータで確定値または推定値の判定を行う。2ステップ合意部220において、署名を利用する場合、必要なサーバ数を低減することが可能となる。この時、前記実施例1と同様に、省プロセス1ステップ合意部210と2ステップ合意部220を組み合わせた場合、プロセス数nは次式で定義される。
n=max(2q+f1+2b1,2f21+b21,2f22+b22)
q=1、f1=f21=f22=3、b1=b21=b22=1の時、n=8となる。したがって、省プロセス1ステップ合意部210と2ステップ合意部220を組み合わせた場合でも、必要なサーバ1の数を低減することが可能である。
図20は、実施例4を示し、サーバ1の構成の一例を示すブロック図である。本実施例4のサーバ1−1は、前記実施例1のアクセラレータ16で行っていた処理のうち、2ステップ合意部220と、組み合わせ部240及び条件設定部120を削除したもので、その他の構成は前記実施例1と同様である。
本実施例4では、省プロセス1ステップ合意部210の出力を、衝突解決値選択部260へ入力して他のサーバ1との間で合意を形成するもので、データの一貫性を保証するまでの通信回数を低減しながら、ビザンチン障害が発生した場合でも、ビザンチン障害を検知または訂正することなく、正常に処理を継続することが可能となる。
前記実施例1でも述べたように、省プロセス1ステップ合意部210は、プロセス数n1が、n1>2q+f1+2b1を満たし、確定クォーラムQeが、Qe=n1−qを満たし、推定クォーラムQfが、n1−f1≧Qf≧2q+2b1+1を満たせばよい。これにより、省プロセス1ステップ合意部210は、b1台の送受信部110(またはサーバ1)でビザンチン障害が生じても、確定値および推定値を正しく得ることが可能となる。
また、本実施例4では、省プロセス1ステップ合意部210で確定値が得られた場合には、前記実施例1で述べたように、最小通信回数δ=2となる。
なお、本実施例4では、省プロセス1ステップ合意部210で合意が形成されない場合には、PAXOS合意部40で合意を形成することができる。
以上のように、本実施例4においても、データの一貫性を保証するまでの通信回数を低減しながら、ビザンチン障害が発生した場合でも、ビザンチン障害を検知または訂正することなく、正常に処理を継続することが可能となる。加えて、アクセラレータ16にFPGAを採用した場合、アクセラレータ16において、ビザンチン障害が発生しうる構成要素が減るため、各処理部を実現するFPGAの論理リソースの面積が、前記実施例1と比較して、低面積で済む。したがって、前記実施例1と比較して、アクセラレータ16でビザンチン障害が発生する確率が低くなる。
<まとめ>
上述したように、上記実施例1〜4の分散処理システムは、(1.)プロセッサ(11)とメモリ(12)を含むサーバ(1)を複数有し、データを前記複数のサーバ(1)で受信し、前記データを多重化して処理する分散処理方法であって、前記サーバ(1)が、前記多重化された前記データを受信して、第1の判定部(省プロセス1ステップ合意部210)で前記受信したデータの一貫性を判定する第1判定ステップ(210)と、前記サーバ(1)が、前記第1の判定部(210)から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータ(確定値)を含む場合には、当該一貫性が保証されたデータを出力する出力ステップ(出力部450)と、を含み、前記第1判定ステップ(210)は、前記データを受信する第1のサーバ数(n1)が、故障が発生したサーバを許容する所定の許容故障数(q,f1)と、ビザンチン障害が発生したサーバを許容する許容ビザンチン故障数(b1)に基づいて予め設定される。
これにより、各送受信部110でビザンチン障害が発生した場合であっても、異常値が使用または出力されるのを抑止して、クライアント3がデータの処理をサーバ1に要求してから、サーバ1で合意に達するまでの最小の通信回数を低減することができる。そして、サーバ1は、ビザンチン障害を検知または訂正することなく、ビザンチン障害が発生しても正常に処理を継続して、処理結果をクライアント3に応答することが可能となる。
また、(2.)上記(1.)に記載の分散処理方法であって、前記サーバ(1)が、前記データの一貫性を判定するために前記サーバ間の最小通信回数(δ)が前記第1の判定部(210)よりも多い第2の判定部(2ステップ合意部220)で、前記受信したデータの一貫性を判定する第2判定ステップ(220)と、前記サーバ(1)が、前記第1の判定部(210)または前記第2の判定部(220)から前記データの一貫性の判定結果を受け付けて、前記第1の判定部(210)の前記判定結果と前記第2の判定(220)の前記判定結果を組み合わせる組み合わせステップ(組み合わせ部240)と、をさらに含み、前記第2判定ステップ(220)は、前記データを受信する第2のサーバ数n2が、許容故障数f2と、許容ビザンチン故障数b2に基づいて予め設定され、前記出力ステップ(450)は、前記判定結果の組み合わせに前記一貫性を保証するデータが含まれる場合には、当該一貫性が保証されたデータを出力する。
省プロセス1ステップ合意部210と2ステップ合意部220を組み合わせることにより、各処理部でビザンチン障害が発生した場合であっても、異常値が使用または出力されるのを抑止して、プロセス数(またはサーバ数)の増大を抑制しながら、最小の通信回数を低減することができる。
また、(3.)は上記(2.)に記載の分散処理方法であって、前記サーバ(1)が、前記組み合わせステップ(240)の判定結果に前記一貫性を保証するデータが含まれない場合には、他のサーバと合意を得るための衝突解決値を選択する衝突解決値選択ステップ(衝突解決値選択部260)と、前記サーバ(1)が、所定の合意アルゴリズム(PAXOSアルゴリズム)を用いて前記衝突解決値の一貫性の合意を行う合意ステップ(PAXOS合意部40)と、をさらに含み、前記出力ステップ(450)は、前記合意結果に前記一貫性を保証するデータが含まれる場合には、当該一貫性が保証されたデータを出力する。
多数のリクエスト(データ)が衝突し、データの一致数が少ない場合には、組み合わせ部240で確定値および推定値を得られず、任意値が出力される。この場合に正常値を選択しておくことで、異常値が選択されるのを抑止することができる。
また、(4.)は、上記(2.)に記載の分散処理方法であって、前記第2のサーバ数(n2)は、第3のサーバ数(n21)と第4のサーバ数(n22)で決定され、前記第2判定ステップ(220)は、予め設定された第3のサーバ数(n21)の前記サーバ(選択クォーラムQ1)からデータを受信して前記データの一致を判定する前段ステップ(前段部220−A)と、予め設定された第4のサーバ数(n22)の前記サーバ(計数クォーラムQ2)から前記前段ステップ(220−A)の判定結果を受信して前記データのうち部分一致するデータを判定する後段ステップ(220−B)と、を含み、前記前段ステップ(220−A)と後段ステップ(220−B)の少なくとも一方は、異なるハードウェアで機能する。
2ステップ合意部220の合意の経路(前段部220−A、後段220−B)を、全て、もしくは一部をソフトエラーが問題とならないハードウェアや、ソフトウェアで実装する。これにより、2ステップ合意部220の選択クォーラムQ1または計数クォーラムQ2のビザンチン障害の発生を無視することができ、計算機システム全体のサーバ数(プロセス数)を低減する効果が期待できる。
また、(5.)は、上記(2.)に記載の分散処理方法であって、前記第2のサーバ数(n2)は、第3のサーバ数(n21)と第4のサーバ数(n22)で決定され、前記第2判定ステップ(220)は、予め設定された第3のサーバ数(n21)の前記サーバ(Q1)からデータを受信して前記データの一致を判定する前段ステップ(220−A)と、予め設定された第4のサーバ数(n22)の前記サーバ(Q2)から前記前段ステップ(220−A)の判定結果を受信して前記データのうち所定の条件が成立するデータを判定する後段ステップ(220−B)と、を含み、前記データは認証情報(署名)を含み、前記後段ステップ(220−B)は、前記認証情報(署名)による認証が成功したデータで前記判定を実施する。
2ステップ合意部220の後段部220−Bで署名が正しいかを検証し、正当な署名のデータで確定値または推定値の判定を行う。2ステップ合意部220において、署名を利用することにより、必要なサーバ数を低減することが可能となる。
また、(6.)は、上記(2.)に記載の分散処理方法であって、前記第1のサーバ数は、当該第1のサーバ数をn、前記許容故障数のうち第1の許容故障数をq(最小レイテンシを維持可能な許容故障数)とし、前記許容故障数のうち第2の許容故障数をf1とし、前記許容ビザンチン故障数をb1とした場合、前記第1のサーバ数n1が2q+f1+2b1より大である。
省プロセス1ステップ合意部210、2ステップ合意部220、組み合わせ部240、正常値選択部250及び衝突解決値選択部260で合意を行う場合、プロセス数は、上記n1を満たすことで、サーバ1の数の低減と、最小通信回数δの確保を両立できる。
また、(7.)は、上記(6.)の分散処理方法であって、前記第1のサーバ数n1が、分散処理を実行するサーバ数の最小値である。
また、(8.)は、上記(3.)に記載の分散処理方法であって、前記受信したデータの一致数とデータの値を正常値として正常値情報(正常値テーブル330)に格納する正常値情報格納ステップ(S9)と、前記組み合わせステップ(組み合わせ部240)の前記判定結果に推定値が含まれない場合には、前記正常値情報(330)から前記データに対応する正常値を取得して出力する正常値出力ステップ(S10)と、をさらに含み、前記衝突解決値選択ステップ(260)は、前記正常値を用いて、前記衝突解決値の選択を実施する。
データの一致数が少ない場合には、組み合わせ部240で確定値および推定値を得られず、任意値が出力される。この場合に正常値を選択しておくことで、異常値が選択されるのを抑止することができる。
また、(9.)は、上記(8.)に記載の分散処理方法であって、前記正常値情報格納ステップ(S9)は、前記正常値情報(330)のうち、一致数が最も高いデータを最頻値として最頻値情報(最頻値テーブル340)に格納し、前記正常値情出力ステップ(S9)は、前記判定結果に推定値が含まれない場合には、前記最頻値情報(340)から前記データに対応する前記最頻値を取得して出力する。
データの一致数が少ない場合には、組み合わせ部240で確定値および推定値を得られず、任意値が出力される。この場合に最頻値を選択しておくことで、異常値が選択されるのを抑止することができる。
また、(10.)は、上記(2.)に記載の分散処理方法であって、前記第1の判定部(210)または前記第2の判定部(220)で、前記受信したデータの全数が一致し、通信回数の低減が見込める場合には、さらに他のサーバ(1)からデータの受信を行う。
これにより、省プロセス1ステップ合意部210や、定足数の比較を利用した2ステップ合意部220や、署名を利用した2ステップ合意部220において、レイテンシの低減を図ることが可能となる。
なお、他のサーバ1から追加でデータの受信を行う条件は、上記省プロセス1ステップ合意部210では、(条件1)待機中に受信した入力のうち、Qe(n1−q)台の送受信部110からの値が一致する、(条件2)全ての送受信部110(他のサーバ1)から受信する、(条件3)設定された時間が経過する、という条件である。また、2ステップ合意部220では、(条件4)待機中に受信した入力のうち、計数クォーラムQ2(n22−f22)台の前段部220−Aからの入力の値が一致する、(条件5)全てのアクセラレータ16(他のサーバ1)の前段部220−Aから受信する、(条件6)設定された時間が経過する、という条件である。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
1 サーバ
11 プロセッサ
12 メモリ
16 アクセラレータ
40 PAXOS合意部
110 送受信部
130 更新部
140 データ格納部
210 省プロセス1ステップ合意部
220 2ステップ合意部
250 正常値選択部
240 組み合わせ部
260 衝突解決値選択装置

Claims (20)

  1. プロセッサとメモリを含むサーバを複数有し、データを前記複数のサーバで受信し、前記データを多重化して処理する分散処理方法であって、
    前記サーバが、前記多重化された前記データを受信して、第1の判定部で前記受信したデータの一貫性を判定する第1判定ステップと、
    前記サーバが、前記第1の判定部から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータを含む場合には、当該一貫性が保証されたデータを出力する出力ステップと、
    を含み、
    前記第1判定ステップは、
    前記データを受信する第1のサーバ数が、故障が発生したサーバを許容する所定の許容故障数と、ビザンチン障害が発生したサーバを許容する許容ビザンチン故障数に基づいて予め設定されたことを特徴とする分散処理方法。
  2. 請求項1に記載の分散処理方法であって、
    前記サーバが、前記データの一貫性を判定するために前記サーバ間の最小通信回数が前記第1の判定部よりも多い第2の判定部で、前記受信したデータの一貫性を判定する第2判定ステップと、
    前記サーバが、前記第1の判定部または前記第2の判定部から前記データの一貫性の判定結果を受け付けて、前記第1の判定部の前記判定結果と前記第2の判定部の前記判定結果を組み合わせる組み合わせステップと、
    をさらに含み、
    前記第2判定ステップは、
    前記データを受信する第2のサーバ数が、前記許容故障数と、前記許容ビザンチン故障数に基づいて予め設定され、
    前記出力ステップは、
    前記判定結果の組み合わせに前記一貫性を保証するデータが含まれる場合には、当該一貫性が保証されたデータを出力することを特徴とする分散処理方法。
  3. 請求項2に記載の分散処理方法であって、
    前記サーバが、前記組み合わせステップの判定結果に前記一貫性を保証するデータが含まれない場合には、他のサーバと合意を得るための衝突解決値を選択する衝突解決値選択ステップと、
    前記サーバが、所定の合意アルゴリズムを用いて前記衝突解決値の一貫性の合意を行う合意ステップと、
    をさらに含み、
    前記出力ステップは、
    前記合意の結果に前記一貫性を保証するデータが含まれる場合には、当該一貫性が保証されたデータを出力することを特徴とする分散処理方法。
  4. 請求項2に記載の分散処理方法であって、
    前記第2のサーバ数は、第3のサーバ数と第4のサーバ数で決定され、
    前記第2判定ステップは、
    予め設定された第3のサーバ数の前記サーバからデータを受信して前記データの一致を判定する前段ステップと、
    予め設定された第4のサーバ数の前記サーバから前記前段ステップの判定結果を受信して前記データのうち部分一致するデータを判定する後段ステップと、を含み、
    前記前段ステップと後段ステップの少なくとも一方は、異なるハードウェアで機能することを特徴とする分散処理方法。
  5. 請求項2に記載の分散処理方法であって、
    前記第2のサーバ数は、第3のサーバ数と第4のサーバ数で決定され、
    前記第2判定ステップは、
    予め設定された第3のサーバ数の前記サーバからデータを受信して前記データの一致を判定する前段ステップと、
    予め設定された第4のサーバ数の前記サーバから前記前段ステップの判定結果を受信して前記データのうち所定の条件が成立するデータを判定する後段ステップと、を含み、
    前記データは認証情報を含み、
    前記後段ステップは、
    前記認証情報による認証が成功したデータで前記判定を実施することを特徴とする分散処理方法。
  6. 請求項2に記載の分散処理方法であって、
    前記第1のサーバ数は、
    当該第1のサーバ数をnとし、前記許容故障数のうち第1の許容故障数をqとし、前記許容故障数のうち第2の許容故障数をfとし、前記許容ビザンチン故障数をbとした場合、前記第1のサーバ数nが2q+f+2bより大であることを特徴とする分散処理方法。
  7. 請求項6に記載の分散処理方法であって、
    前記第1のサーバ数nが、分散処理を実行するサーバ数の最小値であることを特徴とする分散処理方法。
  8. 請求項3に記載の分散処理方法であって、
    前記受信したデータの一致数とデータの値を正常値として正常値情報に格納する正常値情報格納ステップと、
    前記組み合わせステップの前記判定結果に推定値が含まれない場合には、前記正常値情報から前記データに対応する正常値を取得して出力する正常値出力ステップと、
    をさらに含み、
    前記衝突解決値選択ステップは、前記正常値を用いて、前記衝突解決値の選択を実施すること、を特徴とする分散処理方法。
  9. 請求項8に記載の分散処理方法であって、
    前記正常値情報格納ステップは、
    前記正常値情報のうち、一致数が最も高いデータを最頻値として最頻値情報に格納し、
    前記正常値出力ステップは、
    前記判定結果に推定値が含まれない場合には、前記最頻値情報から前記データに対応する前記最頻値を取得して出力することを特徴とする分散処理方法。
  10. 請求項2に記載の分散処理方法であって、
    前記第1の判定部または前記第2の判定部で、前記受信したデータの全数が一致し、通信回数の低減が見込める場合には、さらに他のサーバからデータの受信を行うことを特徴とする分散処理方法。
  11. プロセッサとメモリを含むサーバを複数有し、データを前記複数のサーバで受信し、前記データを多重化して処理する分散処理システムであって、
    前記サーバは、
    前記多重化された前記データの一貫性を判定する第1の判定部と、
    前記第1の判定部から前記データの一貫性の判定結果を受け付けて、前記判定結果が前記一貫性を保証するデータを含む場合には、当該一貫性が保証されたデータを出力する出力部と、
    を有し、
    前記第1の判定部は、
    前記データを受信する第1のサーバ数が、故障が発生したサーバを許容する所定の許容故障数と、ビザンチン障害が発生したサーバを許容する許容ビザンチン故障数に基づいて予め設定されたことを特徴とする分散処理システム。
  12. 請求項11に記載の分散処理システムであって、
    前記サーバは、
    前記多重化された前記データの一貫性を判定する際に前記サーバ間の最小通信回数が前記第1の判定部よりも多い第2の判定部と、
    前記第1の判定部または前記第2の判定部から前記データの一貫性の判定結果を受け付けて、前記第1の判定部の前記判定結果と前記第2の判定部の前記判定結果を組み合わせる組み合わせ部と、
    をさらに有し、
    前記第2の判定部は、
    前記データを受信する第2のサーバ数が、前記許容故障数と、前記許容ビザンチン故障数に基づいて予め設定され、
    前記出力部は、
    前記判定結果の組み合わせに前記一貫性を保証するデータが含まれる場合には、当該一貫性が保証されたデータを出力することを特徴とする分散処理システム。
  13. 請求項12に記載の分散処理システムであって、
    前記サーバは、
    前記判定結果に前記一貫性を保証するデータが含まれない場合には、他のサーバと合意を得るための衝突解決値を選択する衝突解決値選択部と、
    所定の合意アルゴリズムを用いて前記衝突解決値の一貫性の合意を行う合意部と、
    をさらに有し、
    前記出力部は、
    前記合意の結果に前記一貫性を保証するデータが含まれる場合には、当該一貫性が保証されたデータを出力することを特徴とする分散処理システム。
  14. 請求項12に記載の分散処理システムであって、
    前記第2のサーバ数は、第3のサーバ数と第4のサーバ数で決定され、
    前記第2の判定部は、
    予め設定された第3のサーバ数の前記サーバからデータを受信して前記データの一致を判定する前段部と、
    予め設定された第4のサーバ数の前記サーバから前記前段部の判定結果を受信して前記データのうち部分一致するデータを判定する後段部と、を有し、
    前記前段部と後段部少なくとも一方は、異なるハードウェアで機能することを特徴とする分散処理システム。
  15. 請求項12に記載の分散処理システムであって、
    前記第2のサーバ数は、第3のサーバ数と第4のサーバ数で決定され、
    前記第2の判定部は、
    予め設定された第3のサーバ数の前記サーバからデータを受信して前記データの一致を判定する前段部と、
    予め設定された第4のサーバ数から前記前段部の判定結果を受信して前記データのうち所定の条件が成立するデータを判定する後段部と、を含み、
    前記データは認証情報を含み、
    前記後段部は、
    前記認証情報による認証が成功したデータで前記判定を実施することを特徴とする分散処理システム。
  16. 請求項12に記載の分散処理システムであって、
    前記第1のサーバ数は、
    当該第1のサーバ数をnとし、前記許容故障数のうち第1の許容故障数をqとし、前記許容故障数のうち第2の許容故障数をfとし、前記許容ビザンチン故障数をbとした場合、前記第1のサーバ数nが2q+f+2bより大であることを特徴とする分散処理システム。
  17. 請求項16に記載の分散処理システムであって、
    前記第1のサーバ数nが、分散処理を実行するサーバ数の最小値であることを特徴とする分散処理システム。
  18. 請求項13に記載の分散処理システムであって、
    前記受信したデータの一致数とデータの値を正常値として正常値情報に格納する正常値情報格納部と、
    前記組み合わせ部の前記判定結果に推定値が含まれない場合には、前記正常値情報から前記データに対応する正常値を取得して出力する正常値出力部と、
    をさらに有し、
    前記衝突解決値選択部は、前記正常値を用いて、前記衝突解決値の選択を実施することを特徴とする分散処理システム。
  19. 請求項18に記載の分散処理システムであって、
    前記正常値情報格納部は、
    前記正常値情報のうち、一致数が最も高いデータを最頻値として最頻値情報に格納しておき、
    前記正常値出力部は、前記判定結果に推定値が含まれない場合には、前記最頻値情報から前記データに対応する前記最頻値を取得して出力することを特徴とする分散処理システム。
  20. 請求項12に記載の分散処理システムであって、
    前記第1の判定部または前記第2の判定部は、前記受信したデータの全数が一致し、通信回数の低減が見込める場合には、さらに他のサーバからデータの受信を行うことを特徴とする分散処理システム。
JP2019006800A 2019-01-18 2019-01-18 分散処理方法及び分散処理システム Active JP6804572B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2019006800A JP6804572B2 (ja) 2019-01-18 2019-01-18 分散処理方法及び分散処理システム
US16/561,063 US11106552B2 (en) 2019-01-18 2019-09-05 Distributed processing method and distributed processing system providing continuation of normal processing if byzantine failure occurs

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019006800A JP6804572B2 (ja) 2019-01-18 2019-01-18 分散処理方法及び分散処理システム

Publications (2)

Publication Number Publication Date
JP2020115315A true JP2020115315A (ja) 2020-07-30
JP6804572B2 JP6804572B2 (ja) 2020-12-23

Family

ID=71608885

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019006800A Active JP6804572B2 (ja) 2019-01-18 2019-01-18 分散処理方法及び分散処理システム

Country Status (2)

Country Link
US (1) US11106552B2 (ja)
JP (1) JP6804572B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022160937A (ja) * 2021-04-07 2022-10-20 株式会社日立製作所 分散合意方法、分散システム及び分散合意プログラム

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014178793A (ja) * 2013-03-14 2014-09-25 Hitachi Ltd 情報処理システム
WO2014147085A2 (en) * 2013-03-20 2014-09-25 Nec Europe Ltd. Method and system for byzantine fault tolerant data replication
WO2015140942A1 (ja) * 2014-03-18 2015-09-24 株式会社東芝 情報処理システム、サーバ装置、情報処理方法およびプログラム
WO2015186191A1 (ja) * 2014-06-03 2015-12-10 株式会社日立製作所 データ管理システム及びデータ管理方法

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7565433B1 (en) * 2002-06-28 2009-07-21 Microsoft Corporation Byzantine paxos
US7620680B1 (en) * 2002-08-15 2009-11-17 Microsoft Corporation Fast byzantine paxos
US7454521B2 (en) * 2003-10-23 2008-11-18 Microsoft Corporation Byzantine fault quantifying clock synchronization
US8005888B2 (en) * 2003-12-30 2011-08-23 Microsoft Corporation Conflict fast consensus
US7334154B2 (en) * 2004-06-18 2008-02-19 Microsoft Corporation Efficient changing of replica sets in distributed fault-tolerant computing system
US8549180B2 (en) * 2004-10-22 2013-10-01 Microsoft Corporation Optimizing access to federation infrastructure-based resources
US7555516B2 (en) * 2004-11-23 2009-06-30 Microsoft Corporation Fast Paxos recovery
JP5213108B2 (ja) * 2008-03-18 2013-06-19 株式会社日立製作所 データ複製方法及びデータ複製システム
US20110004521A1 (en) * 2009-07-06 2011-01-06 Yahoo! Inc. Techniques For Use In Sorting Partially Sorted Lists

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014178793A (ja) * 2013-03-14 2014-09-25 Hitachi Ltd 情報処理システム
WO2014147085A2 (en) * 2013-03-20 2014-09-25 Nec Europe Ltd. Method and system for byzantine fault tolerant data replication
WO2015140942A1 (ja) * 2014-03-18 2015-09-24 株式会社東芝 情報処理システム、サーバ装置、情報処理方法およびプログラム
WO2015186191A1 (ja) * 2014-06-03 2015-12-10 株式会社日立製作所 データ管理システム及びデータ管理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
嵐 大亮、外1名: "経済的なビザンチン障害耐性信号方式の提案", 電子情報通信学会技術研究報告, vol. 第113巻,第473号, JPN6020042694, 27 February 2014 (2014-02-27), JP, pages 259 - 262, ISSN: 0004385286 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022160937A (ja) * 2021-04-07 2022-10-20 株式会社日立製作所 分散合意方法、分散システム及び分散合意プログラム
JP7225298B2 (ja) 2021-04-07 2023-02-20 株式会社日立製作所 分散合意方法、分散システム及び分散合意プログラム

Also Published As

Publication number Publication date
US11106552B2 (en) 2021-08-31
US20200233761A1 (en) 2020-07-23
JP6804572B2 (ja) 2020-12-23

Similar Documents

Publication Publication Date Title
US10261853B1 (en) Dynamic replication error retry and recovery
US8230253B2 (en) Byzantine fault tolerant dynamic quorum using a trusted platform module
JP2020512708A5 (ja)
US20190349423A1 (en) Call Chain-Based Concurrency Control Method and Apparatus, and Control Node
EP2434729A2 (en) Method for providing access to data items from a distributed storage system
CN111343277B (zh) 分布式数据存储方法、系统、计算机设备和存储介质
US7801997B2 (en) Asynchronous interconnect protocol for a clustered DBMS
US9164864B1 (en) Minimizing false negative and duplicate health monitoring alerts in a dual master shared nothing database appliance
Van Renesse et al. Byzantine chain replication
JP6615761B2 (ja) 分散データグリッドにおいて非同期呼出をサポートするためのシステムおよび方法
US20140289562A1 (en) Controlling method, information processing apparatus, storage medium, and method of detecting failure
CN111104282B (zh) 一种基于区块链的节点处理方法和装置
WO2020232859A1 (zh) 分布式存储系统、数据写入方法、装置和存储介质
US20150134672A1 (en) Data Copy Management Apparatus and Data Copy Method Thereof
US10303565B2 (en) Multicasting system voting on server data
US9830263B1 (en) Cache consistency
JP2020115315A (ja) 分散処理方法及び分散処理システム
JP6083480B1 (ja) 監視装置、フォールトトレラントシステムおよび方法
CN110417833B (zh) 基于区块链的数据处理方法、装置及存储介质
JP5201134B2 (ja) 二重化システム、切替プログラムおよび切替方法
CN107040509B (zh) 一种报文发送方法及装置
US20190312804A1 (en) Packet processing method and network device
US10489239B2 (en) Multiplexing system, multiplexing method, and computer program product
WO2021043246A1 (zh) 数据读取方法及装置
CN106020975B (zh) 数据操作方法、装置和系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190808

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201030

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20201117

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201202

R150 Certificate of patent or registration of utility model

Ref document number: 6804572

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150