惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
S
Secure Thoughts
月光博客
月光博客
美团技术团队
雷峰网
雷峰网
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
N
News and Events Feed by Topic
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Forbes - Security
Forbes - Security
W
WeLiveSecurity
P
Proofpoint News Feed
阮一峰的网络日志
阮一峰的网络日志
爱范儿
爱范儿
G
GRAHAM CLULEY
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AI
AI
Last Week in AI
Last Week in AI
Google Online Security Blog
Google Online Security Blog
Schneier on Security
Schneier on Security
云风的 BLOG
云风的 BLOG
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Recent Announcements
Recent Announcements
Webroot Blog
Webroot Blog
T
Tor Project blog
Cisco Talos Blog
Cisco Talos Blog
N
News and Events Feed by Topic
罗磊的独立博客
The Register - Security
The Register - Security
Blog — PlanetScale
Blog — PlanetScale
T
Threat Research - Cisco Blogs
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
人人都是产品经理
人人都是产品经理
T
The Exploit Database - CXSecurity.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
B
Blog
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Engineering at Meta
Engineering at Meta
Latest news
Latest news
IT之家
IT之家
D
DataBreaches.Net
博客园 - 司徒正美
N
Netflix TechBlog - Medium
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - AllenDang

创业心得 - 从确定投资意向到开始发工资还有多远? 什么样的人适合创业公司? NoSql数据库使用半年后在设计上面的一些心得 Go语言实战 - 使用SendCloud群发邮件 用Go语言做产品半年的一些感觉 我是怎么拿到投资的 Go语言实战 - 我需要站内搜索 Go语言实战 - revel框架教程之CSRF(跨站请求伪造)保护 Go语言实战 - revel框架教程之缓存和Job 坚持是什么? - 作为创业者在与投资人见面之后想到的 Go语言实战 - revel框架教程之MongDB的最佳搭档revmgo Go语言实战 - revel框架教程之权限控制 Go语言实战 - revel框架教程之用户注册 Go语言实战 - 创业进行时之创业伊始 我为什么喜欢Go语言 用Go写Windows桌面应用 - 使用窗体设计器 使用CGO封装Windows API 用Go写Windows桌面应用 - 使用资源文件 用Go写Windows桌面应用 - 使用Form
Go语言实战 - 网站性能优化第一弹“七牛云存储”
AllenDang · 2013-08-22 · via 博客园 - AllenDang

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

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

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

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

image

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

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

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

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

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

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