OSS(Object Storage Service)俗稱對象存儲,主要提供圖片、文檔、音頻、視頻等二進制文件的海量存儲功能。目前除了公有雲提供對象存儲服務外,一般私有雲比較關心一些開源的分布式對象存儲解決方案,本文列舉了一些常見的技術方案供參考。
概念普識
塊存儲
通常SAN(Storage Area Network)結構的產品屬於塊存儲,比如我們常見的硬盤、磁盤陣列等物理盤。
文件存儲
一般NAS(Network Attached Storage)產品都是文件級存儲,如Ceph的CephFS,另外GFS、HDFS等也屬於文件存儲。
對象存儲
同時兼顧着SAN高速直接訪問磁盤特點及NAS的分布式共享特點的一類存儲,一般是通過RESTful接口訪問。
開源解決方案介紹
(一)Swift 是 OpenStack 社區核心子項目,是一個彈性可伸縮、高可用的分布式對象存儲系統,使用Python語言實現,采用 Apache 2.0 許可協議。
Swift 提供一個基於RESTful HTTP接口的 Object Storage API,用於創建,修改和獲取對象和元數據。用戶可以使用 Swift 高效、安全且廉價地存儲大量數據。Swift 整體架構:
總的來說,企業如果想要建立可擴展的分布式對象存儲集群,可以考慮 Swift。
(二)CephCeph是一種高性能、高可用、可擴展的分布式存儲系統,統一的對外提供對象存儲、塊存儲以及文件存儲功能,底層使用C/C++語言。其中對象存儲功能支持 2 種接口:1、兼容S3:提供了對象存儲接口,兼容 S3 RESTful 接口的一個大子集。2、兼容Swift:提供了對象存儲接口,兼容 Openstack Swift 接口的一個大子集。
Ceph是一個企業級分布式存儲系統,功能強大,不僅可以為企業建立對象存儲服務,還可以幫助企業建立自己的雲平台,具有廣泛的應用場景特別是在雲環境下使用廣泛。
(三)Minio是一個企業級、兼容S3接口的對象存儲系統。Minio基於 Apache 2.0 許可協議,采用Go語言實現,客戶端支持Java、Python、Go等多種語言,是一種輕量級、高並發的開源解決方案,可以作為雲存儲方案用來保存海量的圖片,視頻,文檔等。
大數據集成方面,Minio支持各種常見的查詢計算引擎,比如Spark、Presto、Hive以及Flink等,可以使用這些處理框架查詢分析對象數據,此外,Minio支持Parquet,Json、Csv格式等多種文件存儲格式,包括壓縮與編碼。更多特性可以參考官網 地址https://min.io。Minio架構:
Minio主要為人工智能、機器學習而設計,並適用於其他大數據負載。從架構與功能方面考慮,Minio是一個比較好的開源對象存儲解決方案。
架構如上,HBase MOB的設計類似於HBase + HDFS的方式,中等對象在寫入HDFS之前同樣是先寫入MemStore,但是刷寫與其他寫入數據不同,MOB數據被刷寫到MOB File中,MOB File被存放在特殊的Region中。
MOB特性在Apache HBase 2.0、CDH 5.4.x 或 HDP 2.5.x 及以上版本支持,用戶可以基於HBase MOB特性設計自己的對象存儲服務。
(四)Hadoop Ozone是 Apache Hadoop 的子項目,為了提供分布式、可擴展的對象存儲功能,主要是為了彌補HDFS在小文件存儲方面的不足之處。Ozone建立在一個高可用、支持塊復制的Hadoop分布式數據存儲層之上,稱為Hadoop Distributed Data Store(HDDS),上層可對接 Spark、Hive 以及 Yarn 等計算調度引擎。但是目前還處於alpha內部測試版本,暫時不建議生產環境中使用。
小結
對象存儲主要是解決海量圖片、文檔、音視頻的存儲,其中主流的重量級解決方案是Swift與Ceph,它們各有特點,可以參考搜索引擎上的對比,Hadoop生態體系中備受關注的是HBase MOB,另外輕量級的Minio也是一種比較好的選擇。MongoDB也提供了大文件存儲模塊GridFS。建議根據實際情況做技術選型。