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

計(jì)算存儲分離之“數(shù)據(jù)存儲高可用性設(shè)計(jì)”

存儲 存儲軟件 服務(wù)器
面對著業(yè)務(wù)的發(fā)展,不管是在線,近線還是離線系統(tǒng),其所需要的存儲規(guī)模以及存儲成本,成倍上漲。如果還是采取傳統(tǒng)的分散式存儲管理方式,除了高昂的管理分散式存儲的成本,還會增加存儲成本。

 一、背景

面對著業(yè)務(wù)的發(fā)展,不管是在線,近線還是離線系統(tǒng),其所需要的存儲規(guī)模以及存儲成本,成倍上漲。如果還是采取傳統(tǒng)的分散式存儲管理方式,除了高昂的管理分散式存儲的成本,還會增加存儲成本。

因此,我們極需一種既高效又省成本的數(shù)據(jù)存儲以及存儲管理方式。自然地,我們把目光聚焦到了分布式存儲系統(tǒng)上。

從目前行業(yè)發(fā)展趨勢來看,各大互聯(lián)網(wǎng)公司都設(shè)計(jì)或者維護(hù)了自己的分布式存儲系統(tǒng)。如Google的GFS(Colossus 為GFS第二代分布式存儲系統(tǒng)),F(xiàn)acebook和LinkedIn的HDFS等。由此可見,分布式存儲也是大勢所趨。

[[230404]]

同樣在阿里,我們今年對數(shù)據(jù)庫進(jìn)行計(jì)算存儲分離,面臨的難度也非常大。因此,我們也對各種分布式存儲進(jìn)行了許多研究,開源的如Ceph,還有阿里云的盤古等。

我們緊跟業(yè)界以及開源社區(qū),并不斷吸收其優(yōu)秀成果;同時(shí)也做了大量的研究,測試和驗(yàn)證。根據(jù)集團(tuán)業(yè)務(wù)的特性,我們進(jìn)行了許多軟件層面,甚至軟硬件結(jié)合的優(yōu)化,為集團(tuán)業(yè)務(wù)的發(fā)展賦能。

分布式存儲系統(tǒng)所具備的優(yōu)點(diǎn)就是為了克服傳統(tǒng)存儲方式的缺點(diǎn)。那么,它將會給我們帶來哪些收益呢?

二、分布式存儲的收益

分布式存儲系統(tǒng)所帶來的收益主要體現(xiàn)在以下幾個(gè)方面??傮w上來講,主要是降低存儲成本,同時(shí)也提高了資源的分配效率,助力計(jì)算資源的彈性調(diào)度。

2.1 解除機(jī)型配比

一般性的,我們將服務(wù)器分為兩部分,計(jì)算資源和存儲資源。計(jì)算資源如CPU和內(nèi)存,計(jì)算資源的特點(diǎn)就是無狀態(tài),資源分配比較靈活。存儲資源有狀態(tài),需要保證數(shù)據(jù)的一致性和持久性,資源分配比較固定,會涉及到數(shù)據(jù)的遷移。如果數(shù)據(jù)量太大,就會遇到遷移性能的問題。

傳統(tǒng)的存儲方式,是單臺服務(wù)器類型的,將計(jì)算資源與存儲資源(HHD和SSD等存儲設(shè)備)綁定在一起。因此一臺機(jī)器CPU,內(nèi)存與存儲設(shè)備比值都是固定的。這帶來的一個(gè)問題,就是我們會比較頻繁的改變我們的機(jī)型,因每年我們的計(jì)算資源與存儲資源的配比都在變化,業(yè)務(wù)數(shù)據(jù)的增長非??臁_@也在某種程度上提高了每年采購機(jī)器的成本。

引入分布式存儲系統(tǒng)后,解除了這兩者緊密耦合的現(xiàn)狀,使得降低存儲成本成為了可能。計(jì)算資源和存儲資源解耦后,各自可以按不同的策略進(jìn)行過保,在一定程度上降低了成本。

2.2 解決存儲碎片

傳統(tǒng)分散式的存儲模型,必然會有存儲碎片問題的存在。因?yàn)槊颗_服務(wù)器都會為線上業(yè)務(wù)預(yù)留一定的存儲空間,以滿足將來業(yè)務(wù)數(shù)據(jù)增長的需要。但是采用預(yù)留空間的方式會有一個(gè)問題,就是我們無法準(zhǔn)確地評估真實(shí)的實(shí)際空間需求,往往預(yù)留的會比較多,業(yè)務(wù)實(shí)際需求與預(yù)留空間這兩者的差距就是存儲空間浪費(fèi)量。

