为了自己做好网站的架构,找了知乎,豆瓣,大众点评和百姓网来做参考。这里主要来看域名和 CDN 相关的部分,后台的架构也还是要边学便实践。

大概情况

从前端分析了知乎的域名和 DNS 情况,同时对比了一下豆瓣、大众点评和百姓网。从域名、DNS、CDN 等使用角度来说,他们之间大同小异。

使用的分析工具

非 CDN 使用

记录 域名 用途 路径
A zhihu.com 使用 301 跳转到 www.zhuhu.com IP
A zhi.hu 使用 302 跳转到 www.zhihu.com IP
A www.zhihu.com IP
A comet.zhihu.com WebSocket 推送消息 IP
A analytics.zhihu.com 知乎自己的统计分析,同时使用了 Google Analytics IP

大部分都是用了 301 或者 302 跳转,注意他们的区别:301 是永久跳转(浏览器会做客户端端缓存),而 302 是临时跳转。此外 baidu.com 到 www.baidu.com 并不是使用 301 或者 302 ,而是使用下面的一段 HTML 代码

<html>
  <meta http-equiv="refresh" content="0;url=http://www.baidu.com/" />
</html>

相比而言,我觉得使用 301 更 Geek,更好一些。

CDN 使用

记录 域名 用途 路径
CNAME static.analytics.zhihu.com CDN, 看 CNAME 以为是七牛 CDN,其实用了 ChinaNetCenter 的 CDN d.qiniudn.com > wsall.36tr.com.wscdns.com > 08911.xdwscache.glb0.lxdns.com > IP
CNAME static.zhihu.com 网页资源文件 cdn,包括 css,js,image,不包括用户头像、用户发布的图片等 同上
CNAME p1.zhimg.com 用户头像,用户发布的图片, 这里使用又拍云 CDN zhcdn-img.b0.aicdn.com > ctn.b9.aicdn.com > IP
CNAME p2.zhimg.com 用户头像,用户发布的图片,这里使用了七牛 CDN zhimg0.qiniudn.com > 其它非七牛 CDN
CNAME p3.zhimg.com 与 p1.zhimg.com 相同
CNAME p4.zhimg.com 与 p1.zhimg.com 相同
CNAME s1.zhimg.com 视频片段等 这里使用了七牛 CDN zhimg0.qiniudn.com > 其它非七牛 CDN
CNAME s2.zhimg.com 这里使用了七牛 CDN zhimg0.qiniudn.com > 其它非七牛 CDN
CNAME s3.zhimg.com 这里使用了七牛 CDN zhimg0.qiniudn.com > 其它非七牛 CDN
CNAME s4.zhimg.com 这里使用了七牛 CDN zhimg0.qiniudn.com > 其它非七牛 CDN

p1-p4, s1-s4 由知乎服务器端按照一定算法选择(有可能就是等概率随机)

不得不有点疑问?为什么七牛 CDN 最后都直到别人的 CDN 服务器上去了,而又拍云全部是 A 记录到自己的服务器。又拍强调的自建机房就是这个意思?

静态资源版本控制

方法
知乎 在文件名前添加类似 md5 的字符串,如 app.js, 发布版本为 f853b06af5428ff5f78f66e3d09397e2.app.js
百姓网 如 gallery.js 发布版本为 gallery.f07b79d6.js
豆瓣 将类似 md5 值放在路径中,如http://img3.douban.com/f/shire/55c9fe0e9ecb5725037e9839fc515504008dae74/js/ad.js
大众点评 和百姓网类似,如发布版本为 ga2.min.acd5dfe89e87135b4eef62dcf81ef849.js

由于 CDN 使用简单镜像+缓存的功能,每一个缓存的文件有一定的时效性,而且基本都是静态文件,不支持 Query String (如 ?ver=201413),于是需要在源头控制将要被分发到 CDN 中文件的版本。最为简单的做法就是对开发人员透明,在发布项目的时候,通过计算文件的 hash 签名或者 md5 签名来做类 HTML 等文本代码的重构。

DNS 选择

域名 DNS 服务商
zhihu.com DNSPOD 企业版
zhimg.com DNSPOD 免费版
baixing.com DNSPOD 企业版
baixing.net DNSPOD 企业版
dianping.com 自建
douban.com 自建