偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

360自研分布式海量小文件存儲(chǔ)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

開發(fā) 開發(fā)工具 分布式
本文介紹360基礎(chǔ)架構(gòu)團(tuán)隊(duì)自研的分布式海量小文件存儲(chǔ)系統(tǒng)——NebulasFs。

近年來,公司業(yè)務(wù)發(fā)展迅猛,為數(shù)眾多的業(yè)務(wù)場(chǎng)景產(chǎn)生了大量的圖片,文檔,音頻,視頻等非結(jié)構(gòu)化數(shù)據(jù),尤其是隨著移動(dòng)互聯(lián)網(wǎng)、AI、IoT技術(shù)的成熟和應(yīng)用市場(chǎng)的全面爆發(fā),大量智能硬件設(shè)備將會(huì)生成更大規(guī)模的非結(jié)構(gòu)化多媒體數(shù)據(jù)。如此大量的小文件如何存儲(chǔ),問題應(yīng)運(yùn)而生。傳統(tǒng)存儲(chǔ)廠商出售的存儲(chǔ)服務(wù)價(jià)格昂貴,公有云廠商對(duì)具體業(yè)務(wù)場(chǎng)景的定制化改造略有欠缺,因此,我們決定自研小文件存儲(chǔ)服務(wù)。

NebulasFs簡(jiǎn)介

曾經(jīng)關(guān)注小文件存儲(chǔ)技術(shù)的同學(xué)可能閱讀過Facebook發(fā)表的那篇關(guān)于海量小圖片存儲(chǔ)系統(tǒng)Haystack的論文(Finding a needle in Haystack: Facebook’s photo storage),Haystack通過合并多個(gè)小文件成一個(gè)大文件、以減少文件數(shù)量的方式解決了普通文件系統(tǒng)在存儲(chǔ)數(shù)量巨大的小文件時(shí)的問題:獲取一次文件多次讀取元數(shù)據(jù)信息、文件訪問的“長(zhǎng)尾”效應(yīng)導(dǎo)致大量文件元數(shù)據(jù)不容易緩存等?;谠贖aystack的論文中得到的借鑒和參考,我們研發(fā)了自己的分布式小文件存儲(chǔ)系統(tǒng)——NebulasFs。它是一個(gè)分布式、高可用、高可靠、持久化小文件存儲(chǔ)系統(tǒng),可以存儲(chǔ)數(shù)以百億的小文件。

架構(gòu)設(shè)計(jì)

從分布式角色上劃分,可以分為Master和Datanode兩個(gè)大的角色。

其中,Master負(fù)責(zé)集群的元數(shù)據(jù)存儲(chǔ)、集群管理、任務(wù)調(diào)度等工作,它的數(shù)據(jù)一致性目前由外部一致性工具(ETCD等)實(shí)現(xiàn)。Master是一個(gè)主多個(gè)備。

Datanode是面向用戶的,它主要負(fù)責(zé)數(shù)據(jù)存儲(chǔ)和用戶請(qǐng)求的路由、分發(fā)。Datanode節(jié)點(diǎn)包括存儲(chǔ)Volume文件和Proxy模塊。如下圖所示:

用戶的請(qǐng)求可以請(qǐng)求任意一個(gè)Datanode節(jié)點(diǎn),節(jié)點(diǎn)的Proxy模塊會(huì)代理用戶請(qǐng)求到正確的數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),并返回給用戶結(jié)構(gòu)。對(duì)于多個(gè)副本的寫請(qǐng)求,Proxy模塊會(huì)按照副本的一致順序并行寫入直至全部成功后返回。對(duì)于讀請(qǐng)求只讀取第一個(gè)副本。

NebulasFs功能

為了在存儲(chǔ)容量、一致性、可用性等方面有更好的提升來滿足海量小文件存儲(chǔ)的需求,相對(duì)于Haystack論文,我們?cè)诮涌诜?wù)、分布式架構(gòu)方面做了更多的優(yōu)化,主要體現(xiàn)在以下方面:

1. 提供給用戶使用的服務(wù)接口簡(jiǎn)單、輕量、通用

NebulasFs提供給用戶Http Restful接口,協(xié)議更簡(jiǎn)單,使用更方便,用戶可以通過簡(jiǎn)單的PUT,GET等操作上傳和下載文件。用戶無(wú)需使用定制的客戶端,更加輕量級(jí)。

