上次有朋友談到這個話題,關(guān)于netapp與其改良型raid4,希望我能介紹這個東西,估計知道的人也不太多,我這里盡量用簡單的語言來介紹一下他的特點,希望大家能看明白。
Netapp公司創(chuàng)建時間不算長,1992年才創(chuàng)建,但是netapp還是寫下了一系列的神話,包括現(xiàn)在IBM的nas系統(tǒng),都是OEM的netapp的產(chǎn)品。那么,netapp的優(yōu)勢在哪里呢?我在這里分析一下它的特點,WAFL與RAID4 .
雙劍合璧的WAFL和RAID4
WAFL文件系統(tǒng)是netapp自己設(shè)計的,運行在netapp專用操作系統(tǒng)DATA ONTAP上的一個文件系統(tǒng),WAFL是“Write Anywhere File Layout”的意思,即“任意位置寫入文件布局”的縮寫。正因為有WAFL的這個特點,所以才有了RAID4 ,一個改進型的raid4,使得沒有校驗瓶頸存在,而且能隨意擴充硬盤的raid方式。
假如說傳統(tǒng)的存儲方式中,假如修改一個數(shù)據(jù)塊,我們必須先定位到那個數(shù)據(jù)塊,然后再修改,在我的前面寫的raid5內(nèi)部分析中,我們也看到了,假如修改一個單獨的數(shù)據(jù),我們必須先讀出這個數(shù)據(jù)與校驗,然后修改數(shù)據(jù),計算校驗,最后寫入到同樣的位置,這些特點,不僅僅是raid決定的,而且也是運行在raid之上的文件系統(tǒng)決定的。
在WAFL中,假如它也修改一個數(shù)據(jù),他可能不管以前的數(shù)據(jù)的位置,直接把新數(shù)據(jù)與新校驗寫到新的位置,之后更改指針,告訴文件系統(tǒng)說,新的數(shù)據(jù)在這里,而不是原來那里了。這么做還有一個最大的好處就是,新的數(shù)據(jù)可能等到足夠多以后,可以湊齊raid的一個條帶以后,一起寫進去,就可以大大的提高寫的速度。
raid4 就在WAFL的配合下誕生了,傳統(tǒng)的raid4是把所有的校驗寫在一塊單獨的硬盤上的,假如數(shù)據(jù)修改量很大,那么這個單獨的硬盤就變成了性能瓶頸,而raid4 可以最大可能的把一個條帶的數(shù)據(jù),一次性的寫入,所以,使得校驗盤與其它的盤基本相當(dāng)?shù)膶懭肓?,而沒有瓶頸出現(xiàn)。而且,當(dāng)這個raid組想增加硬盤的時候,只是簡單的放入新的硬盤即可,任意位置寫的規(guī)則可以保證新的硬盤馬上就被使用起來。
WAFL與raid4 為了盡量保證把數(shù)據(jù)合并后一次性寫入,就必須依靠cache,在cache中才可以等到一定數(shù)量的數(shù)據(jù)之后再一起分批寫入,而且,本身WAFL的日志也是記錄在cache中的,也包括WAFL的inode的指針操作,也都是在cache中完成。所以,netapp也必須依靠電池或者ups對cache實施保護。
RAID4與改良型RAID4
我們先看一個傳統(tǒng)的raid4與改良型的raid4之間寫的差別,如圖,在傳統(tǒng)型的raid4中,假如改寫我如圖的數(shù)據(jù),每個數(shù)據(jù)需要讀一次,校驗盤可能會寫6次,每個數(shù)據(jù)寫一個,涉及到6個條帶。但是,在改良型的raid4中,讀已經(jīng)不存在了,而且寫的話,最小的可能性,只需要寫2個條帶,8個寫io,一次性寫入即可,至于指針,則由WAFL文件系統(tǒng)在cache中完成。
注重,這里為什么說最小可能寫2個條帶,因為寫的時候還需要根據(jù)磁盤空間剩余情況,cache的利用情況來綜合決定的,有可能也會涉及到3-4個條帶,但是,可以肯定的是,算法盡量保證最少的磁盤寫次數(shù)。
我們上面分析了改良型的raid4的寫,那么我們再分析一下它的raid組增加磁盤的過程,在一般的raid組中,想要給raid組增加一個磁盤,是非常困難的,因為數(shù)據(jù)以前就分布好了,除非再強行改變分布,但是,netapp不一樣,它的文件系統(tǒng)本來就是任意寫,所以很輕易把新加的磁盤給用上。
優(yōu)缺點分析
那么說了這么多,netapp的WAFL與raid4 的優(yōu)勢已經(jīng)很清楚了:
1、盡量保證數(shù)據(jù)一次性的寫入,降低磁盤爭用,提高寫速度
2、因為任意寫的特點,使得snapshot變得非常簡單,而且,就算你不做snapshot,系統(tǒng)本身也一直在不停的產(chǎn)生snapshot,因為這樣可以大大降低文件系統(tǒng)的恢復(fù)時間。
那么,有缺點嗎?肯定有的,這個世界總是沒有完美的東西存在的
1、因為任意寫,為了保證每次都能操作一個條帶,那么,系統(tǒng)希望盡量有充足的空閑空間,如使用率不要超過80%,否則,因為空閑空間太少而不能保證每次都寫一個條帶
2、因為任意寫,可能會使本來連續(xù)的空間,分布在存儲的任意位置,如數(shù)據(jù)庫應(yīng)用中,本來連續(xù)的表,在存儲中多次修改以后,就不連續(xù)了,使得全表掃描或者備份變得很慢。