主頁 >  其他 > 詳解共識演算法的Raft演算法模擬數

詳解共識演算法的Raft演算法模擬數

2023-07-05 08:16:29 其他

摘要:Raft演算法是一種分布式共識演算法,用于解決分布式系統中的一致性問題,

本文分享自華為云社區《共識演算法之Raft演算法模擬數》,作者: TiAmoZhang ,

01、Leader選舉

存在A、B、C三個成員組成的Raft集群,剛啟動時,每個成員都處于Follower狀態,其中,成員A心跳超時為110ms,成員B心跳超時為150ms,成員C心跳超時為130ms,其他相關資訊如圖1所示,

■ 圖1 Raft模擬初始狀態

由于集群中不存在Leader,A、B、C三個成員都不會收到來自Leader的心跳資訊,其中,成員A的超時最短,最先進入選舉狀態,修改自己的狀態為Candidate,并增加自己的任期編號為1,發起請求投票訊息,如圖2所示,

■ 圖2 請求投票

成員A通過RequestVote廣播自己的選票給成員B、C,選票描述了成員A所擁有的資料,其包含成員A所處的term及最新的日志索引,成員B、C根據投票規則處理RequestVote訊息,

term大的成員拒絕投票給term小的成員,

日志索引大的成員拒絕投票給日志索引小的成員,

一個term內只投出一張選票,采用先來先獲得投票的原則,

很明顯,成員B、C的term小于成員A的term,也不存在比成員A日志索引更大的日志索引,并且term為1的選票還沒有投給其他成員,因此成員B、C將term為1的選票投給成員A并更新自己的term為1,

成員A獲得包括自己在內的3張選票,贏得大多數選票,成員A晉升為Leader,并向其他成員發送心跳資訊,維護自己的領導地位,如圖3所示,

■ 圖3 Leader晉升示意

如果成員A在等待投票超過約定的時間內沒有收到多數派的選票,則會重置自己的超時,并結束本次選舉行程,接著會有其他成員在等待心跳超時后發起Leader選舉,在當前案例中,發起Leader選舉的順序為A→C→B,

可能因為網路問題,使集群中的所有成員又發起了一輪選舉,但是都沒有獲得多數派的選票,因此會隨機產生新的超時,開始下一個回圈的選舉,

02、日志復制

日志復制是一個一階段協商的程序,其中,日志項的提交操作由下一輪協商或者心跳訊息來代替完成,因此處理事務請求,Raft只需要發送一輪AppendEntries訊息即可,

AppendEntries訊息除了會包含需要復制日志項的相關資訊外,通常會攜帶Leader的committedIndex引數,標示著最后一個已提交的日志索引,每個Follower的本地都維護了committedIndex,Follower可以對比Leader的committedIndex來推進自己的提交操作,

接著如圖3所示的示例,一個三個成員組成的集群,成員A為Leader,成員B和C為Follower,并且在集群中未提交任何日志項,Leader收到客戶端發送的Add請求后,Leader和Follower依次執行以下步驟,如圖4所示,

■ 圖4 日志復制-復制

(1)Leader將其封裝成日志項追加到本地的日志中,日志索引為1,

(2)Leader通過AppendEntries(0, <1, Add>)訊息時將日志項廣播給所有的Follower,其中:

  • 第一個引數為committedIndex,即Leader最后提交的日志索引,
  • 第二個引數為Leader所處的日志索引,即Add日志項的索引,
  • 第三個引數為事務操作指令,即客戶端的指令,

(3)Follower收到訊息,將日志項追加到本地的日志中,

此時,成員A、B、C都擁有日志項Add且都已在索引為1上完成了持久化,Follower在處理完AppendEntries訊息后需要回復ACK訊息給Leader,代表接受該日志項,Leader收到多數派的ACK訊息后,可以在本地提交該日志項并執行狀態轉移,之后將執行結果回傳給客戶端,如圖5所示,