2. 用戶請(qǐng)求全代理、自動(dòng)路由

我們知道,Datanode具有數(shù)據(jù)存儲(chǔ)的功能,可是對(duì)于數(shù)量眾多的Datanode來說,用戶要想知道哪些數(shù)據(jù)存儲(chǔ)在哪個(gè)Datanode上是需要先從Master 拿到數(shù)據(jù)路由的元數(shù)據(jù)才知道,這增加了用戶請(qǐng)求的復(fù)雜度。我們?cè)贒atanode上增加了請(qǐng)求代理、路由模塊把用戶的請(qǐng)求自動(dòng)代理、路由到正確的Datanode上,使得用戶一次請(qǐng)求既能獲取數(shù)據(jù)。

3. 多租戶,提供租戶資源隔離機(jī)制,避免相互影響

一個(gè)集群提供的服務(wù)可能有多個(gè)用戶來使用,為了避免互相影響,NebulasFs抽象出了資源池的概念,不同的資源池物理上是分布在不同的硬件之上,資源池在機(jī)器維度上不交叉,可以有效的做到資源的隔離。不同的用戶可以分布在不同的資源池也可以共享資源池,這需要管理員提前做好規(guī)劃。資源池類型是多樣的,它的范圍可能是跨數(shù)據(jù)中心的,也可能是跨機(jī)柜,也可能是在一個(gè)機(jī)柜之內(nèi)的。根據(jù)不同的物理硬件性能和數(shù)據(jù)副本存儲(chǔ)冗余需求,對(duì)不同類型的數(shù)據(jù)存儲(chǔ)需求也需要提前規(guī)劃。

4. 可定制的數(shù)據(jù)多副本存儲(chǔ)方案,數(shù)據(jù)無(wú)丟失、多種故障域組合

為了提供可用性,保證寫入數(shù)據(jù)不丟失,文件數(shù)據(jù)一般都會(huì)做容災(zāi)存儲(chǔ)大于1的副本數(shù)量,以便在發(fā)生不可恢復(fù)的硬件故障時(shí)保證數(shù)據(jù)可用性以及用作之后的自動(dòng)補(bǔ)齊副本數(shù)量。不同重要級(jí)別的數(shù)據(jù)和不同級(jí)別故障類型決定了使用不同級(jí)別的存儲(chǔ)方案。NebulasFs預(yù)先定義了5個(gè)級(jí)別的故障域,分別是:數(shù)據(jù)中心、機(jī)柜列、機(jī)柜、機(jī)器、磁盤。要求可用性較高的數(shù)據(jù)存儲(chǔ)時(shí)使用跨數(shù)據(jù)中心做容災(zāi)副本,以便在整個(gè)數(shù)據(jù)中心不可用時(shí)使用另外一個(gè)數(shù)據(jù)中心的數(shù)據(jù)。要求沒那么高的數(shù)據(jù)可以在做容災(zāi)副本策略的時(shí)候選擇跨機(jī)柜存儲(chǔ)即可,使得即便在邊沿交換機(jī)故障后也可用。

NebulasFs故障域和資源隔離池之間的關(guān)系如下:

S代表服務(wù)器,R-1, R-2是屬于數(shù)據(jù)中心DC-1的兩個(gè)機(jī)柜,R-3, R42是屬于數(shù)據(jù)中心DC-2的兩個(gè)機(jī)柜。Pool-1是跨機(jī)柜故障域的資源隔離池,Pool-2是跨數(shù)據(jù)中心故障域的資源池,Pool-3是跨服務(wù)器故障域的資源池。

NebulasFs 故障域邏輯和物理概念對(duì)應(yīng)如下:

其中上半部分是邏輯概念,下半部分是物理概念。用戶及請(qǐng)求均與邏輯概念相關(guān),管理運(yùn)維涉及物理概念相關(guān)。一個(gè)用戶可以對(duì)應(yīng)一個(gè)或者多個(gè)Collection, 一個(gè)Collection對(duì)應(yīng)多個(gè)Volume, 每個(gè)Volume是存儲(chǔ)在DataNode上的文件(有幾個(gè)副本就有幾個(gè)文件)。一般一個(gè)DataNode對(duì)應(yīng)服務(wù)器上的一塊硬盤。一臺(tái)服務(wù)器上有多個(gè)DataNode。服務(wù)器(Server)的上層是機(jī)柜(Rack)、一排機(jī)柜(Row)和數(shù)據(jù)中心(DataCenter)。

