精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

共識Raft:如何保證多機房數據的一致性?

開發 架構
很多人都說 Raft 是一個分布式一致性算法,但實際上 Raft 算法是一個共識算法(多個節點達成共識),它通過任期機制、隨機時間和投票選舉機制,實現了服務動態擴容及服務的高可用。

當機房 A 修改了一條數據的同時,機房 B 也對該數據進行了更新,Otter 會通過合并邏輯來處理沖突的數據行或字段,以達到合并效果。為了避免這種沖突,我們在上節課對客戶端提出了要求:用戶客戶端在一定時間內只能連接一個機房。然而,如果業務對“事務和強一致性”有極高的需求,例如庫存不允許超賣的場景,通常只有兩種選擇:一種是將服務部署為本地服務,但這并不適用于所有業務;另一種是使用多機房架構,但必須采用分布式強一致性算法以確保多個副本之間的一致性。

在業界,最知名的分布式強一致性算法是 Paxos。盡管它的原理非常抽象,經過多次修改后往往會與最初設計產生很大偏離,使得很多人難以判斷這些修改是否合理。通常需要一到兩年的實踐經驗才能完全掌握該算法。隨著對分布式多副本同步需求的增加,Paxos 的抽象性已無法完全滿足市場需求,因此 Raft 算法應運而生。相比于 Paxos,Raft 更易于理解,同時能夠保證操作的順序一致性,因此被廣泛應用于分布式數據服務中,像 etcd 和 Kafka 等知名基礎組件都使用了 Raft 算法。

如何選舉 Leader?

圖片圖片

如圖所示,我們啟動了五個 Raft 分布式數據服務節點:S1、S2、S3、S4 和 S5。每個節點可以處于以下三種狀態之一:

  • Leader:負責處理數據修改,并主動將變更同步到其他 Follower 節點。
  • Follower:接收并應用 Leader 推送的變更數據。
  • Candidate:當集群中沒有 Leader 時,Follower 節點會進入選舉模式。

如果某個 Follower 節點在規定時間內未收到 Leader 的心跳信號,則意味著當前 Leader 可能已失效,集群無法繼續更新數據。在這種情況下,Follower 節點會進入選舉模式,并在多個 Follower 節點之間選出一個新的 Leader,確保服務集群中始終有一個 Leader,確保數據變更的唯一決策進程。

那么 Leader 是如何選舉出來的呢?在進入選舉模式后,這五個節點會各自隨機等待一段時間。等待時間一到,當前節點會先為自己投一票,并將其任期(term)加 1(如圖中的 term:4 表示第四任 Leader),然后通過發送 RequestVote RPC(即請求投票的遠程過程調用)向其他節點拉票。

圖片圖片

S1失去聯系,S5最先超時發起選舉

當服務節點收到投票請求時,如果該請求節點的任期和日志同步進度都領先或相同,則會向其投票,并將自己的當前任期更新為新的任期。在此期間,收到投票請求的節點將不會再發起投票,而是等待其他節點的投票邀請。需要注意的是,每個節點在同一任期內只能投出一票。

如果所有節點在選舉過程中都未獲得多數票(即超過半數的票數),則在選舉超時后,節點會將任期加 1 并重新發起選舉。最終,獲得多數票且最早結束選舉倒計時的節點將當選為新的 Leader。該 Leader 隨即廣播通知其他節點,并同步新的任期和日志進度。

在成為 Leader 后,新的 Leader 會定期發送心跳信號,確保各個 Follower 節點保持連接狀態,不因超時而進入選舉模式。在選舉過程中,如果有節點收到了前一任 Leader 的心跳信號,便會停止當前的選舉并拒絕新的選舉請求。選舉結束后,所有節點進入數據同步狀態,確保日志一致性。

如何保證多副本寫一致?

當服務節點收到投票請求時,如果該請求節點的任期和日志同步進度都領先或相同,則會向其投票,并將自己的當前任期更新為新的任期。在此期間,收到投票請求的節點將不會再發起投票,而是等待其他節點的投票邀請。需要注意的是,每個節點在同一任期內只能投出一票。

