日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深入理解分布式共識算法 Raft

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2025-11-27 14:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

“不可靠的網絡”、“不穩(wěn)定的時鐘”和“節(jié)點的故障”都是在分布式系統中常見的問題,在文章開始前,我們先來看一下:如果在分布式系統中網絡不可靠會發(fā)生什么樣的問題。

有以下 3 個服務構成的分布式集群,并在 server_1 中發(fā)生寫請求變更 A = 1,“正常情況下” server_1 將 A 值同步給 server_2 和 server_3,保證集群的數據一致性:

wKgZO2kn9NCAbfpvAAHaNf-tkjs929.png

但是如果在數據變更時發(fā)生網絡問題(延遲、斷連和丟包等)便會出現以下情況:比如有兩個寫操作同時發(fā)生在 server_1 或 server_3 上,即便兩個寫操作有先后順序,但可能由于網絡延時導致各個服務中數據的不一致:

wKgZO2kn9NGAY5j4AAJQlKsyQBA596.png

同樣地情況,如果在 server_1 上發(fā)生三次寫操作,在數據同步的過程中因為網絡延時或網絡丟包也可能會導致數據的不一致:

wKgZPGkn9NGAIXJRAAKw1J-4TNo725.png

那么為了避免以上這些集群間數據不一致的問題,便需要分布式共識算法來協調。分布式共識算法簡單來說就是如何在多個服務器間對某一個值達成一致,并且當達成一致之后,無論之后這些機器間發(fā)生怎樣的故障,這個值能保持不變。本篇文章我們便對 Raft 算法進行介紹。

理解 Raft 算法

了解和學習過 Zookeeper 的同學可能聽說過 Zab 算法,它用來保證 Zookeeper 中數據的 順序一致性。Raft 也是一種分布式共識算法,它易于理解和實現,用于保證數據的 線性一致性,是最強一致性模型。

在遵循 Raft 算法的集群中,節(jié)點會有 3 種不同的角色。當集群在初始化時,每個節(jié)點的角色都是 Follower 跟隨者,它們會等待來自 Leader 節(jié)點的心跳。因為此時并沒有 Leader 節(jié)點,所以會等待心跳超時。等待超時的 Follower 節(jié)點會將角色轉變?yōu)?Candidate 候選者,觸發(fā)一次選舉,觸發(fā)選舉時會標記 Term 任期變量,并將自己的一票投給自己,通知其他 Follower 節(jié)點發(fā)起投票。經過投票后,收到超過半數節(jié)點票數的 Candidate 節(jié)點會成為 Leader 領導者節(jié)點,其他節(jié)點為 Follower 跟隨者節(jié)點,Leader 節(jié)點會不斷地發(fā)送心跳給 Follower 節(jié)點來維持領導地位:

wKgZO2kn9NOAbmR6AAWMIeNfLJo896.png

如果每個節(jié)點每次在觸發(fā)選舉時都是同時超時,這樣是不是導致不能完成一次選舉,產生 “活鎖” 問題?的確可能,不過活鎖問題也很好解決:即節(jié)點超時時間在合理的范圍內取隨機值,這樣由于它的隨機性就不太可能再同時發(fā)起競選了,這個時候其他節(jié)點便有足夠的時間向其他節(jié)點索要選票。

寫變更請求

當發(fā)生寫變更請求時,由 Leader 節(jié)點負責處理,即使是請求到 Follower 節(jié)點,也需要轉發(fā)給 Leader 節(jié)點處理。當 Leader 節(jié)點接收到寫請求時,它并不立即對這個請求進行處理,而是先將請求信息 按順序追加到日志文件中(WAL: write-ahead-log),如圖中標記的 log_index 表示追加到的最新一條日志的序號:

wKgZPGkn9NOAAv4pAAKCr5UKIj8811.png

在這個過程中,日志必須持久化存儲。隨后,Leader 節(jié)點通過 RPC 請求將日志同步到各個 Follower 節(jié)點,當超過半數節(jié)點成功將日志記錄時,便認為同步成功。在這里可知 Raft 算法采用的是單主復制的模型,所以它也就會存在以下缺點:

面對大量寫請求負載時系統比較難擴展,因為系統只有一個主節(jié)點,寫請求的性能瓶頸由單個節(jié)點決定

