首发于航行志

加速的知乎 - 又拍云镜像功能使用笔记

作为最大的中文知识型问答社区, 2012年底, 知乎流量增长飞速, 机房经常报警,说我们带宽超限, 同时随着知乎在全国各地用户的数量越来越多, 有不少其他城市的同学开始反映网站加载有延迟,会慢, 虽然我们在帝都一角感觉速度还好, 但是架不住中国地大物博城市多,只加带宽并不能很好的解决用户体验问题,于是一件本来重要但不紧急的事情就迫在眉睫了,单机房单节点已经满足不了知乎的需求,要上CDN。

所以,知乎对于又拍的使用, 也和其他公司不太一样, 我们并没有使用又拍的「云存储」功能 ,而是主要使用的是「云镜像」:

「云镜像」功能目前还不能通过「创建空间」按钮进行创建, 需要联系他们客服才可以,知乎在年初有幸成了这个功能的第一批用户(不知道是不是第一个:p)。

选择「云镜像」 而不是「云存储」,是基于我们业务上的一些考虑, 因为在之前我们已经把图片上传做成了一个单独的服务, 「云镜像」的使用更类似于CDN的用法,只需要把我们的地址设置为源地址, 然后再提供一个供大家访问的地址解析到又拍即可,不用写api, 不用传文件,却又享受到了又拍全国节点的加速, 耦合度非常低。

下面是 「云镜像」 服务的截图:

上图标出了两个很明显的区别, 用过又拍云存储的同学应该都对「操作员」这位兄弟印象深刻, 「云存储」上每一个操作都是要对应到某位操作员的, 而「云镜像」功能则不需要。

「云镜像」相对于「云存储」计费方式上有一点不太一样,目前「云镜像」功能是只按流量使用进行计费的, 而「云存储」功能会按存储空间占用的大小流量的使用、等进行计费。(又拍的 调用次数 不会计费, 是和其他服务商不同的地方)

「云镜像」相当于「云存储」的一个子集, 抛开了对源数据的存储 (其实是把你的服务器作为源)只专注于内容向又拍各个节点之上的分发。

  • 咦, 是不是感觉和大家熟知的传统CDN 差不多?
  • 这。。 的确是这样

  • 既然如此,为什么会选择又拍?
  • 嗯。。是有一些理由的。

1. 历史原因

知乎和又拍早在知乎创业初期就已经合作过一次, 初创阶段对一个互联网公司来说,是要做的足够轻,足够快, 所以早期我们会选择 咖啡厅,linode, github, basecamp 等; 对于图片存储的选择, 记得当时InfoQ上有一篇介绍又拍技术的文章 又拍网架构中的分库设计 让我印象很深刻,又拍架构中大量使用了一些当时较新的开源技术,感觉是一家很有互联网基因的好公司, 再加上当时考察良久并没有找出比又拍更让人满意的地方,经过我们CTO @李申申 拍板,我们的图片处理和存储工作就全部交给了又拍「图片管家」(当时又拍应该也是国内唯一开放api以及支持从前端将图片post到他们服务器的图片存储服务商!)。


虽然后来因为需求变化和架构上的调整, 和一些不大不小的问题(当时通过前端直接POST 到api接口返回的图片是带cookie的,有安全隐患), 我们把图片拿回来自己做, 但和又拍合作的这段时间还是比较满意的, 即时偶有出问题的情况,他们也都能非常快速的响应(这也是我们需要做加速时再次想到又拍的一个重要原因)。

2. 价格

又拍按流量收费, 而传统CDN 多是按带宽收费,按平均峰值(每日第三峰值)计费,对于我们 来说, 每天不同时间段流量相差较大, 不划算。

以我们一个图片节点一段历史的流量来看:


这个节点 平均每天的流量在 220G 左右,平均每天的计费峰值在40M左右,一般CDN的价格为40 ~ 100元/M/月 , 又拍的价格为 0.4 ~ 0.6 元/G(需要一次买一定量),算下来还是能节省一点银子的。

3. 管理方便

不得不说,很多老牌CDN服务商的管理系统还停留在 5~10年前,实!在!是!太!不!好!用!了! 而目前新兴云存储服务商在这方面普遍有优势, 这里又拍的后台系统更是其中比较清晰和舒服的。 良好的后台系统可以减少和对方客服人员锻炼嘴部和手部肌肉的频率,节省大家的时间。

尤其喜欢的是又拍的日志分析, 维度很多, 可以清楚的看到 每天流量占用最多的图片, 访问最多的来源,返回的http状态等, 还可以按照次数和流量排序, 日志也可以直接在线下载,实在是方便, 可惜这些数据又拍只会保存一段时间,如果能通过api 来获取到这些统计的数据就更好了。

4. 速度和稳定

又拍的稳定性不错,速度也是极好, 又拍的节点全部是自建,原来有20多个节点,现在看起来已经有 50多个了。 这里我拿一张50k大小的图片进行测试。

缓存在又拍上的图片 在全国的速度,

又拍上图片的速度和我们机房速度的对比(右侧我们机房)

从图中看出来, 又拍对全国范围的支持还是挺不错的, 而我们机房节点对北京和一些地区支持不错但在全国范围内的表现并不算太优秀。 多次测试结果,又拍节点对电信速度的支持略好于联通。

5. 对图片支持良好

