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