分布式基礎 --- Leader election

分布式基礎 --- Leader election

  • 為什么需要leader election
  • Ring election
  • Bully Algorithm

為什么需要leader election

  • 在一組集群中, 需要選出一個leader來承擔一些特別的任務, 比如
  • 協調和控制系統操作:領導者負責協調和控制整個分布式系統的操作。它可以接收和處理其他節點的請求,并根據系統的需求進行決策和操作。
  • 數據一致性和復制:領導者負責確保系統中的數據一致性和復制。它可以處理寫入請求,并將寫入操作廣播到其他節點,以確保數據的一致性和可靠性。
  • 資源分配和調度:領導者可以負責資源的分配和調度,以優化系統的性能和資源利用率。它可以根據系統的負載情況和需求,進行資源分配和任務調度的決策。
  • 錯誤處理和故障恢復:領導者可以監視系統中的錯誤和故障,并采取相應的措施進行處理和恢復。它可以檢測到其他節點的故障,并執行相應的故障轉移和恢復策略,以確保系統的可用性和穩定性.

Ring election

  • 初始化:在環狀拓撲中的每個節點都被分配一個唯一的標識,例如節點ID。開始時,每個節點都將自己標記為候選者狀態。
  • 發起選舉:一個節點決定發起選舉時,它將向其后繼節點發送選舉消息。
  • 選舉消息傳遞:當一個節點收到選舉消息時,它會比較消息中的候選者標識和自己的標識。如果收到的候選者標識比自己的標識更大,節點將更新自己的狀態為候選者,并將收到的消息繼續傳遞給下一個節點。如果收到的候選者標識與自己的標識相同,節點將宣布自己為領導者,并將選舉結果傳遞回發起選舉的節點。
  • 選舉結果傳遞:選舉結果通過環狀拓撲結構傳遞回發起選舉的節點。每個節點將選舉結果與自己的狀態比較,如果選舉結果中的標識比自己的標識更大,節點將更新自己的狀態為候選者,并將選舉結果繼續傳遞給下一個節點。如果選舉結果中的標識與自己的標識相同,節點將宣布自己為領導者,并選舉過程結束。
  • 領導者選舉完成:當選舉結果回到發起選舉的節點時,該節點將宣布選舉完成,并將選舉結果廣播給整個系統,以便其他節點得知新的領導者
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述
  • 接著 N80 的 Message會轉一圈,最終回到N80, 表示選舉完成. N80發出elected message
import java.util.ArrayList;
import java.util.List;// 節點類定義
class Node {private int id;private int leaderpublic Node(int id) {this.id = id;}public int getId() {return id;}public void receiveElectionMessage(ElectionMessage message) {if (message.type == "Elected" && message.id == this.id) {//election finishedleader = message.id;return }else if (message.type == "Elected") {leader = message.id;passElectionMessage(message)return }if (message.id > this.id) {passElectionMessage(message)}else if (message.getId() < this.id) {passElectionMessage(new ElectionMessage(this.id, "Election"))}else {passElectionMessage(new ElectionMessage(this.id, "Elected"))}}public void passElectionMessage(ElectionMessage message) {Node nextNode = getNextNode(); nextNode.receiveElectionMessage(message);}
}// 選舉消息類定義
class ElectionMessage {public int id;public string messageType;
}

復雜度分析

  • Worst-Case:
  • (N-1) messages for Election message to get from
    Initiator (N6) to would-be coordinator (N80)
  • N messages for Election message to circulate around ring without message being changed
  • N messages for Elected message to circulate around the ring
  • Message complexity: 3N-1 messages
  • Best-Case: 2N
  • Initiator is the would-be leader is the initiator
  • Message complexity: 2N messages

如何應對 Failures

  • 如果在選舉中N80掛掉了,則選舉會一直進行下去
    在這里插入圖片描述
  • 方案一: 讓之前或者之后的節點重新發起選舉, 如果收到Election message之后超時沒有收到Elected Message
  • 但是如果之前或者之后的節點也掛掉了, 或者之前前,之后后的節點也掛掉了
  • 方案二: 使用Failure Detection:
  • 任何接收到election消息(Election:80)的進程都可以通過Failure Detection檢測N80的故障。
  • 如果檢測到N80的故障,可以啟動新一輪的領導者選舉
  • 但是Failure Detection 本身就有不準確性

Bully Algorithm