■ 圖5 日志復制-回復

在當前場景中,成員A提交了索引為1的日志項,成員B、C僅僅擁有索引為1的日志項的所有資訊但并未提交,成員B、C需要等待下一次AppendEntries訊息,根據其committedIndex推進索引為1的日志項的提交操作,以心跳的AppendEntries訊息為例,該AppendEntries訊息僅攜帶了committedIndex,此時Leader已經提交了索引為1的日志項,因此committedIndex為1,Follower則可以提交索引為1及其之前的所有日志項,如圖6所示,

■ 圖6 日志復制-心跳

03、日志對齊

我們使用<term, logIndex>表示一個日志項,如表1所示為Follower E的日志索引3和Follower D的日志索引4,與當前Leader處理不一致的情況,出現這種情況可能是Follower E和Follower D曾經當選過Leader,并且在自己的term上提出了日志索引為3和4的日志項后立即宕機造成的,

■ 表1 日志對齊

要使Follower E和Follower D與Leader資料保持一致,大致步驟分為兩步:尋找nextIndex,復制nextIndex及其之后的日志項,在Raft中,這個步驟均可由AppendEntries訊息來完成,這里以Follower E成員為例,互動細節如下:

(1)Leader為Follower E初始化nextIndex,nextIndex=lastLogIndex+1,即nextIndex=6+1=7,

(2)Leader通過AppendEntries發送探測訊息,攜帶preLogIndex(nextIndex-1)及preLogTerm,其中,preLogIndex=6,preLogTerm=3,

(3)Follower收到探測訊息,對比索引為6的日志項,回傳失敗的回應給Leader并攜帶lastLogIndex=3,

(4)Leader收到失敗的回應,更新nextIndex=lastLogIndexmsg+1,即nextIndex=4,

(5)Leader發送下一輪的探測訊息,其中,preLogIndex=3,preLogTerm=2,

(6)Follower收到探測訊息,對比索引為3的日志項,回傳失敗的回應給Leader并攜帶lastLogIndex=3,

(7)Leader收到失敗的回應,此時lastLogIndexmsg+1 ≤ nextIndex,則nextIndex單調遞減為3,

(8)Leader發送下一輪的探測訊息,其中,preLogIndex=2,preLogTerm=1,

(9)Follower收到探測訊息,對比索引為2的日志項,回傳探測成功的回應給Leader,

(10)Leader在成功探測到nextIndex之后,通過AppendEntries訊息從nextIndex開始發送索引為3的日志項給Follower,

(11)Follower將以Leader的資料為準,覆寫本地的日志項并回傳處理成功的回應給Leader,

(12)Leader收到成功回應后,單調遞增nextIndex,繼續發送下一個日志項,直到nextIndex等于Leader的lastLogIndex,意味著該Follower擁有Leader所有的資料,本次日志對齊即完成,

 

點擊關注,第一時間了解華為云新鮮技術~

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/556593.html

標籤:其他

上一篇:【筆試實戰】LeetCode題單刷題-編程基礎 0 到 1【二】

下一篇:返回列表

