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

分布式容錯(cuò)架構(gòu)很難?一篇給你講清楚

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

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

TB 級(jí)數(shù)據(jù)放在一臺(tái)機(jī)器上:難啊!

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

首先,我們來(lái)瞧瞧,到底啥是分布式存儲(chǔ)系統(tǒng)呢?其實(shí)特別的簡(jiǎn)單,咱們就用數(shù)據(jù)庫(kù)里的一張表來(lái)舉例。

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

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

當(dāng)然是內(nèi)心感到恐慌和無(wú)助了,因?yàn)槿绻阌?MySQL 之類(lèi)的數(shù)據(jù)庫(kù),單臺(tái)數(shù)據(jù)庫(kù)服務(wù)器上的磁盤(pán)可能都不夠放這一張表的數(shù)據(jù)!

咱們就來(lái)看看下面的這張圖,來(lái)感受一下:

到底啥是分布式存儲(chǔ)?

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

因?yàn)橛靡慌_(tái)數(shù)據(jù)庫(kù)服務(wù)器可能根本都放不下,所以我們考慮一下分布式存儲(chǔ)技術(shù)?對(duì)了!這才是解決這個(gè)問(wèn)題的辦法。

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

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

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

咱們?cè)倏纯聪旅娴膱D:

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

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

比如說(shuō)經(jīng)典的 Hadoop 就是這類(lèi)系統(tǒng),然后 FastDFS 也是類(lèi)似的。如果你可以腦洞打開(kāi),從思想本質(zhì)共通的層面出發(fā),那你會(huì)發(fā)現(xiàn),其實(shí)類(lèi)似 Elasticsearch、Redis Cluster 等等系統(tǒng),它們的本質(zhì)都是如此。

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

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

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

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

咱們看看下面的圖,通過(guò)圖再來(lái)直觀的看看上面的描述:

天哪!某臺(tái)機(jī)器宕機(jī)了咋辦?

這個(gè)時(shí)候又有一個(gè)問(wèn)題了,那么萬(wàn)一上面那 20 臺(tái)機(jī)器上,其中 1 臺(tái)機(jī)器宕機(jī)了咋整呢?

這就尷尬了,兄弟,這會(huì)導(dǎo)致本來(lái)完整的一份 20TB 的數(shù)據(jù),***有 19TB 還在了,有 1TB 的數(shù)據(jù)就搞丟了,因?yàn)槟桥_(tái)機(jī)器宕機(jī)了啊。

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

比如說(shuō),我們完全可以給每一臺(tái)機(jī)器上的那 1TB 的數(shù)據(jù)做 2 個(gè)副本的冗余,放在別的機(jī)器上,然后呢,萬(wàn)一說(shuō)某一臺(tái)機(jī)器宕機(jī),沒(méi)事啊,因?yàn)槠渌麢C(jī)器上還有它的副本。

我們來(lái)看看這種多副本冗余的架構(gòu)設(shè)計(jì)圖:

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

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

這樣的話,一份數(shù)據(jù)就有了 3 個(gè)副本了。其他的數(shù)據(jù)也是類(lèi)似。這個(gè)時(shí)候我們假設(shè)有一臺(tái)機(jī)器宕機(jī)了,比如下面這臺(tái)機(jī)器宕機(jī),必然會(huì)導(dǎo)致“1TB 數(shù)據(jù) 01”這個(gè)數(shù)據(jù)分片的其中一個(gè)數(shù)據(jù)副本丟失。

如下圖所示:

那這個(gè)時(shí)候要緊嗎?不要緊,因?yàn)?ldquo;1TB 數(shù)據(jù) 01”這個(gè)數(shù)據(jù)分片,它還有另外 2 個(gè)副本在存活的兩臺(tái)機(jī)器上呢!

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

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

現(xiàn)在有一個(gè)問(wèn)題,比如說(shuō)有個(gè)兄弟要讀取“1TB 數(shù)據(jù) 01”這個(gè)數(shù)據(jù)分片,那么他就會(huì)找 Master 節(jié)點(diǎn),說(shuō):“你能不能告訴我“1TB 數(shù)據(jù) 01”這個(gè)數(shù)據(jù)分片人在哪里啊?在哪臺(tái)機(jī)器上啊?我需要讀他啊!”

我們來(lái)看看下面的圖:

那么這個(gè)時(shí)候,Master 節(jié)點(diǎn)就需要從“1TB 數(shù)據(jù) 01”的 3 個(gè)副本里選擇一個(gè)出來(lái),告訴人家說(shuō):“兄弟,在哪臺(tái)哪臺(tái)機(jī)器上,有 1 個(gè)副本,你可以去那臺(tái)機(jī)器上讀“1TB 數(shù)據(jù) 01”的一個(gè)副本就 ok 了。”

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

所以,我們?cè)趺床拍茏?Master 節(jié)點(diǎn)知道副本 3 已經(jīng)丟失了呢?其實(shí)也很簡(jiǎn)單,每臺(tái)機(jī)器上負(fù)責(zé)管理數(shù)據(jù)的 Slave 節(jié)點(diǎn),都每隔幾秒(比如說(shuō) 1 秒)給 Master 節(jié)點(diǎn)發(fā)送一個(gè)心跳。

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

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

那么此時(shí),Master 節(jié)點(diǎn)就可以通知人家去讀“1TB 數(shù)據(jù) 01”的副本 1 或者副本 2,哪個(gè)都行,因?yàn)槟莾蓚€(gè)副本其實(shí)還是在的。

