面试题:聊一聊分布式对象存储解决方案

OSS(Object Storage Service)俗称对象存储,主要提供图片、文档、音频、视频等二进制文件的海量存储功能。目前除了公有云提供对象存储服务外,一般私有云比较关心一些开源的分布式对象存储解决方案,本文列举了一些常见的技术方案供参考。

概念普识

块存储

通常SAN(Storage Area Network)结构的产品属于块存储,比如我们常见的硬盘、磁盘阵列等物理盘。

文件存储

一般NAS(Network Attached Storage)产品都是文件级存储,如Ceph的CephFS,另外GFS、HDFS、FastDFS等也属于文件存储。

对象存储

同时兼顾着SAN高速直接访问磁盘特点及NAS的分布式共享特点的一类存储,一般是通过RESTful接口访问。

开源解决方案介绍

Swift

Swift 是 OpenStack 社区核心子项目,是一个弹性可伸缩、高可用的分布式对象存储系统,使用Python语言实现,采用 Apache 2.0 许可协议。

Swift 提供一个基于RESTful HTTP接口的 Object Storage API,用于创建,修改和获取对象和元数据。用户可以使用 Swift 高效、安全且廉价地存储大量数据。Swift 整体架构:

总的来说,企业如果想要建立可扩展的分布式对象存储集群,可以考虑 Swift。

Ceph

Ceph是一种高性能、高可用、可扩展的分布式存储系统,统一的对外提供对象存储、块存储以及文件存储功能,底层使用C/C++语言。

其中对象存储功能支持 2 种接口:

1、兼容S3:提供了对象存储接口,兼容 S3 RESTful 接口的一个大子集。

2、兼容Swift:提供了对象存储接口,兼容 Openstack Swift 接口的一个大子集。

Ceph是一个企业级分布式存储系统,功能强大,不仅可以为企业建立对象存储服务,还可以帮助企业建立自己的云平台,具有广泛的应用场景特别是在云环境下使用广泛。

Minio

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的MOB特性支持对象存储功能。Apache HBase2.0 版本开始支持中等对象存储(Medium Object Storage,简称 MOB),这个特性使得HBase能够非常良好的存储大小在100KB-10M的图片、文档、音频、短视频等二进制数据。

架构如上,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

Ozone是 Apache Hadoop 的子项目,为了提供分布式、可扩展的对象存储功能,主要是为了弥补HDFS在小文件存储方面的不足之处。Ozone建立在一个高可用、支持块复制的Hadoop分布式数据存储层之上,称为Hadoop Distributed Data Store(HDDS),上层可对接 Spark、Hive 以及 Yarn 等计算调度引擎。但是目前还处于alpha内部测试版本,暂时不建议生产环境中使用。

小结

对象存储主要是解决海量图片、文档、音视频的存储,其中主流的重量级解决方案是Swift与Ceph,它们各有特点,可以参考搜索引擎上的对比,Hadoop生态体系中备受关注的是HBase MOB,另外轻量级的Minio也是一种比较好的选择。MongoDB也提供了大文件存储模块GridFS。建议根据实际情况做技术选型。

0