當主節(jié)點宕機時,從節(jié)點提升為主節(jié)點不是即時的,可能會造成一些停機時間

隨后,Leader 節(jié)點會更新最新同步日志的索引 commit_index 為 1,并通過心跳下發(fā)給各個 Follower 節(jié)點:

wKgZO2kn9NSAd2WcAARISDyqZpU387.png

在這個過程中可以發(fā)現 Follower 節(jié)點只是聽從并響應 Leader 節(jié)點,沒有任何主動性?,F在,已經完成了日志在集群間的同步,但是請求對變量 A 的修改還沒有被應用(Apply)。Apply 是在 Raft 算法中經常出現的一個名詞,在多數與 Raft 算法相關的文章中經常會看到 “將已提交的日志條目應用到狀態(tài)機” 等類似的表述。其實 “狀態(tài)機” 理解起來并不復雜,通俗的理解是 業(yè)務邏輯的載體業(yè)務邏輯的執(zhí)行者,它的職責包括:

接收來自日志文件中有序的命令

執(zhí)行具體的業(yè)務邏輯,在本次寫請求中,業(yè)務邏輯指的便是變更 A 的值

變更應用程序的狀態(tài)

返回執(zhí)行結果

更加通俗的講就是 讓請求生效。將已經提交的日志應用到狀態(tài)機是比較簡單且自主的過程,各個服務實例會記錄 apply_index 來標記應用索引,當 apply_index 小于 commit_index 時,那么證明日志文件中記錄的請求信息還有部分沒生效,所以需要按順序應用,直到 apply_index = commit_index:

wKgZPGkn9NWANPURAAG1UwzLhcY916.png

在這個過程中,我一直在強調 “按順序”,不論是日志的追加還是日志的被應用都是按順序來的,因此才能保證數據的線性一致性。

讀請求

Raft 集群處理讀請求會保證讀請求的線性一致性,所謂線性一致性讀就是在 t1 的時間寫入了一個值,那么在 t1 之后,讀一定能讀到這個值,不可能讀到 t1 之前的值,在 Raft 算法中實現線性一致性讀有以下兩種方式:

ReadIndex Read

在這種方式下,當 Leader 節(jié)點處理讀請求時:

wKgZO2kn9NaAMcbCAAStyk4khU8003.png

首先將 commit_index 記錄到本地的 read_index 變量里

向其他節(jié)點發(fā)送一次 Heartbeat,確認自己仍然是 Leader 角色

Leader 節(jié)點等待自己的狀態(tài)機執(zhí)行,直到 apply_index 超過了 read_index,這樣就能夠安全的提供線性一致性讀了

Leader 執(zhí)行 read 請求,將結果返回

在第三步中,保證 apply_index >= read_index 是為了保證所有小于等于 read_index 的請求都已經生效。

如果是 Follower 節(jié)點處理讀請求也和以上過程類似,當 Follower 節(jié)點收到讀請求后,直接給 Leader 發(fā)送一個獲取此時 read_index 的請求,Leader 節(jié)點仍然處理以上流程然后將 read_index 返回,此時 Follower 節(jié)點等到當前的狀態(tài)機 apply_index 超過 read_index 后,就可以返回結果了。

Lease Read

因為 ReadIndex Read 需要發(fā)送一次 Heartbeat 來確認 Leader 身份,存在 RPC 請求的開銷,為了進一步優(yōu)化,便可以采用租約(Lease)讀。租約其實指的是 Leader 節(jié)點身份的過期約定時間,所以這種讀請求只針對 Leader 節(jié)點,Follower 節(jié)點沒有租約的概念,它通過以下公式計算:

lease_end = current_time() + election_timeout / clock_drift_bound

其中 election_timeout 為選舉的超時時間,clock_drift_bound 表示時鐘漂移,指的是在分布式系統中,兩個或多個節(jié)點上的時鐘以不同的速率運行,導致它們之間的時間差隨時間不斷累積和變化(也就是分布式系統中不穩(wěn)定的時鐘問題)。

舉個簡單的例子,假如選舉過期時間是 10s,時鐘漂移為 1.1,那么租約過期時間為:lease_end = current_time() + 10s / 1.1 ≈ current_time() + 9s,如果在處理讀請求時,在租約時間內,則無需發(fā)送 Heartbeat 來明確 Leader 身份,直接等待 apply_index >= commit_index 后返回請求結果。

