为了自己做好网站的架构,找了知乎,豆瓣,大众点评和百姓网来做参考。这里主要来看域名和 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 | 自建 |