成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

圖解分布式一致性算法

開發 開發工具 前端 分布式 算法
今天的文章,咱們會通過圖的方式,來深入學習和理解分布式一致性的實現原理。

今天的文章,咱們會通過圖的方式,來深入學習和理解分布式一致性的實現原理。

開始的時候,咱們先來靈魂一問:什么是分布式一致性?

  • 你的應用是單節點嗎?
  • 你的系統用戶多嗎、支持擴容嗎?
  • 你的系統擴容后數據能保持一致嗎?
  • 你的系統是否使用Raft、Paxos?
  • ……

是否理解都沒關系,后面開始咱們的例子,通過圖的方式,來描述一致性的工作原理。

[[278855]]

一、前奏

假設咱們有個系統。是個單節點的系統,只部署在一個實例上。可以把它理解成一個數據庫服務(Database Server),實例上只有一個數據X,咱們后續的故事都是要圍繞操作變更X的值開展的。

[[278856]]

咱們還有個客戶端(Client),它要向節點 (Server) 寫數據,這個時候應用代碼寫起來也簡單,這個數據的一致性很容易保證。

寫請求執行后,客戶端和服務端的X數據都變成了8。

在用戶量少的時候,還天天操心啥時候來個百萬千萬用戶,等用戶稍微一多起來才發現,原來的一個實例扛不住了。這個時候為了支持更多用戶訪問,又擴容出來了更多的實例。

那么這下問題來了,當我們有多個實例節點間的時候,客戶端向其中一個節點寫了數據,如何再同步給其他節點呢?怎樣保證節點間數據的一致性呢?這就是分布式一致性問題。

二、 Raft 協議概覽

Raft 就是一個解決上述分布式一致性問題的協議。類似的協議還有Paxos、Zab等等。相比 Paxos,Raft 更易理解和實現。

咱們本次會俯瞰 Raft , 來了解其工作原理。

在 Raft 里, 節點可能存在三種狀態:

  • Follower
  • Candidate
  • Leader

在后面的圖里內容中,上述三種狀態分別和下面三個圖一一對應。

任何時候,都只會處于上述三種狀態中的一種。初始時候,所以節點都處于 Follower狀態。

如果follower 節點不再能接收到 leader 節點的消息, 他們的狀態就會變成 Candidate。

分布式一致性算法

Candidate 節點會向其他節點發起投票請求,

分布式一致性算法

其他節點也會投票進行響應。

分布式一致性算法

如果獲得了多數節點的投票,那 Candidate節點會成為Leader。

分布式一致性算法

上面的這個過程就是分布式一致性協議中的「選舉」(Leader Election)。

后續所有對于系統的變更,都是通過Leader進行的。經由 Leader 再到達其他節點。

每次 Client 的變更請求到達 leader 時,都會視為一個 Entry ,先添加到節點的日志 (Log)里。這個新增的 log entry,目前還并沒有提交,所以不會真的更新節點里 X 的值。

分布式一致性算法

leader 首先會復制 log entry 給所有 follower節點。

分布式一致性算法

然后, leader 會等待,直到多數節點都寫入了entry。

分布式一致性算法

在收到多數節點的寫入響應之后, leader 節點會將 entry 提交,此時 leader節點的值變成了 5.

然后 leader 會通知 follower 節點 自己的 entry 已經提交了。

分布式一致性算法

此時各個 follower 節點也會將之前收到的entry 進行提交。

分布式一致性算法

整個系統目前所有的集群節點都達到了一致的狀態。這個過程一般稱為日志復制(Log Replication)。

三、 Leader Election

Raft 里有項控制選舉的超時時間設置。選舉超時時間是一個follower變成 candidate 的等待時間。值是150ms到300ms間的一個隨機值.

分布式一致性算法

在選舉超時后, follower 會變成 candidate 開始一個新的選舉周期(term),同時會給自己投一票。

分布式一致性算法

并且給其他節點發送請求投票的消息。

分布式一致性算法

如果收到消息的節點在這一個周期還沒有投過票,那他需要給 candidate 投一票,并且該節點重置他的選舉超時時間。

分布式一致性算法

如果 candidate 收到大多數節點的投票,就會成為leader。

分布式一致性算法

leader 此時會在心跳檢測的周期內,給給所有的follower發送Append Entries messages 。檢測的頻率是通過心跳超時時間設置的。

分布式一致性算法

然后 每個 follower 也會給 Append Entries message 發送響應。

這個選舉周期會一直持續直到某個 follower 停止心跳消息接收變成 candidate。

分布式一致性算法

我們停掉 leader 再來看一下重新選舉的情況。

此時 節點 B 已經停止,所以 節點A 和節點C 都收不到心跳消息。咱們前面說收不到心跳消息的話,節點的狀態會從 Follower 變成 Candidate,所以A 和C 在各自的選舉超時時間設置內會改變狀態,

此時,節點 A 和 節點 C 都在等待,由于節點C先超時,所以會先開始一輪選舉。和上面的選舉過程一樣,會先新增Term,給自己投一票,并發送投票請求給其他節點。

在收到節點A的投票后,節點C現在升級為 term 2的 leader。

