在项目中如何处理拖慢访问速度的静态文件?

项目越做越大,性能和效率才是王道,不能局限于怎么开发了,而是需要从可用性开始考虑

本文无图,请耐心看

前天写架构笔记的时候,一下子给我鼓捣出几个大方向的问题点,由于技术细节太多,也不好全部写下来,也没有能力。

那,今天写什么呢?

就写我在新项目中用到的OSS吧,OSS是阿里云的命名,全称是对象存储服务,我在几个月前是用的亚马逊云的S3。

我们上面开门见山就说道了阿里云的对象存储,那我们为什么要用呢?

我的回答是要做分布式,你的静态资源依赖就不能在统一台服务器,因为你部署好一台服务器,并让他能正常被用户访问,但是后来因为业务膨胀了,业绩爆增,致使你的服务器时不时宕机。你要再堆一台机器时,你会发现,这根本行不同啊。

​ 第一个问题是,在呢么保持用户的登陆状态,这个问题我会单独找个时间认真研究后写,今天不赘述。

​ 第二个问题是,你那些原来显示到前端的JS、图片、样式文件都在那台时不时宕机的机器上而在你新堆的其上没法显示。

​ 第三个问题是,你的数据库在宕机的那台机器上,虽说可以通过IP连上去,这解决不了宕机这个根本问题。本问题今天也不谈,内容过多,也没有更好的实践知识。

我们就从第二个问题开始谈吧,因为搬家/堆机器,应用上的样式,特效,上传文件都不可靠了。对,就是这个问题,所以才用对象存储。

那么,我们有那几个选择呢?根据业务的需求,我们可以选择 阿里OSS,七牛云存储,亚马逊S3。我个人的博客会采用七牛云,我已经在开始写业务代码的过程中了。

最佳时间是怎样的呢?

​ 我原来是这样子搞的,也就是那个S3的项目,在本地服务器不存储静态资源文件,全部上传至AWS S3。但这样搞,在实践中有一个非常尴尬的问题,就是国内上传速度是在是太慢,经常还会被卡住、超时。

​ 最近我又在想,我可以先把文件上传到本地服务器上,然后再调用SDK上传,在本地服务器上留下原始文件,然后计划删除本地服务器的文件。当然这个方案好像也不止一个人跟我一样想啊,没钱的时候是可以考虑这种操作。

​ 但是,这样处理并不是最好的实践,原因是不可靠,万一哪天不想用云存储了,不留下一个天坑让自己跳么?所以,在正式的企业项目中,尽量用双保险。即单独部署一台静态服务器,这台服务器只存储静态文件,并做好上传接口。上传到该服务器的同时把文件上传到云存储上去。

​ 数据库存储文件信息,就和云存储一样的信息,我这里就称之为KEY好吧。这样就可以保证本地和云存储的文件信息是一样的。这样线上就只用存储里的文件。

​ 在CDN这块,一般在正常运营的企业都会选择支付费用,因为对用户端简直是友好的不得了。CDN上可以增加回源地址,用于CDN 100%捕获缓存,这个100%并不是绝对的。但能极大的提高了系统访问可用性。

总结一下

为了能够更好的解决静态文件拖慢访问速度,我们把静态文件放在存储空间上,然后用CDN来缓存它。

我们有几个选择,我们存放静态文件时,把他在本地服务器上存一个备份,以防止后面会更换云存储服务商。


参考文献

相关文章