分散式協調與同步之分散式選舉

来源:https://www.cnblogs.com/battlescars/archive/2020/02/10/distributed_system_voting.html
-Advertisement-
Play Games

分散式選舉的原因 分散式系統中需要一個主節點,該節點用於負責對其他節點進行協調和管理。同時主節點的存在能夠保證分散式集群數據的一致性。 分散式選舉演算法 1. Bully演算法 選舉原則:偏向於讓ID更大的節點作為集群的leader 前提條件:假設集群中所有節點都知道其他節點的id 消息類型/節點狀態: ...


分散式選舉的原因

分散式系統中需要一個主節點,該節點用於負責對其他節點進行協調和管理。同時主節點的存在能夠保證分散式集群數據的一致性。

分散式選舉演算法

1. Bully演算法

選舉原則:偏向於讓ID更大的節點作為集群的leader

前提條件:假設集群中所有節點都知道其他節點的id

消息類型/節點狀態

  election消息,用於發起選舉

       alive消息,用於對election消息的應答

       victory消息,競選成功的主節點向其他節點發送宣誓主權的消息

選舉過程

  觸發條件: ID比當前主節點大的節點加入集群,主節點故障

       具體過程: 

       (1) 每個節點判斷自己的ID是否最大,最大則直接發送victory消息

       (2) 如果ID不是最大的,則向比自己id大的節點發送election消息

       (3) 在給定時間範圍內,本節點沒有收到其他節點回覆的alive消息,則認為自己是主節點,並向其他節點發送victory消息;若收到alive消息,則等待其他節點的victory消息

       (4) 收到比本節點id小的節點發送的election消息則回覆一個alive消息

優缺點

  優點: 選舉速度快,演算法複雜度低,簡單易實現

       缺點:每個節點額外存儲信息較多,任意一個ID比前主節點大的節點加入時都會觸發重新選舉過程

軟體舉例: MongoDB

2. Raft演算法

選舉原則:獲得多數投票的集群節點成為leader

前提條件:假設集群中所有節點之間都能相互通信

消息類型/節點狀態

  leader: 主節點

       candidate:候選者,每個節點都可以成功候選者

       follower:leader的跟隨者

選舉過程

  觸發條件: leader任期到了,新節點加入集群或者主節點故障

       具體過程: 

       (1) 初始化所有節點為follower,開始選舉時有follower轉化為candidate,並向其他節點發送選舉消息

       (2) 收到消息的節點進行投票,票數超過一半的節點成為主節點,其他節點由candidate降為follower

優缺點

  優點: 選舉速度快,演算法複雜度低,簡單易實現,當有新節點加入或者節點故障恢復時不會觸發真正的切主

       缺點:每個節點之間都需要相互通信,所以通信量較大

軟體舉例: ETCD

 3. ZAB(Zookeeper Atomic Broadcast)選舉演算法

選舉原則:少數服從多數,節點id大的或者數據最新的優先成為主節點

消息類型/節點狀態

       投票信息 <epoch, vote_id, vote_zxID>

  leader: 主節點

       follower:leader的跟隨者

       observer: 觀察者,無投票權

      Looking,Following,Leading,Observing

優缺點

  優點: 穩定性較好,性能較好

       缺點:容易出現廣播風暴,投票時間較長,複雜度較高

軟體舉例:zookeeper

總結圖

說明:

 本文是極客時間付費課程《分散式技術原理與演算法解析》筆記


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 存儲一張圖片,常見兩種思路: 1. 存儲 寬高、每個像素的 RGBA 值——點陣圖 1. 存儲 寬高、每個幾何圖形——矢量圖 一張圖片,如果幾何圖形關係明確,用矢量圖來存儲,不但空間占用少,而且信息比點陣圖全。因為點陣圖沒有表達出幾何圖形的關係,在縮放時點陣圖只好失真。 同理,存儲一系列數據時: 1. 如果 ...
  • Vue實現動態路由及登錄&404頁面跳轉控制&頁面刷新空白解決方案 by:授客 QQ:1033553122 開發環境 Win 10 Vue 2.9.6 node-v10.15.3-x64.msi 下載地址: https://nodejs.org/en/ 代碼片段(router/index.js) 說 ...
  • 網頁交互效果的實現 滾動條高度的獲取以及設置:document.body.scrollTop || document.documentElement.scrollTop .split() 把字元串分割成數組 .join() 把數組轉為字元串 .replace( /\s+/g, " ") 正則全局替換 ...
  • 之前已經完成了靜態頁面的開發,接下來是網頁動態效果製作 css實現動畫的兩種方式: 1、transition: all 1s; 2、animation: move 1s infinite ease-in-out .5s; @keyframes move{ 0%{ transform: rotate( ...
  • start 基於 koa 2.11 按以下流程分析: app.use() use 方法定義在 中: this.middleware 這就是一個數組,用來存放所有中間件,然後按順序執行。 app.listen() 這個方法定義在 中: this.callback() this.handleReques ...
  • 編輯器:sublime text3 標註工具:PxCook 切圖工具:PS 開發前準備:設計圖標註 PxCook 空格鍵可以上下拖動 大致標註圖紙:(可惜不能文字標註和拉參考線) 開發前準備:PS切圖 在指定圖層上新建一個圖層,使用ctrl+e 合併圖層,可以將任意圖層轉為普通圖層 (如果圖層是下麵 ...
  • 本文的主題是 Glitch Art,故障藝術。 什麼是故障藝術?我們熟知的抖音的 LOGO 正是故障藝術其中一種表現形式。它有一種魔幻的感覺,看起來具有閃爍、震動的效果,很吸引人眼球。 故障藝術它模擬了畫面信號出現故障導致成像錯誤的感覺。青色色塊與紅色色塊無法重合就是這種故障的體現。從膠片時代開始到 ...
  • 前言 分散式共識的概念 在多個節點均可獨自操作或記錄的情況下,使得所有節點針對某個狀態達到一致的過程,通過共識機制可以使得分散式系統中多個節點的數據達成一致。分散式共識技術其實就是區塊鏈共識機制的核心 分散式共識與一致性的區別 一致性強調的是結果,共識強調的是達成一致的過程 分散式共識的關鍵 獲得記 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...