Zookeeper Election Leader ソースコード分析 (2)

Maven のバージョンはバージョン 3.5、jdk1.8 以上である必要があります

 1. 選挙プロセス

他のサーバーの sid が自分の sid よりも小さい場合は、ソケット接続を直接閉じます。これは、接続を減らすためです。

 同一の場合、警告メッセージを出力する リモート SID が自分の SID より大きい場合、送信スレッドと受信スレッドを作成する

 

 sendWorker.start、run メソッドのロジックを直接見てください:
ブロッキング キューからメッセージを取得します

1.2 回復走行方法

リモート サーバーの socker メッセージを読む

 

全体的な投票ロジックでは、ビジネス レイヤーは sendqueue-workerSender-queueSendMap をスローしてキュー投票メッセージを送信し、投票情報をリモート サーバーと独自の recvWorker 受信 -> recvQueue キューに送信して投票を生成します。 

 

wakersender は投票用紙を作成します

 

 mysid は sid と等しく、トランスポート層のキューに追加されます。等しくない場合は、queuesendMap にスローされます

 

 fastleaderElection 選挙アルゴリズム: 初期化状態の検索

 実際の投票ロジック: newEpoch は curEpoch と等しく、最初に zxid を比較し、newID、curId、

updateProposal: 投票を更新し、次回は競争力のある投票に投票します

sendNotifications: 選択した投票用紙を他のマシンに送信します

 

 

 termPredicadate: 選択した投票を投票セットに入れ、半分を比較します

 

 

 半分の比較ロジック: 投票機の数が半分より多いかどうかを比較します

半分:得票数/2

 

 

 

  true を返した後、PK に勝った場合は自身を先頭に設定し、そうでない場合は現在の状態を次のように設定します。

 

 選挙後に状態が変化した場合は、先行と追従を見て、3 番目のマシンが投票を受け取ると、現在の状態が見ているかどうかを比較します。

 

 3 番目のマシンが入ってくると、フォローワーイングとリーディングに従い、最初に現在のサイクルを比較し、上記の投票比較ロジックを実行します。最後に現在の選挙状態を設定します

 

 

おすすめ

転載: blog.csdn.net/qq_21575929/article/details/126217768