非ビザンチン フォールト トレラント コンセンサス アルゴリズム

目次

1. Raftアルゴリズム

2. KRaftアルゴリズム

参考文献


1. Raftアルゴリズム

異なる役割を持つ3 つのノード:フォロワー、候補者、リーダー

2段階

1. リーダー選出段階:

初期状態ではすべてのノードがフォロワーノードですが、ランダムタイムアウトが発生した後、上位層(リーダー | 候補)からのメッセージを受信しなかった場合、フォロワーノードが候補ノードになります。過半数の票を獲得した候補ノードがリーダー ノードになります(ランダム タイムアウトを最初に完了した上位候補ノードが、フォロワー ノードの唯一の票を獲得できます)。リーダーノードが選択されなかった場合、選挙は再トリガーされます。ランダムなタイムアウトの後。

2. ログの同期(合意形成)

リーダー ノードは、クライアントのリクエストをログ エントリにカプセル化し、リーダー ノードのハートビートをログとともに他のノードにブロードキャストします。ブロードキャスト プロセス全体は一方向 (リーダー ノード -> 他のノード) です。

リーダー ノードは、ほとんどのノードのログ同期を完了すると、クライアントにコンセンサスを返すことができます。

2. KRaftアルゴリズム

文献[1]で提案されているRaftコンセンサスアルゴリズムに基づく改良により、リーダーノードの生成プロセスと2層Kademliaプロトコルに基づくログ同期の効率が最適化されます。

異なる役割を持つ3 つのノード:フォロワー、候補者、リーダー

2段階

1. リーダー選出段階:

リーダー ノードは初めてランダムに選択されます。2 層の Kademlia プロトコルを使用して K バケットを動的に維持し、K バケット内のノードが現在のノードの遅延が最も低い K ノードであることを保証します。そして、これらの K 個のノードが候補ノードです。リーダー ノードがダウンすると、K バケット内の K 個の候補ノードが新しいリーダー ノードを選択します。(リーダー ノードは、ノードの遅延が最小であることを保証する必要があります)

2. ログの同期(合意形成)

Raft アルゴリズムとは異なり、KRaft アルゴリズムの大規模ログ同期は 2 つのステップに分かれています。

①リーダーノードがシングルノードマルチスレッドで候補ノードにログを送信し、すべての候補ノードがログを受信すると第一ステップが完了します。いずれかの候補ノードがそれを受信して​​いない場合、その候補ノードはロールバックされます。

②候補ノードは後続ノードに並行してログを送信するため、効率が向上します。

(ログの混乱を避けるために、フォロワー ノードはログの受信を確認するブール フラグを設定します)

リーダー ノードがログ確認応答の半分以上を受信すると、合意に達するためにクライアントに戻ることができます。

参考文献

[1] Wang Rihong、Zhou Hang、Xu Quanqing、Zhang Lifeeng. コンソーシアムチェーンのための非ビザンチンフォールトトレラントコンセンサスアルゴリズム [J]. Computer Science, 2021, 48 (9): 317-323。 
 

おすすめ

転載: blog.csdn.net/m0_47233175/article/details/123712322