写点什么

海量小文件存储系统 HOS 探索与实践

发布于: 2020 年 12 月 19 日
海量小文件存储系统HOS探索与实践

1.  前言



众所周知,文件、块和对象是以三种不同的方式来保存、整理和呈现数据的存储格式。每种格式都有其相应的应用场景,文件存储会以文件和文件夹的层次结构来整理和呈现数据,例如FTP、NFS服务等;块存储会将数据拆分到任意划分且大小相同的卷中,例如磁盘整列、硬盘等。对象存储服务基于对象进行管理数据并具有关联元数据的能, 例如内置大容量硬盘的分布式存储服务器。对比如下:



       现有对象数据情况,99%在1MB以下,99.5%在10MB以下,最大为20MB左右。根据业务场景分析,主要是存储小文件,多写少读,至少具备30W/s 文件的写入能力。



       针对该需求,我们前期调研并测试了市面上开源且成熟的对象存储,例如ceph、swift、minio等。经过测试发现均不能满足我们对小文件写入性能的要求(磁盘随机IO瓶颈)。业界较为普遍解决方案,一是对小文件进行合并处理,二是构建高速缓存;其最终目的都是解决磁盘随机寻址的低效问题。第一种方案要考虑额外的CPU与内存开销、文件拆分、元数据管理及较高的运维成本,最终放弃。我们从高速缓存方案出发,是否可以将磁盘随机读写转化成顺序读取,利用缓存来减少IO的读取次数呢?经过调研发现,可基于分布式存储系统提供对象存储服务。HBase2.0之后支持的MOB新特性可以满足中小对象存储的需求 ,决定基于HBase MOB特性遵循AWS S3接口规范开发HOS(Hbase Object Storage)服务。

2. 对象存储系统介绍

2.1 对象存储系统介绍

2.1.1 HOS系统介绍

      HOS对象存储(Hbase Object Storage),是我们基于实践探索自主研发的,目的是为了提升小文件的吞吐。HOS提供与Amazon S3的大部分子集兼容的接口,用户可以通过S3 REST接口和S3 SDK进行数据的上传和下载等操作。HOS核心组件是HBase(2.0版本以上),这也是HOS可以有效提升小文件写入性能的原因,HBase底层使用LSM树存储引擎,先将数据写入内存到达一定阈值再溢写到磁盘,尽可能减少写磁盘次数避免频繁IO,而MOB新特性降低了hbase频繁由压缩与分裂带来的I/O压力,当使用MOB特性时,理想的二进制对象大小应该在100KB~10MB之间,超过10MB的文件HBase也能够进行存储但是效率相对小对象比较低。我们存储对象时使用对象名作为rowkey,内部对文件名做了哈希算法,目的是使对象能够均匀的分到每个region上,这样可以充分发挥分布式存储的性能。架构图如下:





2.1.2 对象存储系统对比





2.2 性能测试对比

2.2.1 测试环境

所有测试都基于测试工具COSBench,COSBench是intel开源的针对对象存储开发的测试工具,基于java开发。测试服务器配置如下:



2.2.2 上传性能对比

①单机



性能排行swift<ceph<minio<hos。HOS写入小于文件的性能是最高的。文件大于50KB由于带宽占满,HOS、minio和ceph的性能基本一样。

②集群,两台服务器,单副本





集群性能排行minio<swift<ceph<hos,HOS写入性能依旧最高,Minio性能反而降低。对比单机性能可知Swift、Ceph和HOS是有扩展性的,而Minio并没有展现出扩展性。

③测试HOS扩展性,写入1kb文件





由此可以得出HOS有很强的扩展性,性能随服务器数量的增加接近线性提升。

2.2.3 下载性能对比

①单机





②集群,两台服务器





文件小于10KB时,HOS下载性能依旧是最高。

2.2.4 总结

由以上测试数据可以知道HOS对于中小文件的处理性能非常高且扩展性良好,随着机器数量增加处理能力接近线性提升。

3. HOS功能

HOS兼容S3,目前兼容了S3基本功能接口,并且根据业务需求对接口进行了扩展。为了提高请求安全,HOS基于AWS的对称签名算法用于请求验证,也支持用户使用token令牌认证。

HOS接口功能如下:





保存元信息功能介绍

用户可以自定义存取对象的元信息。

对象追加功能介绍

AWS s3接口无此功能。拓展接口满足了用户对于上传对象的追加以及元数据的追加需求。

4. HOS监控

HOS在运行过程中,我们需要了解相关的监控信息,比如上传的文件大小在一段时间的占比,或者在一段时间的请求量等等。HOS使用公司独立研发的Nezha进行监控,监控指标有jmx基本指标,还有自定义指标,例如:上传成功和失败的文件数、流量统计和请求延迟等。如需要监控其他指标可以根据需求自定义。

监控一段时间内上传的文件大小的数量



监控一段时间内的流量以及上传成功和失败的文件数量



监控请求错误数和请求延迟



5. 总结与展望

HOS设计是为了更好的提升小文件的写入性能,主要用来存储中小型文件,通过测试来看对于小文件的性能是非常可观的。HOS目前兼容了S3几个主要的接口以及根据业务需求扩展的接口,后续将增加UI界面、丰富S3接口能力和加强元数据的检索能力。



发布于: 2020 年 12 月 19 日阅读数: 515
用户头像

还未添加个人签名 2018.04.24 加入

Galaxy 数据平台开发团队

评论

发布
暂无评论
海量小文件存储系统HOS探索与实践