在以上讀寫流程中,Raft 分布式共識算法能讓每個節(jié)點對日志的值和順序達成共識,每個節(jié)點都存儲相同的日志副本,使整個系統中的每個節(jié)點都能有一致的狀態(tài)和輸出,使得這些節(jié)點看起來就像一個單獨的,高可用的狀態(tài)機。在上文中我們提到過 Zookeeper 使用的 Zab 共識算法保證的是順序一致性,Raft 算法保證的是線性一致性,所以借著這個引子也來談談我對一致性的理解。

一致性

一致性 通常指的就是數據一致性,在分布式系統中的讀寫請求,表現得像在單機系統上一樣,符合直覺和預期。一致性模型有很多種,在這里我們只談以下常見的幾種:

線性一致性 是最強的一致性模型,也被稱為強一致性,在 CAP 定理中的 C 表達的一致性含義便是線性一致性。這種一致性模型要求系統要像單一節(jié)點一樣工作,并且所有操作是原子的,它有兩個約束條件:

順序記錄中的任何一次讀必須讀到最近一次寫入的數據

順序記錄要跟全局時鐘下的順序保持一致

順序一致性 要比線性一致性弱,它只要求 同一客戶端或進程的操作在排序后保持先后順序不變,但 不同客戶端之間的先后順序是可以任意改變的,順序一致性與線性一致性的主要區(qū)別在于 沒有全局時間的限制。比如在社交網絡場景下,一個人通常不關注他看到的所有朋友的帖子的順序,但是對于某個具體朋友,仍然以正確的順序顯示帖子的順序。

因果一致性 則是比 順序一致性 更弱的一致性模型,因果一致性要求必須以相同的順序看到因果相關的操作,而沒有因果關系的并發(fā)操作可以被不同的進程以不同的順序觀察到。典型的例子就是社交網絡中發(fā)帖和評論的關系:必須先有發(fā)帖才能對該帖子進行評論,所以發(fā)帖操作必須在評論操作之前。

最終一致性 是常見的最弱的一致性模型,所謂最終表達的含義是“對于系統到達穩(wěn)定狀態(tài)并沒有硬性要求”,即便這聽起來很不靠譜,但是在業(yè)務中被應用的很多也很好,而且這種一致性模型能使系統的性能很高。

CAP 定理:C 代表一致性,當客戶端訪問所有節(jié)點時,返回的都是同一份最新的數據;A 代表可用性,指每次請求都能獲取到非錯誤的響應,但不保證獲取的數據是最新的;P 代表分區(qū)容錯性,節(jié)點之間由于網絡分區(qū)而導致消息丟失的情況下,系統仍能正常運行。

接下來我們再來談談腦裂問題:

腦裂問題

當集群中發(fā)生網絡通訊問題時,讀、寫請求只能在超過半數節(jié)點的集群內生效,過半數機制 在數學上保證不可能同時存在兩個Leader:

wKgZPGkn9NeAZscWAALhQLFZpH0389.png

除此之外還有以下機制來避免腦裂問題:

Term機制:時間上保證舊Leader會自動讓位給新Leader

主動stepDown:Leader無法聯系到過半數節(jié)點時主動放棄領導權

嚴格的投票規(guī)則:每個term每個節(jié)點只能投票給一個候選人

當網絡問題恢復時,Follower 節(jié)點能通過 Leader 節(jié)點的日志同步重新追回期間錯過的數據。此外,一般采用 Raft 算法的集群在部署的時都是 “奇數個節(jié)點”,而不是偶數個節(jié)點,這其實是數學的體現,性價比更高:

wKgZO2kn9NiADdftAASIbkA24HY907.png

如上圖所示,雖然部署 4 個節(jié)點多出一個節(jié)點,但是和 3 節(jié)點集群相比,容錯能力是相同的:只能容忍 1 個節(jié)點故障。在容錯能力沒有被提高的情況下又花費了更多的服務器成本和運維管理成本。

以上我們基本了解了 Raft 算法的內容,如果想使用 Raft 算法,對系統模型有以下要求:

服務可能宕機、停止運行,但過段時間能夠恢復,但不能存在 拜占庭故障

消息可能丟失、延遲亂序或重復;可能有網絡分區(qū),并在一段時間之后恢復

巨人的肩膀