這些服務(wù)器殘留了獨(dú)立的10G,20G的空間碎片,在一定程度上也并不能滿足業(yè)務(wù)實(shí)例申請的規(guī)格,但將這些碎片合并在一起就能滿足業(yè)務(wù)所需。

引入分布式存儲系統(tǒng)后,大大減少這種碎片,業(yè)務(wù)實(shí)際的數(shù)據(jù)存儲空間按需進(jìn)行動態(tài)分配。我們引入數(shù)據(jù)增長趨勢分析,每天或者每周進(jìn)行存儲在線動態(tài)擴(kuò)容,以提高管理效率,降低存儲成本。

2.3 計(jì)算資源彈性

 傳統(tǒng)資源配置下,我們的計(jì)算資源調(diào)度水平受限于單臺機(jī)器的存儲容量。在制定Docker容器化規(guī)格時(shí),連同存儲容量一起考慮,其調(diào)度和資源分配算法異常復(fù)雜。當(dāng)CPU,內(nèi)存以及存儲容量這三者在某種程度上發(fā)生沖突時(shí),往往會犧牲一定的存儲資本,來達(dá)成Docker實(shí)例規(guī)格的妥協(xié)。

將計(jì)算資源與存儲資源分離后,計(jì)算資源得到解脫。我們在安排機(jī)器的過保時(shí),采用不同的策略,降低機(jī)器采購成本。

另外,計(jì)算資源是無狀態(tài)的,獨(dú)立之后,進(jìn)行容器化,就可以方便的進(jìn)行調(diào)度,提高效率。更重要的是,讓離在線混布成為一種可能或者讓其更高效。

2.4 解決差異化需求

某些新興業(yè)務(wù),往往會呈現(xiàn)爆發(fā)式增長。自然而然,其數(shù)據(jù)量也會呈跳躍式的爆炸。此時(shí)對存儲的規(guī)格的需求就會比較大,因?yàn)闃I(yè)務(wù)短時(shí)間內(nèi)往往來不及做架構(gòu)優(yōu)化,或者做數(shù)據(jù)分片來降低單機(jī)的數(shù)據(jù)存儲容量。這會給傳統(tǒng)的存儲模型帶來很大的挑戰(zhàn),因?yàn)閭鹘y(tǒng)的分散式的單臺服務(wù)器的存儲容量已經(jīng)不能滿足需求。

分布式存儲系統(tǒng)破除了這種大存儲容量實(shí)例規(guī)格的天花板限制,業(yè)務(wù)不再關(guān)心底層存儲的實(shí)現(xiàn),我們根據(jù)業(yè)務(wù)數(shù)據(jù)的增長趨勢分析,動態(tài)擴(kuò)展存儲空間。

三、面臨的問題

盡管分布式存儲有上述的諸多優(yōu)點(diǎn),然而如何設(shè)計(jì)其高可用性,如何減少數(shù)據(jù)丟失的概率,是擺在我們面前必須要去克服的問題。那么我們又是如何來架構(gòu)和設(shè)計(jì)的呢?

3.1 數(shù)據(jù)丟失

在分布式存儲系統(tǒng)中,為了防止單機(jī)故障而造成數(shù)據(jù)丟失,往往會引入多個(gè)數(shù)據(jù)副本,我們稱之為replica set。此replica set中數(shù)據(jù)的副本個(gè)數(shù)用R來表示。一般的,R等于3,就表示是這份數(shù)據(jù)的存儲份數(shù)是“3”,也就是我們通常所說的 3-way replication。

在隨機(jī)的模式下,有可能replica set的3份數(shù)據(jù)位于同一個(gè)rack中,那么當(dāng)此rack掉電就會導(dǎo)致數(shù)據(jù)丟失,對線上業(yè)務(wù)造成影響。隨著集群規(guī)模的變大,如果有超過1%的數(shù)據(jù)節(jié)點(diǎn)遭遇斷電,并且斷電之后又有一部分機(jī)器重起失敗,或者進(jìn)程異常導(dǎo)致數(shù)據(jù)文件損壞;那么其影響都將隨著集群規(guī)模的增長而變得異常嚴(yán)重,成為分布式存儲系統(tǒng)致命的問題。