5. 自動(dòng)化擴(kuò)容和再平衡

擴(kuò)容分為存儲(chǔ)容量不足進(jìn)行擴(kuò)容和請(qǐng)求流量過載進(jìn)行的擴(kuò)容。由于容量不足的擴(kuò)容后無(wú)需再平衡,只有請(qǐng)求流量大擴(kuò)容后需要做數(shù)據(jù)再平衡。再平衡是按照容災(zāi)副本數(shù)等策略進(jìn)行的,按照策略添加的Datanode會(huì)自動(dòng)注冊(cè)到Master上,Master按照預(yù)定的規(guī)則進(jìn)行協(xié)調(diào)再平衡。

兩種擴(kuò)容情況如下:

6. 自動(dòng)化副本修復(fù)補(bǔ)齊

一定規(guī)模的集群故障可能會(huì)變的比較頻繁,在我們的系統(tǒng)中故障很大程度上意味著數(shù)據(jù)副本的丟失,人工補(bǔ)齊數(shù)據(jù)副本工作量較大,因此自動(dòng)化補(bǔ)齊副本就成了一個(gè)比較重要的功能。自動(dòng)化補(bǔ)齊副本是靠Master發(fā)現(xiàn)副本缺失和協(xié)調(diào)補(bǔ)齊的。在補(bǔ)齊的過程中數(shù)據(jù)副本都會(huì)變成只讀。過程如下圖:

整個(gè)自動(dòng)化副本補(bǔ)齊如下圖所示:

由于硬盤故障,數(shù)據(jù)節(jié)點(diǎn) 2 和 3 上的Volume 3 和 6 副本丟失,自動(dòng)補(bǔ)齊自動(dòng)把這兩個(gè)副本補(bǔ)齊到數(shù)據(jù)節(jié)點(diǎn) 4 和 5 上,并加入到集群中。

小結(jié)

到目前為止,NebulasFs在內(nèi)部已經(jīng)使用了近一年的時(shí)間。除此之外NebulasFs還做為后端存儲(chǔ)為另一個(gè)對(duì)象存儲(chǔ)(AWS S3協(xié)議)提供服務(wù)以存儲(chǔ)大文件。

伴隨著業(yè)務(wù)的不斷接入,NebulasFs也會(huì)不斷完善,為業(yè)務(wù)增長(zhǎng)提供更好的保障。

【本文是51CTO專欄機(jī)構(gòu)360技術(shù)的原創(chuàng)文章,微信公眾號(hào)“360技術(shù)( id: qihoo_tech)”】

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

 

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2017-07-18 09:51:36

文件存儲(chǔ)系統(tǒng)

2017-10-17 08:33:31

存儲(chǔ)系統(tǒng)分布式

2017-04-14 09:48:25

分布式存儲(chǔ)系統(tǒng)

2018-09-29 14:08:04

存儲(chǔ)系統(tǒng)分布式

2019-07-05 15:01:32

區(qū)塊鏈系統(tǒng)分布式存儲(chǔ)

2017-10-16 10:24:47

LogDevice存儲(chǔ)系統(tǒng)

2012-12-28 17:31:06

2017-10-12 09:36:54

分布式存儲(chǔ)系統(tǒng)

2017-10-19 08:45:15

存儲(chǔ)系統(tǒng)HBase

2018-11-20 09:19:58

存儲(chǔ)系統(tǒng)雪崩效應(yīng)

2017-12-18 10:47:04

分布式存儲(chǔ)數(shù)據(jù)

2024-11-26 07:56:30

2017-09-04 08:49:17

存儲(chǔ)原理架構(gòu)

2023-01-03 07:57:27

2015-10-21 11:39:41

Ceph小文件存儲(chǔ)海量數(shù)據(jù)存儲(chǔ)

2019-10-15 10:59:43

分布式存儲(chǔ)系統(tǒng)

2019-05-13 15:20:42

存儲(chǔ)系統(tǒng)算法

2018-05-10 09:34:21

spark存儲(chǔ)系統(tǒng)

2018-01-02 20:00:28

數(shù)據(jù)庫(kù)MySQL分布式存儲(chǔ)

2018-10-24 11:01:53

分布式存儲(chǔ)系統(tǒng)
點(diǎn)贊
收藏

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