自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

七種分布式系統(tǒng)的解決方案,一次性講給你聽!

開發(fā) 架構(gòu)
雖然定位是有“分布式”、“容錯架構(gòu)”等看起來略顯復(fù)雜的字眼,但是咱們還是按照老規(guī)矩:大白話 + 手繪數(shù)張彩圖,逐步遞進,讓每個同學(xué)都能看懂這種復(fù)雜架構(gòu)的設(shè)計思想。

這篇文章,我們將用非常淺顯易懂的語言,跟大家聊聊大規(guī)模分布式系統(tǒng)的容錯架構(gòu)設(shè)計。

雖然定位是有“分布式”、“容錯架構(gòu)”等看起來略顯復(fù)雜的字眼,但是咱們還是按照老規(guī)矩:大白話 + 手繪數(shù)張彩圖,逐步遞進,讓每個同學(xué)都能看懂這種復(fù)雜架構(gòu)的設(shè)計思想。

1、TB級數(shù)據(jù)放在一臺機器上:難啊!

咱們就用分布式存儲系統(tǒng)舉例,來聊一下容錯架構(gòu)的設(shè)計。

首先,我們來瞧瞧,到底啥是分布式存儲系統(tǒng)呢?

其實特別的簡單,咱們就用數(shù)據(jù)庫里的一張表來舉例。

比如你手頭有個數(shù)據(jù)庫,數(shù)據(jù)庫里有一張?zhí)貏e大的表,里面有幾十億,甚至上百億的數(shù)據(jù)。

更進一步說,假設(shè)這一張表的數(shù)據(jù)量多達(dá)幾十個TB,甚至上百個TB,這時你覺得咋樣?

當(dāng)然是內(nèi)心感到恐慌和無助了,因為如果你用MySQL之類的數(shù)據(jù)庫,單臺數(shù)據(jù)庫服務(wù)器上的磁盤可能都不夠放這一張表的數(shù)據(jù)!

咱們就來看看下面的這張圖,來感受一下。

2、到底啥是分布式存儲?

?所以,假如你手頭有一個超大的數(shù)據(jù)集,幾百TB!那你還是別考慮傳統(tǒng)的數(shù)據(jù)庫技術(shù)來存放了。

因為用一臺數(shù)據(jù)庫服務(wù)器可能根本都放不下,所以我們考慮一下分布式存儲技術(shù)?對了!這才是解決這個問題的辦法。

咱們完全可以搞多臺機器嘛!比如搞20臺機器,每臺機器上就放1/20的數(shù)據(jù)。

舉個例子,比如總共20TB的數(shù)據(jù),在每臺機器上只要把1TB就可以了,1TB應(yīng)該還好吧?每臺機器都可以輕松加愉快的放下這么多數(shù)據(jù)了。

所以說,把一個超大的數(shù)據(jù)集拆分成多片,給放到多臺機器上去,這就是所謂的分布式存儲。

咱們再看看下面的圖。?

3、那么啥又是分布式存儲系統(tǒng)呢?

那分布式存儲系統(tǒng)是啥呢?

分布式存儲系統(tǒng),當(dāng)然就是負(fù)責(zé)把一個超大數(shù)據(jù)集拆分成多塊,然后放到多臺機器上來存儲,接著統(tǒng)一管理這些分散在多臺機器上存儲的數(shù)據(jù)的一套系統(tǒng)。

比如說經(jīng)典的hadoop就是這類系統(tǒng),然后fastdfs也是類似的。

如果你可以腦洞打開,從思想本質(zhì)共通的層面出發(fā),那你會發(fā)現(xiàn),其實類似elasticsearch、redis cluster等等系統(tǒng),他本質(zhì)都是如此。

這些都是基于分布式的系統(tǒng)架構(gòu),把超大數(shù)據(jù)拆分成多片給你存放在多臺機器上。

咱們這篇文章是從分布式系統(tǒng)架構(gòu)層面出發(fā),不拘泥于任何一種技術(shù),所以姑且可以設(shè)定:這套分布式存儲系統(tǒng),有兩種進程。

一個進程是Master節(jié)點,就在一臺機器上,負(fù)責(zé)統(tǒng)一管控分散在多臺機器上的數(shù)據(jù)。

另外一批進程叫做Slave節(jié)點,每臺機器上都有一個Slave節(jié)點,負(fù)責(zé)管理那臺機器上的數(shù)據(jù),跟Master節(jié)點進行通信。

咱們看看下面的圖,通過圖再來直觀的看看上面的描述。

