在近期的文章留言中,我们看到一个很好的提问可以作为话题一起探讨。有关基于对象的两类文件存储,一类是“对象文件网关型”文件存储,即在对象存储的基础上提供文件接口,支持用户业务以文件的方式去使用对象存储。另一类则是分布式文件存储,即对象存储的使用只是整个文件系统功能的一部分,这种文件系统本身的功能是完整的,且同时支持对象存储,来满足某些业务需求。针对这两类存储产品一些同学存有疑惑,比如:
- 疑惑一:产品架构的设计思路上到底有何不同?
- 疑惑二:对象文件网关 VS 分布式文件存储架构的优劣势体现在哪里?
- 疑惑三:这 2 种产品架构适合怎样的应用场景和业务?
如果恰巧你关注的也是以上这些问题,希望这篇技术科普文可以很好地帮助到你,也欢迎大家留言。
众所周知,存储系统一般分为块存储、对象存储和文件存储三种。其中文件存储的使用最为广泛,小到个人电脑、家用 NAS,大到传统 HPC、大数据平台、AI 等等,这些都是以使用文件接口为主。近几年,得益于存储空间大、成本低的优势,对象存储扮演着越来越重要的角色。但用户业务往往不能直接使用对象存储,于是市面上出现了一些实际使用的是对象存储但对外提供文件接口的号称文件存储的方案。
“对象文件网关型”文件存储,一般架构上可以划分为客户端、元数据服务和数据服务三大块:
1、客户端:一般都是基于 fuse 实现,优点是简单,缺点是会有一定性能损耗(可参考论文 FAST'17 To FUSE or Not to FUSE,点击阅读原文获取链接)。
2、元数据服务:基本都是使用第三方数据库,比如 mysql、redis、tikv 等。
- mysql 没有强一致集群方案,性能较差,因此一般不会选用。
- redis 以性能高著称,但内存占用极高,且有单点数据风险,不能支持较大数据规模。
- tikv 是强一致的分布式 kv,相对而言是个不错的选择。但掌握和维护 tikv 颇有挑战。
3、数据服务:直接使用对象存储,比如 Amazon S3、阿里云 OSS 等。
可以看出,对象文件网关架构深度使用和依赖于第三方系统,它将复杂的 data io 交给对象存储,将更复杂的 meta io 交给第三方数据库,比较取巧,但也的确不失为一种有效的选择。对象网关文件存储天然获得了这些优势:
- 容量无限,用户可以在对象存储中存放海量数据。
- 成本相对较低,对象存储往往用价格更低的硬盘(如大容量机械硬盘),且使用 EC 等更节省空间的数据冗余算法。
- 一定的吞吐能力。
也正因为这种架构设计,为“对象文件网关型”文件存储带来一些功能上的限制,最为突出的是随机写性能差,究其原因一是对象不支持修改,二是用户业务往往需要写数据。因此不同的对象文件网关系统,采取了不同的应对方法:
- 方法一:规避需要写入,尤其是随机写较多的业务。拥抱只读为主、数据量很大的业务,比如视频备份等。
- 方法二:利用本地盘做数据缓存。不过这又引入了新的问题,主要是本地盘缺乏冗余,也不方便数据共享。
那么,分布式文件存储系统的表现又是怎样的呢?首先它是基于 x86 架构设计的一款分布式文件存储系统,支持主流对象存储,一般用户会使用两种典型功能:数据分层和跨云数据整合。接下来,我们逐一介绍下:
数据分层
定义热层在本地,冷层在对象存储。被读写的数据将自动落在热层,而未被访问的数据,根据策略被判定为冷数据后,将被自动放到冷层,冷热层数据流动完全对用户透明。
优势:
这种设计思路可以理解为热层为数据读写提供极高的性能。比如 GPU 计算集群对存储性能要求极高,则热层可以部署 RDMA、NVMe 等高性能硬件去满足业务需求。而冷层又可以存储海量的冷数据,用以节省存储成本。冷热层数据透明流动,做到业务无感知。用户既得到了热层高性能,同时又得到了冷层的大容量低成本。
跨云数据整合
公有云对象存储提供了非常优秀的可访问性,因此我们可以基于这一特点,为文件系统实现数据在多云间灵活流动。比如以下列举就是我们经常会遇到的一种场景:
1、用户在边缘节点产生数据,通过标准对象接口和工具将数据上传到公有云对象存储。
2、用户在计算中心 A
- 部署文件存储。
- 建立和对应对象数据集的关联,将对象快速地映射到文件系统中。
- 用户读取和计算对象映射后的文件数据。数据按需加载,即访问到某对象的数据时,才去读取这个对象的相关数据区段。
- 计算完成后,用户可以选择取消关联,上传新产生的数据。
3、用户在计算中心 B 时,也能通过数据链通功能,去关联和使用边缘节点产生的数据集。同时也可以去打通和使用计算中心 A 产生和上传的数据。
接下来,通过一张对比表来看下对象文件网关与分布式文件存储这两种架构的区别和所适用业务场景。
综上分析和讨论,我们可以看到两种文件存储的设计思路核心以及其特点还是有很大的不同,简单说:
对象文件网关:架构简单,实现简单,但随机写是硬伤。
分布式文件存储:热层能提供高可靠和高性能,同时利用对象来提供大容量和低成本。这种架构相比对象文件网关实现起来要复杂很多。
在客户业务场景方面,对象文件网关更适用于中小型只读的 AI 场景客户;分布式文件存储适合的场景更通用全面,如果是大型的 AI / HPC 场景,那么分布式文件存储是最佳选择。