當(dāng)然,我們可能通過增加數(shù)據(jù)的副本數(shù)即“replica set size”,來降低數(shù)據(jù)丟失的概率。又或者提高底層IDC以及網(wǎng)絡(luò)的高可用性,減少斷網(wǎng)或者網(wǎng)絡(luò)故障發(fā)生的概率。但是這些方法都是繞開問題的本質(zhì)來優(yōu)化的,另外帶來的存儲成本的增長也是不能接受的。

早期,F(xiàn)acebook和LinkedIn在使用HDFS時(shí),也同樣面臨這樣的問題,也做了這方面不少的驗(yàn)證和測試。最終較為一個(gè)合理的方案就是通過合理安排replica set中數(shù)據(jù)存儲的位置來降低數(shù)據(jù)丟失的可能性。

3.2 數(shù)據(jù)散射度

為了能夠更好的理解數(shù)據(jù)副本存儲位置(data locality),我們引入數(shù)據(jù)散射度(scatter width)的概念。怎么來理解數(shù)據(jù)散射度?

假設(shè)一個(gè)集群,有N個(gè)節(jié)點(diǎn),數(shù)據(jù)副本replica set size為R,那么數(shù)據(jù)散射度最差的情況就是從N個(gè)節(jié)點(diǎn)中任意取R個(gè)的組合數(shù),也就是C(N,R)。我們假定N為“9”,R為“3”。

舉個(gè)例子:我們定義三個(gè)copy set(存放的都是不同的數(shù)據(jù)):{1,2,3},{4,5,6},{7,8,9}。任意一組copy set中存放的數(shù)據(jù)沒有重復(fù),也就是說一份數(shù)據(jù)的三個(gè)副本分別放置在:{1,4,7}或者{2,5,8}或者{3,6,9}。那么這個(gè)時(shí)候,我們稱之為其數(shù)據(jù)散射度S為“3”,遠(yuǎn)小于隨機(jī)組合的C(9,3)。

隨機(jī)組合時(shí),任意3臺機(jī)器Down機(jī)都會存在數(shù)據(jù)丟失。而采用Copy Set方案后,只有當(dāng){1,4,7}或者{2,5,8}或者{3,6,9}其中的任意一個(gè)組合不可用時(shí),才會影響高可用性,才會有數(shù)據(jù)丟失。

綜上可知,我們引入copy set的目標(biāo)就是盡量的降低數(shù)據(jù)散射度“S”。

但是現(xiàn)實(shí)遠(yuǎn)非這么簡單,當(dāng)我們降低數(shù)據(jù)散射度后,其數(shù)據(jù)恢復(fù)速度變小,也就是說恢復(fù)時(shí)間變長。因此,我們必須在數(shù)據(jù)散射度“S”和恢復(fù)速度中找到一個(gè)平衡。

 四、高可用性設(shè)計(jì)

一般地,業(yè)務(wù)統(tǒng)一用N個(gè)“9”來表示一個(gè)分布式系統(tǒng)的高可用性。一般業(yè)界做得好的,都已經(jīng)能達(dá)到9個(gè)“9”。那么,我們的分布存儲系統(tǒng)又如何來設(shè)計(jì),又能達(dá)到多個(gè)“9”呢?

4.1 OSD Domain

默認(rèn)的OSD節(jié)點(diǎn)bucket是基于Host的,也就是說取決于一臺機(jī)器上存儲設(shè)備的數(shù)量。如下圖所示,一臺Host上面有4個(gè)OSD(device,如HDD或SSD等)。所以在集群存儲數(shù)據(jù)時(shí),會尋找數(shù)據(jù)存放位置。

首先會將Primary放入到Host0的四個(gè)節(jié)點(diǎn)中,即{0,1,2,3}。同一組中的OSD會根據(jù)權(quán)重進(jìn)行平衡。另外兩個(gè)副本按同樣的權(quán)重計(jì)算方法放到Host1和Host2中。從總上來看,就是三份數(shù)據(jù)分別放到Host0,Host1和Host2上面,在每一個(gè)Host中數(shù)據(jù)均勻的分布在4個(gè)OSD節(jié)點(diǎn)上。

當(dāng)Host0中的OSD 0節(jié)點(diǎn)(存儲設(shè)備)掛掉,會做兩個(gè)事情:

  • 會從Host0中剩余的OSD節(jié)點(diǎn)中,找可替代節(jié)點(diǎn),將新增數(shù)據(jù)寫到剩余的節(jié)點(diǎn)中
  • 當(dāng)OSD 0恢復(fù)時(shí),會將Host0其它OSD節(jié)點(diǎn)中剛才新增的數(shù)據(jù)copy回OSD 0,這個(gè)叫recovery的backfill過程