4、天哪!某臺機器宕機了咋辦?

這個時候又有一個問題了,那么萬一上面那20臺機器上,其中1臺機器宕機了咋整呢?

這就尷尬了,兄弟,這會導(dǎo)致本來完整的一份20TB的數(shù)據(jù),最后有19TB還在了,有1TB的數(shù)據(jù)就搞丟了,因為那臺機器宕機了啊。

所以說你當(dāng)然不能允許這種情況的發(fā)生,這個時候就必須做一個數(shù)據(jù)副本的策略。

比如說,我們完全可以給每一臺機器上的那1TB的數(shù)據(jù)做2個副本的冗余,放在別的機器上,然后呢,萬一說某一臺機器宕機,沒事啊,因為其他機器上還有他的副本。

我們來看看這種多副本冗余的架構(gòu)設(shè)計圖。

?上面那個圖里的淺藍(lán)色的“1TB數(shù)據(jù)01”,代表的是20TB數(shù)據(jù)集中的第一個1TB數(shù)據(jù)分片。

圖中可以看到,他就有3個副本,分別在三臺機器中都有淺藍(lán)色的方塊,代表了他的三個副本。

這樣的話,一份數(shù)據(jù)就有了3個副本了。其他的數(shù)據(jù)也是類似。

這個時候我們假設(shè)有一臺機器宕機了,比如下面這臺機器宕機,必然會導(dǎo)致“1TB數(shù)據(jù)01”這個數(shù)據(jù)分片的其中一個數(shù)據(jù)副本丟失。如下圖所示:?

那這個時候要緊嗎?不要緊,因為“1TB數(shù)據(jù)01”這個數(shù)據(jù)分片,他還有另外2個副本在存活的兩臺機器上呢!

所以如果有人要讀取數(shù)據(jù),完全可以從另外兩臺機器上隨便挑一個副本來讀取就可以了,數(shù)據(jù)不會丟的,不要緊張,大兄弟。

5、Master節(jié)點如何感知到數(shù)據(jù)副本消失?

現(xiàn)在有一個問題,比如說有個兄弟要讀取“1TB數(shù)據(jù)01”這個數(shù)據(jù)分片,那么他就會找Master節(jié)點,說:

“你能不能告訴我“1TB數(shù)據(jù)01”這個數(shù)據(jù)分片人在哪里???在哪臺機器上???我需要讀他??!”

我們來看看下面的圖。

?那么這個時候,Master節(jié)點就需要從“1TB數(shù)據(jù)01”的3個副本里選擇一個出來,告訴人家說:

“兄弟,在哪臺哪臺機器上,有1個副本,你可以去那臺機器上讀“1TB數(shù)據(jù)01”的一個副本就ok了?!?/p>

但是現(xiàn)在的問題是,Master節(jié)點此時還不知道“1TB數(shù)據(jù)01”的副本3已經(jīng)丟失了,那萬一Master節(jié)點還是通知人家去讀取一個已經(jīng)丟失的副本3,肯定是不可以的。

所以,我們怎么才能讓Master節(jié)點知道副本3已經(jīng)丟失了呢?

其實也很簡單,每臺機器上負(fù)責(zé)管理數(shù)據(jù)的Slave節(jié)點,都每隔幾秒(比如說1秒)給Master節(jié)點發(fā)送一個心跳。

那么,一旦Master節(jié)點發(fā)現(xiàn)一段時間(比如說30秒內(nèi))沒收到某個Slave節(jié)點發(fā)送過來的心跳,此時就會認(rèn)為這個Slave節(jié)點所在機器宕機了,那臺機器上的數(shù)據(jù)副本都丟失了,然后Master節(jié)點就不會告訴別人去讀那個丟失的數(shù)據(jù)副本。

大家看看下面的圖,一旦Slave節(jié)點宕機,M?aster節(jié)點收不到心跳,就會認(rèn)為那臺機器上的副本3就已經(jīng)丟失了,此時絕對不會讓別人去讀那臺宕機機器上的副本3。

那么此時,Master節(jié)點就可以通知人家去讀“1TB數(shù)據(jù)01”的副本1或者副本2,哪個都行,因為那兩個副本其實還是在的。

舉個例子,比如可以通知客戶端去讀副本1,此時客戶端就可以找那臺機器上的Slave節(jié)點說要讀取那個副本1。

整個過程如下圖所示。

6、復(fù)制副本保持足夠副本數(shù)量

