研究PBFTアルゴリズム

研究PBFTアルゴリズム

真の分散や擬似分散

分散ストレージとして知られている現在のデータベース、分散ストレージこのブロック鎖が、根本的に異なる。この分散データベース、分散サーバクラスタを持っているとはまだ復旧し、バックアップ、冗長データサービス、まだ彼らを達成することですそれはそれはまだ集中データベースのクラスタ管理で、企業や機関に属しています。

分散データベース・システム内の各ノードに対応するブロックチェーンが、異なる点はない欠失および削除チェック機能が変更をチェックしないようにしながら、様々なデータベース間のデータの同期を維持するには、no管理者が存在しないことです。これは、改ざんすることはできません。(Doが平均値に変更することはできませんではないが、それは変更せずに記録することはできません)。

ビザンチン将軍問題(ノード悪)

ローマのビザンチン帝国の首都、広大な領土、戦争で行動を決定する前に、各軍の一般的なコンセンサスが、一般的には忠実な将軍は、これにより運用計画を中断すること、これらの操作を妨げる裏切り者、裏切り者があるかもしれません。

ビザンチンノードは、ノード間のシステムが効果的に一貫性に到達する方法の場合には既知の分散システム(アクティブ悪、ハードウェアエラー、ネットワークの輻輳ノード、等)に表示されますように、それを説明することができます。

前提

1、ノード間で渡されるメッセージは、メッセージは、セキュリティ上の問題が解決されていない改ざんすることができますメッセージング、セキュリティを提供していることを保証するために暗号化を使用しなければならないことを、改ざんすることはできません。

2、ステートマシン複製コピー基づいて問題解決には、N点、N≥3F+ 1の場合には、次いで可解に要約不良ザF、存在することが想定されます。

ステートマシンは、コピー複製:複製グループは、3つのノードの最小です。間違いは、我々は比較し、他の二つを通知することができます。二つのコピーを決定する方法は間違ったではありませんので、十分ではありません。

逆に、3つのレプリケーショングループは、エラーが発生したノードをサポートすることができます。エラーの複数のコピー、および3つの出力ノードの状態は、したがって、異なっていてもよく、できる場合は、1つが正しいか確認できません。

一般的には、フォールトトレラントシステムはFをサポートしている、あなたは2F + 1つのコピーを使用する必要があります。余分なコピーは間違っているの半分、正しい半分を決定するために使用されています。特殊な状況下では数を増やすことができます。

なぜ明らかにちょうど2F + 1 Geが判断し、ビザンチン将軍問題が、それはN≥3F+ 1を必要とすることができますか?

ノードN、F障害ノードの総数を考える、NFは、応答メッセージ(故障無し応答のすべてのノード)を受信しなければならない(故障ノードが応答を送信しない場合があるため)、結果を決定することが可能です。ネットワーク遅延など、私たちが考えることができる、と詐欺の真のノードに障害があるかもしれないので、1つの応答可能がありfはNFが、(障害が発生したノードが発行)[最も素晴らしい言葉が、実際に仮説偽であります番号が同じで、我々は(システムは間違いなく最も問題のノードの許容範囲を確認する必要があり、安定を必要とします)の公差問題のノードを最大化する必要があり、その数は関係なく、実数のが、ノード== falseのノード障害の数ですそれは+1を必要とするので、大きなは、我々は、最大のF値がある]、それは、そのNFF真であると過半数を取りました。

図3に示すように、各ノードの署名を改ざんすることはできません

BFT

伝統的なBFTインデックス操作のレベルはので、ここでそれらを繰り返すことはしません、あまりで、であるように、2つのソリューション、書面による合意アルゴリズムアルゴリズムとの口頭の合意は、ビザンチン将軍問題アルゴリズムは、実用的なビザンチン将軍問題を再活性化され、その結果、ある(PBFT)それは、分散ネットワークで適用することができるので、彼は、指数関数から多項式アルゴリズムを下にしてみましょう。

PBFT

PBFTアルゴリズムの流れ

ネットワーク全体のマスタノードから選択され、マスタノードP = MOD R V、Rは、Vは、ビュー番号、ノードの数です。