我們的目的,就是減少recovery時(shí)backfill的時(shí)間。所以如果一個(gè)Host下面的OSD節(jié)點(diǎn)越多,就會有越多的節(jié)點(diǎn)參加backfill,恢復(fù)速度就會越快。一般單臺機(jī)器的存儲設(shè)備掛載都是有限制的,我們很快就會遇到瓶頸。另外,目前的SSD 128K的寫入速度也在400-500M/s之間,跟我們的目標(biāo)相比,并不算太高。

基于此,我們計(jì)了OSD domain,它擺脫了單臺機(jī)器的設(shè)備掛載量限制。如下所示,其中黃色虛線框中的OSD都在同一個(gè)OSD domain中。一個(gè)OSD domain中包含4臺機(jī)器,每臺機(jī)器有4個(gè)OSD節(jié)點(diǎn)(存儲設(shè)備)。此時(shí),當(dāng)一個(gè)OSD掛掉后,會有15個(gè)OSD參加新增數(shù)據(jù)的平衡和recovery的backfill,大大縮短了恢復(fù)時(shí)間。

在這些OSD Domain中,故障是隔離的,所以一般也稱OSD Domain為故障隔離域。

4.2 Replica Domain

在第三個(gè)章節(jié)中,我們提到了數(shù)據(jù)散射度問題,數(shù)據(jù)散射度越大,可用性越差,丟失數(shù)據(jù)的可能性越高。因此,我們怎么來解決這個(gè)問題呢?

這需要結(jié)合copy set的原理來做合理架構(gòu)與設(shè)計(jì),再基于上面OSD domain的設(shè)計(jì),我們再新增replica domain,將三個(gè)不同rack中的OSD domain組成三個(gè)copy set,用于存放replica set的三個(gè)數(shù)據(jù)副本。

具體架構(gòu)圖如下,這樣部署后,copy set做到了一個(gè)非常低的水平。

另外,為了節(jié)省IDC機(jī)架位資源,我們在一個(gè)集群下分為兩個(gè)replica domain,每個(gè)replica domain下面又有3個(gè)OSD domain:

4.3 泊松分布

到這里,我們的副本存放拓?fù)浣Y(jié)構(gòu)設(shè)計(jì)差不多完成了,那么接下來,我們來計(jì)算下這種部署能做到多個(gè)“9”呢?

在分布式存儲集群中,X個(gè)磁盤發(fā)生故障的事件是獨(dú)立的,其概率是符合泊松分布的。

拿磁盤來講,其MTTF為1million,因此AFR為“1-(24*365/1million)= 0.98832”,約為“0.99”。泊松分布中,兩個(gè)重要的變量因還素X和Mean我們都確定了。

對于分布式存儲池來講,X就是replica set size “R”,Mean就是“0.99”。

我們存儲集群的高可用性可以簡單的按以下函數(shù)來量化:P = f(N, R, S, AFR),其中:

  • P: 丟失所有副本的概率
  • R: 副本數(shù),也就是replica set size
  • S: 單組OSD Domain中OSD的個(gè)數(shù)
  • N: 整個(gè)集群中OSD的總數(shù)
  • AFR: 磁盤的年平均故障率

 進(jìn)行演化后,我們得到可用性公式:P = Pr * M / C(N,R),其中:

Pr:為R個(gè)數(shù)據(jù)副本同時(shí)失效的概率,相當(dāng)于是Primary在做recovery恢復(fù)時(shí),其它R-1個(gè)副本也Fault掉了。

M:為可能的Copy set數(shù)目

R:為replicat set size,即副本數(shù)

N:為集群OSD總數(shù)

C(N,R):為N個(gè)OSD節(jié)點(diǎn)中,取R個(gè)副本的組合數(shù)

從上面的高可用性公式可以看出,一般在給定集群OSD節(jié)點(diǎn)數(shù)和副本數(shù)“R”后,C(N,R)也就確定了。那么,為了提高可用性,我們必須想辦法降低Pr和M的值。

 存儲節(jié)點(diǎn)的拓?fù)浣Y(jié)構(gòu),基于以上分析,做的最終架構(gòu)優(yōu)化:

  • 為了降低Pr,我們引入了OSD domain,默認(rèn)基于Host單機(jī),無法發(fā)揮網(wǎng)絡(luò)“多打一”的優(yōu)勢,我們引入OSD domain,提高單個(gè)OSD恢復(fù)的速度。將原來三個(gè)OSD節(jié)點(diǎn)擴(kuò)大到16個(gè),恢復(fù)速度提高了5倍以上。
  • 為了降低M,也就是copy set的size,我們引入了replica domain。同一個(gè)PG中所有的OSD必須在同一個(gè)replica domain中,降低了數(shù)據(jù)丟失的概率了,提高了高可用性。

