由于用户纷纷反应山坡网的打开速度比较慢,所以两天前我们决定把服务器从linode迁移到阿里云。

整个迁移过程非常平滑,基本上一个小时就完成了。而且阿里云的配套设施提供的也很不错,运行状态监控什么的都有。在此向大家推荐阿里云!

话说由于我们资金有限,就选择了ECS服务器中最低档的一款,512MB内存,2MB带宽。而山坡网上会有很多书籍封面图片,这导致了页面打开的速度并没有想象中提高的多,用户反应速度虽有提升,但不明显。

此时我想到了七牛云存储,虽说知道它已经几个月了,但始终没有正式开始用,总觉得我们挺穷的,云存储这类高端大气上档次的东西一时半会儿估计用不上。但还是抱着学习一下的心思打开它看了看。这一看我就乐疯了。

这……不敢相信啊!二话不说,立马决定把所有书籍封面图片都迁移到云端!

接着打开七牛的API文档看了一下,嗯,简单明了。10分钟后就照着动手了。

七牛的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。防盗链完成!

再接下来就处理一下历史数据,写个小程序把所有现有的书籍封面都上传到云端,同时更新数据库。

半小时之内,山坡网就搭上了云存储的快车,我和我的小伙伴们都惊呆了!

我这只是用了七牛提供的众多功能中最简单的,其实照这个思路,可以把站点上所有静态的资源都放到云端,仅让我们的服务器处理必要的动态内容。这样成本会大幅降低。

在此,我向所有网站的开发和运营者们推荐七牛云存储!靠谱!

最新文章

  1. [LeetCode] Add Two Numbers II 两个数字相加之二
  2. CentOS6.5 – Iptables配置文件
  3. [20160701]DevideByZeroWithoutNoException——from 《Java How To Program (Early Objects), 10th》
  4. char *p 与char p[] 比较
  5. [CareerCup] 13.9 Aligned Malloc and Free Function 写一对申请和释放内存函数
  6. HDU 3555 Bomb 数位DP 入门
  7. JVM内存状况查看方法和分析工具
  8. JSON.parse()的异常怎么处理;
  9. php中文分词
  10. JSF基础
  11. Android拦截并获取WebView内部POST请求参数
  12. CentOs7 最小安装版安装后配置和java环境的搭建
  13. HTML5标签选择,图文混排使用dl dt dd
  14. Excel 单元格不能设置超链接
  15. redis 的简单命令
  16. 基准对象object中的基础类型----元组 (五)
  17. leecode第一百五十五题(最小栈)
  18. javascript中的iterable
  19. Linux实战型企业运维工程师试题测评
  20. Xcode6在iPhone5+iOS7模拟器上编译,上下有黑边问题

热门文章

  1. DynamicObject - 代理对象的种类
  2. 让 windows 下的命令行程序 cmd.exe 用起来更顺手
  3. Python的单元测试(一)
  4. Android权限管理之Permission权限机制及使用
  5. redis成长之路——(一)
  6. 记一次.NET代码重构
  7. Android—应用程序开机自启
  8. 1199 Problem B: 大小关系
  9. a标签绝对定位,点击区域被图片遮挡(IE下)
  10. 绿色版的Linux.NET——“Jws.Mono”