Cはクライアントであり、0はいずれの場合も、ノード3へのメッセージのレプリカは、図から分かるように呼ばれる3マスタノードとも呼ばれるソートノード、ノード2、であり、ノード3は、応答がありません示しので、私たちは失敗したノードとそれを見ることができます。

プロセスの主要段階は2,3,4の第一段階です。

第一段階の話を起動し、

1、REQUEST

Cクライアント要求は、マスタノードp <REQUEST、O、T、C>に送られます。O:追加のクライアント要求のタイムスタンプ、C:クライアントの識別、特定の操作は、T、要求されました。REQUEST:コンテンツをMメッセージ、およびメッセージダイジェストD(M)を含みます。クライアントが要求に署名します。

2、PRE-PREPARE:

マスターノードは、(順番に)次のチェックが必要とされ、クライアントの要求を受信します。

(1)クライアント要求メッセージの署名が正しいです。

不正なリクエストを捨てました。右のリクエスト、番号n、番号を割り当てるnは主にソートされたクライアント要求のために使用されています。次に、他のノードへのメッセージの<< PRE-PREPARE、V、N、D> M>コピーをブロードキャストします。V:ビュー数、Dクライアント・メッセージは、m個のメッセージの内容をダイジェスト。マスタノードの<PRE-PREPARE、V、N、D>署名。nは、これは、特定の範囲の間隔内で、後で説明するであろう、[H、H]です。

3、PREPARE:

私はPRE-PREPAREメッセージマスターノードのコピーを受信したノードは、次の検査のために必要とされています。

マスタノードPRE-PREPAREメッセージの署名が正しいです。

B。現在のノードのコピーが既に番号を受信し、同じvでnは、異なる署名情報をPRE-PREPAREました。

C.まとめdおよびmは同じです。

D.区間におけるn [H、H]内かどうか。

不正なリクエストを捨てました。権利要求、マスタノードを含む他のノードへのノードのコピーiが<PREPARE、V、N、D、I>メッセージ、V、N、D、PRE-PREPAREメッセージ内容上記Mを送信同じであり、iがノード番号の現在のコピーです。ノードの<PREPARE、V、N、D、I>署名済みコピーI。そして、ログにメッセージをPREPARE PRE-PREPARE記録、表示の変更のための回復プロセスは未完了の操作を要求します。

4は、COMMIT:

マスターノードとノードは、PREPAREメッセージのコピーを受け取るには、検査のために、以下を生成する必要があります。

。ノードのコピーは、メッセージの署名が正しいことを準備します。

B。現在のノードが同一のビューN Vのコピーを受信したかどうか。

インターバルにおけるc。N [H、H]以内であれば。

D、Dと同じで現在受信PRE-PPREPARE dのか

不正なリクエストを捨てました。ノードのコピーは、私は、メッセージがマスターノードを含む、他のノードを確認PREPARE TH + 1 2Fを受信した場合は送信<COMMIT、V、N、D、I>メッセージ、V、N、D、I及び上記PREPAREメッセージの内容同じ。ノードの<COMMIT、V、N、D、I>署名済みコピーI。動作を再開するためにビューを変更し、未処理の要求時に、ログレコードにメッセージをCOMMIT。レコードの他のコピーは、メッセージログをPREPAREノードに送信されます。

5、REPLY:

マスターノードとノードがコミットメッセージのコピーを受け取り、我々は検査のために、以下を生成する必要があります。

。ノードのコピーは、メッセージの署名が正しいCOMMIT。

B。現在のノードが同一のビューN Vのコピーを受信したかどうか。

C.まとめdおよびmは同じです。

D.区間におけるn [H、H]内かどうか。

不正なリクエストを捨てました。私はメッセージをCOMMIT番目2F + 1を受信したノードのコピーが確認した場合、ネットワークは、現在、ほとんどのノードにクライアントを実行oを要求された操作することを合意したされ、戻る<REPLY、V、T、C、I、R>クライアント、Rに:クライアント要求が合意に達するために、クライアントがネットワーク全体を開始されたことを示すF + 1の同一の応答メッセージを受信した場合、操作要求の結果は、そうでなければ、クライアントがマスターノードに対して再送要求かどうかを決定する必要が、あります。レコードの他のコピーがノードに送信されたメッセージのログをコミットします。

