西瓜哥 發(fā)表于:13年09月04日 12:02 [原創(chuàng)] DOIT.com.cn
存儲在線專欄文章:之前,西瓜哥已經介紹了所有的高端存儲產品,包括EMC Symmetrix、HDS VSP、IBM DS8000、IBM XIV、HP 3PAR和富士通DS8700等。今天起我們發(fā)表西瓜哥寫的關于高端存儲的技術原理,首先介紹下《高端存儲快照實現原理解讀》。
我個人認為對于高端存儲來說,RIAD和快照是所有上層應用的基礎。前面我在切西瓜刀法中說過,RAID和后面的分層和瘦分配關系很大,有一個好的RAID基礎,如采用RAID 2.0塊虛擬化技術,上層的動態(tài)分層和精簡配置應用實現就會更加靈活和高效。同樣,快照技術是災備的基礎,在LUN的復制、遷移、數據的本地備份、遠程復制等等都需要用到快照技術的支持。因此,陳列的一切增值功能的底層基礎都是RAID和快照。
存儲快照技術:SNIA(StorageNetworking Industry Association)對快照(Snapshot)的定義是:關于指定數據集合的一個完全可用拷貝,該拷貝包括相應數據在某個時間點(拷貝開始的時間點)的映像?煺湛梢允瞧渌硎镜臄祿囊粋副本,也可以是數據的一個復制品。
講快照實現原理之前,我們先給大家講業(yè)界一個IT人士丁老師給我們講的一個小故事。丁老師是我非常敬佩的產品銷售人員,現在也在銷售高端存儲產品。一天,丁老師去和客戶交流高端存儲,在噴了半天講完產品后,精彩的場景發(fā)生了:
笑話聽罷,我們來講講高端存儲快照實現的兩種技術。
目前實現快照一般有兩種方法,傳統(tǒng)的存儲快照技術COW(Copy-On-Write)和現在漸漸流行的基于寫重定向的存儲快照技術ROW(Redirect-On-Write)。
3PAR采用COW技術,我們用它舉例來看一下實現原理:
大家看到,快照創(chuàng)建的以后,如果有對原卷的數據修改,修改的數據第一次被修改的時候就把數據COPY到快照卷里,如圖中的D。只需要第一次修改的時候復制,因此有些書也把這種技術叫COFW(Copy-On-First-Write)。
而IBM XIV采用完全一種不同的技術ROW(Redirect-On-Write),我們來看一下XIV如何做的:
大家可以看到,ROW的不做復制,如果原卷有數據塊被修改,重新寫到一個新的地方好了,原卷的修改一下數據塊指針,這個動作非常快,而快照卷不用做任何改變。
估計你馬上會問我,那個技術好,我就知道為這么問,哈哈。
這又是一個藝術的問題,為啥這也是一個藝術問題,別急,聽我說。
COW最大的問題是對寫性能有影響。第一次修改原卷,需要復制數據,因此需要多一次讀寫的數據塊遷移過程。這個就比較要命,應用需要等待時間比較長。但原卷數據的布局沒有任何改變,因此對讀性能沒有任何影響。
ROW最大的問題是對讀性能影響比較大。ROW寫的時候性能基本沒有損耗,只是修改指針,實現效率很高。但多次讀寫后,原卷的數據就分散到各個地方,對于連續(xù)讀寫的性能不如COW。
由于這兩種實現機制不同,因此性能也不同,一般來說,ROW就像采用電子快門的照相機,拍照的速度快,每分鐘得到的快照數就多;而COW就像采用機械快門的傳統(tǒng)相機,快門的速度慢,系統(tǒng)支持的快照數一般都比較少。下表是我整理的各個廠商的高端存儲性能,大家對比一下就知道差別了。
你可能會問,怎么沒有HW HVS。我找了很多資料,都沒有找到HVS的快照的資料,但我曾經看到一份華為中端存儲的資料,說采用的也是COW技術,性能和3PAR一樣256。因此,考慮到HVS也采用3PAR一樣的RAID 2.0技術,因此,個人估計高端也一樣或者比中端高一些。因此,大家理解的時候可以等同3PAR好了。
COW是最傳統(tǒng)的實現方法,當然,現在COW也有很多改進,比如采用異步COW,現在的高端存儲Cache都很大,如HVS最大支持3TB,因此可以先寫到CACHE里面就回復主機寫完了,這樣應用就不用等待。等落盤的時候再觸發(fā)快照復制的動作。還有,高端存儲一般是數據庫的應用,這些應用有一個特點,就是寫少讀多,一般是1:3到1:10。這個也比較容易理解,你銀行存了一筆錢(寫),但可能經常查詢余額(讀),就怕錢少了,哈哈。因此,COW這種方式在還是比較適合這種應用的。
但現在的備份技術發(fā)展也對快照提出了更高的要求,用戶需要更快更多的快照來滿足RTO/RPO的要求。人總是很貪婪的。IBM XIV由于底層采用非常小的1M大小的CHUNK,因此,本來數據就全部打散的非常均勻了,因此高端存儲之父深知原來symmetrix的缺點,讓XIV直接采用ROW技術,個人感覺是一個亮點。因為ROW的缺點是連續(xù)讀寫比較慢,但XIV的CHUNK比較小,如果是大數據庫的讀寫,可以分散到很多個CHUNK里面,因此,讀寫性能應該影響不大。但3PAR的CHUNK是1G,太大了些,但設計的時候可以按照extend的粒度來打散,應該問題也不大。估計是10+年前,ROW的技術還沒有流行吧。而HW,估計也是由于延續(xù)使用了中端存儲的快照代碼,有了歷史的包袱,因此也沒有采用ROW技術。當然XIV的ROW實現有一個問題,因為它的數據塊是1M大小,上面不在細分了,因此如果比較小的I/O,如每次只寫8K,那么8K需要寫到新的地方,原來的數據也要COPY過來,ROW的優(yōu)勢就沒有了。
從XIV的實現機制看,我感覺不太適合數據庫應用,如ORACLE目前缺省的I/O塊大小還是8K,這樣ROW的優(yōu)勢就發(fā)揮不出來了。
個人認為,RAID 2.0和ROW是個絕配,雖然現在3PAR和HW在快照性能這塊已經強于很多傳統(tǒng)的高端存儲廠商,但如果采用ROW將會給用戶帶來更大的價值。當然,我建議廠商實現的時候能克服XIV的缺陷,可以依據Grain的粒度來做最好,但這樣可能管理的開銷會變大,這又是一個藝術的問題,還是由廠商去回答吧,我這等屌絲也就是唧歪一下罷了。
總之,個人認為ROW應該是快照的發(fā)展方向,據說EMC的中端支持COW的同時也支持ROW了。