如果所有節點在選舉過程中都未獲得多數票(即超過半數的票數),則在選舉超時后,節點會將任期加 1 并重新發起選舉。最終,獲得多數票且最早結束選舉倒計時的節點將當選為新的 Leader。該 Leader 隨即廣播通知其他節點,并同步新的任期和日志進度。

在成為 Leader 后,新的 Leader 會定期發送心跳信號,確保各個 Follower 節點保持連接狀態,不因超時而進入選舉模式。在選舉過程中,如果有節點收到了前一任 Leader 的心跳信號,便會停止當前的選舉并拒絕新的選舉請求。選舉結束后,所有節點進入數據同步狀態,確保日志一致性。

圖片圖片

具體來說,當 Leader 成功修改數據后,它會生成一條對應的日志,并將該日志發送給所有 Follower 節點進行同步。只要超過半數的 Follower 返回同步成功的反饋,Leader 就會將該預提交的日志正式提交(commit),并向客戶端確認數據修改成功。

在下一個心跳中,Leader 會通過消息中的 leader commit 字段,將當前最新提交的日志索引(Log index)告知各 Follower 節點。Follower 節點依據該提交的索引更新數據,僅對外提供被 Leader 最終提交的數據,未被提交的數據不會被持久化或展示。

如果在數據同步期間,客戶端繼續向 Leader 發送其他修改請求,這些請求會進入隊列等待處理,因為此時 Leader 正在等待其他節點的同步響應,導致暫時的阻塞。

圖片圖片

不過,這種阻塞等待的設計使得 Raft 算法對網絡性能的依賴性較強,因為每次數據修改都需要向多個節點發出并發請求,等待大多數節點成功同步。最糟糕的情況是,返回的往返時延(RTT)會受到最慢節點的網絡響應時間影響,例如“兩地三中心”的一次同步時間可能達到約 100ms。此外,由于主節點只有一個,這限制了 Raft 服務的整體性能。

為了解決這個問題,我們可以通過減少數據量和對數據進行切片來提升集群的修改性能。需要注意的是,當大多數 Follower 與 Leader 的日志進度差異過大時,數據變更請求將會處于等待狀態,直到超過一半的 Follower 與 Leader 的進度一致后,才會返回修改成功的結果。當然,這種情況并不常見。

服務之間如何同步日志進度?

講到這我們不難看出,在 Raft 的數據同步機制中,日志發揮著重要的作用。在同步數據時,Raft 采用的日志是一個有順序的指令日志 WAL(Write Ahead Log),類似 MySQL 的 binlog。該日志中記錄著每次修改數據的指令和修改任期,并通過 Log Index 標注了當前是第幾條日志,以此作為同步進度的依據。

圖片

在 Raft 中,Leader 節點的日志是永久保留的,所有 Follower 節點會與 Leader 保持完全一致。如果出現差異,Follower 的日志將被強制覆蓋以與 Leader 同步。此外,每條日志記錄都經過“寫入”和“提交”(commit)兩個階段。在選舉過程中,每個節點會基于自身未提交的日志索引(Log Index)進度優先選擇進度最靠前的節點,從而確保當選的 Leader 擁有最新、最完整的數據。

在 Leader 任期內,它會按順序向各 Follower 節點推送日志以實現同步。若 Leader 的同步進度領先于某個 Follower,該 Follower 將拒絕同步請求。收到拒絕反饋后,Leader 會從日志末尾向前回溯,找出 Follower 未同步或存在差異的日志部分,然后逐條推送覆蓋,直到 Follower 與 Leader 保持一致。

圖片圖片

Leader 和 Follower 的日志同步進度是通過日志索引(index)來確認的。Leader 對日志的內容和順序擁有絕對的決策權,當發現自己的日志與某個 Follower 的日志存在差異時,為了確保多個副本的數據完全一致,Leader 會強制覆蓋該 Follower 的日志。

