Zookeeper選舉Leader源碼剖析

Zookeeper選舉Leader源碼剖析

leader選舉流程

  • 參數說明
    • myid: 節點的唯一標識,手動設置
    • zxid: 當前節點中最大(新)的事務id
    • epoch-logic-clock: 同一輪投票過程中的邏輯時鐘值相同,每投完一次值會增加
  • leader選舉流程
    • 默認投票給自己,優先選擇zxid大的為leader,因為zxid大的節點數據是最新的(理論上事務id越大,說明數據量越多也就意味著比較新),如果zxid一致,那么會選擇myid大的為leader,當節點選票過半則選舉成功

leader選舉核心步驟

  • 源碼大致流程

    • 初始化netty通信,客戶端發送命令立刻監聽到

    • 初始化內存數據庫對象、初始化服務連接工廠等一些信息

      • 啟動服務節點
        • 加載文件數據到內存
        • 啟動netty服務
        • 初始化集群選舉leader
        • 啟動一個線程進行選舉監聽
        • 監聽到選票,將選票丟到recvQueue隊列中
    • 啟動接收選票線程、發送選票線程進行監聽,都去隊列中接受和發送選票

    • 啟動QuorumPeer線程執行run方法,根據節點狀態判斷

      • leading: socket監聽follower節點,初始化LeaerZookeeperServer數據,同步數據到從節點,定時ping到follower節點請求保持長連接
        • follower: 與leader建立發送socket連接,注冊自己到leader、同步leader數據、自旋接收leader同步數據,如果leader宕了,在finally中將自己的狀態改為looking,進入下一輪自旋選舉
        • looking: 節點啟動后的默認狀態,選舉周期+1,初始化選票,默認選自己,發送選票到sendQueue隊列,同時還會不斷地從recvQueue隊列拿選票進行選舉
  • 問題: ZK的選舉機制為什么存在大量自旋,如同步節點數據、選舉流程,如果長時間運行會不會導致CPU資源損耗過大

    • 對于長時間自旋毋庸置疑肯定會導致CPU資源緊張,但是想達到動態監聽數據變化就得犧牲一定的CPU性能,并且這樣也能保證數據的強一致性,也能保證節點選舉的實時性
    • 倘若想要優化ZK,可以引入Redis/MQ基于發布/訂閱模式進行處理,但是這樣會造成引入三方中間件導致復雜度提升

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697808.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697808.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697808.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue3 vuex

目錄 Vuex 是什么 什么是“狀態管理模式”? 什么情況下我應該使用 Vuex? 使用方法: 提交載荷(Payload) 對象風格的提交方式 使用常量替代 Mutation 事件類型 Mutation 必須是同步函數 在組件中提交 Mutation …

redis GEO 類型原理及命令詳解

目錄 前言 一、GeoHash 的編碼方法 二、Redis 操作GEO類型 前言 我們有一個需求是用戶搜索附近的店鋪,就是所謂的位置信息服務(Location-Based Service,LBS)的應用。這樣的相關服務我們每天都在接觸,用滴滴打車&am…

使用ENV工具編譯RT-Thread【詳細過程講解:從下載到編譯、設置】

感興趣的寶子,可以點個贊收藏,便于后期有需要的時候能快速找到~~ ENV編譯編譯RT-Thread工程的詳細過程講解 ENV簡介ENV的下載設置ENV使用ENV編譯RT-Thread工程◆ 打開ENV◆ 輸入打包命令◆ 查看并打開工程文件◆ 使用menuconfig 對生成項目的RT-Thread配…

【Git企業實戰開發】Git常用開發流操作總結

【Git企業實戰開發】Git常用開發流操作總結 大家好 我是寸鐵👊 總結了一篇Git常用開發流操作總結的文章? 喜歡的小伙伴可以點點關注 💝 現在剛做項目的伙伴,可能你之前學過git,但是一實戰發現不熟悉 沒關系,看寸鐵這篇…

fastadmin引用 redis 方法2

頁面上引用 use \think\cache\driver\Redis; $redis new Redis();$redis->set(key, value);// 獲取鍵值對的值$value $redis->get(key);echo $value;如果執行后出現 不支持redis, 檢查系統是否開啟 redis 擴展。 如果是小皮系統。 項目-管理-php擴展&#x…

js實現頂部導航欄隨著滾動條下滑顯示背景顏色,上劃到頂部背景顏色消失

有個項目需求,如題目所示。這種展示方式讓首頁的內容可以完美展示而不受到導航欄的干擾,等下滑查看內容時導航欄的背景顏色再顯示出來。下面是一個案例: 導航欄隨滑動條下滑顯示 再下面是我的成果視頻展示: 導航條隨滾動條下滑顯示…

vue怎么實現pdf、excel、word文件離線預覽?2024年2月份最新測試(可行方案和詳細代碼在文章末尾)

Vue.js 中實現Office文檔(Word、Excel、PPT)和PDF文件的預覽,通常會借助于第三方庫或服務。 1. Office文檔在線預覽 使用WPS Web Office SDK WPS提供了Web Office服務,可以將文檔轉換為網頁格式進行在線預覽。首先在項目中引入并注冊WPS提供的SDK,然后在Vue組件中配置一個…

