云存储网关是一款可以为OSS存储提供文件访问接口的产品,用户可以像NAS一样在Windows/Linux操作系统里面直接挂载OSS进行使用。众所周知,OSS存储具有多种存储类型。那么对于所有的存储类型,云存储网关是否都适用呢?本文将围绕这一话题,展开一些探讨。
OSS存储类型
首先,我们看一下公共云OSS有哪些存储类型以及他们的主要区别。
存储类型/ 本地冗余 |
存储费用/ GB/月 |
PUT类API请求费用/万次 |
解冻时间 |
数据取回费用 |
标准存储 |
0.12元 |
0.01元 |
无 |
无 |
低频存储 |
0.08元 |
0.1元 |
无 |
0.0325元/GB |
归档存储 |
0.033元 |
0.1元 |
1分钟 |
0.06元/GB |
冷归档存储 |
0.015元 |
0.1元 |
小时级 |
标准:0.06元/GB 标准:3元/万次 |
深度冷归档存储 |
0.0075元 |
3.5元 |
10小时级 |
标准:0.018元/GB 标准:1.67元/万次 |
上面只列出了笔者认为的主要OSS计费项,更全面的参见OSS价格页。
从上表我们不难观察到低频以及几个归档类型的存储单价比标准要便宜,但是API调用费用更高并且有取回费用。除此之外其实数据还有最低保留时间。简单来说就是如果使用的非标准的存储类型,需要这部分数据不经常访问且保留一定时间,否则频繁的数据取回或者API调用反而会适得其反。所以选择存储类型不能简单的从存储单价来判断,要判断数据写入OSS之后需要访问的频率和保留时长。如果对接的归档的存储桶,那么友好的使用模式就是写入一次后不再读取或者尽量少读取。
对于几个归档类型的存储桶来说,还有一个要指出的地方,就是数据访问时需要解冻,而解冻是需要一定时间的。在解冻完成之前,读取文件会报错。对于冷归档类型的存储,时间更长,至少在小时级别才能完成数据取回。
云存储网关工作原理
下面来看存储网关支持的存储桶类型,存储网关支持标准、低频、归档类型的存储桶。对于标准的桶,比较好理解,这里不赘述。那么对于归档的桶是否可以保证做到如前文所说的对于单个文件只写入一次之后不再读取呢?
这里要先解释下云存储网关的工作原理,客户端写入文件到网关时,网关至少记录两个动作,写入文件以及设置文件修改时间,网关会尽量合并这两个动作,但仍可能针对某个文件向存储桶发起多个操作。因为通过文件协议写入时,有时候并不能完全保证只写一次,尤其用了rsync之类的工具的情况下,会产生重命名动作,那么在OSS里面的顺序就会是生成文件A,拷贝读取生成A1,再删除A,这里其实对归档的类型很不友好。存储网关为了生成A1,就不得不对A进行解冻操作从而完成拷贝读取。另外文件系统还会有一些针对文件/文件夹设置时间戳之类的操作,这些存储网关也需要调用拷贝对象API来实现。本质上也会对旧文件进行读取,同样如果是归档类型的文件,就会需要执行耗时的解冻动作,影响上传效率,甚至可能因为缓存盘内的数据来不及上传导致写入失败。
回到之前的问题,文件系统的操作有时候需要被翻译成多个OSS的操作,可能会需要读取之前写入的文件,所以直接操作归档的存储桶可能不是一个好主意。除非调用者可以确保文件只写入一次,确保没有重命名或者更改修改时间这些操作。但是这个目标有时候可能不是那么容易达成,因为很多文件系统的操作是隐含在其他程序或者API里面的,不是那么容易判断。
那么是否使用了存储网关之后,有没有更友好的使用归档存储的方式呢?答案是肯定的。稍微做点妥协,不强求一次性写入归档存储就行,这样某些文件可能是以2次API才能写入去,比如一次上传数据,一次设置修改时间。通过OSS的生命周期就很容易达到目标,数据先上传到标准存储,后续再自动流转到低频、归档甚至冷归档存储。如果可以确认写入后就不会变的,可以设置1天后就生命周期转归档。从费用上来说,除了每天写入的数据量是在标准存储,其他的数据量是在归档存储。假设每天写入100GB,那么1年总数据量为36.5TB,总数据中只有100GB是按照标准存储来收费的,因为标准存储每天的数据量稳定在100GB而已,是很经济的。OSS生命周期的配置很简单,利用云存储网关实现数据分层存储里面也有介绍。
另外值得一提的是,对于已经归档的文件,云存储网关是可以自动执行解冻动作的,这样就不需要手动去控制台操作触发解冻动作。NFS共享请求不会报错,表现为IO存在一定的时间延迟。SMB共享会有短暂的报错,解冻完成则读取正常。
总结
使用云存储网关+OSS的分层存储方案,不建议直接对接归档类型的存储桶,而是应该对接标准类型的存储桶,然后通过生命周期设置将文件转成归档类型。当然前提是流转之后的数据确实是很少访问的,否则从成本上来说就不划算了,频繁取回产生的费用更高。这里是针对提供文件协议的云存储网关。
另外云存储网关还可以在OSS对象存储的基础上暴露出来iSCSI卷,卷的数据在OSS桶里面是以切片的方式存储的,不能简单通过冷热来进行生命周期设置存储类型流转。因为冷数据读取如果报错或者延时达到分钟级,很可能导致块设备上面的文件系统报错。所以提供iSCSI协议的块网关是不支持使用归档的存储类型的。