簡(jiǎn)介
在工程架構(gòu)領(lǐng)域里,存儲(chǔ)是一個(gè)非常重要的方向,這個(gè)方向從底至上,我分成了如下幾個(gè)層次來(lái)介紹:
硬件層:講解磁盤(pán),SSD,SAS, NAS, RAID等硬件層的基本原理,以及其為操作系統(tǒng)提供的存儲(chǔ)界面;
操作系統(tǒng)層:即文件系統(tǒng),操作系統(tǒng)如何將各個(gè)硬件管理并對(duì)上提供更高層次接口;
單機(jī)引擎層:常見(jiàn)存儲(chǔ)系統(tǒng)對(duì)應(yīng)單機(jī)引擎原理大概介紹,利用文件系統(tǒng)接口提供更高級(jí)別的存儲(chǔ)系統(tǒng)接口;
分布式層:如何將多個(gè)單機(jī)引擎組合成一個(gè)分布式存儲(chǔ)系統(tǒng);
查詢層:用戶典型的查詢語(yǔ)義表達(dá)以及解析;
主板結(jié)構(gòu)
在進(jìn)入對(duì)硬件層的分析前,讓我們來(lái)看看電腦主板上各個(gè)原件之間的關(guān)系。
上圖展示了主板上主要元件的結(jié)構(gòu)圖,以及他們之間的總線連接情況。核心連接點(diǎn)是北橋和南橋兩塊芯片。
其中北橋比較吊,連接的都是些高速設(shè)備。一般來(lái)說(shuō)只連接CPU,內(nèi)存和顯卡幾種設(shè)備。不過(guò)近些年也出現(xiàn)了PCIE2.0的高速接口接入北橋,使得一些符合標(biāo)準(zhǔn)的設(shè)備就可以接入北橋。
而南橋就相對(duì)搓了,他負(fù)責(zé)接入所有低速設(shè)備。什么USB,鼠標(biāo),磁盤(pán),聲卡等等都是接在南橋上的。而不同的設(shè)備用途和協(xié)議都有很大不同,所以設(shè)計(jì)了不同的交互協(xié)議。由于歷史原因,不同設(shè)備傳輸介質(zhì)可能都不一樣,導(dǎo)致總線上布線十分復(fù)雜。所以到目前為止,主流設(shè)備都已經(jīng)統(tǒng)一成為了PCI總線,大家一起用這條總線。
讀寫(xiě)過(guò)程
我們來(lái)模擬一下CPU要從磁盤(pán)讀入一份數(shù)據(jù)的過(guò)程:
CPU發(fā)出一條指令說(shuō)哥要準(zhǔn)備讀數(shù)據(jù)了
這條指令依次通過(guò)系統(tǒng)總線,橋間總線,PCI總線傳遞到了磁盤(pán)控制器??刂破魇盏街噶盍酥笾肋@是一次讀請(qǐng)求,且讀完了是否要發(fā)中斷的信息。做好一些準(zhǔn)備工作,等待讀取數(shù)據(jù)。
CPU再發(fā)出一條指令說(shuō)要讀取的邏輯地址
這條指令還是通過(guò)系列總線發(fā)給磁盤(pán)控制器之后。磁盤(pán)控制器就忙活了,查找邏輯快對(duì)應(yīng)的物理塊地址,查找,尋道等工作,就開(kāi)始讀取數(shù)據(jù)了。
CPU再發(fā)出一條指令說(shuō)讀入內(nèi)存的地址
當(dāng)收到這條指令之后,CPU就不管了,他告訴一個(gè)叫DMA的總管,說(shuō)接下來(lái)就靠你了。DMA設(shè)備會(huì)接管總線,負(fù)責(zé)將磁盤(pán)數(shù)據(jù)通過(guò)PCI總線,橋間總線,內(nèi)存總線同步到內(nèi)存指定位置。
寫(xiě)操作的過(guò)程是類似的,就不累述了。
上面我們只是講解了在主板上數(shù)據(jù)流轉(zhuǎn)的過(guò)程,但是還有一個(gè)黑盒,就是磁盤(pán)控制器。這哥們到底是怎么管理的各個(gè)磁盤(pán)呢?在下一節(jié)我們將為你描述。
存儲(chǔ)介質(zhì)原理
上面講了計(jì)算機(jī)讀取數(shù)據(jù)的過(guò)程。這一章我們來(lái)大概說(shuō)一下常見(jiàn)的存儲(chǔ)介質(zhì)的存儲(chǔ)原理。
磁帶
磁帶就跟小時(shí)候聽(tīng)歌的時(shí)候的磁帶類似。一條黑色帶子上面有很多小的磁性粒子,根據(jù)粒子的南北級(jí)來(lái)判定0/1。
軟盤(pán)
軟盤(pán)比磁帶要先進(jìn)一點(diǎn),記錄數(shù)據(jù)的原理是一樣的,只是可以隨機(jī)讀取,而磁帶只能順序讀取。
硬盤(pán)
硬件原理
如果說(shuō)前兩個(gè)都是古老的東西,技術(shù)含量一般的話。硬盤(pán)就是一個(gè)很有技術(shù)含量的存儲(chǔ)設(shè)備了,主要包含三大設(shè)備:
電機(jī)的目的是控制磁臂精準(zhǔn)定位到磁道,一個(gè)磁道可能很小,要精準(zhǔn)定位到哪個(gè)地方是高科技。
盤(pán)面
盤(pán)面主要有兩點(diǎn)。一點(diǎn)是基板要足夠光滑平整,不能有任何瑕疵;一點(diǎn)是要將磁粉均勻的鍍到基板上。這里有兩個(gè)高科技,一個(gè)是磁粉的制造,一個(gè)是如何均勻的鍍到基板上。
磁頭
磁頭的主要難點(diǎn)是要控制好跟盤(pán)面的距離,跟軟盤(pán)類似,硬盤(pán)也是通過(guò)修改磁粉的南北極來(lái)記錄數(shù)據(jù)的。如果隔得太遠(yuǎn),就感知不到磁性數(shù)據(jù)了,隔得太近呢,又可能把盤(pán)面刮到。當(dāng)然0/1的表示并不是只有一個(gè)磁粉,而是一片區(qū)域的磁粉。
現(xiàn)在磁盤(pán)都是利用空氣動(dòng)力學(xué),將磁頭漂浮在盤(pán)面上面一點(diǎn)距離來(lái)控制磁頭和盤(pán)面的距離。但是當(dāng)硬盤(pán)停止工作不轉(zhuǎn)的時(shí)候,磁頭就肯定掉在盤(pán)面上了,所以一般盤(pán)面靠近圓心的地方一般都有一塊沒(méi)有磁粉的地方,用于安全??看蓬^。當(dāng)硬盤(pán)要開(kāi)始工作的時(shí)候,磁頭在同心圓里面起飛,飛起來(lái)了之后再移動(dòng)到其他地區(qū)。
不過(guò)我一直在想,是否可以有這樣的技術(shù),能在磁臂上裝多個(gè)磁頭,每個(gè)磁道對(duì)應(yīng)一個(gè),停止工作的時(shí)候就把磁臂固定在某個(gè)高度讓他不挨著盤(pán)面,這樣是不是能大大提高硬盤(pán)的讀寫(xiě)效率,因?yàn)檫@樣減少了尋道的時(shí)間。
基本概念
硬盤(pán)組成原理圖如下:
如上圖, 硬盤(pán)主要有如下幾個(gè)概念(概念比較簡(jiǎn)單,就不解釋了):
扇區(qū)
磁道
柱面
讀寫(xiě)過(guò)程
讀寫(xiě)過(guò)程得分成兩頭來(lái)說(shuō),一頭說(shuō)將數(shù)據(jù)從各個(gè)盤(pán)面中讀取出來(lái);一頭說(shuō)如何將數(shù)據(jù)送給計(jì)算機(jī)。
從盤(pán)面中讀取數(shù)據(jù)
我們知道再磁盤(pán)中,順序讀取會(huì)比隨機(jī)讀取快很多,那么有這么多盤(pán)面,磁道,這個(gè)順序到底是什么順序呢?
假設(shè)我們現(xiàn)在是再順序遍歷磁盤(pán)上的數(shù)據(jù),那么讀取順序是這樣的。首先讀完最上面一塊盤(pán)面的最外面一個(gè)磁道,等盤(pán)面旋轉(zhuǎn)完一圈之后,即這個(gè)磁道被讀取完畢,然后立即切換到第二塊盤(pán)面,讀第二塊盤(pán)面的最外面一個(gè)磁道,以此類推,直到讀完最底下一塊盤(pán)面。然后磁臂在向內(nèi)移動(dòng)一個(gè)磁道,重復(fù)剛才的過(guò)程,直到讀到最里面一個(gè)磁道。
其實(shí)再讀取過(guò)程中還會(huì)更復(fù)雜一點(diǎn),因?yàn)楸P(pán)面是一直勻速高速旋轉(zhuǎn)的,可能在一個(gè)扇區(qū)過(guò)度到下一個(gè)扇區(qū)的時(shí)候,就那么一點(diǎn)時(shí)間,可能存在誤差,導(dǎo)致下一個(gè)扇區(qū)的數(shù)據(jù)沒(méi)讀到。為了解決這個(gè)問(wèn)題,一般數(shù)據(jù)是在磁道上是間隔存儲(chǔ)的。假設(shè)一個(gè)數(shù)據(jù)有10個(gè)扇區(qū),分別為,d1,d2,。..,d10;為了說(shuō)明這個(gè)思想,我們假設(shè)一個(gè)磁道正好也有10個(gè)扇區(qū),分別為,s1,s2,。..s10。如果是緊挨著存放的話,那么扇區(qū)和數(shù)據(jù)的對(duì)應(yīng)關(guān)系為:[(s1,d1), (s2, d2), 。.. , (s10, d10)]。這樣就存在剛才說(shuō)的有誤差。那么間隔存儲(chǔ)的話,映射關(guān)系為:[(s1,d1), (s3,d2), (s5,d3), 。.., (s2, d10)]。
而且在切換盤(pán)面的時(shí)候,雖然是電子切換,但是速度還是會(huì)有一定延遲,下一個(gè)盤(pán)面和上一個(gè)盤(pán)面的起始點(diǎn)位置不能一一對(duì)應(yīng),也是會(huì)有一定錯(cuò)開(kāi)的。
在古老的磁盤(pán)里面,這些值可能還需要用戶來(lái)設(shè)置,不過(guò)現(xiàn)在都是廠商給咱們?cè)O(shè)置好,用戶不需要關(guān)心了。
由于磁臂的移動(dòng)要比盤(pán)面的切換要慢很多(一個(gè)是機(jī)械切換,一個(gè)是電子切換),所以為了減少磁臂的移動(dòng),所以如上的順序讀取會(huì)是先讀一個(gè)柱面,再讀取下一個(gè)磁道,而不是先讀完一個(gè)盤(pán)面,在讀下一個(gè)盤(pán)面。
那么既然磁臂的移動(dòng)如此的慢,剛才講了順序讀取的時(shí)候的磁臂移動(dòng)邏輯。那么在真實(shí)情況下,有大量隨機(jī)訪問(wèn)的情況下,磁臂是如何移動(dòng)的呢?這里就需要考慮常見(jiàn)的磁臂調(diào)度算法了:
RSS:隨機(jī)調(diào)度。這個(gè)就是扯蛋,只是拿來(lái)給別人做綠葉對(duì)比性能用的。
FIFO:先進(jìn)先出。這個(gè)對(duì)于隨機(jī)讀取來(lái)說(shuō),性能很不友好。
PRI:交給用戶來(lái)管理。這個(gè)跟FIFO類似,只不過(guò)優(yōu)先級(jí)是由用戶來(lái)指定的,不僅增加了用戶使用磁盤(pán)的成本,效率也不見(jiàn)得高。
SSTF:最短時(shí)間調(diào)度。這個(gè)是指磁頭總是處理離自己這次請(qǐng)求最近的一次請(qǐng)求處理。這樣最大的問(wèn)題就是會(huì)存在餓死的情況。
SCAN:電梯算法。在磁盤(pán)上往復(fù)。這個(gè)是比較常見(jiàn)的算法,跟電梯類似,磁臂就一個(gè)磁道一個(gè)磁道的動(dòng),移動(dòng)最外面或者最里面的磁道就轉(zhuǎn)向。這個(gè)算法不會(huì)餓死。
C-SCAN:類似電梯算法,只是單向讀取數(shù)據(jù)。磁臂總是再內(nèi)圈到外圈的時(shí)候讀取數(shù)據(jù),當(dāng)?shù)竭_(dá)外圈過(guò)后迅速返回內(nèi)圈,返回過(guò)程中不讀取數(shù)據(jù),在重復(fù)之前的過(guò)程。
LOOK:類似SCAN,只是會(huì)快速返回,如果前面沒(méi)有讀寫(xiě)請(qǐng)求就立即返回。
C-LOOK:類似C-SCAN和SCAN之間的關(guān)系。
一般來(lái)說(shuō),再I(mǎi)O比較少的情況下,SSTF性能會(huì)比較好,在IO壓力比較大的情況下,SCAN/LOOK算法會(huì)更優(yōu)秀。
大家可以到這里來(lái)看看硬盤(pán)讀取數(shù)據(jù)的視頻:http://v.ku6.com/show/2gl1CHY7iNa_CVLum3NQHg.html
將數(shù)據(jù)送給計(jì)算機(jī)
剛才我們從磁盤(pán)中讀到了數(shù)據(jù),接下來(lái)我們講解磁盤(pán)通過(guò)什么樣的接口跟計(jì)算機(jī)做交互。這個(gè)接口也叫磁盤(pán)管理協(xié)議。
磁盤(pán)管理協(xié)議的定義又分成兩部分:軟件和硬件。其中軟件是指指令級(jí),目前指令級(jí)就兩個(gè):ATA和SCSI;硬件代表數(shù)據(jù)傳輸方式,一般都是主板上的導(dǎo)線傳輸原理,但并不限制,數(shù)據(jù)甚至可以通過(guò)TCP/IP傳輸。定義一個(gè)協(xié)議需要同時(shí)定義了指令級(jí)以及硬件傳輸方式。
ATA
全稱是Advanced Technology Attachment,現(xiàn)在看起來(lái)不咋地,不過(guò)從名字看來(lái),當(dāng)時(shí)這個(gè)東西還是很高級(jí)的。
這個(gè)指令是上個(gè)世紀(jì)80年代提出的。按照硬件接口的不同,又分成了兩類,一類是并行ATA(PATA,一類是串行ATA(SATA)。一開(kāi)始流行起來(lái)的是PATA,也叫IDE。不過(guò)由于并行線抗干擾能力太差,排線占空間,不利電腦散熱。而更高級(jí)的SATA協(xié)議自從2000年被提出之后,很快PATA/IDE接口的磁盤(pán)就被歷史淘汰,目前的ATA接口的磁盤(pán)只有SATA磁盤(pán)了。
SCSI
全稱是Small Computer System Interface。也是上個(gè)世紀(jì)80年代提出來(lái)的,當(dāng)時(shí)設(shè)計(jì)他的目的就是為了小型服務(wù)器設(shè)計(jì)的磁盤(pán)交互接口。用該接口可以達(dá)到更大的轉(zhuǎn)速,更快的傳輸效率。但是價(jià)格也相對(duì)較高。
所以目前基本上在服務(wù)器領(lǐng)域SCSI磁盤(pán)會(huì)比較多,在PC機(jī)領(lǐng)域SATA硬盤(pán)會(huì)比較多。不過(guò)隨著SATA盤(pán)的進(jìn)化以及其得天獨(dú)厚的價(jià)格優(yōu)勢(shì),在服務(wù)器領(lǐng)域SATA也在逐步侵蝕SCSI的市場(chǎng)。
不過(guò)SCSI也不會(huì)坐以待斃,他按照PATA進(jìn)化成SATA的思路,自己也搞串行化,進(jìn)化出來(lái)了SAS(Serial Attach SCSI)接口。這個(gè)接口目前很對(duì)市場(chǎng)胃口,不僅價(jià)格低廉,而且性能也還不錯(cuò)。所以估計(jì)SATA淘汰PATA的一幕在不久的將來(lái)也會(huì)在SCSI領(lǐng)域里上演。
SCSI指令還可以通過(guò)Internet傳輸(iSCSI),通過(guò)FC網(wǎng)絡(luò)傳輸(FC-SCSI),這些我們會(huì)再后文提及。
ssd
硬件原理
ssd是近些年才火起來(lái)的存儲(chǔ)介質(zhì)。ssd一般有兩種,一種利用flash閃存為芯片,另一種直接用內(nèi)存(DRAM)作為存儲(chǔ)介質(zhì),只是在里面加了個(gè)電池,在斷電以后還能繼續(xù)用電池來(lái)維持?jǐn)?shù)據(jù)。
我們本文中講的ssd全部是都指代前者,即用flash閃存做存儲(chǔ)介質(zhì)。先來(lái)看一下ssd的存儲(chǔ)原理。
在磁盤(pán)中0/1的表示是用的磁粉的南北極的信息,在閃存中則用的是電子信號(hào)。他利用的是一種叫浮動(dòng)門(mén)場(chǎng)效應(yīng)晶體管作為基本存儲(chǔ)介質(zhì)。在該晶體管里面,主要是由兩個(gè)門(mén)電路構(gòu)成:控制門(mén)和浮動(dòng)門(mén)。在兩個(gè)門(mén)之間有一堆電子。當(dāng)控制門(mén)加上一個(gè)電勢(shì)的時(shí)候,電子就往浮動(dòng)門(mén)那邊跑,然后控制門(mén)斷開(kāi)電勢(shì),電子會(huì)儲(chǔ)存在浮動(dòng)門(mén)那邊(靠中間的二氧化硅絕緣層),則代表二進(jìn)制中的0;控制門(mén)加一個(gè)反向電勢(shì)的時(shí)候,電子跑回到控制門(mén)這邊,浮動(dòng)門(mén)那邊沒(méi)電子,代表二進(jìn)制中的1。這樣就通過(guò)檢測(cè)浮動(dòng)門(mén)那邊的電勢(shì)就能得到0或者1。而且現(xiàn)在有的ssd制造商,根據(jù)不同的電勢(shì),將一個(gè)晶體管表示的值從0/1拓展到0/1/2/3。這樣就使得存儲(chǔ)容量翻倍。這種類型的晶體管叫MLC(Multi Level Cell),相對(duì),只表示0/1的叫SLC(Single Level Cell)。不過(guò)一般而言,MLC的出錯(cuò)率也高很多,所以目前市面上主流產(chǎn)品還是SLC的。
了解了ssd的基本原理之后,我們來(lái)看看ssd是怎么組織這些晶體管的??慈缦聨讉€(gè)概念:
Page。一般一個(gè)Page為4K。則該P(yáng)age包含4K*8個(gè)晶體管,Page是ssd讀寫(xiě)的最小單元;
Block。一般128個(gè)Page組成一個(gè)Block,Block的概念非常重要,讀寫(xiě)數(shù)據(jù)的控制都是針對(duì)Block的,待會(huì)我們?cè)僦攸c(diǎn)講一下Block的概念;
Plane。一般2048個(gè)Block組成一個(gè)Plane;
一塊芯片再包含多個(gè)Plane,多個(gè)Plane之間可以并行操作。
Block的組織,見(jiàn)下圖:
如圖,可以看到block中的晶體管是按照井字型組織的。一橫排就代表一個(gè)Page,所以一個(gè)Block一般就有128行,4K*8列。當(dāng)然,由于還需要針對(duì)每個(gè)Page加一些糾錯(cuò)數(shù)據(jù),所以一般還會(huì)多一些列。
橫排是控制線,負(fù)責(zé)給電壓,來(lái)做充電放電的作用;豎排是讀取線,負(fù)責(zé)讀浮動(dòng)門(mén)里的電勢(shì)之用。
讀寫(xiě)過(guò)程
讀取的過(guò)程是這樣的:
假設(shè)要讀取第三行數(shù)據(jù),那么會(huì)給第三行控制線的電勢(shì)置位0,其他127行控制線都會(huì)給一個(gè)電勢(shì),這樣就能保證再豎排的讀取線上只讀到第三行的數(shù)據(jù),而讀不到其他數(shù)據(jù)??梢钥吹絪sd再讀取數(shù)據(jù)的時(shí)候不再需要尋道這些復(fù)雜的事情,速度會(huì)比傳統(tǒng)的磁盤(pán)塊很多。
而ssd寫(xiě)入就比較麻煩了,因?yàn)閟sd無(wú)法再一個(gè)block內(nèi)對(duì)部分cell充電,對(duì)部分cell放電,這樣信號(hào)會(huì)相互干擾從而造成不可預(yù)期的情況發(fā)生。那ssd怎么處理這個(gè)問(wèn)題呢,那就暴力了,把一個(gè)block的數(shù)據(jù)全部讀到ssd自帶的內(nèi)存當(dāng)中,并做好修改,接下來(lái)把整個(gè)block全部放電,即擦除所有數(shù)據(jù),最后再將內(nèi)存中整個(gè)block寫(xiě)回??梢钥吹?,即使是只修改一個(gè)bit的數(shù)據(jù),也需要大動(dòng)干戈,倒騰4K*128這么多數(shù)據(jù),所以ssd寫(xiě)數(shù)據(jù)的代價(jià)是很大的。但是瘦死的駱駝比馬大,比起機(jī)械硬盤(pán),還是要快好幾個(gè)數(shù)量級(jí)的。
而且,ssd還有一個(gè)很頭疼的問(wèn)題,就是隨著充放電次數(shù)的增加,中間的二氧化硅絕緣層絕緣效果會(huì)逐步降低,當(dāng)降低到一定程度之后浮動(dòng)門(mén)保存不住電子了的話,這個(gè)晶體管就算廢了。所以單個(gè)晶體管還有擦寫(xiě)次數(shù)壽命,目前主流的晶體管這個(gè)上限大概是10萬(wàn)的數(shù)量級(jí)。而MLC的更差,只有1萬(wàn)次左右。
那么針對(duì)如上兩個(gè)問(wèn)題,ssd目前一般都有哪些解決方案來(lái)應(yīng)對(duì)呢?
為了優(yōu)化寫(xiě)的時(shí)候的性能,一般ssd并不在寫(xiě)的時(shí)候做擦除。而是在寫(xiě)數(shù)據(jù)的時(shí)候,選擇另外一塊干凈的block寫(xiě)數(shù)據(jù)。對(duì)于老的block數(shù)據(jù),會(huì)做一個(gè)標(biāo)記,回頭定期做擦除工作;
對(duì)于壞掉的晶體管,可以通過(guò)額外的糾錯(cuò)位來(lái)實(shí)現(xiàn)。根據(jù)不同的糾錯(cuò)算法,可以容忍同一個(gè)Page中壞掉的位的個(gè)數(shù)也是不一樣的。如果超過(guò)上限,只能報(bào)告說(shuō)不可恢復(fù)的錯(cuò)誤。
常見(jiàn)存儲(chǔ)介質(zhì)性能數(shù)字
最后我們來(lái)對(duì)比一下目前主流的硬盤(pán)和ssd的參數(shù),這是筆者在工作中測(cè)試得到的數(shù)據(jù),測(cè)試數(shù)據(jù)為各種存儲(chǔ)介質(zhì)在4K大小下的隨機(jī)/順序 讀/寫(xiě)數(shù)據(jù),數(shù)字做了模糊化處理,保留了數(shù)量級(jí)信息,大家看個(gè)大概,心里有數(shù)即可:
測(cè)試項(xiàng)\磁盤(pán)類型 | SATA | SAS | SSD |
順序讀(MB/s) | 400 | 350 | 500 |
順序?qū)懀∕B/s) | 200 | 300 | 400 |
隨機(jī)讀(IOPS) | 700 | 1300 | 7w |
隨機(jī)寫(xiě)(IOPS) | 400 | 800 | 3w |
硬盤(pán)組合
上面一節(jié)中,我們了解了單個(gè)磁盤(pán)的存儲(chǔ)原理和讀寫(xiě)過(guò)程。在實(shí)際生產(chǎn)環(huán)境中,單個(gè)磁盤(pán)能提供的容量和性能還是有限,我們就需要利用一些組合技術(shù)將多個(gè)磁盤(pán)組合起來(lái)提供更好的服務(wù)。
這一節(jié),我們主要介紹各種磁盤(pán)組合技術(shù)。首先,我們會(huì)看一下最基本的組合技術(shù)RAID系列技術(shù);然后,我們?cè)诳匆幌赂笠?guī)模的集成技術(shù)SAN和NAS。
RAID
RAID技術(shù)是上個(gè)世紀(jì)80年代提出來(lái)的。
RAID0:條帶化。讀寫(xiě)效率都很高。但是容錯(cuò)很差。
RAID1:鏡像存儲(chǔ)。讀效率可達(dá)2倍,寫(xiě)的時(shí)候差不多。容錯(cuò)牛B。
RAID2 & RAID3:多加一塊校驗(yàn)盤(pán)。在RAID0的基礎(chǔ)之上多了容錯(cuò)性。RAID2和RAID3的區(qū)別是使用了不同的校驗(yàn)算法。而且這兩個(gè)的校驗(yàn)是針對(duì)bit的,所以讀寫(xiě)效率很高。
RAID4 & RAID5 & RAID6:這幾個(gè)都是針對(duì)block的,所以效率比RAID2&RAID3要更差一些。RAID4是沒(méi)有交錯(cuò),有一塊盤(pán)就是校驗(yàn)盤(pán);RAID5是有交錯(cuò),每塊盤(pán)都有數(shù)據(jù)和校驗(yàn)信息;RAID6是雙保險(xiǎn),存了兩個(gè)校驗(yàn)值。
目前用得比較多的就是Raid5和Raid1。
Raid的實(shí)現(xiàn)方式一般有兩種:軟Raid和硬Raid。軟Raid是指操作系統(tǒng)通過(guò)軟件的方式,對(duì)下封裝SCSI/SATA接口的硬盤(pán)操作,對(duì)上提供虛擬硬盤(pán)的接口,中間實(shí)現(xiàn)Raid對(duì)應(yīng)邏輯;硬Raid就是一個(gè)再普通的SCSI/SATA卡上加了一塊芯片,里面執(zhí)行可以執(zhí)行Raid對(duì)應(yīng)的邏輯。
現(xiàn)在一般的Raid實(shí)現(xiàn)方案都是硬Raid,因?yàn)檐汻aid有如下兩個(gè)確定:
占用額外的內(nèi)存和CPU資源;
Raid依賴操作系統(tǒng),所以操作系統(tǒng)本身無(wú)法使用Raid,如果操作系統(tǒng)對(duì)應(yīng)的那塊硬盤(pán)壞了,那么整個(gè)Raid就無(wú)法用了;
現(xiàn)在Raid卡一般都比較高級(jí),可以針對(duì)插在上面的多塊磁盤(pán)做多重Raid。比如這三塊磁盤(pán)做Raid5,另外兩塊做Raid1。然后對(duì)操作系統(tǒng)提供兩塊『邏輯盤(pán)』。這里的邏輯盤(pán)對(duì)操作系統(tǒng)而言就是一塊磁盤(pán),但實(shí)際底層可能是多塊磁盤(pán)。
邏輯盤(pán)不一定要占據(jù)整塊獨(dú)立的磁盤(pán),同樣RAID的幾塊盤(pán)也可以做成多塊邏輯盤(pán)。假設(shè)有三塊磁盤(pán)做成了Raid5,假設(shè)一共有200G空間,也可以從中在劃分成兩塊,每塊100G,相當(dāng)于用戶就看到了兩塊100G的磁盤(pán)。不過(guò)一般邏輯盤(pán)不會(huì)跨Raid實(shí)現(xiàn)。倒不是不能做,而是沒(méi)需求,而且對(duì)上層造成不一致的印象:這磁盤(pán)怎么忽快忽慢的呀。
這個(gè)邏輯盤(pán)還有一個(gè)英語(yǔ)名字:LUN(Logic Unit Number),現(xiàn)在存儲(chǔ)系統(tǒng)一般把硬件虛擬出來(lái)的盤(pán)叫『LUN』,軟件虛擬出來(lái)的盤(pán)叫『卷』。LUN這個(gè)名詞原本是SCSI協(xié)議專屬的,SCSI協(xié)議規(guī)定一條總線最多只能接16個(gè)設(shè)備(主機(jī)或者磁盤(pán)),在大型存儲(chǔ)系統(tǒng)中,可能有成千上萬(wàn)個(gè)設(shè)備,肯定是不夠的,所以發(fā)明了一個(gè)新的地址標(biāo)注方法,叫LUN,通過(guò)SCSI_ID+LUN_ID來(lái)尋址磁盤(pán)。后來(lái)這個(gè)概念逐步發(fā)展成為所有硬件虛擬磁盤(pán)了。
操作系統(tǒng)看到邏輯盤(pán)之后,一般還要再做一次封裝。邏輯盤(pán)始終都還是硬件層在做的事情,硬件層實(shí)現(xiàn)的特點(diǎn)就是效率高,但是不靈活,比如邏輯盤(pán)定好了100G就是100G,空間用光了想要調(diào)整為150G就只有干瞪眼了,實(shí)現(xiàn)成本很高。為了達(dá)到靈活性的目的,所以操作系統(tǒng)還要再做一層封裝『卷管理』。這層卷管理就是把邏輯盤(pán)在軟件層再拆分合并一下,組成新的操作系統(tǒng)真正看到的“磁盤(pán)”。
最后操作系統(tǒng)再在這些卷上面去做一些分區(qū),并在分區(qū)上安裝操作系統(tǒng)等工作。
磁盤(pán)獨(dú)立鬧革命
上面都是講的單臺(tái)機(jī)器內(nèi)部的磁盤(pán)組織方式,而單臺(tái)機(jī)器所提供的存儲(chǔ)空間是有限的,畢竟機(jī)器大小空間是有限的,只能放得下那么幾塊盤(pán)。在一般的2U的機(jī)器里面能放得下20塊盤(pán)就算是很不錯(cuò)的了。在實(shí)際工業(yè)需求中,對(duì)于一些大型應(yīng)用來(lái)說(shuō),肯定是遠(yuǎn)遠(yuǎn)不夠的。而工業(yè)界采用的方案就是:堆磁盤(pán),單臺(tái)機(jī)器裝不下這么多磁盤(pán)就單獨(dú)拿一個(gè)大箱子來(lái)裝磁盤(pán),再通過(guò)專線接到電腦接口上。
當(dāng)然,在近些年又發(fā)展起來(lái)了一塊新的技術(shù)領(lǐng)域大數(shù)據(jù)存儲(chǔ)的市場(chǎng)——分布式存儲(chǔ)。分布式存儲(chǔ)價(jià)格便宜,但是性能較低,占據(jù)了不少不需要太高性能和查詢語(yǔ)義不復(fù)雜的市場(chǎng)。分布式存儲(chǔ)我們后面再談,現(xiàn)在先看看堆磁盤(pán)這條路。
當(dāng)磁盤(pán)多了之后,人們發(fā)現(xiàn),磁盤(pán)容量是上去了,但是傳輸速度還是上不去。默認(rèn)SCSI的導(dǎo)線傳輸機(jī)制有如下幾個(gè)限制:
規(guī)定最多只能接16個(gè)設(shè)備,也就是說(shuō)一個(gè)存儲(chǔ)設(shè)備最多只能有15臺(tái)機(jī)器來(lái)訪問(wèn);
SCSI導(dǎo)線最長(zhǎng)不能超過(guò)25米,這對(duì)機(jī)房布線來(lái)說(shuō)造成了很大的挑戰(zhàn);
于是SCSI在一些企業(yè)級(jí)應(yīng)用市場(chǎng)開(kāi)始遭到嫌棄,于是人們就尋求別的硬件解決方案,人們找到了:FC網(wǎng)絡(luò)。
FC網(wǎng)絡(luò)是上個(gè)世紀(jì)80年代研究網(wǎng)絡(luò)的一幫人搞出來(lái)的網(wǎng)絡(luò)交互方式,跟以太網(wǎng)是同類產(chǎn)品,有自己完整的一套OSI協(xié)議體系(從物理鏈路層到傳輸層以及應(yīng)用層)。他就是以太網(wǎng)的高富帥版本,價(jià)格更貴,性能更高。而當(dāng)時(shí)FC網(wǎng)絡(luò)也主要是為了高速骨干網(wǎng)設(shè)計(jì)的,人家都沒(méi)想到這東西還在存儲(chǔ)系統(tǒng)領(lǐng)域里面大放異彩。
這里提一下,F(xiàn)C中的F是Fibre,而不是Fiber。前者是網(wǎng)絡(luò)的意思,而不是光線。雖然一般FC網(wǎng)絡(luò)都采用光纖作為傳輸介質(zhì),但是其主要定義并不只是光纖,而是一整套網(wǎng)絡(luò)協(xié)議。
但是不管怎么樣,F(xiàn)C網(wǎng)絡(luò)的引入,完美解決了SCSI導(dǎo)線的問(wèn)題:
FC網(wǎng)絡(luò)就跟以太網(wǎng)類似,有自己的交換機(jī),網(wǎng)絡(luò)連接方式和路由算法,可以隨便連接多少個(gè)設(shè)備;
光纖傳輸最大甚至可以有上百公里,也就是說(shuō)主機(jī)在北京,存儲(chǔ)可以在青島;
傳輸帶寬更大;
并且只是替換了硬件層的東西,指令集仍然是SCSI,所以對(duì)于上層來(lái)說(shuō)遷移成本很低,所以在企業(yè)級(jí)應(yīng)用里得到了廣泛使用。
就目前主流的存儲(chǔ)協(xié)議:短距離(機(jī)內(nèi)為主)使用SAS,長(zhǎng)距離使用FC。
經(jīng)過(guò)如上的系列技術(shù)發(fā)展,大規(guī)模存儲(chǔ)系統(tǒng)的技術(shù)方案也就逐漸成熟了,于是市面上就逐步出現(xiàn)了商業(yè)化的產(chǎn)品,其實(shí)就是一個(gè)帶得有一堆磁盤(pán)的盒子,這個(gè)盒子我們把它叫做SAN(Storage Area Network)。
說(shuō)到SAN,就必須要提另外一個(gè)概念:NAS(Network Attach Storage)。因?yàn)樽帜付家粯又皇菗Q了個(gè)順序,所以比較容易混淆。NAS其實(shí)就是SAN+文件系統(tǒng)。SAN提供的還是磁盤(pán)管理協(xié)議級(jí)的接口(ATA/SCSI);NAS直接提供一個(gè)文件系統(tǒng)接口(ext/NTFS)。但是一般來(lái)說(shuō),SAN都是以FC網(wǎng)絡(luò)(光纖高速網(wǎng)狀網(wǎng)絡(luò))提供給主機(jī)的,所以性能高;而NAS一般都是通過(guò)以太網(wǎng)接入存儲(chǔ)系統(tǒng)的,所以性能低。
另外,經(jīng)常跟SAN和NAS一起的還有另外一個(gè)概念,DAS(Direct Attached Storage)。這個(gè)跟SAN類似,只是DAS只能被一臺(tái)機(jī)器使用,而SAN提供了多個(gè)接口可以供多個(gè)用戶使用。
責(zé)任編輯:Ct
評(píng)論
查看更多