コンセンサスアルゴリズムとは何ですか?
コンセンサスアルゴリズム: 複数の分散ノードがいかなる状況下でもコンセンサスに達することができるアルゴリズム。メッセージの一貫性を保つ手段。
raft コンセンサス アルゴリズムは、より理解しやすいコンセンサス アルゴリズムです。
Raft コンセンサス アルゴリズムは 2 つの部分に分けることができます
リーダーの選択
ログのレプリケーション
リーダー選択はリーダーを選択するプロセスです
各ノードには、フォロワー、候補、リーダーの 3 つの状態があります。
初期状態はフォロワーであり、ノード上にカウントダウンタイマー(時間開始/タイムアウト)があります。
ノードのタイマータイムアウト後、リーダーがメッセージを送信しない場合、ノードのステータスは候補者に変換され、 requestVote が他のすべてのノードに送信されます(全員が彼に投票できるようにします)。
ノードの半数以上が支持に投票した場合(候補者自身も投票することを含む)、候補者がリーダーになります。ノードのステータスがリーダーになり、しばらくすると、hearBeat がすべてのノードに送信され、すべてのノードのステータスが維持されます (すべてのノードをフォロワーとして保持し、カウントダウンを終了させません)。
タイマーがリセットされる状況:
1. 候補者のリクエストを受け取る投票
2. リーダーのハートビートを受信する
特別なケース:
Q1: リーダーが電話を切りました
A1: リーダー 2 を再選します。リーダー 1 が再接続すると、すでにリーダー 2 よりも小さいことがわかります。リーダー 2 は自動的にフォロワーにダウングレードされます。
Q2: 複数の候補者が同時に当選する場合
A2: 投票したフォロワーは他のフォロワーに投票しません。リーダーが選出されるまでカウントダウンが実行されます
ログ レプリケーションのコピー
クライアントはすべてのリクエストをリーダーに送信し、リーダーはリクエストを順番にフォロワーに送信します。
情報にはコミットされた状態とコミットされていない状態の 2 つの状態があります
まず、クライアントがリーダーに情報を送信し、次にリーダーがフォロワーに情報を送信します。このとき、リーダー内のメッセージのステータスは未コミットであり、半数以上のノードがリーダーへの受信を確認するまでステータスはコミットされません。リーダーはコミット後、クライアントに戻ってメッセージを受信し、フォロワーにもメッセージを送信しますが、このときフォロワーの情報ステータスもコミットになります。
参考文献:
2. アニメーション (理解に非常に役立ちます、約 3 分) Raft