1、概述
在“系統(tǒng)存儲”專題中,我們將按照“從上至下”的順序向讀者介紹整個“系統(tǒng)存儲”體系。在這個專題中我們將至少介紹機(jī)械硬盤的主要結(jié)構(gòu)、磁盤陣列的分類、操作系統(tǒng)的EXT文件系統(tǒng)、NAS文件共享存儲方案、分布式文件系統(tǒng)重要技術(shù)點和分布式文件系統(tǒng)示例。最后如果有時間我們將自行設(shè)計一款分布式文件系統(tǒng)。下圖可以大致描述筆者的寫作思路:
本專題首先會花費幾篇文章向讀者介紹塊存儲的知識,包括最底層機(jī)械硬盤、固態(tài)硬盤的構(gòu)造結(jié)構(gòu)和工作過程。塊存儲的知識中我們還將介紹磁盤陣列技術(shù),包括磁盤陣列的組織方式和設(shè)備類型。最后塊存儲知識中我們介紹操作系統(tǒng)中的文件系統(tǒng),包括EXT系列文件系統(tǒng)和XFS文件系統(tǒng)(會順帶提到Windows操作系統(tǒng)使用的NTFS文件系統(tǒng))。接下來的幾篇文章我們會介紹搭建在塊存儲方案上的關(guān)系型數(shù)據(jù)庫,文章會主要講解Mysql數(shù)據(jù)庫,包括MySQL數(shù)據(jù)庫中最常被使用的InnerDB存儲引擎、索引構(gòu)造方式以及MySQL數(shù)據(jù)庫集群的幾種構(gòu)造方式。
由于在《標(biāo)準(zhǔn)Web系統(tǒng)的架構(gòu)分層》這篇文章中,筆者已經(jīng)大致說明了系統(tǒng)存儲專題的寫作過程,所以本文就直接開始塊存儲技術(shù)的介紹了。筆者計劃花費兩到三篇文章的篇幅,向大家介紹塊存儲技術(shù)的主要知識點。
2、塊存儲方案基本構(gòu)成
塊存儲技術(shù)的構(gòu)成基礎(chǔ)是最下層的硬件存儲設(shè)備,這些硬件存儲設(shè)備可能是機(jī)械硬盤也可能是固態(tài)硬盤。一個操作系統(tǒng)下可以獨立控制多個硬件存儲設(shè)備,但是這些硬件存儲設(shè)備的工作相對獨立,通過Centos操作系統(tǒng)的df命令看到的也是幾個獨立的設(shè)備文件。通過陣列控制層的設(shè)備可以在同一個操作系統(tǒng)下協(xié)同控制多個存儲設(shè)備,讓后者在操作系統(tǒng)層被視為同一個存儲設(shè)備。
操作系統(tǒng)控制多個獨立的存儲設(shè)備。下圖表示的三個硬盤設(shè)備在操作系統(tǒng)下獨立工作,在操作系統(tǒng)下顯示了三個設(shè)備文件:
操作系統(tǒng)通過陣列控制設(shè)備控制多個存儲設(shè)備。陣列控制設(shè)備在市場上從低端到高端有很多選擇。目前市場上的一些主板就自己集成了陣列控制芯片,如果中小企業(yè)需要硬盤陣列設(shè)備可以購買民用級產(chǎn)品,市場價格普遍在幾千塊左右。高端設(shè)備可以購買IBM/EMC提供的商業(yè)級/工業(yè)級設(shè)備,市場價格從幾萬到幾千萬不等。筆者將在本專題中詳細(xì)介紹硬盤陣列的重要技術(shù)知識點。
為什么操作系統(tǒng)層可以做到以上兩種存儲設(shè)備的組織方案同時兼容呢?因為操作系統(tǒng)層通過各種文件系統(tǒng)規(guī)則,可以過濾掉各種存儲設(shè)備的不同硬件特性。EXT1、EXT2、EXT3、EXT4系列文件系統(tǒng)和XFS文件系統(tǒng)都是Linux操作系統(tǒng)下常用的文件系統(tǒng),Btrfs文件系統(tǒng)是最近今年Linux操作系統(tǒng)下越來越流行的新一代操作系統(tǒng)。這些文件系統(tǒng)的共同特點是:通過文件系統(tǒng)內(nèi)部能夠辨識的一個文件索引結(jié)構(gòu)規(guī)范對下層的硬件設(shè)備結(jié)構(gòu)進(jìn)行封裝,以便起到屏蔽和代理操作下層硬件結(jié)構(gòu)的目的。 那么當(dāng)下層存儲設(shè)備不是機(jī)械硬盤而是固態(tài)硬盤又或者是陣列控制設(shè)備時,又是怎樣的工作原理呢?本專題中將會一一解答這些問題。對于操作系統(tǒng)中的文件系統(tǒng),我們將著重介紹EXT系列文件系統(tǒng)的結(jié)構(gòu)。
3、機(jī)械硬盤
3-1、機(jī)械硬盤結(jié)構(gòu)
現(xiàn)在的機(jī)械硬盤技術(shù)都非常成熟了,存儲容量也出現(xiàn)了幾何級增長。但是機(jī)械硬盤的基本結(jié)構(gòu)卻一直沒有太大的變化:它基本上是由機(jī)械臂(磁頭臂)、主軸、多個成對的磁頭和磁面構(gòu)成。在每個磁面上被分成多個磁道、多個扇面和多個扇區(qū),它們的具體存在形式如下:
-
磁面上會有多個磁道,它們在一個磁面上擁有不同的磁道編號。從磁面最外圍離主軸最遠(yuǎn)的磁道到磁面最內(nèi)側(cè)離主軸最近的磁道,它們的編號從0開始,分別是0、1、2、3、4…….N(N大于等于10000,依據(jù)硬盤制作工藝不同而不同)。磁頭將會順著磁道基于磁面的轉(zhuǎn)動讀取數(shù)據(jù),并且可以在各個磁道間切換位置。
-
實際情況下,外部將要存儲到硬盤上的數(shù)據(jù)不會一次性寫滿整個磁道,讀取數(shù)據(jù)到外部時也不需要讀取整個磁道的數(shù)據(jù)。這是因為一個磁道被分為多個弧段,這些弧段稱之為扇區(qū)。扇區(qū)是硬盤上存儲數(shù)據(jù)的最基本物理單元。注意,目前市場上無論哪個供應(yīng)商提供的機(jī)械硬盤產(chǎn)品,每個物理扇區(qū)單元固定的存儲容量都是512字節(jié)。只是根據(jù)硬盤密度不一樣,單位磁面下的扇區(qū)數(shù)量也不一樣。既然扇區(qū)是數(shù)據(jù)存儲的基本單元,就意味著一次硬盤讀寫操作的最小數(shù)據(jù)量就是512字節(jié)。
-
那么問題來了,是不是覺得512字節(jié)太小了點?是的,很多時候操作系統(tǒng)層面請求讀寫操作的文件都會大于一個扇區(qū)的單位容量。那么在物理層面上就需要兩個甚至更多個扇區(qū)來存儲這個文件,那么怎樣來規(guī)劃存儲一個文件的若干扇區(qū)在磁面上的分布,從而達(dá)到減少讀取時間的目的呢?
-
操作系統(tǒng)層面會將物理硬盤上兩個或者多個能夠連續(xù)讀取的扇區(qū)組成合并成一個區(qū)域,稱之為“簇”。注意,這兩個或者多個能夠連續(xù)讀取的扇區(qū)不一定在物理上是連續(xù)的。這是什么原因呢?這是因為硬盤轉(zhuǎn)動的速度很快(標(biāo)準(zhǔn)速度為7200轉(zhuǎn)/分),當(dāng)磁頭完成一個“扇區(qū)1”的讀寫后還來不及讀取下一個連續(xù)的“扇區(qū)2”相鄰的扇區(qū)就“飛”過去了,要等磁面再轉(zhuǎn)動一圈到預(yù)定“扇區(qū)2”的位置才能繼續(xù)進(jìn)行讀寫。
-
所以一個簇在物理磁面的分布可能是不連續(xù)的。實際上各個硬盤生產(chǎn)商都會設(shè)置一個“跳躍因子”來確定能夠連續(xù)讀取的扇區(qū)。如下圖所示,四個不存在于連續(xù)物理位置的扇區(qū)構(gòu)成一個簇。這樣保證了磁面在旋轉(zhuǎn)一圈的情況下就可以完成一個簇的全部讀寫。
最后說明一點,雖然扇面是硬件層面上機(jī)械磁盤讀取數(shù)據(jù)的最小單元,但是“簇”才是操作系統(tǒng)層面上讀取磁盤數(shù)據(jù)的最小單元。我們后文將講解EXT文件系統(tǒng)和Btrfs文件系統(tǒng),這兩種文件系統(tǒng)定義的簇大小是不一樣的。例如EXT文件系統(tǒng)的族大小可以有1KB(兩個扇區(qū))、2KB(四個扇區(qū))、4KB(八個扇區(qū))等多種選擇。那么如果一個文件太小,不需要用完一個簇怎么辦呢?沒辦法,它有需要使用至少一個簇的硬盤空間。也就是說,在操作系統(tǒng)存儲一個文件時,即使一個簇沒有占滿,剩下的簇空間也不能再使用了。這就是為什么一個文件在操作系統(tǒng)上有兩個大小:一個是文件的實際大小、另一個是文件占用硬盤空間的大小。
3-2、機(jī)械硬盤性能瓶頸
3-2-1、影響機(jī)械硬盤性能的因素
當(dāng)需要從硬盤上讀取一個文件是,首先會要求磁頭定位到這個文件的起始扇區(qū)。這個定位過程包括兩個步驟:一個是磁頭定位到對應(yīng)的磁道,然后等待主軸馬達(dá)帶動盤片轉(zhuǎn)動到正確的位置,這個過程所花費的時間被稱為尋址時間。也就是說尋址時間實際上包含兩部分:磁頭定位到磁道的時間為尋道時間,等待盤片轉(zhuǎn)動到正確位置的時間稱為旋轉(zhuǎn)等待時間。
硬盤尋址的目的是為了找到將要讀取的文件的起始扇區(qū),并開始去取數(shù)據(jù)。這就可以解釋為什么硬盤上讀取一個100MB大小的文件和讀取1000個100KB大小的文件時間是完全不一樣的現(xiàn)象了:通常來說一個100MB的文件是存儲在硬盤上可以連續(xù)讀取的扇區(qū)上的,也就是說當(dāng)硬盤需要讀取這個文件時只需要進(jìn)行一次尋址(為什么說是“通常”呢?因為前提是硬盤上至少要有一端連續(xù)空白的扇區(qū),如果此時硬盤上碎片太多可能就找不到這樣的連續(xù)空白區(qū)域了);而讀取1000個文件時,由于這些文件的起始存儲位不連續(xù),所以每次都要進(jìn)行尋址操作。尋址時間是評價機(jī)械硬盤性能的重要指標(biāo),這個指標(biāo)和硬盤轉(zhuǎn)數(shù)、磁頭數(shù)有直接關(guān)系:
-
硬盤轉(zhuǎn)速越快的硬盤,在同樣的尋址算法控制條件下將能夠更快的將正確的扇區(qū)轉(zhuǎn)動到磁頭下方。但是硬盤轉(zhuǎn)速也不能做得無限快,因為硬盤轉(zhuǎn)速越快要求的磁面工藝、主馬達(dá)工藝也就越高,并且產(chǎn)生的噪音、溫度也會成幾何級增加。現(xiàn)在民用級、商用級和工業(yè)級硬盤上最常采用三種轉(zhuǎn)速選擇:5400轉(zhuǎn)/分、7200轉(zhuǎn)/分和10000轉(zhuǎn)/分。
-
磁頭數(shù),現(xiàn)在的機(jī)械硬盤中一般都包含了多個盤片并且分別使用獨立的磁頭。這樣做的主要作用是在硬盤密度不變的情況下增加機(jī)械硬盤的容量。實際上這樣的做法也可以增加一定的硬盤性能,因為讀取存儲在不同磁面上的文件時,它們的尋道時間可以相對獨立。但是其對性能的提示只能是有限的,因為這些盤片共享同一個主軸馬達(dá)。
機(jī)械硬盤的工作原理導(dǎo)致了它的工作性能會遠(yuǎn)遜于內(nèi)存,現(xiàn)在主流的7200轉(zhuǎn)硬盤外部傳輸速度的理論峰值大概也就是200MB/s。那么問題又來了,天才的硬件工程師難道就沒有辦法增加機(jī)械硬盤讀寫性能了嗎?
答案是否定的,硬件工程師為機(jī)械硬盤集成了緩存,并采用預(yù)讀機(jī)制讀取當(dāng)前扇區(qū)的臨近扇區(qū)。舉個例子,當(dāng)硬盤讀取一個文件所在扇區(qū)時,會將這個扇區(qū)臨近的若干扇區(qū)上的數(shù)據(jù)一同讀取出來并存儲到硬盤緩存中。這樣做的原因是依據(jù)計算機(jī)科學(xué)中得一個著名原理:局部性原理。
局部性原理包括三層含義。時間局部性,如果一個信息項正在被訪問,那么在近期它很可能被再次訪問?臻g局部性,在近期將要被使用的信息很可能與現(xiàn)在正在使用的信息在空間地址上是臨近的。順序局部性,在典型程序中,除轉(zhuǎn)移類指令外,大部分指令是順序進(jìn)行的。局部性是所有高速緩存設(shè)計的基本原理依據(jù)。
說人話,局部性原理在硬盤硬件設(shè)備設(shè)計中被應(yīng)用的依據(jù)是:當(dāng)一個文件被讀取時,在它臨近扇區(qū)所存儲的文件數(shù)據(jù)也將在近期被讀取。所以硬盤會預(yù)先讀取后者到緩存中,以便在不久的將來,這些數(shù)據(jù)被請求讀取時直接從緩存中向外部設(shè)備輸出文件數(shù)據(jù)。
局部性原理不止適合高速緩存這樣的硬件設(shè)計,它也適用于軟件設(shè)計:一個程序90%的時間運行在10%的代碼上。
3-2-2、順序讀寫和隨機(jī)讀寫
上一小節(jié)已經(jīng)提到硬盤的順序讀寫和隨機(jī)讀寫有非常大的性能差異,其中主要的原因是兩者尋址操作上所耗費的時間存在巨大差異。那么順序讀寫和隨機(jī)讀寫的差異到底有多大呢?僅僅是靠上一小節(jié)的文字描述顯然不能給讀者數(shù)值化的認(rèn)識,所以在本小節(jié)中我們將使用一款名叫CrystalDiskMark的測試軟件,讓讀者具體體會一下兩者的巨大區(qū)別:
以上是筆者編寫文稿使用的某品牌筆記本上5400轉(zhuǎn)機(jī)械硬盤的測試截圖(題外話,這款筆記本用起來真想罵人),這個機(jī)械硬盤屬于中低端硬盤,但是相同級別的硬盤在萬元級以下的筆記本上卻被大量使用,所以這個測試結(jié)果很能說明一些問題。首先解釋一下以上截圖中的幾個主要項目:
-
在測試結(jié)果的上方寫明了這是一個針對E盤符的測試,每一單項所測試的讀寫數(shù)據(jù)總量為500MB,并且每個單項測試分別執(zhí)行5次。執(zhí)行5次后綜合每次的測試結(jié)果取平均值,最終形成這個單項的測試結(jié)果。
-
“Seq”和“Seq Q32T1”這兩個選項分別代表沒有IO隊列的單線程順序讀寫和一個深度為32的IO隊列的單線程順序讀寫,其中Q32代表隊列深度為32,T1表示IO線程數(shù)為1。這個隊列長度和IO線程數(shù)量都可以在CrystalDiskMark進(jìn)行調(diào)整。
-
4K表示進(jìn)行小文件讀寫測試時這些小文件的大小,這些4K文件將進(jìn)行隨機(jī)讀和隨機(jī)寫測試。4K測試項是衡量固態(tài)硬盤性能的重要測試項,直接描述了固態(tài)硬盤的性能,這個我們將在下文進(jìn)行說明。
從上圖的測試結(jié)果來看,順序讀寫的性能遠(yuǎn)遠(yuǎn)高于隨機(jī)讀寫的性能,使用了IO隊列的讀性能又遠(yuǎn)遠(yuǎn)高于沒有使用IO隊列的讀性能(且寫性能基本持平)。當(dāng)然以上的測試數(shù)值和選用的機(jī)械硬盤型號是密切相關(guān)的,但無論數(shù)值結(jié)果如何變化,最后都會符合以上所描述的性能規(guī)則。
例如如果您對7200轉(zhuǎn)企業(yè)級硬盤進(jìn)行測試,那么所有測試項的橫向數(shù)值會高出很多;如果您的INTEL SSD 企業(yè)級固態(tài)硬盤卡進(jìn)行測試,那么橫向數(shù)值又會再高出很多倍。下圖展示了INTEL SSD 750 企業(yè)級固態(tài)硬盤卡的測試結(jié)果(截圖來源于網(wǎng)絡(luò)):
4、固態(tài)硬盤
看了以上來源于網(wǎng)絡(luò)的截圖后,是不是感覺整個世界瞬間清爽了。目前固態(tài)硬盤的生產(chǎn)工藝日趨成熟,單位容量價格也趨于下降通道。固態(tài)硬盤替代機(jī)械硬盤是一個必然趨勢,遲早有一天后者將被完全替換。本節(jié)向讀者介紹固態(tài)硬盤大致的構(gòu)成結(jié)構(gòu)和工作過程。
4-1、固態(tài)硬盤結(jié)構(gòu)
固態(tài)硬盤的結(jié)構(gòu)和工作原理和機(jī)械硬盤大不一樣。它主要由大量NAND Flash顆粒、Flash存儲芯片、SSD控制器控制芯片構(gòu)成。他們?nèi)叩年P(guān)系通過下圖進(jìn)行表示:
在一個固態(tài)硬盤上會有若干Flash存儲芯片(可能有2顆、4顆、8顆等數(shù)值),每顆存儲芯片內(nèi)部包含大量NAND Flash顆粒,目前(2016年)NAND Flash顆粒的制作工藝已經(jīng)達(dá)到12nm(2012年的主流工藝是90nm)。無論NAND Flash顆粒的制作工藝如何,每一個單位的存儲容量都是512字節(jié)。多個Flash存儲芯片被一個SSD主控芯片,目前能夠生成SSD主控芯片的廠商不多,例如:SandForce、Marvell、三星、JMicron、Intel等。SSD主控芯片的主要工作包括識別來自于外部接口(PCI-E、SATA等)的控制指令、在將數(shù)據(jù)寫入Flash存儲芯片前接收和壓縮這些數(shù)據(jù)、在將數(shù)據(jù)送入內(nèi)存前解壓從Flash存儲芯片讀取的數(shù)據(jù)、完成 LBA和PBA的映射轉(zhuǎn)換(這個過程將在下一小節(jié)進(jìn)行介紹)等工作。
雖然一個單位的NAND Flash顆粒存儲容量是512字節(jié),但是SSD主控芯片進(jìn)行數(shù)據(jù)操作的最小單位并不是512字節(jié)。在SSD操作規(guī)則中定義的一個數(shù)據(jù)操作的最小單位為4KB,它包括了8個單位的NAND Flash顆粒稱為Flash Page(有的資料中稱為Host Page)。如果將固態(tài)硬盤和機(jī)械硬盤進(jìn)行對比,那么機(jī)械硬盤中的一個最小的操作單位就是扇區(qū),單位大小就是512字節(jié);固態(tài)硬盤中的一個最小操作單位就是Flash Page,單位大小為4K。這就解釋了上文中提到的硬盤讀寫性能測試中,為什么測試軟件會專門針對4K大小的文件進(jìn)行讀寫測試了。
既然固態(tài)硬盤中最小的操作單位為4K,那么在進(jìn)行操作系統(tǒng)文件系統(tǒng)格式化的時候就需要注意了。文件系統(tǒng)中設(shè)置的一個簇大小不能小于4K且最好為4K的整數(shù)倍,這樣才能保證充分發(fā)揮固態(tài)硬盤的性能。
固態(tài)硬盤不依靠磁頭定位和主馬達(dá)旋轉(zhuǎn)確定數(shù)據(jù)的物理位置,所以固態(tài)硬盤沒有尋址時間。SSD控制芯片擁有的多個控制通道可以讓它同時向多個Flash存儲芯片發(fā)送讀寫指令,這類似于機(jī)械磁盤上可以獨立工作的磁頭臂,但卻沒有共享主軸馬達(dá)的限制。這些特點足以保證固態(tài)硬盤的性能遠(yuǎn)遠(yuǎn)高于機(jī)械硬盤。這也讓我們認(rèn)識到,以下因素影響著固態(tài)硬盤的最終性能:
-
SSD主控芯片:上文已經(jīng)說到SSD主控芯片幾乎完成了固態(tài)硬盤上所涉及的所有控制指令操作和數(shù)據(jù)讀寫操作。不同的SSD主控芯片內(nèi)置的FTL算法不一樣、數(shù)據(jù)壓縮/解壓算法不一樣、控制通道數(shù)也不一樣,所以固態(tài)硬盤采用哪種SSD主控芯片將直接影響其性能,目前最好的控制芯片來自于Intel,最廣泛使用的控制芯片來自于三星。
-
FLash存儲芯片工藝:本文提到的NAND Flash顆粒只是其中一種使用最廣泛的型號,實際上還有NOR Flash顆粒等。NAND Flash顆粒又分為兩種子類型:MLC存儲顆粒與SLC存儲顆粒。在相同單位體積下,MLC可以提供兩倍于SLC的存儲空間,而后者在存儲響應(yīng)時間和存儲穩(wěn)定性上又高于前者。所以MLC存儲顆粒市場占有率更高,SLC存儲顆粒更傾向于企業(yè)級市場。
核心關(guān)注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:架構(gòu)設(shè)計:系統(tǒng)存儲——塊存儲方案(一)
本文網(wǎng)址:http://www.ezxoed.cn/html/support/11121519959.html