目次
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。