新聞中心
存儲(chǔ),是我們碼農(nóng)每天都要打交道的事情,而當(dāng)我們面對(duì)RAID,SAN,對(duì)象存儲(chǔ),分布式數(shù)據(jù)庫(kù)等技術(shù)的時(shí)候,又往往似是而非,存儲(chǔ)成了我們熟悉的陌生人。

在老碼農(nóng)眼中,存儲(chǔ)仿佛是這個(gè)樣子的。
從計(jì)算機(jī)結(jié)構(gòu)出發(fā)
存儲(chǔ)是計(jì)算機(jī)的一部分,在馮諾伊曼體系結(jié)構(gòu)中,有一個(gè)重要的單元即存儲(chǔ)器,它連接了輸入/輸出,以及控制器和運(yùn)算器,處于核心紐帶的位置。
與存儲(chǔ)中的數(shù)據(jù)交互是通過IO實(shí)現(xiàn)的,IO的性能直接影響著系統(tǒng)的性能,甚至我們往往把應(yīng)用分為IO密集型和CPU密集型等等。
從IO的訪問方式來(lái)看,可以分為阻塞/非阻塞,同步/異步。在Linux,提供了5種IO模型:
- 阻塞I/O:blocking I/O
- 非阻塞I/O :nonblocking I/O
- I/O復(fù)用:I/O multiplexing (select 和poll)
- 信號(hào)驅(qū)動(dòng)I/O :signal driven I/O (SIGIO)
- 異步I/O :asynchronous I/O (the POSIX aio_functions)
從性能上看,異步 IO 的性能無(wú)疑是***的。
對(duì)IO進(jìn)行抽象,分為邏輯IO和物理IO兩類,分為磁盤,卷和文件系統(tǒng)三層。做一個(gè)簡(jiǎn)單的比喻,磁盤象空地,卷如同小區(qū),而文件系統(tǒng)就是小區(qū)里的樓房和房間。卷位于操作系統(tǒng)和硬盤之間,屏蔽了底層硬盤組合的復(fù)雜性,使得多塊硬盤在操作系統(tǒng)來(lái)看就像一塊硬盤。鏡像,快照,磁盤的動(dòng)態(tài)擴(kuò)展,都可以通過卷來(lái)實(shí)現(xiàn)。而文件系統(tǒng)最主要的目標(biāo)就是對(duì)磁盤空間的管理。
對(duì)程序員而言,我們所面對(duì)的一般是文件系統(tǒng),通過文件系統(tǒng)感知存儲(chǔ)中的數(shù)據(jù)。
提高存儲(chǔ)的可靠性—— 磁盤陣列
一旦硬盤故障,面臨的很可能就是數(shù)據(jù)的丟失,將演變成一場(chǎng)災(zāi)難。對(duì)很多的企業(yè)應(yīng)用而言,直接提高存儲(chǔ)可靠性的方式是通過磁盤陣列——RAID。
RAID是Redundant Arrays of Independent Disks的縮寫,是把相同的數(shù)據(jù)存儲(chǔ)在多個(gè)硬盤的不同的地方。通過把數(shù)據(jù)放在多個(gè)硬盤上,輸入輸出操作能以平衡的方式交疊,改良性能,也延長(zhǎng)了平均故障間隔時(shí)間(MTBF),儲(chǔ)存冗余數(shù)據(jù)也增加了容錯(cuò), 從而提高了存儲(chǔ)的可靠性。
常見的RAID類型如下:
RAID 的兩個(gè)關(guān)鍵目標(biāo)是提高數(shù)據(jù)可靠性和 I/O 性能。實(shí)際上, 可以把RAID 看作成一種虛擬化技術(shù),它對(duì)多個(gè)物理磁盤虛擬成一個(gè)大容量的邏輯驅(qū)動(dòng)器。
提高存儲(chǔ)的容量——存儲(chǔ)網(wǎng)絡(luò)
盡管磁盤陣列也在一定程度上提高了存儲(chǔ)的容量, 但是難以滿足人們對(duì)存儲(chǔ)容量的需求。為了解決存儲(chǔ)空間的問題, 采用分而治之的方式,通過DAS將硬盤獨(dú)立為存儲(chǔ)空間。 DAS(Direct Attached Storage—直接連接存儲(chǔ))是指將存儲(chǔ)設(shè)備通過SCSI接口或光纖通道等直接連接到一臺(tái)主機(jī)上。DAS 就是一組磁盤的集合體,數(shù)據(jù)讀取和寫入等也都是由主機(jī)來(lái)控制。 然而,DAS 沒法實(shí)現(xiàn)多主機(jī)共享磁盤空間的問題。
為了解決共享的問題,于是有了 SAN ( Storage Area Network)————存儲(chǔ)網(wǎng)絡(luò)。SAN 網(wǎng)絡(luò)由于不會(huì)直接跟磁盤交互,而是解決數(shù)據(jù)存取的問題,使用的協(xié)議比 DAS 的層面要高。對(duì)于存儲(chǔ)網(wǎng)絡(luò)而言,對(duì)帶寬的要求非常高,因此 SAN 網(wǎng)絡(luò)下,光纖成為連接的基礎(chǔ)。光纖上的協(xié)議比以太網(wǎng)協(xié)議更簡(jiǎn)潔,性能也更高。
從數(shù)據(jù)層面來(lái)看,存儲(chǔ)空間的共享可以體現(xiàn)為文件的共享。NAS(Network Attached Storage)是將存儲(chǔ)設(shè)備通過標(biāo)準(zhǔn)的以太網(wǎng),連接到一組主機(jī)上,N是組件級(jí)的存儲(chǔ)方法,能夠解決迅速增加存儲(chǔ)容量的需求。也就是說(shuō),NAS從文件系統(tǒng)層面解決存儲(chǔ)的擴(kuò)容問題。
NAS和SAN本質(zhì)的不同在文件管理系統(tǒng)的不同。在 SAN中,文件管理系統(tǒng)分別在每一個(gè)應(yīng)用服務(wù)器上;而NAS是每個(gè)應(yīng)用服務(wù)器通過網(wǎng)絡(luò)共享協(xié)議(如NFS等)使用同一個(gè)文件管理系統(tǒng)。NAS的出發(fā)點(diǎn)是在應(yīng)用、用戶和文件以及它們共享的數(shù)據(jù)上;而SAN的出發(fā)點(diǎn)在磁盤以及聯(lián)接它們的基礎(chǔ)設(shè)施架構(gòu)。
三者之間的關(guān)系如下圖所示:
一般存儲(chǔ)系統(tǒng)的應(yīng)用
存儲(chǔ)是我們軟件產(chǎn)品和服務(wù)的必備環(huán)節(jié),常見的存儲(chǔ)系統(tǒng)應(yīng)用有:
- 配置數(shù)據(jù)服務(wù):只讀訪問
- 緩存系統(tǒng):有/無(wú)持久化
- 文件系統(tǒng):目錄/POSIX
- 對(duì)象系統(tǒng):Blob/KV
- 表格系統(tǒng):Column/SQL
- 數(shù)據(jù)庫(kù)系統(tǒng):滿足ACID
- 備份系統(tǒng):冷存儲(chǔ)/延遲讀
- ......
在使用存儲(chǔ)系統(tǒng)的時(shí)候,我們可能需要關(guān)注的指標(biāo):
- 存儲(chǔ)成本
- 功能: 讀/寫/列索引/條件查詢/事務(wù)/權(quán)限。。
- 性能:讀寫的 吞吐/IOPS/延時(shí)/負(fù)載均衡。。。
- 可用性
- 可靠性
- 可擴(kuò)展性
- 一致性
存儲(chǔ)引擎是存儲(chǔ)系統(tǒng)中的發(fā)動(dòng)機(jī),直接決定存儲(chǔ)系統(tǒng)的性能和功能,實(shí)現(xiàn)了存儲(chǔ)系統(tǒng)的增/刪/改/查,在數(shù)據(jù)庫(kù)系統(tǒng)中廣泛采用。 常見的存儲(chǔ)引擎有:哈希存儲(chǔ)引擎,B樹存儲(chǔ)引擎(磁盤索引節(jié)省內(nèi)存)和 LSM樹存儲(chǔ)引擎(隨機(jī)寫轉(zhuǎn)為順序?qū)懀?/p>
分布式存儲(chǔ)系統(tǒng)應(yīng)用——云服務(wù)
分布式存儲(chǔ)系統(tǒng)一般采用可擴(kuò)展的系統(tǒng)結(jié)構(gòu),利用多臺(tái)存儲(chǔ)服務(wù)器分擔(dān)存儲(chǔ)負(fù)載,利用位置服務(wù)器定位存儲(chǔ)信息,不但提高了系統(tǒng)的可靠性、可用性和存取效率,而且易于擴(kuò)展。
分布式存儲(chǔ)的應(yīng)用場(chǎng)景一般分為三種:
- 對(duì)象存儲(chǔ): 也就是通常的鍵值存儲(chǔ),其接口就是簡(jiǎn)單的GET,PUT,DEL和其他擴(kuò)展
- 塊存儲(chǔ): 通常以QEMU Driver或者Kernel Module的方式存在,需要實(shí)現(xiàn)Linux的Block Device接口或者QEMU提供的Block Driver接口,如AWS的EBS,青云的云硬盤,百度云的云磁盤等等
- 文件存儲(chǔ): 支持POSIX的接口,提供了并行化的能力,如Ceph的CephFS,但是有時(shí)候又會(huì)把GFS,HDFS這種非POSIX接口的類文件存儲(chǔ)接口算成此類。
一般地,對(duì)象存儲(chǔ)通常以大文件為主,要求足夠的IO帶寬。塊存儲(chǔ):即能應(yīng)付大文件讀寫,也能處理好小文件讀寫,塊存儲(chǔ)要求的延遲是***的。文件存儲(chǔ)需要考慮目錄、文件屬性等等的支持,對(duì)并行化的支持難度較大,通過具體實(shí)現(xiàn)來(lái)定義接口,可能會(huì)容易一點(diǎn)。
實(shí)現(xiàn)一個(gè)分布式存儲(chǔ)系統(tǒng),通常會(huì)涉及到元數(shù)據(jù),分區(qū),復(fù)制,容錯(cuò)等諸多方面。分布式設(shè)計(jì)采用主從、全分布式或者是兼而有之, 底層的存儲(chǔ)可以依賴本地文件系統(tǒng)的接口,或者實(shí)現(xiàn)一個(gè)簡(jiǎn)單的物理塊管理,但都不是相對(duì)容易的事。
幸運(yùn)的是,分布式存儲(chǔ)系統(tǒng)已經(jīng)成為了云服務(wù)的基礎(chǔ)能力,尤其是對(duì)象存儲(chǔ),如七牛、S3、OSS、BOS 等等, 已經(jīng)是標(biāo)配了。有了面向云服務(wù)的存儲(chǔ), 使我們更多聚焦在業(yè)務(wù)本身,各種存儲(chǔ)帶來(lái)的煩惱會(huì)逐漸隨風(fēng)而逝么?!
【本文來(lái)自專欄作者“老曹”的原創(chuàng)文章,作者微信公眾號(hào):喔家ArchiSelf,id:wrieless-com】
戳這里,看該作者更多好文
分享名稱:老碼農(nóng)眼中的存儲(chǔ)是什么樣子
當(dāng)前鏈接:http://fisionsoft.com.cn/article/djsppoo.html


咨詢
建站咨詢
