因为用户纷纷反应山坡网的打开速度比较慢,因此两天前咱们决定把服务器从linode迁移到阿里云。node
整个迁移过程很是平滑,基本上一个小时就完成了。并且阿里云的配套设施提供的也很不错,运行状态监控什么的都有。在此向你们推荐阿里云!数据库
话说因为咱们资金有限,就选择了ECS服务器中最低档的一款,512MB内存,2MB带宽。而山坡网上会有不少书籍封面图片,这致使了页面打开的速度并无想象中提升的多,用户反应速度虽有提高,但不明显。小程序
此时我想到了七牛云存储,虽然说知道它已经几个月了,但始终没有正式开始用,总以为咱们挺穷的,云存储这类高端大气上档次的东西一时半会儿估计用不上。但仍是抱着学习一下的心思打开它看了看。这一看我就乐疯了。七牛云存储
这……不敢相信啊!二话不说,立马决定把全部书籍封面图片都迁移到云端!服务器
接着打开七牛的API文档看了一下,嗯,简单明了。10分钟后就照着动手了。dom
七牛的Go SDK提供了两种上传策略,上传内存数据或者上传文件。原本最佳的方式应该是直接上传内存数据,但考虑到服务器内存比较小,因此我选择了性能上次之的文件上传方式。函数
思路定下来以后就简单了,在文件下载完成以后,上传到云端,返回key值做为书籍封面的url保存到数据库。上传的函数以下:性能
//将本地文件上传到七牛云存储,返回key。
func UploadToQiniu(filepath string) (string, error) {
bucket := "xxxxxxx" 学习//获取uptoken
putPolicy := rs.PutPolicy{Scope: bucket}
uptoken := putPolicy.Token(nil) 网站//上传
var ret qnio.PutRet
err := qnio.PutFileWithoutKey(nil, &ret, uptoken, filepath, nil)return ret.Key, err
}
接着就能够用“http://xxxxxx.qiniu.com/<key>”的方式访问图片资源了。
有经验的人此时应该想到一个问题,防盗链。对啊,就算每月有100万次免费的GET请求,能够顶不住盗链哪!
七牛早就想到了,很简单,把存储空间设置成为私有的,而后使用以下函数生成访问连接。
//处理成访问七牛云存储私有空间的url
domain := "xxxx.qiniudn.com"
baseUrl := rs.MakeBaseUrl(domain, urlStr)
policy := rs.GetPolicy{}return policy.MakeRequest(baseUrl, nil)
这样就会在访问的url后面加上一个有时间限制的token。防盗链完成!
再接下来就处理一下历史数据,写个小程序把全部现有的书籍封面都上传到云端,同时更新数据库。
半小时以内,山坡网就搭上了云存储的快车,我和个人小伙伴们都惊呆了!
我这只是用了七牛提供的众多功能中最简单的,其实照这个思路,能够把站点上全部静态的资源都放到云端,仅让咱们的服务器处理必要的动态内容。这样成本会大幅下降。
在此,我向全部网站的开发和运营者们推荐七牛云存储!靠谱!