一、平滑發布與灰度發布

目錄 一、平滑發布與灰度發布 一、平滑發布與灰度發布 什么叫平滑:在發布的過程中不影響用戶的使用,系統不會因發布而暫停對外服務,不會造成用戶短暫性無法訪問; 什么叫灰度:發布后讓部分用戶使用新版本,…

【Linux】普通用戶sudo失敗怎么辦

普通用戶,sudo失敗報錯怎么辦 問題分析如何解決成功 問題分析 新建的普通用戶sudo失敗 sudo提權,是以root的身份執行命令。 當我們用sudo提升權限的時候,這里有個問題,Linux會提示我們輸入當前普通用戶的密碼——這就有點不好。…

【Linux取經路】基礎I/O之重定向的實現原理

文章目錄 一、再來理解重定向1.1 輸出重定向效果演示1.2 重定向的原理1.3 dup21.4 輸入重定向效果演示1.5 輸入重定向代碼實現 二、再來理解標準輸出和標準錯誤2.1 同時對標準輸出和標準錯誤進行重定向2.2 將標準輸出和標準錯誤重定向到同一個文件 三、再看一切皆文件四、結語 …

Elasticsearch從入門到精通-01認識Elasticsearch

Elasticsearch從入門到精通-01認識Elasticsearch 👏作者簡介:大家好,我是程序員行走的魚 🍂博主從本篇正式開始ES學習,希望小伙伴可以一起探討 📖 本篇主要介紹和大家一塊簡單認識下ES并了解ES中的主要角色…

游戲身份證實名認證接口-C#語言代碼示例

為助力解決網絡游戲中的未成年人過度沉迷、不規范行為以及個人信息安全等問題,翔云API提供了高效、安全的游戲身份證實名認證接口。該接口的目標是通過核驗身份證三要素的方式實現用戶身份的準確驗證,確保玩家真實身份與游戲賬號對應,并有效執…

順序表增刪改查(c語言)

main函數&#xff1a; #include <stdio.h>#include "./seq.h"int main(int argc, const char *argv[]){SeqList* list create_seqList();insert_seqList(list,10);insert_seqList(list,100);insert_seqList(list,12);insert_seqList(list,23);show_seqList(l…

SpringBoot集成Mqtt發送消息

1. MQTT簡介 MQTT是一種物聯網消息協議&#xff0c;為Message Queuing Telemetry Transport的縮寫&#xff0c;即消息隊列傳輸探測&#xff0c;協議基于發布訂閱模式進行通信&#xff0c;有開銷低、帶寬小、輕量的特點&#xff0c;通常應用在物聯網數據采集、移動應用、智能硬…

H5獲取手機相機或相冊圖片兩種方式-Android通過webview傳遞多張照片給H5

需求目的&#xff1a; 手機機通過webView展示H5網頁&#xff0c;在特殊場景下&#xff0c;需要使用相機拍照或者從相冊獲取照片&#xff0c;上傳后臺。 完整流程效果&#xff1a; 如下圖 一、H5界面樣例代碼 使用html文件格式&#xff0c;文件直接打開就可以展示布局&#…

BGP-OSPF防環機制

一、BGP 防環機制 1、AS內部防環&#xff1a;通過IBGP水平分割&#xff0c;IBGP水平分割的基本思想是 不把從IBGP鄰居學到的路由信息發送給其他IBGP鄰居&#xff1b; 2、AS間的防環&#xff1a;通過屬性AS-PATH來實現&#xff0c; 基本思想是&#xff1a;記錄經過的路徑&…

【每日一題】2583. 二叉樹中的第 K 大層和-2024.2.23

題目: 2583. 二叉樹中的第 K 大層和 給你一棵二叉樹的根節點 root 和一個正整數 k 。 樹中的 層和 是指 同一層 上節點值的總和。 返回樹中第 k 大的層和(不一定不同)。如果樹少于 k 層,則返回 -1 。 注意,如果兩個節點與根節點的距離相同,則認為它們在同一層。 示…

canvas水波紋效果,jquery鼠標水波紋插件

canvas水波紋效果&#xff0c;jquery鼠標水波紋插件 效果展示 jQuery水波紋效果&#xff0c;canvas水波紋插件 HTML代碼片段 <div class"scroll04wrap"><h3>發展歷程</h3><div class"scroll04"><p>不要回頭&#xff0c;一…

前端工程Bem架構及其封裝

文章目錄 簡介語法在vue3項目中引用sass創建bem.scss文件修改vite.config.tsvue文件中使用結果 這是我學習記錄的筆記&#xff0c;如有不正&#xff0c;歡迎補充 簡介 首先認識一下什么是bem架構&#xff1f;BEM的意思就是塊&#xff08;block&#xff09;、元素&#xff08;e…

【DDD】學習筆記-發布者—訂閱者模式

在領域設計模型中引入了領域事件&#xff0c;并不意味著就采用了領域事件建模范式&#xff0c;此時的領域事件僅僅作為一種架構或設計模式而已&#xff0c;屬于領域設計模型的設計要素。在領域設計建模階段&#xff0c;如何選擇和設計領域事件&#xff0c;存在不同的模式&#…