前言
目前阿里云团队开发了一款开源的工具:ossfs,可以将Oss Bucket挂载在本地机器上,以POSIX文件接口对存在Oss Bucket中的文件进行访问。不过,该工具从2019年起,已经不再维护了。
阿里云云存储网关(Cloud Storage Gateway, CSG)软件版(以下简称CSG软件版)。同样是一款可以安装在阿里云用户机器(ECS,或用户自建机房服务器)上的产品,将OSS Bucket挂载到用户机器,以POSIX文件接口进行访问。在实现上,CSG软件版衍生自已经商业化的CSG托管版,与ossfs有较大的不同,并且在使用上引入了监控等多项功能。
《阿里云存储网关(CSG)软件版与ossfs对比(数据缓存篇)》一文中,已经详细对比了CSG软件版和ossfs中文件数据存储的区别。
本文将从元数据的使用和管理的角度,比较CSG软件版和ossfs的区别。
元数据存储管理
ossfs
- 使用内存缓存文件的元数据信息。
- 文件的元数据信息缓存数量有上限,默认能缓存1000个文件的元数据信息。当元数据缓存到达上限时,会遍历缓存中的元数据,淘汰最早的一个文件的元数据信息。
CSG软件版
- CSG软件版以KV数据库缓存文件的元数据信息,包括文件系统目录结构、文件的状态等信息。
- 所有的文件的元数据全量缓存到本地的缓存盘,支持上亿级别的文件。
- 通过CSG软件版创建、修改的文件的元数据能直接保存在本地;通过其他方式上传、修改得Oss Bucket中的文件的元数据信息,需要通过访问该目录,将文件的元数据信息同步到本地缓存。
数据一致性保证
ossfs
- 每次open一个文件时,都会将内存中文件的元数据缓存清除,重新访问oss bucket,获取文件的元数据信息。
- 支持配置ExpireTime,配置之后,如果元数据缓存的时间至今已经超过了ExpireTime,也会将内存中文件的元数据缓存清除,重新访问oss bucket,获取文件的元数据信息。如果不配置,则在内存中淘汰元数据信息之前,都认为本地和云上的元数据信息是一致的。
- 一旦挂载完成,不支持更改同步策略,即不支持修改ExpireTime。
CSG软件版
- 文件元数据信息从本地缓存获取;
- 支持开启“反向同步”选项,并配置“反向同步时间间隔”参数。开启之后,访问某个目录,会将oss bucket中该目录下的文件的元数据信息同步到本地缓存中。但是在反向同步时间间隔之内,访问一个目录只会触发一次反向同步。
- 支持在挂载期间修改配置,即支持开启、关闭“反向同步”,或是设置“反向同步时间间隔”。用户可以根据使用场景的需求,实时更改配置,而不需要重新挂载,即中断IO。
对比测试
目前,CSG软件版支持Linux和Windows两个平台,而ossfs只支持Windows平台,因此下面的测试中,仅对比CSG软件版的linux版本和ossfs。
大量文件情形
测试环境:阿里云ECS,ecs.g5.8xlarge。
测试 |
CSG软件版 |
ossfs |
创建一个文件夹testdir1,创建1*100*1000(目录结构)个大小为4k的文件。 |
305s(不含上云时间) 337s(包含上云时间 |
2h2min43s |
rename testdir1 |
1.151s(不含上云时间) 284s(包含上云时间) |
3h18min23s |
创建文件夹testdir2,下面有10w个文件,每个文件大小4k |
384s(不含上云时间) 402s(包含上云时间) |
2h18min6s |
将testdir2下面的10w个文件进行chmod操作 |
207s(不含上云时间) 240s(包含上云时间) |
2h16min58s |
少量文件情形
测试环境:阿里云ECS,ecs.g5.8xlarge。
测试 |
CSG软件版 |
ossfs |
创建文件夹testdir3,下面有1000个文件,每个文件大小4k |
3.13s(不含上云时间) 20.07s(包含上云时间) |
81s |
rename testdir3 |
0.196s(不含上云时间) 15.36s(包含上云时间) |
58.115s |
mdtest元数据测试结果
机器规格:阿里云ecs.g6.large,高效云盘,
元数据操作 |
CSG软件版 |
ossfs |
dir stat |
4928 |
544 |
dir create |
2597 |
315 |
dir remove |
3127 |
322 |
file stat |
4593 |
458 |
file create |
2347 |
191 |
file read |
2018 |
122 |
file remove |
2284 |
140 |
tree create |
9 |
2 |
tree remove |
13 |
0 |
结果分析
可以看出来,CSG软件版元数据性能优于ossfs。并且,在文件数量较多的情形下,CSG元数据性能的优势比较明显。原因主要有三点:
(1)CSG软件版本地会缓存文件元数据信息,而不需要向OSS Bucket发送请求;
(2)ossfs内存中默认只存1000份元数据。超过1000份时,需要遍历元数据缓存,找到最老的删掉。而CSG软件版会缓存所有文件的元数据信息,无遍历淘汰的过程。
(3)ossfs的文件操作需要等到上云之后才返回,而CSG软件版则将本地文件元数据、数据缓存更新后即返回,文件操作异步上云。