分布式一致性算法

咱們前面總在說的「大多數節點投票」(a majority of votes)。這個能保證能在一個投票周期內,只會產生一個 leader。

假設兩個節點同時從 Follower 狀態變成了 Candidate,這個時候兩者都會升級 Term,并請求其他節點不給自己投票。

分布式一致性算法

分布式一致性算法

這個時候兩者的 Term 其實是相同的,在同一個 Term 內 其他節點只會投出一票,所以每個 Candidate 都只會收到一個節點的投票。

分布式一致性算法

分布式一致性算法

因為沒有超過「大多數」,所以都會不能成為 leader。這些節點就會等待新一輪的選舉,此時節點D先開始發起投票,并收到了大多數的投票,所以在Term 5 最終成為 leader。

分布式一致性算法

四、 Log Replication

在選舉出一個leader之后,就需要復制所有的變更信息到系統里的所有節點。這些是通過和心跳檢測相同的的Append Entries message 來完成的。

分布式一致性算法

我們來看下這個過程。一開始, client會向leader發送一個變更。

分布式一致性算法

這個變更會加到 leader的log中,并會在下一次心跳檢測的時候發給 follower。

分布式一致性算法

follower在收到消息之會,都會給 leader 發送響應的 ack消息。

分布式一致性算法

收到大多數的 follower 響應之后, leader 會提交這個entry,并且發送響應給 client。

分布式一致性算法

分布式一致性算法

并在下次心跳的時候,通知 follower 們執行提交操作。

follower 在寫入完成后再給 leader 發送響應。

此時 Client 又給給 leader 發送消息,要給X 來執行個 加2 的操作。leader 將消息添加到 log 之后,給各個follower 發送心跳。

follower 們收到之后繼續返回響應。

leader 收到 ack 之后,確認本次執行進行 commit ,然后給 client 發回響應。并在下次心跳的時候,把寫入發給各個 follower。

此時,咱們的系統里 X變成了7,各個節點的數據保持一致。

五、「大多數」是多少?

前面許多場景咱們都提到「大多數」。那大多數到底是多少呢?

比如我們在選舉的時候,在日志復制的時候,都需要大多數 follower 發送回響應消息。

這里的大多數和咱們日常生活里的基本一致,即超過半數。比如一共有5個節點,此時有一個 candidate 起成為 leader,在投票過程中,至少要收到3個投票才行。

官網有個可以自定義時間進行交互的動圖,感興趣的朋友可以自行查看。

【本文為51CTO專欄作者“侯樹成”的原創稿件,轉載請通過作者微信公眾號『Tomcat那些事兒』獲取授權】

戳這里,看該作者更多好文

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2022-06-07 12:08:10

Paxos算法

2024-11-28 10:56:55

2021-02-05 08:00:48

哈希算法?機器

2020-10-28 11:15:24

EPaxos分布式性算法

2019-09-05 08:43:34

微服務分布式一致性數據共享

2021-11-22 16:30:30

分布式一致性分布式系統

2024-05-27 10:42:55

2021-07-28 08:39:25

分布式架構系統

2021-06-03 15:27:31

RaftSOFAJRaft

2017-09-21 10:59:36

分布式系統線性一致性測試

2020-07-20 08:30:37

算法哈希分布式系統

2017-09-22 12:08:01

數據庫分布式系統互聯網

2021-06-06 12:45:41

分布式CAPBASE

2023-11-06 09:06:54

分布式一致性數據

2018-03-13 08:20:48

區塊鏈數據安全

2018-04-10 16:24:03

算法分布式一致性

2018-03-19 09:50:50

分布式存儲系統

2025-03-14 08:00:00

分布式系統服務器一致性

2021-08-13 11:50:23

AnalyticDB 分布式數據庫

2021-06-16 08:33:02

分布式事務ACID
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产高清视频一区 | 在线天堂免费中文字幕视频 | 国产成人精品免费视频大全最热 | 九九九视频在线观看 | 国产成人免费视频网站高清观看视频 | 亚洲一区二区三区免费 | 色欧美片视频在线观看 | 久久一视频 | 天堂av中文 | www.午夜| 亚洲免费一 | 国产视频一区二区三区四区五区 | 99re视频| 亚洲成人激情在线观看 | 久草免费在线视频 | 婷婷狠狠| 91久久久久 | 欧美精品99 | 亚洲a视频| 国产精品久久久久久婷婷天堂 | 久久com| 国产免费一区二区 | 精品国产乱码久久久久久久久 | 亚洲一区高清 | 国产精品久久久久影院色老大 | 日韩精品免费在线观看 | 精品国产一区二区国模嫣然 | 中文字幕一区二区三区四区五区 | 蜜桃视频在线观看免费视频网站www | 日韩a v在线免费观看 | 欧美精品久久久久 | 国产永久免费 | 狠狠涩| 亚洲综合久久网 | 99久久精品国产毛片 | 一本岛道一二三不卡区 | 美女爽到呻吟久久久久 | 成人久久视频 | 91精品国产综合久久久动漫日韩 | 久草热播 | 美女天天操 |