那么,Leader 是如何識別 Follower 的日志與自己的日志之間的差異呢?在向 Follower 同步日志時,Leader 會同時提供自己上一條日志的任期和索引號,與 Follower 當前的同步進度進行比較。對比主要涉及兩個方面:

  • 當前日志對比:Leader 會對比自己和 Follower 的當前日志中的索引、多條操作日志和任期。
  • 上一條日志對比:Leader 會對比自己和 Follower 的上一條日志的索引和任期。

如果以上任意一個方面存在差異,Leader 就會認為 Follower 的日志與自己的日志不一致。在這種情況下,Leader 會逐條倒序對比日志,直到找到日志內容和任期完全一致的索引,然后從這個索引開始按順序向下覆蓋。

在日志同步期間,Leader 只會提交其當前任期內的數據,之前任期的數據則依賴日志同步來逐步恢復??梢钥吹?,這種逐條推送的同步方式效率較低,特別是對新啟動的服務并不友好。因此,Leader 會定期生成快照,將之前的修改日志記錄合并,以降低日志的大小。同時,進度差距過大的 Follower 會從 Leader 的最新快照中恢復數據,并按快照最后的索引追趕進度。

如何保證讀取數據的強一致性?

通過前面的講解,我們了解了 Leader 和 Follower 之間的同步機制,那么從 Follower 的角度來看,它又是如何確保自己對外提供的數據始終是最新的呢?這里有一個小技巧:當 Follower 收到查詢請求時,會同時向 Leader 請求當前最新提交的日志索引(commit log index)。如果這個日志索引大于 Follower 當前的同步進度,就意味著 Follower 的本地數據不是最新的。此時,Follower 會從 Leader 獲取最新的數據并返回給客戶端。

由此可見,保持數據的強一致性需要付出較大的代價。

圖片圖片

你可能會好奇:如何在業務使用時保證讀取數據的強一致性呢?其實我們之前說的 Raft 同步等待 Leader commit log index 的機制,已經確保了這一點。我們只需要向 Leader 正常提交數據修改的操作,Follower 讀取時拿到的就一定是最新的數據。

總結

很多人都說 Raft 是一個分布式一致性算法,但實際上 Raft 算法是一個共識算法(多個節點達成共識),它通過任期機制、隨機時間和投票選舉機制,實現了服務動態擴容及服務的高可用。通過 Raft 采用強制順序的日志同步實現多副本的數據強一致同步,如果我們用 Raft 算法實現用戶的數據存儲層,那么數據的存儲和增刪改查,都會具有跨機房的數據強一致性。這樣一來,業務層就無需關心一致性問題,對數據直接操作,即可輕松實現多機房的強一致同步。

責任編輯:武曉燕 來源: 二進制跳動
相關推薦

2019-08-30 12:46:10

并發扣款查詢SQL

2025-03-27 08:20:54

2022-10-19 12:22:53

并發扣款一致性

2024-12-26 15:01:29

2023-09-07 08:11:24

Redis管道機制

2021-03-04 06:49:53

RocketMQ事務

2020-08-05 08:46:10

NFS網絡文件系統

2022-08-29 08:38:00

事務一致性

2021-08-13 07:56:13

Raft算法日志

2020-03-16 11:55:28

PaxosRaft協議

2024-08-20 16:13:52

2023-05-26 07:34:50

RedisMySQL緩存

2021-12-14 07:15:57

MySQLRedis數據

2024-10-28 12:41:25

2022-03-29 10:39:10

緩存數據庫數據

2024-01-10 08:01:55

高并發場景悲觀鎖

2022-04-06 15:19:32

數據庫MySQL一致性

2024-01-22 08:52:00

AQS雙異步數據一致性

2024-07-04 12:36:50

2020-04-01 15:50:17

TiDBMySQL數據庫
點贊
收藏

51CTO技術棧公眾號

