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