这一点毋庸置疑,又拍做图片起家,目前「图片类型」的存储空间还支持自定义多种图片大小的裁剪(这是很耗cpu的苦力活), 加水印, 格式转换, 防盗链(可以按域名,ip,客户端,token进行过滤)等。 这些工作自己来做的话可控性更高,但同时也需要消耗自己不少的资源,其实也是看一个成本和效果的比重吧, 如果有一天 我们处理图片的成本超出预期,业务上耦合又没有那么高时,也不排除再次把这些工作交给又拍的可能。

总的来说, 又拍使用下来的感觉是挺能让人信任的,对于小的个人用户和想在互联网内做一些事情的团队都是不错的选择,在使用又拍「云镜像」的 这几个月中,知乎的PV 和UV 增长了10倍多, 但我们存于又拍上的资源访问速度并没有任何减低, 服务也一直稳定, 只有一次遇到了一些地区图片无法显示的问题,也很快被解决了。

关于如何选用又拍, 我认为如果公司业务功能不算复杂,图片可以集中在一个地方, 那么可以选用「云存储」,把图片直接交给又拍即可,如果像我们一样, 应用比较复杂, 这半年来,知乎 family又先后多出了 知乎日报, 知乎专栏, 知乎安卓 等, 如果使用「云存储」,每个子系统都要自己维护一份又拍的client,成本较高, 而用「云镜像」就不会面临些问题, 最简单高效的方案就是好方案,这种模式, 切换成本小, 如果你们需求也类似,就可以考虑试用 「云镜像」功能。 。

# end of “使用又拍的理由"

接下来, 就让我们再来列上一些使用中的坑( jing yan )吧。

首先要吐槽的一点是「云存储」的 删除功能 , 如果这个功能没有在我认知之后再次更新的话, 那么删除有两种方式: 1. 通过api 一个一个的删除 2. 通过ftp一个一个的删除。 当你有大量的文件需要删除的时候, 你需要先批量获取到所有文件的路径,然后以单进程每秒5个左右的进度一个一个的删。。。

    • 咦?不是有个删除文件夹的功能?
    • 不好意思,文件夹里有文件的时候不能删除。

    • 好吧,那把空间删掉重建应该可以吧。
    • 啊, 不好意思, 空间里有文件的时候不能删除。 -_-

从侧面来说,这样也更安全。。

另外一点是「云存储」的 增量更新功能, 这个功能目前官方应该还没有, 所以如想把服务器上的一个文件夹直接同步到又拍,还是有些麻烦的,好像只能能通过 ftpsync的方式hack,但还是更希望有一个类似 rsync, s3cmd 的工具,可以做到增量同步, 增删改文件自动刷新。 也正是这个原因,在我们暂时没办法做到前端直接POST到又拍时, 果断放弃了「云存储」 而使用了「云镜像」。。

另外再说一下缓存失效的几个小坑 ,又拍官方标明一个文件的更新会在 0~20分钟内刷新全部节点:

20分钟应该是一个 “最差时间”, 实际使用中情况如何那?通过咨询又拍的同学,以及我们的实验,得出下面的一些结果:


1. 可不可以设置过期时间, 过了这个时间cdn节点会自动回源检测文件是否有改动?
  • 暂不支持

2. api中 cdn缓存的刷新是否支持使用通配符?
  • 不支持

3. 一个文件从开始更新直到所有cdn节点更新完最长需要多长时间?
  • 最长在15分钟 (暂未碰到20分钟情况)

4. 一个文件从开始更新直到所有cdn节点更新完 一般需要多长时间?
  • 1分钟

5. 一个文件从开始更新直到所有cdn节点更新完, 最慢的情况下, 更新完80%节点要多长时间?
  • 1分钟

6. 是否支持 etag , last_modify 等 header?

  • 只支持last_modify, 只对浏览器有效, 对cdn节点无效

7. 如果文件做了改动, 而不主动更新cdn 中的文件, cdn节点多久会自动刷新?
  • 7天
8. 网站是否有清空空间所有缓存的接口?
  • 有, 但最慢会到20分钟, 超过20分钟联系他们.
9. api 更新速度限制 ?
  • 1分钟内不超过600url, 每次不超过50. 以后会考虑增加

所以,想要大批量失效一些资源在又拍节点上缓存的时候, 可以选择 直接清空整个空间的所有缓存,虽然暴力, 但简单有效。

另外, 回源模式下, 文件改动后, 会缓存7天时间, 所以 css,js 等文件,最好是把它们的名字和你系统的版本号连接起来, 特别是当线上版本更新时,如果改动的是一个同名css文件,则CDN缓存不会更新,就有可能出现网站页面乱掉等问题。


以上, 感谢读完。

最后发一个广告:

知乎是一个年轻,快速成长的公司,我们提倡开源,热爱使用各种新技术, 急需各种优秀的人才(对,就是在看这句话的你!!), 不要犹豫, 投出手中的简历吧!

请点击:加入知乎 或直接邮件至 jobs#zhihu.com

# end of “全文”


文中使用到的测速工具:

阿里测,专业的网站即时探测工具


知乎上一些关于又拍的讨论:

又拍网创建的背后有什么故事?

Yupoo 存储用户照片一共用了多少台服务器?

又拍云存储的缩略图xx.jpg!12X12是如何实现的?

又拍云存储托管的图片如何保证保密性?

-

又拍云存储价格如何?

又拍的云存储服务怎么样?

图片云存储服务商在阿里云和又拍云之间如何选择?

编辑于 2013-12-18

文章被以下专栏收录