舉個(gè)例子,比如可以通知客戶端去讀副本 1,此時(shí)客戶端就可以找那臺(tái)機(jī)器上的 Slave 節(jié)點(diǎn)說(shuō)要讀取那個(gè)副本 1。

整個(gè)過(guò)程如下圖所示:

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

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

因?yàn)槲覀冾A(yù)設(shè)的是每個(gè)數(shù)據(jù)分片都得有 3 個(gè)副本的。大家想想,此時(shí)如何給這個(gè)數(shù)據(jù)分片增加 1 個(gè)副本呢?

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

此時(shí),就會(huì)生成一個(gè)副本復(fù)制的任務(wù),挑選另外一臺(tái)機(jī)器來(lái)從有副本的機(jī)器去復(fù)制一個(gè)副本。

比如看下面的圖,可以挑選第 4 臺(tái)機(jī)器從第 2 臺(tái)機(jī)器去復(fù)制一個(gè)副本:

但是,現(xiàn)在這個(gè)復(fù)制任務(wù)是有了,我們?cè)趺醋寵C(jī)器 4 知道呢?其實(shí)也很簡(jiǎn)單,機(jī)器 4 不是每秒都會(huì)發(fā)送一次心跳么?

當(dāng)機(jī)器 4 發(fā)送心跳過(guò)去的時(shí)候,Master 節(jié)點(diǎn)就通過(guò)心跳響應(yīng)把這個(gè)復(fù)制任務(wù)下發(fā)給機(jī)器 4,讓機(jī)器 4 從機(jī)器 2 復(fù)制一個(gè)副本好了。

同樣,我們來(lái)一張圖,看看這個(gè)過(guò)程:

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

刪除多余副本

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

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

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

一樣的,大家來(lái)看看下面的圖:

總結(jié)

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

實(shí)際上,這種數(shù)據(jù)分片存儲(chǔ) 、多副本冗余、宕機(jī)感知、自動(dòng)副本遷移、多余副本刪除,這套機(jī)制,對(duì)于 Hadoop、Elasticsearch 等很多系統(tǒng)來(lái)說(shuō),都是類(lèi)似的。

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

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

 

責(zé)任編輯:龐桂玉 來(lái)源: 51CTO技術(shù)棧
相關(guān)推薦

2018-12-11 09:09:10

分布式數(shù)據(jù)庫(kù)事務(wù)

2018-08-13 09:20:21

NoSQLSQL數(shù)據(jù)

2017-12-17 20:17:23

NoSQLSQL數(shù)據(jù)

2021-07-07 10:28:09

分布式架構(gòu)系統(tǒng)

2021-04-21 10:00:08

MySQL索引數(shù)據(jù)庫(kù)

2019-11-25 08:25:47

ZooKeeper分布式系統(tǒng)負(fù)載均衡

2021-05-19 08:12:39

etcd分布式鎖分布式系統(tǒng)

2019-05-07 11:57:26

分布式架構(gòu)負(fù)載均衡

2021-10-29 11:30:31

補(bǔ)碼二進(jìn)制反碼

2020-07-29 09:21:34

Docker集群部署隔離環(huán)境

2021-07-05 22:22:24

協(xié)議MQTT

2021-03-12 09:21:31

MySQL數(shù)據(jù)庫(kù)邏輯架構(gòu)

2021-07-07 07:14:48

分布式ID分布式系統(tǒng)

2020-07-29 10:04:36

Kubernetes容器

2017-11-17 08:39:40

人工智能機(jī)器學(xué)習(xí)深度學(xué)習(xí)

2018-05-21 07:08:18

行為驅(qū)動(dòng)開(kāi)發(fā)BDD編碼

2022-06-07 08:29:57

分布式文件系統(tǒng)服務(wù)器

2019-07-07 08:18:10

MySQL索引數(shù)據(jù)庫(kù)

2022-01-05 09:27:24

讀擴(kuò)散寫(xiě)擴(kuò)散feed

2018-05-24 22:58:26

大數(shù)據(jù)分布式計(jì)算統(tǒng)計(jì)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产激情综合五月久久 | 人人亚洲 | 国产在线精品一区二区 | 毛片毛片毛片毛片毛片 | av永久| 国产韩国精品一区二区三区 | 成人a视频 | 欧美一区二区三区在线观看视频 | 成人精品久久 | 欧美精品在线一区二区三区 | 91高清在线观看 | 人人玩人人添人人澡欧美 | 免费av观看 | 韩国精品在线 | 国产91一区二区三区 | 福利国产 | 99国内精品久久久久久久 | 亚洲精品国产电影 | h在线播放 | 午夜免费网站 | 日本不卡免费新一二三区 | 久久精品中文字幕 | 中文字幕在线视频一区二区三区 | 99re6热在线精品视频播放 | 青青草视频网 | 中文字幕三区 | 日韩精品在线看 | 亚洲黄色av| 九九久久99 | 国产一二三区精品视频 | 欧美中文 | 亚洲 欧美 日韩 精品 | 亚洲精品中文字幕在线观看 | 免费人成激情视频在线观看冫 | 国产999精品久久久久久绿帽 | 久久久精品影院 | 成人精品啪啪欧美成 | 国产综合网站 | 久久久.com | 午夜精品久久久久久久久久久久久 | 亚洲精品电影 |