以下經(jīng)我們架構(gòu)設(shè)計(jì)后,再根據(jù)泊松分布計(jì)算出來的高可用性:

 

根據(jù)這個(gè)架構(gòu)設(shè)計(jì),在同一個(gè)IDC內(nèi),我們基本上能做到接近于10個(gè)“9”的高可用性。比之于默認(rèn)的算法,高可用性整整提高了將近100倍。

4.4 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)

根據(jù)上面的分布式拓?fù)浣Y(jié)構(gòu)設(shè)計(jì),再結(jié)合現(xiàn)有的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),我們的架構(gòu)設(shè)計(jì)最終方案為:

一個(gè)存儲集群24臺機(jī)器,兩個(gè)replica domain,每個(gè)replica domain中有三個(gè)OSD domain,每個(gè)OSD domain中4臺機(jī)器,因此計(jì)算公式如下:

2(一般為兩個(gè),由網(wǎng)絡(luò)交換機(jī)下掛的機(jī)器數(shù)決定)* 3(replica set,replica domain) * 4(scatter width,OSD domain)= 24

 原則性的,replica domain的機(jī)器位于三個(gè)不同的rack時(shí),這三個(gè)rack不能在同一個(gè)port中。一個(gè)交換設(shè)備下掛16臺機(jī)器,兩個(gè)OSD domain,這兩個(gè)OSD domain屬于不同的replica domain。

在實(shí)際生產(chǎn)中,為了高可用性,我們建議至少部署4個(gè)rack集群。另外,在集群擴(kuò)容時(shí),建議按一組replica domain的規(guī)模來擴(kuò)容。

每一組OSD domain中,存儲機(jī)器數(shù)目也可以是4臺或者8臺不等,可以按單臺的機(jī)器容量來進(jìn)行動態(tài)規(guī)劃,但是計(jì)算公式可大致參考以上的部署策略。

五、總結(jié)與展望

目前,軟硬件結(jié)合的分布式存儲IO stack也在不斷的優(yōu)化(SPDK,NVMe 等)中,網(wǎng)絡(luò)基礎(chǔ)架構(gòu)RDMA的網(wǎng)絡(luò)設(shè)計(jì)也在驗(yàn)證和POC中。這些新的思路與整個(gè)業(yè)界的生態(tài)體系發(fā)展趨勢一致。

在可預(yù)見的將來,存儲技術(shù)上將會有不斷的融合與補(bǔ)益,這也有利于存儲技術(shù)的更新?lián)Q代,也更好的支撐業(yè)務(wù)的快速發(fā)展;最終具備,技術(shù)擴(kuò)展業(yè)務(wù)邊界以及業(yè)務(wù)向技術(shù)拿紅利的能力。

計(jì)算存儲分離更多細(xì)節(jié),將在以后的篇章中講述。

責(zé)任編輯:武曉燕 來源: 阿里巴巴數(shù)據(jù)庫技術(shù)
相關(guān)推薦

2018-06-21 08:23:35

云存儲高可用應(yīng)用

2024-12-11 08:35:55

2011-12-02 10:10:34

RedisFailover

2012-09-04 13:43:31

SQL Server

2024-02-27 09:48:25

Redis集群數(shù)據(jù)庫

2013-08-28 10:30:39

vSphere

2019-09-06 09:50:52

云存儲硬盤云服務(wù)

2017-03-15 15:14:03

MySQL數(shù)據(jù)庫高可用性

2010-12-31 14:36:15

ExchangeSer

2012-07-04 11:21:07

OpenStack

2011-08-25 15:42:49

2010-08-24 15:20:45

Oracle

2009-07-24 20:11:17

服務(wù)器存儲TT

2017-12-21 17:25:46

存儲

2012-11-07 09:41:31

IBMdw

2024-08-13 15:42:19

2022-01-29 22:00:37

可用性存儲系統(tǒng)

2020-06-23 08:15:13

計(jì)算存儲分離

2013-12-04 09:52:50

hadoop

2009-02-26 16:59:36

VMware虛擬化虛擬機(jī)
點(diǎn)贊
收藏

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