PBFTは、悪の問題ノード

レプリカ・ノードが悪の場合に見られるマスタノードノードの種類は悪の焦点となっているように、それは直接、不正な要求を破棄する。

マスタノード悪場合は、同じシリアル番号にコンパイルされた異なる要求を与えることができる、またはシーケンス番号または隣接不連続ようにシリアル番号を割り当てません。バックアップノードは、これらの数値の妥当性をチェックするためのイニシアチブをとる義務を持つべきです。マスターノードは悪を落としたり、クライアントの要求をブロードキャストしない場合はコピーを放送するすべてのノードにタイムアウト要求メッセージ場合、クライアントは、タイムアウトメカニズムを設定します。マスターノードのコピーは、ノード悪またはオフライン、元のビューの変更を検出しました。

Viewchange

ノードからプライマリ・ノードに問題があると思います場合は、他のノードにビューチェンジメッセージを送信し、ノードの数が最も少ない現在のノードの生存率は、新しいマスターノードになります。新しいマスターノードが他のノードからのビューチェンジメッセージを2fを受信すると、他のノードに彼らように、新しいビュー放送メッセージは、十分なノードのマスターノードに問題があることが判明しました。ノードから新しいビューイベントを開始しません。マスターノードは、新しいビューを送信した後、予め準備フェーズから出発して、メッセージと未処理の要求ビューで動作し続けます。確認メッセージの後に他の新しいビュー・ノード、マスタノードは、プロセス中pbft時間が上記着信前準備メッセージが、実行される処理であろう。+1見るこの時間は、ビューの新しい時代に入ります。

いくつかの問題(ガベージコレクション、水位)未解決は、前述します

チェックポイント:

PRE-PREPARE前述の要求ノード番号を、処理する最新の現在、マスターノードは、要求が番号nを記録するための要求で受信します。例えば、ノードは、コンセンサス要求数がチェックポイント101で、このノードのために、次に、101です。

:安定したチェックポイント(チェックポイント安定した)
最大数の安定したチェックポイントの要求がコンセンサスを完了したことを最もノード(2F + 1)です。例えば、システムは4つのノードを有し、3つのノードは、リクエスト数に対するコンセンサスが213である持って、その後213が安定したチェックポイントです。

なぜ安定したアップセットは、それをチェックポイント?

最大の目標は、メモリ使用量を減らすことです。次の要求は、任意の合意されていたが、彼らがレコードに行けば、データが成長している前に、各ノードが記録されなければならないので、そのデータの削除を実施するための仕組みがあるはずです。どのようにそれを削除しますか?こうした現在の安定したチェックポイントとして、非常に単純な213で、それは削除することができます前に、その後、213の前のレコードの代表は、コンセンサスので、記録されていました。

低水位区間[H、H]。

各ノードの処理速度及び他の理由は、我々が行う必要があるので、全ての処理ノードが同じ範囲内にあるチェックポイント、例えば、

チェックポイントAノードは、チェックポイントBノード1133 1039です。現在のシステムは、安定したチェックポイント1034です。この数はレベル1034、および高水位がLの値がセットされ、低いH = H + L、ある低いです。仮定我々は、100に設定するようにシステム1034 + 100 = 1134の高水準。

仮定するB現行のチェックポイント1134を有しており、プロセスBに新たな要求がある場合、チェックポイントAまたは1039は、ときに、Bは、ノードAはまた、Aとしても1112処理、A及びB同様の要求数に処理されるまで待つことを選択することができます、その後、すべてのノードstabelチェックポイントを更新するためのメカニズムが存在することになるようなstabelチェックポイントを1100に設定することができ、その後、Bは、新しい要求を処理することができる(例えば、100応答メッセージの後に更新実行のような)ホルダ100 Lもし変わらず、高水位は1100 + 100 = 1200になったとき。

公開された15元の記事 ウォン称賛13 ビュー9056

おすすめ

転載: blog.csdn.net/weixin_43122409/article/details/98171865