標籤雲
其他(162066) Python(38266) JavaScript(25522) Java(18289) C(15238) 區塊鏈(8275) C#(7972) AI(7469) 爪哇(7425) MySQL(7285) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5876) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4610) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2438) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) HtmlCss(1987) .NET技术(1985) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1882) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 詳解共識演算法的Raft演算法模擬數

    摘要:Raft演算法是一種分布式共識演算法,用于解決分布式系統中的一致性問題。 本文分享自華為云社區《共識演算法之Raft演算法模擬數》,作者: TiAmoZhang 。 01、Leader選舉 存在A、B、C三個成員組成的Raft集群,剛啟動時,每個成員都處于Follower狀態,其中,成員A心跳超時為1 ......

    uj5u.com 2023-07-05 08:16:29 more
  • 【筆試實戰】LeetCode題單刷題-編程基礎 0 到 1【二】

    博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ......

    uj5u.com 2023-07-04 08:29:54 more
  • SM2加密演算法

    幾何學基礎 歐式幾何 從一點向另一點可以引一條直線。 任意線段能無限延伸成一條直線。 給定任意線段,可以以其一個端點作為圓心,該線段作為半徑作一個圓。 所有直角都相等。 若兩條直線都與第三條直線相交,并且在同一邊的內角之和小于兩個直角,則這兩條直線在這一邊必定相交。 羅巴切夫斯基幾何 第五公設不能被 ......

    uj5u.com 2023-07-04 08:29:35 more
  • Github-Readme-Stats 簡明教程

    WakaTime旨在用可視化的圖示來幫助程式員更直觀的觀察自己在一天中的各種代碼活動,比如使用的IDE時間、一般在幾點作業、提交代碼的數量等。而本篇文章中介紹的開源專案Github WakaTime Stats則是把這些資訊展示在你的個人主頁里,怎么樣?是不是很酷! ......

    uj5u.com 2023-07-04 08:28:47 more
  • K8S | 容器和Pod組件

    不論是軟體環境還是虛擬機系統的搭建,基本都是通過下載軟體安裝包,然后在本地部署和定期更新以及運行,基于這個場景再去理解容器和Pod組件,會輕松許多; ......

    uj5u.com 2023-07-04 08:22:56 more
  • ois七層模型與資料封裝程序

    一,ois七層模型 一,ois七層模型1 為什么要分層2 七層模型3 七層總結二,協議,埠,的作用2.1協議作用2.2tcp/udp的區別2.3ARP 協議的作用2.4客戶端與服務端的作用2.5icmp與ping的區別2.6FTP協議埠2.7埠號的作用三,資料封裝程序3.1資料封裝程序 1 為 ......

    uj5u.com 2023-07-04 08:17:45 more
  • 云原生周刊:Microcks 成為 CNCF 沙箱專案

    ## 開源專案推薦 ### [Kubent](https://github.com/doitintl/kube-no-trouble) Kube No Trouble (kubent) 是一個簡單的工具,該工具將能夠根據您部署資源的方式檢測已棄用的 API。 ### [kdoctor](https: ......

    uj5u.com 2023-07-04 08:17:39 more
  • 系統集成管理真題 2022-11 廣東

    2022-11 廣東 1、云計算服務中,(B)為用戶提供虛擬的作業系統,資料庫管理系統,開發環境等服務。 A.Iaas B.Paas C.Saas D.Daas 決議: 按照云計算服務提供的資源層次,可以分為 IaaS、PaaS 和 SaaS 等三種服務型別。 (1)Iaas(基礎設施即服務),向用 ......

    uj5u.com 2023-07-04 08:17:35 more
  • 保姆級教程:帶你體驗華為云測驗計劃CodeArts TestPlan

    摘要:華為云測驗計劃(CodeArts TestPlan)是面向軟體開發者提供的一站式云端測驗平臺,覆寫測驗管理、介面測驗,融入DevOps敏捷測驗理念,幫助您高效管理測驗活動,保障產品高質量交付。 本文分享自華為云社區《保姆級教程:帶你體驗華為云測驗計劃CodeArts TestPlan》,作者: ......

    uj5u.com 2023-07-04 08:17:11 more
  • CodeGeeX榮獲2023稀土開發者大會“年度最佳開發工具”獎項

    XDC 2023稀土開發者大會6月30日在北京成功舉辦,今年大會主題為“代碼不止,掘金不停”。除了為開發者提供多達60場+的技術分享之外,針對開發者使用的工具也展開了一系列的專業評選,這也是每年大家非常期待的環節。 開發工具是每個開發者每天都會使用的產品,深度影響著開發者的作業效率和生產力。稀土掘金 ......

    uj5u.com 2023-07-04 08:17:01 more