leader選舉的實現細節
每台伺服器啟動的時候,都會啟動乙個quorumcnxmanager,負責各台伺服器之間底層的leader選舉過程中的網路通訊。
1. 自增選舉輪次
在fastleaderelection實現中,有乙個logicalclock屬性,用於標識當前leader的選舉輪次,zookeeper規定了所有有效的投票都必須在同一輪次中。zookeeper在開始新一輪的投票時,會首先對logicallock進行自增操作
2. 初始化選票
初始化vote資料結構
3. 傳送初始化選票
伺服器發起第一次投票。zookeeper會將剛剛初始化的vote放入sendqueue佇列中,由傳送器workersender負責傳送出去。
4. 接收外部選票
每台伺服器會不斷地從recvqueue佇列中獲取外部投票。如果伺服器發現無法獲取到任何的外部投票,那麼就會立刻確認自己是否和集群中其他伺服器保持有效連線;如果發現沒有建立連線,就會建立連線,並再次傳送自己當前的內部投票。
5. 判斷選舉輪次
根據選舉的輪次處理外部投票
注意,只有在同一選舉輪次的投票才是有效的投票
6. 選票pk
7. 變更投票
通過選票pk之後,如果確定了外部投票優於內部投票(所謂的「優於」,是指外部投票所推舉的伺服器更適合成為leader),那麼進行投票變更——使用外部投票的選票資訊來覆蓋內部投票。變更完成之後,再次將這個變更的內部投票傳送出去。
8. 選票歸檔
無論是否進行了投票變更,都會將剛剛收到的那份外部投票放入「選票集合」recvset中進行歸檔,recvset用於記錄當前伺服器在本輪次中的leader選舉中收到的所有外部投票——按照伺服器對應的sid來區分,例如
9. 統計投票
完成了選票歸檔之後,進行統計投票。如果確認已經有過半的伺服器認可了該內部投票,則終止投票。否則返回步驟4。
10. 更新伺服器狀態
統計投票後,如果已經確定可以終止投票,那麼就開始更新伺服器狀態。伺服器首先判斷當前被過半伺服器認可的投票所對應的leader伺服器是否是自己,不過是自己的話,那麼就會將自己的伺服器狀態更新為leading;否則,根據情況來確定自己是following或者是observing。
MySQL技術內幕
innodb儲存引擎是事物安全的儲存引擎。innodb儲存引擎有多個記憶體塊,這些記憶體塊組成乙個很大的記憶體池,負責如下的工作 後台執行緒 innodb儲存引擎是多執行緒模型,因此他有多個不同的後台執行緒,負責處理不同的任務。記憶體日誌檔案 記錄mysql對某種條件做出響應時的檔案,如錯誤日誌檔案...
Springboot技術內幕
首先spring的技術內幕,看下springboot的啟動過程,監控springioc的呼叫過程。記錄程式執行時間 stopwatch stopwatch new stopwatch stopwatch.start collectionexceptionreporters new arraylist...
VC技術內幕總結
vc技術內幕總結 對技術內幕的學習,主要是集中在前三部分和後面com,odbc的學習,感覺這本書還是寫得不錯的,分析的也比較清晰,例子不錯,有很多細節的小技巧值得我們推敲,結合深入淺出mfc學習,相信會對mfc會有很多,如果非要說缺點的話,就是太厚了,呵呵 由於這裡只是總結,並沒有對在學習過程中的細...