Openstack 之分布式存儲技術比較
關于Openstack的分布式存儲,我關注Ceph,swift,hdfs的功能實現(xiàn)和優(yōu)缺點,適用場景。
1.存儲文件大小
HDFS、HBase、Hive不太適合存文檔、圖片大小的文件,HDFS適用于存大文件。
SWIFT:處理幾個G的大文件性能上可能會比HDFS差,因為沒有條帶化。但遇到很多幾兆、幾十兆的,這些文件的存儲,HDFS就不如SWIFT。所以對于日常文件的單獨處理用SWIFT,集中處理如果達到G級用HDFS。
2.存儲類型:塊存儲和對象存儲
如果你只需要用塊存儲,那當然是Ceph,如果只需要用對象存儲,那當然是SWIFT。各自有各自擅長的地方,不過現(xiàn)在因為Ceph也支持對象存儲,SWIFT和Ceph又是OpenStack社區(qū)非常頻繁提到的兩種存儲形式,所以,有很多人會把SWIFT和Ceph在一起比較。
如果只要用對象存儲,就選擇SWIFT;如果只要用塊存儲,那就Ceph;即要用對象存儲又要用塊存儲的場合,是用SWIFT還是Ceph呢?我們一般是這樣推薦的:
1)如果節(jié)點數(shù)量很大,推薦用Ceph單獨做塊,用SWIFT做對象存儲,因為在節(jié)點數(shù)量較大時,Ceph的維護成本比SWIFT要高得多,大多數(shù)場景實際應用的時候會發(fā)現(xiàn),大部分數(shù)據(jù)都可以放到對象存儲上(這一點如果有疑問,歡迎隨時討論);
2)如果節(jié)點數(shù)量少,那就用Ceph統(tǒng)一搞定,因為一般認為生產(chǎn)環(huán)境中最小的分布式存儲應當有五個節(jié)點,所以,如果節(jié)點數(shù)量少于十個或者剛到十來個,那構建兩個分布式存儲顯然是不理想的(考慮到空間劃分問題);
3)如果團隊里有牛人能輕松解決Ceph大規(guī)模部署問題,那就果斷用Ceph;
4)如果希望對象存儲能夠和OpenStack其他項目無縫結合,如果希望實現(xiàn)多租戶,果斷用SWIFT來實現(xiàn)對象存儲。
3.對象存儲概念:
RESTful接口和扁平的數(shù)據(jù)組織形式。
4.對象存儲和文件系統(tǒng)存儲區(qū)別:
所謂文件系統(tǒng)的本質(zhì)是POSIX接口,“對象”這個名詞是做對象存儲的人為了把自己做的東西和文件系統(tǒng)區(qū)分開而用的術語,把存在對象存儲里的文件叫做“對象”,所以選擇文件系統(tǒng)還是對象存儲,跟你把這堆數(shù)據(jù)稱作對象還是文件并沒有直接關系,而是要看你是需要POSIX還是RESTful HTTP接口,是需要目錄結構還是適用扁平數(shù)據(jù)管理結構。
GlusterFS,它的優(yōu)點在于如果你需要使用POSIX接口,那GlusterFS是一個很好的選擇,但是Gluster在文件數(shù)量、目錄數(shù)量太大的情況下會出現(xiàn)性能衰減,這是文件系統(tǒng)本身的特點決定的,不論是哪種POSIX兼容的文件系統(tǒng),都存在類似的問題。