  • 所有節點都知道其他節點的ID
  • 當之前的leader 掛掉時(通過 Failure Detection)
  • 如果一個節點知道自己的標識是最高的:
  • 它將自己選舉為協調者,并向所有標識較低的進程發送一個Coordinator消息
  • 選舉過程完成
  • 如果一個節點知道自己的標識不是最高的:
  • 它會通過發送一個選舉消息來發起選舉。
  • 只向比自己標識更高的進程發送選舉消息。
  • 如果在超時時間內沒有收到回復,節點將自己稱為領導者,并向所有標識較低的進程發送一個協調者消息。選舉完成。
  • 如果收到了回復,說明存在一個非故障的更高優先級的節點,節點將等待Coordinator消息。如果在另一個超時時間內沒有收到Coordinator消息,節點將重新開始一個新的選舉過程.

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

one4all 排坑記錄

one4all 排坑記錄 任務踩坑回顧動作踩坑動作踩坑動作新一步測試Habitat-sim 測試habitat-lab繼續ONE4ALL 任務 看了《One-4-All: Neural Potential Fields for Embodied Navigation》這篇論文&#xff0c;感覺挺有意思&#xff0c;他也開源了代碼。視覺語言導航是我一直想做的…

windows上elasticsearch的ik分詞器的安裝

下載 下載地址 在elasticsearch下的plugins文件夾下創建ik的文件夾 下載的ik壓縮包解壓到plugins/ik 重啟elasticsearch 驗證 http://ip:9200/_cat/plugins

python筆記_運算符優先級

運算符描述算術運算符&#xff08;x&#xff09;括號內優先級最高**乘方 * / // % 乘 矩陣乘 除 整除 取余 _ 加 減 位運算符 >> << 右移 左移 &按位與^按位異或|按位或比較運算符 in not in is is not < < > > ! 判斷兩個變量是否相同 判…

SpringBoot3-核心原理

1. 事件和監聽器 1. 生命周期監聽 場景&#xff1a;監聽應用的生命周期 1. 監聽器-SpringApplicationRunListener 自定義SpringApplicationRunListener來監聽事件&#xff1b; 編寫SpringApplicationRunListener 實現類在 META-INF/spring.factories 中配置 org.springfram…

【藍橋杯】錯誤票據

今天是2024年3月1號&#xff0c;藍橋杯比賽還有一個月的時間&#xff0c;雖說自己不指望拿獎吧&#xff0c;但是還是有些莫i名的焦慮&#xff0c;這道題目都做不出來&#xff0c;感覺自己真的有點菜啊&#xff01;但是還好啦&#xff0c;我覺得是因為我沒有題感&#xff0c;慢慢…

spring boot 整合 minio存儲 【使用篇】

導入依賴 <!--minio--><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.0.3</version></dependency> yml配置&#xff08;默認配置&#xff09; max-file-size: 200MB 設置文件最大…

華為od機試C卷-開源項目熱度榜單

1、題目描述 某個開源社區希望將最近熱度比較高的開源項目出一個榜單&#xff0c;推薦給社區里面的開發者。 對于每個開源項目&#xff0c;開發者可以進行關注(watch)、收藏(star)、fork、提issue、提交合并請求(MR)等。 數據庫里面統計了每個開源項目關注、收藏、fork、issue…

微服務API網關---APISIX

最近在做微服務調研&#xff0c;看到了apisix這個網關&#xff0c;于是進行了初步了解一下。 微服務是指&#xff0c;將大型應用分解成多個獨立的組件&#xff0c;其中每個組件都各自的負責對應項目。 系統的架構大致經歷了&#xff1a;單體應用架構–> SOA架構 -->微服務…

Linux多線程服務端編程:使用muduo C++網絡庫 學習筆記 附錄D 關于TCP并發連接的幾個思考題與試驗

前幾天作者在新浪微博上出了兩道有關TCP的思考題&#xff0c;引發了一場討論&#xff08;http://weibo.com/1701018393/eCuxDrtaONn&#xff09;。 第一道初級題目是&#xff1a;有一臺機器&#xff0c;它有一個IP&#xff0c;上面運行了一個TCP服務程序&#xff0c;程序只偵聽…

StarRocks實戰——松果出行實時數倉實踐

目錄 一、背景 二、松果出行實時OLAP的演進 2.1 實時數倉1.0的架構 2.2 實時數倉2.0的架構 2.3 實時數倉3.0的架構 三、StarRocks 的引入 四、StarRocks在松果出行的應用 4.1 在訂單業務中的應用 4.2 在車輛方向的應用 4.3 StarRocks “極速統一” 落地 4.4 StarRoc…

Lambda、Function、StreamAPI詳解

目錄 1、Lambda 2、Function 3、StreamAPI 中間操作&#xff1a;Intermediate Operations 終止操作&#xff1a;Terminal Operation 1、Lambda Java8語法糖&#xff1a;參數列表 箭頭 方法體 package com.atguiggu.lambda;import java.util.*; import java.util.funct…

分布式ID生成系統之雪花算法詳解

在當今的云計算和微服務架構盛行的時代&#xff0c;分布式系統已成為軟件開發的重要組成部分。隨著系統規模的擴大和業務的復雜化&#xff0c;對數據一致性和唯一性的要求也越來越高&#xff0c;尤其是在全局唯一標識符&#xff08;ID&#xff09;的生成上。因此&#xff0c;分…

代碼隨想錄算法訓練營Day48 | 121.買賣股票的最佳時機、122.買賣股票的最佳時機 II

121.買賣股票的最佳時機 &#xff08;想寫動態規劃寫著寫著變成貪心了&#xff09; 半貪心半動規&#xff1a; int maxProfit(vector<int>& prices) {vector<int> dp(prices.size(), 0);int minVal prices[0];for (int i 1; i < prices.size(); i) {//…

yolov5訓練太慢的解決方案

問題原因 訓練太慢大多是因為沒有安裝CUDA和pytorch&#xff0c;導致的只有cpu在跑&#xff0c;顯卡沒跑 這就是很典型的。 解決方案 第一步&#xff1a;安裝CUDA 在本機上面安裝CUDA,記住只有N卡可以安裝&#xff0c;一開始的電腦是自帶CUDA的。 如果不是自帶的CUDA&…

Apache Paimon Flink引擎解析

Paimon 支持 Flink 1.17, 1.16, 1.15 和 1.14&#xff0c;當前 Paimon 提供了兩類 Jar 包&#xff0c;一類支持數據讀寫&#xff0c;另一類支持其它操作&#xff08;compaction&#xff09; Version Type Jar Flink 1.18 Bundled Jar paimon-flink-1.18-0.7…

SentenceTransformer簡單使用

SentenceTransformer簡單使用 1 SentenceTransformer介紹 SentenceTransformer主要用于對句子、文本和圖像進行嵌入。可用于文本和圖像的相似度對比查找等 # SentenceTransformer官網地址 https://www.sbert.net/# 安裝SentenceTransformer pip install -U sentence-transfo…

求數字的每一位之和

求數字的每一位之和 題目描述&#xff1a;解法思路&#xff1a;解法代碼&#xff1a;運行結果&#xff1a; 題目描述&#xff1a; 輸入一個整數m&#xff0c;求這個整數m的每?位之和&#xff0c;并打印。 測試1&#xff1a; 輸?&#xff1a;1234 輸出&#xff1a;10 測試2&…

土壤侵蝕量化評估

根據之前的文章,已經算出了R、K、LS、C、P 現在計算土壤侵蝕,將幾個前期制作好的因子的TIFF文件,用柵格計算器相乘 發現局部地區存在輕度侵蝕,大部分區域是微度侵蝕 然后對比了一下范圍 其中的幾個因子都在文獻范圍內,說明計算結果并未出錯,可能就是研究區正常范圍和結…

6020一拖二快充線:手機充電的革命性創新

在快節奏的現代生活中&#xff0c;手機已不僅僅是一個通訊工具&#xff0c;更是我們工作、學習和娛樂的得力助手。然而&#xff0c;手機的電量問題一直是困擾著我們的難題。為了解決這個問題&#xff0c;市場上出現了一種名為“一拖二快充線”的充電設備&#xff0c;它不僅具備…

etcd入門-(1)安裝篇

一、etcd安裝 https://github.com/etcd-io/etcd/releases 根據需要下載安裝etcd, 確保添加到環境變量 執行 etcd -v 查看安裝版本 二、etcd運行 本地運行集群 1.首先安裝goreman go install github.com/mattn/goremanlatest2.準備Procfile 將腳本下載到本地&#xff0c;或者復…