久久久久久国产精品三级玉女聊斋| 欧洲精品中文字幕| 国内精品久久国产| 国产免费av一区| 国产韩日影视精品| 日韩欧美色电影| 日韩久久一级片| 欧美私人网站| fc2成人免费人成在线观看播放| 欧美专区在线观看| 三级影片在线看| 伊人久久综合影院| 日韩精品一区二区三区在线播放 | 欧美日韩一区自拍| 亚洲欧美另类国产| 久久久久久久久久久影视| 中老年在线免费视频| 综合网在线视频| 免费看成人片| 亚洲欧美另类日韩| 美女视频黄久久| 欧美怡春院一区二区三区| 国产成人无码aa精品一区| 久9久9色综合| 亚洲国产精品系列| 亚洲精品久久久久久| 秋霞国产精品| 欧美性生交大片免费| 日产精品久久久久久久蜜臀| av影片免费在线观看| 狠狠色丁香久久婷婷综合_中| 欧美成人午夜影院| 五月天免费网站| 美女毛片一区二区三区四区最新中文字幕亚洲 | 国产一级片视频| 日韩一区二区在线| 亚洲片在线观看| 中文字幕人妻一区二区三区| 久久久国产精品入口麻豆| 欧美日韩一区成人| 妞干网在线免费视频| 国产伦久视频在线观看| 一级做a爱片久久| 日本三级中文字幕在线观看| 在线观看美女网站大全免费| 久久奇米777| 久久精品magnetxturnbtih| 亚洲国产成人一区二区| 国产一区二区三区免费| 国产中文日韩欧美| 亚洲性猛交富婆| 人禽交欧美网站| 国产精品美女在线观看| 国产又粗又猛又黄视频| 日日夜夜精品免费视频| 日本欧美黄网站| 中文字幕视频网| 国产农村妇女精品一二区| 久国内精品在线| 男女性高潮免费网站| 亚洲91中文字幕无线码三区| 久久精品91久久久久久再现| 91n在线视频| 欧美一区二区| 欧美日韩国产成人高清视频| 国产性一乱一性一伧一色| 激情视频一区| 欧美在线视频一区二区| 伊人久久久久久久久久久久 | 婷婷五月综合久久中文字幕| www.色精品| 免费成人看片网址| 加勒比一区二区三区在线| 久久久久久久久97黄色工厂| 四虎永久国产精品| 国产在线1区| 亚洲一二三级电影| 丰满爆乳一区二区三区| 浪潮色综合久久天堂| 欧美人与禽zozo性伦| 欧美性猛交xx| 亚洲第一论坛sis| 这里只有精品丝袜| 青春草免费视频| 国产毛片久久| 国产综合久久久久| 日韩在线观看视频网站| 国产日韩欧美一区二区三区综合 | 午夜看片在线免费| 亚洲黄色小说网站| 国产l精品国产亚洲区久久| 亚洲wwww| 日韩午夜在线观看视频| 野花社区视频在线观看| 久久综合电影| 久久久久久久国产精品| 亚洲精品国产欧美在线观看| 国产.欧美.日韩| 日产精品高清视频免费| 日本在线视频网址| 在线看日本不卡| 久久发布国产伦子伦精品| 美日韩中文字幕| 欧美日韩999| 欧美成人一区二区视频| 成人综合在线观看| 亚洲v日韩v欧美v综合| 久草在线资源站资源站| 欧美视频在线观看一区| 91九色蝌蚪porny| 99精品网站| 日本精品久久久久久久| 国产黄色小视频在线观看| 国产日韩影视精品| 国产综合av在线| 激情综合婷婷| 这里只有视频精品| 久久久久久久久久久久久av| 国产精品一品二品| 神马影院我不卡午夜| 2018av在线| 欧美一区二区三区免费视频 | 国产精品黄视频| 人人妻人人澡人人爽久久av| 国产精品久久综合| 男女av免费观看| 风间由美性色一区二区三区四区 | 三上悠亚亚洲一区| 精品对白一区国产伦| 国产精品国产三级国产传播| 日韩国产精品91| 久久精品国产一区二区三区日韩| 怡红院在线观看| 欧美精品丝袜久久久中文字幕| 可以直接看的无码av| 亚洲视屏一区| 97免费高清电视剧观看| 国产不卡在线| 51精品秘密在线观看| 日韩福利在线视频| 久久久亚洲人| 欧美日韩在线观看一区二区三区| 999精品网| 精品国偷自产国产一区| 激情五月少妇a| 国产乱码精品一品二品| 大地资源第二页在线观看高清版| 78精品国产综合久久香蕉| 国产亚洲精品一区二555| 亚洲国产成人无码av在线| 91偷拍与自偷拍精品| 男女激情无遮挡| 日本国产精品| 浅井舞香一区二区| 精品美女视频在线观看免费软件 | 人九九综合九九宗合| 日本不卡免费播放| 一本色道综合亚洲| 婷婷色一区二区三区| 老司机午夜精品| 中文字幕免费高| 哺乳一区二区三区中文视频| 久久男人资源视频| 天天干天天草天天射| 欧美性猛交xxxx富婆弯腰| 永久免费看mv网站入口78| 日韩精品一二区| 日本三级福利片| 成人h动漫免费观看网站| 欧美在线视频观看| yes4444视频在线观看| 5月丁香婷婷综合| 日韩三级免费看| 久久午夜色播影院免费高清| 在线观看的毛片| 亚洲深深色噜噜狠狠爱网站| 国产伦精品一区二区三区四区视频 | 五月天婷婷在线播放| 一本大道久久a久久综合| 国产精品无码无卡无需播放器| 精品系列免费在线观看| 欧美国产视频一区| 亚洲区小说区图片区qvod按摩| 国产精品99久久久久久久久久久久 | 久久久久久久久久电影| 国产aⅴ爽av久久久久| 午夜久久99| 欧美大陆一区二区| 欧美成人黄色| 欧美极品欧美精品欧美视频| 国产中文字幕在线| 日韩一区二区三| 69亚洲精品久久久蜜桃小说 | 大片在线观看网站免费收看| 欧美一性一交| 国产日韩中文在线| 1区2区在线| xxx欧美精品| 天天干视频在线观看| 欧美久久婷婷综合色| 中文字幕一区二区三区精品 | 久草视频在线观| 亚洲欧美在线高清| 免费黄色在线视频| 国产精品一区二区久激情瑜伽| 国模杨依粉嫩蝴蝶150p| 欧美日本在线| 亚洲欧洲一区二区| 欧美三级午夜理伦三级在线观看| 成人啪啪免费看| 亚洲天堂一区二区| 91精品啪在线观看国产手机| 91高清免费看| 成人免费高清视频| 免费看污污网站| 亚洲美女毛片| 毛片在线视频观看| 日韩欧美大片| 免费中文日韩| 9l视频自拍九色9l视频成人| 国产欧美日韩视频| 国产不卡一区二区视频| 国产传媒免费在线观看| 欧洲国产精品| 国内爆初菊对白视频| 91成人在线精品视频| 日韩av电影手机在线观看| 色呦呦在线资源| 中文字幕欧美日韩| 日本人妖在线| 亚洲成人av在线播放| va视频在线观看| 欧美日韩和欧美的一区二区| 少妇久久久久久久| 欧美天堂在线观看| 六月丁香在线视频| 亚洲一区二区成人在线观看| 日韩中文字幕亚洲精品欧美| 性欧美lx╳lx╳| 国产精品永久入口久久久| 欧一区二区三区| 亚洲va欧美va国产综合久久| 亚洲ww精品| 国产精品视频久久| 99精品在免费线偷拍| 国产精品爱久久久久久久| 免费电影日韩网站| 日韩美女毛茸茸| 桃子视频成人app| 日本精品视频在线| 偷拍精品精品一区二区三区| 国产成人精品电影久久久| 人人鲁人人莫人人爱精品| 国产精品激情自拍| 国产精品99久久久久久董美香| 国产激情久久久久| 国产原创一区| 成人福利在线视频| 欧美经典影片视频网站| 99久久精品无码一区二区毛片 | 日韩av在线看| 精品国产18久久久久久| 日韩欧美在线123| 国产成人无码www免费视频播放| 精品久久免费看| 天天摸天天碰天天爽天天弄| 日韩精品中文字幕在线| 激情在线视频| www.xxxx精品| 午夜av在线免费观看| 久久久久久九九九| 日韩免费电影| 91免费国产网站| 国产日韩三级| 视频一区免费观看| 亚洲国产一区二区三区在线播放 | 久久久久久九九九九| 国产精品午夜一区二区三区| 亚洲欧洲久久| 在线国产日韩| 美女黄色片视频| 国内精品免费在线观看| 中文字幕三级电影| 国产香蕉久久精品综合网| 亚洲AV成人无码精电影在线| 亚洲成人777| 国产精品自拍第一页| 欧美一区二区三区公司| 日韩一区免费视频| xxxx欧美18另类的高清| 爱草tv视频在线观看992| 国产成人在线一区| 日韩中文字幕在线一区| 欧美日韩另类综合| 影音先锋日韩精品| 精品视频一区二区在线| 国产麻豆精品久久一二三| 丰满少妇在线观看资源站| 亚洲视频一区二区免费在线观看| 日本网站免费观看| 欧美日韩大陆一区二区| 无码精品人妻一区二区三区影院| 色偷偷9999www| 深夜成人在线| 99久热re在线精品996热视频| 国产一区二区三区四区二区| 欧美大黑帍在线播放| 免费成人在线网站| 久久人妻一区二区| **欧美大码日韩| 无码人妻久久一区二区三区不卡| 欧美不卡123| 欧美私人网站| 国产精品精品一区二区三区午夜版| 136国产福利精品导航网址应用| 亚洲一区二区三区午夜| 成人资源在线| 亚洲成人第一| 亚洲欧美清纯在线制服| 丰满人妻一区二区三区53视频| 国产色一区二区| 精品国产免费观看| 欧美大片在线观看一区二区| 日本中文字幕在线视频| 热草久综合在线| 国产成人精品福利| av动漫在线免费观看| 久久福利资源站| 免费观看a级片| 疯狂蹂躏欧美一区二区精品| 日本成人动漫在线观看| 欧美成人免费播放| 国产免费av国片精品草莓男男| 亚洲精品高清视频| 玖玖在线精品| 欧美老熟妇乱大交xxxxx| 亚洲va欧美va天堂v国产综合| 午夜免费福利视频| 精品中文字幕在线2019| 91精品麻豆| 无码人妻精品一区二区三区99v| 久久精品国产成人一区二区三区 | 午夜影院在线视频| 久久久久久久一区二区| 999久久精品| 精品丰满人妻无套内射| 成人av在线看| 日韩福利片在线观看| 亚洲国产日韩欧美在线99| a级大胆欧美人体大胆666| 国产麻豆日韩| 亚洲视频1区| 欧美熟妇一区二区| 色久综合一二码| h网站视频在线观看| 91精品国产综合久久香蕉| 999国产精品999久久久久久| 中文字幕一区久久| 亚洲精品免费在线| 蜜臀久久99精品久久久| 538国产精品一区二区免费视频| 色吊丝一区二区| www.xxx亚洲| 中文字幕中文字幕一区| 国产乱淫a∨片免费视频| 欧美成人在线免费视频| 国产精品对白久久久久粗| 国产免费观看高清视频| 国产日韩视频一区二区三区| 亚洲一区中文字幕永久在线| 久久亚洲综合国产精品99麻豆精品福利| 97久久精品一区二区三区的观看方式| 激情图片qvod| 99久久久久久| 最近中文字幕免费观看| 久久成人在线视频| 欧美绝顶高潮抽搐喷水合集| 欧美精品成人网| 亚洲欧美成人一区二区三区| 免费av网站观看| 国产精品毛片a∨一区二区三区|国 | 欧美一级一区二区| 97超碰资源站在线观看| 国产精品香蕉视屏| 日韩激情一二三区| 国产天堂av在线| 日韩激情av在线免费观看| 日本欧美韩国| 国产曰肥老太婆无遮挡| 国产丝袜欧美中文另类| www.久久精品.com| 欧美亚洲视频在线观看| 成人区精品一区二区婷婷| 亚洲精品无码久久久久久久| 黄色成人在线免费| 蜜芽在线免费观看| 久久久久久国产精品mv| 国产乱国产乱300精品| 中文字幕av第一页| 午夜精品久久久久久久久久久久 |