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

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

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

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

NebulasFs簡介

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

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

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

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

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

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

NebulasFs功能

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

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

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

2. 用戶請求全代理、自動路由

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

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

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

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

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

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

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

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

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

5. 自動化擴容和再平衡

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

兩種擴容情況如下:

6. 自動化副本修復(fù)補齊

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

整個自動化副本補齊如下圖所示:

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

小結(jié)

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

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

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

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

 

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

2017-07-18 09:51:36

文件存儲系統(tǒng)

2017-10-17 08:33:31

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

2017-04-14 09:48:25

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

2018-09-29 14:08:04

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

2019-07-05 15:01:32

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

2017-10-16 10:24:47

LogDevice存儲系統(tǒng)

2012-12-28 17:31:06

2017-10-12 09:36:54

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

2017-10-19 08:45:15

存儲系統(tǒng)HBase

2018-11-20 09:19:58

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

2017-12-18 10:47:04

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

2024-11-26 07:56:30

2017-09-04 08:49:17

存儲原理架構(gòu)

2023-01-03 07:57:27

2015-10-21 11:39:41

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

2018-05-10 09:34:21

spark存儲系統(tǒng)

2019-05-13 15:20:42

存儲系統(tǒng)算法

2019-10-15 10:59:43

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

2018-01-02 20:00:28

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

2021-07-04 07:07:06

Ceph分布式存儲架構(gòu)
點贊
收藏

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