存儲是目前IT產業發展的一大熱點,而RAID技術是構造高性能、海量存儲的基礎技術,也是構建網絡存儲的基礎技術。專家認爲,磁盤陣列的性能優點得益於磁盤運行的並行性,提升設備運行並行度能夠提升磁盤的性能和數據安全性。算法
20年來,RAID 推出了一系列級別,包括RAID 0、RAID 1、RAID 2、RAID 3、RAID4、RAID 5,以及各類組合如 RAID 0 1 等。其中最普遍的包括RAID5與RAID10.可是一直以來,關於RAID5與RAID10的性能優劣的爭端仍是很是多的,甚至不少人包括不少公司都那拿出了測試數據。而這些測試數據複雜難懂相互矛盾,更加讓用戶感到迷惑,不知道怎麼選擇。
在這裏,我將就這兩種RAID的內部運行原理來分析一下,看看咱們在什麼狀況下應當適合選哪種RAID方式。根據個人經驗與分析:象小io的數據庫類型操做,如ERP等等應用,建議採用RAID10,而大型文件存儲,數據倉庫,如醫療PACS系統、視頻編輯系統則從空間利用的角度,建議採用RAID5.下面請看具體的性能對比:
爲了方便對比,我這裏拿一樣多驅動器的磁盤來作對比,RAID5選擇3D 1P的RAID方案,RAID10選擇2D 2D的Raid方案,分別如圖:
安全
那麼,咱們分析以下三個過程:讀,連續寫,隨機寫,可是,在介紹這三個過程以前,我須要介紹另一個磁盤陣列中的重要概念:cache.
磁盤讀寫速度的要害之一:Cache
cache技術最近幾年,在磁盤存儲技術上,發展的很是迅速,做爲高端存儲,cache已是整個存儲的核心所在,就是中低端存儲,也有很大的cache存在,包括最簡單的RAID卡,通常都包含有幾十,甚至幾百兆的RAID cache.
cache的主要做用是什麼呢?做爲緩存,cache的做用具體體如今讀與寫兩個不一樣的方面:做爲寫,通常存儲陣列只要求數據寫到cache就算完成了寫操做,當寫cache的數據積累到必定程度,陣列才把數據刷到磁盤,能夠實現批量的寫入。因此,陣列的寫是很是快速的。至於cache數據的保護,通常都依靠於鏡相與電池(或者是UPS)。
cache在讀數據方面的做用同樣不可忽視,由於假如所須要讀取的數據能在cache中命中的話,將大大下降磁盤尋道所須要的時間。由於磁盤從開始尋道到找到數據,通常都在6ms以上,而這個時間,對於那些密集型I/O的應用可能不是太理想。可是,假如能在cache保存的數據中命中,通常響應時間則能夠縮短在1ms之內。
不要迷信存儲廠商的IOPS(每秒的io數)數據,他們可能所有在cache命中的基礎上作到的,可是實際上,你的cache命中率可能只有10%.
介紹完cache,咱們就能夠解釋RAID5與RAID10在不一樣的模式下,工做效率問題了,那麼咱們來分別分析讀操做、連續寫和離散寫三方面的問題。
讀操做方面的性能差別
如我上文的介紹,磁盤陣列讀操做的要害更多的體如今cache的命中率上。因此,RAID5和RAID10在讀數據上面,他們基本是沒有差異的,除非是讀的數據能影響cache命中率,致使命中率不同。
連續寫方面的性能差別
連續寫的過程,通常表示寫入連續的大批量的數據,如媒體數據流,很大的文件等等。連續寫操做大部分產生於醫療PACS系統、高教圖書館系統、視頻編輯系統等等應用環境下。
根據我本人的經驗,在連續寫操做過程,假若有寫cache存在,而且算法沒有問題的話,RAID5比RAID10甚至會更好一些,雖然也許並無太大的差異。(這裏要假定存儲有必定大小足夠的寫cache,並且計算校驗的cpu不會出現瓶頸)。
由於這個時候的RAID校驗是在cache中完成,如4塊盤的RAID5,能夠先在內存中計算好校驗,同時寫入3個數據 1個校驗。而RAID10只能同時寫入2個數據 2個鏡相。
如上圖所示,4塊盤的RAID5能夠在同時間寫入1、2、3到cache,而且在cache計算好校驗以後,我這裏假定是6(實際的校驗計算並非這樣的,我這裏僅僅是假設),同時把三個數據寫到磁盤。而4塊盤的RAID10無論cache是否存在,寫的時候,都是同時寫2個數據與2個鏡相。
根據我前面對緩存原理的介紹,寫cache是能夠緩存寫操做的,等到緩存寫數據積累到必定時期再寫到磁盤。可是,寫到磁盤陣列的過程是早晚也要發生的,因此RAID5與RAID10在連續寫的狀況下,從緩存到磁盤的寫操做速度會有較小的區別。不過,假如不是連續性的強連續寫,只要不達到磁盤的寫極限,差異並非太大。
離散寫方面的性能差別
這裏可能會較難理解,可是,這一部分也是最重要的部分。企業中的絕大部分數據庫應用,如ERP系統等等在數據寫入的時候其實都是離散寫。
例如oracle 數據庫每次寫一個數據塊的數據,如8K;因爲每次寫入的量不是很大,並且寫入的次數很是頻繁,所以聯機日誌看起來會像是連續寫。可是由於不保證可以添滿RAID5的一個條帶(保證每張盤都能寫入),因此不少時候更加偏向於離散寫入。
咱們從上圖看一下離散寫的時候,RAID5與RAID10工做方式有什麼不一樣。如上圖:咱們假定要把一個數字2變成數字4,那麼對於RAID5,實際發生了4次io:先讀出2與校驗6,可能發生讀命中而後在cache中計算新的校驗寫入新的數字4與新的校驗8
如上圖咱們能夠看到:對於RAID10,一樣的單個操做,最終RAID10只須要2個io,而RAID5須要4個io.
這裏我忽略了RAID5在那兩個讀操做的時候,可能會發生讀命中操做的狀況。也就是說,假如須要讀取的數據已經在cache中,多是不須要4個io的。這也證明了cache對RAID5 的重要性,不只僅是計算校驗須要,並且對性能的提升尤其重要。我本人曾經測試過,在RAID5的陣列中,假如關閉寫cache,RAID5的性能將差不少倍。
固然,我並非說cache對RAID10就不重要了,由於寫緩衝,讀命中等,都是提升速度的要害所在,不過的是,RAID10對cache的依靠性沒有RAID5那麼明顯而已。
到這裏,你們應當也大體明白了RAID5與RAID10的原理與差異了,通常來講,象小io的數據庫類型操做,建議採用RAID10,而大型文件存儲,數據倉庫,則從空間利用的角度,能夠採用RAID5.