今天,我們要談一下RAID問題。大家知道,RAID到現在已經26歲了,對于一項技術來說,應該也是廉頗老矣,尚能飯否的狀態。因此,現在江湖上出現了新的RAID形態,如華為的RAID 2.0+,宏杉的CRAID 2.0(采用Erasure Code),甚至有些產品如IBM XIV放棄了RAID,直接保存2份數據副本。今天,我們來回顧一下RAID的歷史,看存儲在后RAID時代如何生存。
先說一下RAID的歷史。西瓜哥今天用一個非常時髦的標題,叫來自星星的RAID,據說這樣打開率能上升一半,O(∩_∩)O哈!不過,韓劇西瓜哥基本沒有時間看,而且西瓜哥的粉絲(西施)里面女的不到20%,但西瓜哥用這個標題,除了吸引眼球,確實有一些寓意在里面。這個來著星星的RAID和”都叫獸“一樣,到底在存儲界是去是留,其結局如何,和《來自星星的你》一樣,充滿想象。
不賣關子了。大家知道,RAID來自1988年加州大學伯克利分校的一篇論文。著名的網站《彎曲評論》創始人陳懷臨(陳首席)前段時間專門”潛入“該學校的圖書館,把這篇珍貴的論文的封面拍了下來:
陳首席是主攻安全的,不過現在也關注大數據,對RAID的崇拜和我們存儲的學子都是一樣的。可以說,沒有RAID,就沒有我們現在從事的存儲事業,目前的存儲產品,絕大多數還是采用RAID技術的,沒有脫離這個框架。1988年RAID論文發布以后,EMC Symmetrix率先在高端存儲里面采用普通的硬盤,采用RAID技術和Cache技術,開創了現代意義上的一個存儲的新篇章。但發展到現在,高端存儲里面,EMC、IBM DS8000、 HDS、富士通還是采用傳統的RAID方式(其實EMC的RAID不是基于物理硬盤的,也是基于硬盤切片實現的,但西瓜哥還是歸類為傳統的實現,參見西瓜哥以前的分析),而HP 3PAR和華為采用塊虛擬化的類RAID 2.0的方式來實現,IBM XIV甚至拋棄了RAID技術,直接保存兩份副本。更有甚者,國內的廠商宏杉科技在其推出的高端存儲里面,直接采用Erasure Code(糾刪碼),可以支持三塊硬盤同時損壞而數據不丟失。一時間,RAID老矣,尚能飯否?成了業界熱談的一個話題。
我們先來看看原作者的觀點。RAID這篇論文其中的一個作者 Garth Gibson,他現在是卡內基梅隆大學的科學家,也是著名的高性能存儲公司Panasas的創始人。 HDS CTO Hu Yoshida 在2012的Blog里透露,他和Garth會面中談到RAID和糾刪碼的一些觀點。
Garth說,他們當時發布了RAID的論文的題目是, “A Case for Redundant Arrays of Inexpensive Disks (RAID)”,這個 Inexpensive指的是廉價。也就是大家知道,那個時候存儲用的硬盤全部是IBM生產的專用磁盤,特別的貴。而RAID的目的,就是可以采用廉價的磁盤(也就是普通PC服務器用的硬盤,當時是5.5英寸)而達到高可靠和高性能的目的。業界很快接受了這個觀點,但是把Inexpensive重新定義為 Independent,因此,現在的RAID的定義是Redundant Array of Independent Disks。
Garth還說了,為什么RAID被IT界采用這么快,是由于他們采用論文的方式發布,而沒有申請專利。多高尚的人品啊!因此,西瓜哥說放棄一切文章的版權(只要你去傳播,我都是支持的,當然,能告訴其他網友是西瓜哥寫的,讓它關注我的微信號我就非常感謝了)比這些泰斗來說弱爆了。
但是,Garth沒有申請專利,還有一個重要的原因。其實RAID的概念很早以前就出現了。最早關于RAID的專利是1978年IBM的 orman “Ken” Ouchi寫的 “System for recovering data stored in a failed memory unit”,美國專利號 4,092,732。當時,HDS CTO和該專利的作者ken都是美國IBM的同事。
大家看到,其實RAID的容錯機制最開始用在內存的恢復上。IBM的高端存儲首先采用了RAID技術,因為他們發明的嘛,可惜他們不是用在普通的硬盤上。直到RAID論文的發表,EMC的Symmetrix推出,才在這個存儲界流行起來。
但現在隨著大容量硬盤的采納(現在有6TB的硬盤了,估計后年能看到10TB的產品),RAID的重構時間越來越長,甚至幾天時間才能重構完成。也就是說,RAID技術就像都叫獸遇到人類的唾液就會生病一樣,遇到大硬盤損壞也是消化不良。
于是,3PAR和華為采用塊虛擬化的RAID 2.0技術,IBM XIV直接拋棄了RAID技術,而宏杉在SAN上直接引進了Erasure Code,把原來主要用在NAS上的技術用在了SAN上。
那么,Erasure Code到底還是不是RAID?用在SAN上是否合適?
我們先來看看糾刪碼的本質。糾刪碼其實是IEEE里面定義的一個信息處理的糾錯碼,屬于 Forward Error Correction (FEC) 的范疇,可以用在網絡,也可以用在存儲上:
RAID 5其實是糾刪碼的一種最簡單的方式,它僅僅需要用XOR算法就可以進行數據的恢復,因此速度也是最快的。其實最開始采用RAID 10的方法比較多,因為當時CPU的能力不快,做XOR算法也需要較強的計算能力。現在RAID 10在高端存儲里面也是普遍在關鍵應用中采用的技術。但后來 LSI、HDS、3PAR等存儲廠商,采用ASIC的方式來支持RAID 5甚至RAID 6,慢慢的才流行起來。再后來新的存儲產品,包括EMC,大部分都拋棄了ASIC做RAID的方式,因為存儲的平臺都轉向了X86架構,INTEL的CPU遵循摩爾定律,性能提升太快了。RAID的XOR計算完全能夠應付,而且靈活性更好。那些目前還采用ASIC的廠商都是由于歷史原因。因此,用戶選擇的時候也不用關心具體的實現方式,看性能表現就可以了。這兩種實現各有優缺點。
但RAID 5只能保護一塊硬盤失效,因此后來發展了RAID 6。RAID 6(RAID DP)已經是采用多項式復雜計算了,就是N+M糾刪碼的簡單形態了(后面我們一般用糾刪碼表示M>2的情況)。這個復雜計算是基于法國的偉大的一個數學家伽羅瓦(Galois )域算法。Galois是西瓜哥除了愛因斯坦外第二佩服的人,據說發明這個算法才18歲,當時用這個算法來逃課,即每個同學按照這個變換來選座位,老師就查不出誰逃課了(估計他們點名都不是一一點的,O(∩_∩)O哈!)。可惜他提交的論文當時不被認可,直到死后才被追認的。他21歲,為了一個心愛的女孩和別人決斗,不幸被殺,使得數學界倒退了幾十年啊。西瓜哥佩服他的天才,也佩服他為愛犧牲的勇氣,絕對比都叫獸厲害(星星的粉絲不要打我)。
Peter Corbett是NETAPP的VP,也是RAID DP之父。他在Blog里面也談了對糾刪碼的看法。
他說,糾刪碼的原理如下,K個數據硬盤,M個校驗硬盤,就這是K+M的形態,RAID-DP就是M=2的一種特例:
當然,現在都采取分塊的方式,不采用集中校驗的方式了(RAID DP除外),采用Galois算法來恢復數據。M=2就是RAID 6,M=3就可以支持3塊硬盤同時損壞。
Peter Corbett認為,支持3塊硬盤同時損壞是有條件的,即糾刪碼不能感知 silent errors(靜默數據損壞)的情況,也就是硬盤塊了很容易知道數據丟了,如果數據能夠讀出來,但不對,你是不知道的。也就是你保持一份數據,讀出來的時候,如果沒有機制去校驗這份數據是否正確,你就不會調用Galois算法來恢復數據。因為糾刪碼自己并不知道那塊數據壞了。因此,大家發現所有的高端存儲為什么必須要支持ANSI T10 DI標準,甚至華為去年在上海HCC大會聯合ORACLE發布端到端的數據保護DIX方案,就是這個道理。
但西瓜哥感覺Peter Corbett的托辭有一點問題,普通的RAID 5也需要T10 DI標準去校驗數據的正確性,這不只是高級的糾刪碼的問題。不過也看出NETAPP有比較重的歷史包袱,它的WAFL專利是基于RAID DP的,轉到糾刪碼應該夠嗆。
只是后RAID時代,我們怎么辦?就像星星的結局一樣,估計每個人都有自己的看法。西瓜哥的觀點是隨著CPU技術能力的提升,糾刪碼采用的場合應該越來越多,不同場合會用到不同的算法。比如華為的存儲產品,現在中低端還是基于傳統的RAID算法,高端存儲是基于 RAID 2.0+,Oceanstor 9000大數據存儲采用的是糾刪碼,而UDS海量存儲直接采用保存3份數據副本的方式(這也是目前互聯網大規模存儲采用的方式,這種方式減少了需要計算校驗數據的消耗)。
因此,適用就是好的。糾刪碼目前是大數據的場合采用比較多,特別用在多節點的集群環境,因此也有叫RAIN(redundant array of independent nodes),用在SAN上還比較少。 Panasas,也就是RAID論文其中一個作者創立的公司,現在也只是采用RAID 6的方式,不過是基于文件的。但隨著CPU計算能力的提升,一些新興存儲廠商在這方面尋求一些差異化,無可厚非。作為用戶,一是要關注是否支持ANSI T10 DI標準,二是最好測試一下糾刪碼下的性能表現,綜合評估也不難做出你自己的選擇。