oss

重构文件存储服务

Posted by Deadline on August 31, 2016

现在很流对象存储(Object Storage Service,简称OSS),通俗点就是文件存储。这篇文章就讲讲公司文件服务迁移到 oss 的过程。

现在公司网站的文件是存储在应用服务器上的,但是磁盘空间有限,比如阿里云的 Linux 服务器就只有 20G,后来买了一块 50G 的 SSD 磁盘挂载到应用服务器上专门存储文件。

这种做法其实不太合适,有下面几个缺点:

  • 占用应用服务器带宽,文件传输是比较占用带宽的,而且我们服务器用的还是固定带宽。
  • 扩容麻烦,想象下如果 50G 的磁盘满了怎么办?再买一块新的磁盘挂载上去?那文件存储路径怎么处理?如果都放到一块磁盘上之前的文件又要移动,是不是很麻烦?
  • 容灾问题,如果磁盘坏了怎么办?aliyun 有磁盘备份服务还好一点,不至于所有都丢失,但是备份也不是实时的,出点啥问题文件就找不回来了。
  • 费用问题,50G SSD aliyun 上每月 50 。oos 1TB 138 每月,算下来就是 6.8 50G 一个月。而且 oss 不占带宽。

这样对比一下就知道 oss 的好处了。

已有文件的迁移

官方有提供迁移的工具,具体请看相关页面
用起来还是蛮简单,而且由于服务器也是阿里云的,那可以使用内网地址迁移,这样就没有带宽和流量的限制了。也不算额外的费用。还是不错的。

文件上传接口的更改

已有文件迁移完之后就要考虑接口的改造了。我要考虑的肯定是影响最小的方案了。

好在之前我们的上传也统一使用了一个接口,那我们直接把接口内部的实现改造下就行,这样我们其他的部分都不用改动了。

其实还有种方式(OSSFS) 可以考虑。ossfs 能让您在Linux系统中把Aliyun OSS bucket 挂载到本地文件系统中,您能够便捷地通过本地文件系统操作OSS 上的对象,实现数据的共享。就是把 oss 当成本地磁盘来操作了,不过还有些局限性,自己看介绍吧。
高兴不过三秒,下午测试的时候发现有个第三方创建合同的接口,需要上传合同文件,还有计算文件 md5 值。如果再下载一遍的话明显不划算,最好的方案就是把 oss 挂载到服务器上,当成本地文件来访问。

官方也提供了很多方案,甚至可以使用 web 直传!文件上传不走自己的应用了,直接使用阿里云提供的前端插件。不过这种方案改动太多,前端要全换,不过可以考虑以后新增的页面使用这种方式。

不管怎样总是要根据自己的情况来做选择。感觉自己像是在给阿里云做广告 :joy: 。

其他

昨天晚上所有迁移都做完了,18G 的数据也没花多少时间,总共 20 分钟不到吧,因为内网的关系每分钟都能传好几 G 的数据。
然后就是 ossfs 挂载了。有个疑问就是 oss 其实是没有文件夹概念的,虽然也能建文件夹但是那只是逻辑上的,而不是物理上的文件夹。所以用的时候我是没有分文件夹的,但是如果挂载到 Linux 上的话,是不是会有 Linux 单个文件夹内文件数量的限制呢?
确实是会受到 Linux 限制的。所以改了下,按年月日分文件夹归档。

还有之前的两个要死不活的 app,换了域名,文件访问不到了,都已经准备好要更新 app 了。后来一想 oss 支持绑定域名啊,再一想,直接把之前的域名用 nginx 301 跳转就行了。恩,几分钟就搞定了。

发现每天晚上 3 点有好多请求,IP 是自己的服务器,想到可能是有服务在扫描文件。
后来在 FAQ 上找到了方法,因为会涉及到费用的问题,所以还是要改下。


There are no comments on this post.