這個時候又有另外一個問題,那就是“1TB數(shù)據(jù)01”這個數(shù)據(jù)分片此時只有副本1和副本2這兩個副本了,這就不足夠3個副本啊。

因為我們預(yù)設(shè)的是每個數(shù)據(jù)分片都得有3個副本的。大家想想,此時如何給這個數(shù)據(jù)分片增加1個副本呢?

很簡單,Master節(jié)點一旦感知到某臺機器宕機,就能感知到某個數(shù)據(jù)分片的副本數(shù)量不足了。

此時,就會生成一個副本復(fù)制的任務(wù),挑選另外一臺機器來從有副本的機器去復(fù)制一個副本。

比如看下面的圖,可以挑選第四臺機器從第二臺機器去復(fù)制一個副本。

但是,現(xiàn)在這個復(fù)制任務(wù)是有了,我們怎么讓機器4知道呢?

其實也很簡單,機器4不是每秒都會發(fā)送一次心跳么?當(dāng)機器4發(fā)送心跳過去的時候,Master節(jié)點就通過心跳響應(yīng)把這個復(fù)制任務(wù)下發(fā)給機器4,讓機器4從機器2復(fù)制一個副本好了。

同樣,我們來一張圖,看看這個過程:

看上圖,現(xiàn)在機器4上是不是又多了一個“1TB數(shù)據(jù)01”的副本3 ?那么“1TB數(shù)據(jù)01”這個數(shù)據(jù)分片是不是又變成3個副本了?

7、刪除多余副本

那反過來,如果說此時機器3突然恢復(fù)了,他上面也有一個“1TB數(shù)據(jù)01”的副本3,相當(dāng)于此時“1TB數(shù)據(jù)01”就有4個副本了,副本不就多余了嗎?

沒關(guān)系,一旦Master節(jié)點感知到機器3復(fù)活,會發(fā)現(xiàn)副本數(shù)量過多,此時會生成一個刪除副本任務(wù)。

他會在機器3發(fā)送心跳的時候,下發(fā)一個刪除副本的指令,讓機器3刪除自己本地多余的副本就可以了。這樣,就可以保持副本數(shù)量只有3個。

一樣的,大家來看看下面的圖。

8、全文總結(jié)

好了,到這里,通過超級大白話的講解,還有十多張圖的漸進式演進說明,相信大家以前即使不了解分布式系統(tǒng),都絕對能理解一個分布式系統(tǒng)的完整的數(shù)據(jù)容錯架構(gòu)是如何設(shè)計的了。

實際上,這種數(shù)據(jù)分片存儲 、多副本冗余、宕機感知、自動副本遷移、多余副本刪除,這套機制,對于hadoop、elasticsearch等很多系統(tǒng)來說,都是類似的。

所以筆者在這里強烈建議大家,一定好好吸收一下這種分布式系統(tǒng)、中間件系統(tǒng)底層數(shù)據(jù)容錯架構(gòu)的思想。

這樣,以后學(xué)習(xí)類似的一些技術(shù)的時候,對他們的原理、思想都會感到一種似曾相識的感覺。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2023-01-12 17:46:37

分庫分表id如何生成

2021-03-07 16:11:26

Redis分布式

2024-03-26 12:08:53

分布式事務(wù)存儲

2021-06-06 12:45:41

分布式CAPBASE

2025-02-24 16:00:00

SpringBoot定時任務(wù)開發(fā)

2023-03-05 18:23:38

分布式ID節(jié)點

2025-02-26 08:30:00

Spring分布式事務(wù)Java

2009-05-06 17:20:53

密碼認(rèn)證SafeNetAladdin

2021-08-30 18:04:14

在線文檔

2020-03-31 16:13:26

分布式事務(wù)方案TCC

2019-07-25 15:32:35

分布式事務(wù)微服務(wù)系統(tǒng)架構(gòu)

2022-03-24 12:15:50

MySQL數(shù)據(jù)庫讀寫分離

2023-05-18 14:02:00

分布式系統(tǒng)冪等性

2025-04-28 00:44:04

2020-09-23 09:52:01

分布式WebSocketMQ

2020-05-28 09:35:05

分布式事務(wù)方案

2023-09-14 15:44:46

分布式事務(wù)數(shù)據(jù)存儲

2025-04-29 04:00:00

分布式事務(wù)事務(wù)消息

2021-06-28 10:03:44

分布式數(shù)據(jù)庫架構(gòu)

2010-07-21 13:53:41

SQL Server分
點贊
收藏

51CTO技術(shù)棧公眾號