SOFAJRaft

The Raft Consensus Algorithm

TiKV 功能介紹 – Lease Read

《深入理解分布式系統》

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4810

    瀏覽量

    98613
  • 分布式
    +關注

    關注

    1

    文章

    1114

    瀏覽量

    76711
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    AI Ceph 分布式存儲教程資料大模型學習資料2026

    往往成為瓶頸。 AI 分布式存儲實戰(zhàn)的首要科技突破,在于摒棄了傳統的層級目錄結構,轉向扁平化的對象存儲與鍵值存儲架構。通過去除元數據節(jié)點的中心化瓶頸,采用哈希環(huán)或一致性哈希算法進行數據尋址,實現了數據
    發(fā)表于 05-01 17:35

    探索PRM - AL客戶評估板:開啟分布式電源新體驗

    探索PRM - AL客戶評估板:開啟分布式電源新體驗 在電子工程領域,分布式電源架構的不斷發(fā)展為電源設計帶來了新的思路和挑戰(zhàn)。今天,我們將深入探討Vicor的PRM - AL客戶評估板,了解其特點
    的頭像 發(fā)表于 04-27 09:15 ?357次閱讀

    深入理解積分型ADC

    深入理解積分型ADC 一、引言 作為電子工程師,我們在設計中常常需要將模擬信號轉換為數字信號,而積分型模數轉換器(ADCs)就是實現這一功能的重要手段之一。積分型ADC能夠提供高分辨率的模數轉換,并
    的頭像 發(fā)表于 04-02 09:15 ?733次閱讀

    2022全新版!Java分布式架構設計與開發(fā)實戰(zhàn)(完結)

    ,而UUID雖然能保證唯一性,但無序性會嚴重影響B(tài)+樹索引性能。雪花算法通過時間戳、機器ID和序列號組合生成64位長整型ID,既保證了全局唯一性,又具備趨勢遞增特性,成為分布式ID生成的主流方案
    發(fā)表于 03-30 15:20

    分布式 IO 選型注意事項

    在工業(yè) 4.0 浪潮推動下,分布式 IO 作為工業(yè)互聯的核心底層設備,已成為制造業(yè)實現設備互聯、數據采集、柔性生產的關鍵支撐。本文將助力企業(yè)避開選型誤區(qū),最大化發(fā)揮分布式 IO 的應用價值。? 產品
    的頭像 發(fā)表于 12-30 14:14 ?553次閱讀
    <b class='flag-5'>分布式</b> IO 選型注意事項

    如何解決分布式光伏計量難題?

    分布式光伏成增長主力 據《2025-2030年中國分布式光伏行業(yè)市場前景預測及未來發(fā)展趨勢研究報告》顯示,2024年中國分布式光伏新增裝機118.18GW,同比增長23%,占光伏新增裝機總量的43
    的頭像 發(fā)表于 11-07 14:55 ?442次閱讀
    如何解決<b class='flag-5'>分布式</b>光伏計量難題?

    【節(jié)能學院】Acrel-1000DP分布式光伏監(jiān)控系統在奉賢平高食品 4.4MW 分布式光伏中應用

    摘要:在“雙碳”和新型電力系統建設背景下,分布式光伏接入比例不斷提高,對配電網電壓、調度運行及調峰等環(huán)節(jié)造成強烈沖擊。本文設計包含平臺層、設備層二層架構體系的分布式光伏管控平臺,以及小容量工商業(yè)
    的頭像 發(fā)表于 08-23 08:04 ?3692次閱讀
    【節(jié)能學院】Acrel-1000DP<b class='flag-5'>分布式</b>光伏監(jiān)控系統在奉賢平高食品 4.4MW <b class='flag-5'>分布式</b>光伏中應用

    分布式光伏發(fā)電監(jiān)測系統技術方案

    分布式光伏發(fā)電監(jiān)測系統技術方案 柏峰【BF-GFQX】一、系統目標 :分布式光伏發(fā)電監(jiān)測系統旨在通過智能化的監(jiān)測手段,實現對分布式光伏電站的全方位、高精度、實時化管理。該系統能
    的頭像 發(fā)表于 08-22 10:51 ?3511次閱讀
    <b class='flag-5'>分布式</b>光伏發(fā)電監(jiān)測系統技術方案

    安科瑞分布式光伏監(jiān)控系統:賦能園區(qū)企業(yè)光伏用電智能化管理

    維成本,成為了園區(qū)企業(yè)面臨的重要挑戰(zhàn)。安科瑞分布式光伏監(jiān)控系統應運而生,為園區(qū)企業(yè)提供了一套全面、智能的光伏用電管理解決方案。(18721098782----安科瑞) 系統架構:分層分布式,保障高效運行 安科瑞
    的頭像 發(fā)表于 07-30 15:57 ?977次閱讀
    安科瑞<b class='flag-5'>分布式</b>光伏監(jiān)控系統:賦能園區(qū)企業(yè)光伏用電智能化管理

    分布式光伏總出問題?安科瑞分布式光伏監(jiān)控系統來“救場”

    一、分布式光伏的痛點大揭秘 在 “雙碳” 目標的大力推動下,分布式光伏作為綠色能源領域的重要力量,正以前所未有的速度蓬勃發(fā)展,越來越多的企業(yè)和家庭選擇安裝分布式光伏系統。然而,隨著分布式
    的頭像 發(fā)表于 07-16 16:50 ?979次閱讀
    <b class='flag-5'>分布式</b>光伏總出問題?安科瑞<b class='flag-5'>分布式</b>光伏監(jiān)控系統來“救場”

    分布式IO選型指南:2025年分布式無線遠程IO品牌及采集控制方案詳解

    近年來,隨著工業(yè)物聯網(IIoT)、智能制造和工業(yè)4.0的深入發(fā)展,分布式無線遠程IO模塊在工業(yè)控制領域的應用愈發(fā)廣泛。這種模塊通過無線方式實現遠程數據采集與控制,極大地提高了工業(yè)設施的靈活性和效率
    的頭像 發(fā)表于 06-23 09:48 ?1498次閱讀

    雙電機分布式驅動汽車高速穩(wěn)定性機電耦合控制

    摘要:為了利用所設計的雙電機防滑差速驅動系統來提高分布式驅動汽車的動力學性能,在前期同軸耦合驅動控制理論研究的基礎上,開展該車的高速穩(wěn)定性機電耦合控制研究。建立并驗證包含所設計驅動系統在內的分布式
    發(fā)表于 06-18 16:37

    曙光存儲領跑中國分布式存儲市場

    近日,賽迪顧問發(fā)布《中國分布式存儲市場研究報告(2025)》,指出2024 年中國分布式存儲市場首次超過集中式存儲,規(guī)模達 198.2 億元,增速 43.7%。
    的頭像 發(fā)表于 05-19 16:50 ?1489次閱讀

    多通道電源管理芯片在分布式能源系統中的優(yōu)化策略

    摘要: 隨著分布式能源系統的廣泛應用,對電源管理芯片的性能要求日益提升。本文深入探討了多通道電源管理芯片在分布式能源系統中的優(yōu)化策略,以國科安芯的ASP4644芯片為例,從電氣特性、工作模式、熱管
    的頭像 發(fā)表于 05-16 15:22 ?1120次閱讀

    分布式光伏電力問題層出不窮?安科瑞分布式光伏運維系統來“救場”

    一、分布式光伏電力運維,痛點大揭秘? ? 分布式光伏作為實現綠色能源轉型的關鍵一環(huán),近年來在我國得到了迅猛發(fā)展。國家能源局數據顯示,截至 2023 年底,中國分布式光伏電站累計并網容量約為 2.5
    的頭像 發(fā)表于 05-07 17:14 ?1120次閱讀
    <b class='flag-5'>分布式</b>光伏電力問題層出不窮?安科瑞<b class='flag-5'>分布式</b>光伏運維系統來“救場”
    铁岭市| 黔东| 勃利县| 庄河市| 公主岭市| 金湖县| 大名县| 乌鲁木齐市| 唐山市| 多伦县| 辽源市| 隆安县| 绵阳市| 双柏县| 温泉县| 霍林郭勒市| 霍城县| 鹰潭市| 临猗县| 高州市| 安图县| 镇原县| 景宁| 松江区| 新丰县| 孝昌县| 揭东县| 永川市| 新兴县| 博湖县| 临邑县| 芒康县| 新民市| 大埔县| 舞阳县| 安化县| 黔东| 贵港市| 饶阳县| 东海县| 林口县|