14

从HTTP响应头看各家CDN缓存技术

由于国内各家电信运营商互联互通的壁垒,CDN作为互联网用户加速的最后一公里,扮演了很重要的角色。

在各家公司大谈的异地多活容灾上也承担了用户分流的重任,看看各家用的东西,结合一些网上的公开资料,也能管中窥豹。

传统的国内CDN厂家有:帝联,网宿,蓝汛,快网等
新兴的互联网公司有自家产品对外输出型和创业公司细分型:BAT都有此产品,还有七牛,又拍,微软azure等
美国龙头:Akamai,美国市场大哥,Apple用的也是这个,但Apple的在线服务这么烂,真怀疑是不是Apple把Akamai带坑里了。

本文只展示响应头,有兴趣自己深挖。

淘宝

server:Tengine
status:200
timing-allow-origin:*
via:cache15.l2et15-1[0,200-0,H], cache35.l2et15-1[0,0], cache3.cn286[0,200-0,H], cache8.cn286[11,0]
x-cache:HIT TCP_MEM_HIT dirn:20:727080716
x-swift-cachetime:31535998
x-swift-savetime:Fri, 19 Aug 2016 02:55:13 GMT

不用说,淘宝用的是自家阿里CDN, 走Tengine, 返回的响应很友好,甚至告诉你是从内存命中的。
x-swift指明了使用了的具体热点缓存技术。
关于阿里云CDN,有很多公开介绍,例如:
文章一:阿里云CDN技术演进之路 http://www.slideshare.net/jos...
文章二:研究下淘宝的swift热点缓存迁移的事

via:cache46.l2et2[0,200-0,H], cache60.l2et2[0,0], cache7.cn286[0,200-0,H], cache8.cn286[3,0]
x-cache:HIT TCP_HIT dirn:11:60349972
x-swift-cachetime:31535950
x-swift-savetime:Tue, 28 Jun 2016 04:04:29 GMT

根据阿里云官网解释:
若:X-Cache:HIT TCP_MEM_HIT 表示命中缓存
若:X-Cache:MISS TCP_MISS 则表示未命中缓存

微信

腾讯CDN节点:

Server:Qnginx/1.1.1
X-Cache-Lookup:Hit From Disktank
X-NWS-LOG-UUID:406395d0-7cb8-4630-99cf-8208d04e7750

很明显,这里告诉大家CDN命中了磁盘缓存上的数据。
一些网上资料查到的解释:
X-Cache-Lookup:Hit From MemCache 表示命中CDN节点的内存
X-Cache-Lookup:Hit From Disktank 表示命中CDN节点的磁盘
X-Cache-Lookup:Hit From Upstream 表示没有命中CDN

腾讯CDN起步可能会晚一点,Qcon上一个公开资料:
CDN架构技术之道 http://www.infoq.com/cn/prese...

腾讯还与小米合作,在硬盘版小米路由上推出了一个插件,叫腾讯会员兑换,本质上就是利用小米路由用户上的硬盘存储一部分内容,上传给需要用的用户,由腾讯计算收益,盘活了家里闲时的网络资源。

网易云音乐

Server:nginx
X-Via:1.1 ngdianxin90:9 (Cdn Cache Server V2.0)

网易太低调,最近也开始搞网易云产品了,但基本查不到什么公开资料,从响应头看似乎就是直接用的nginx。

新浪微博

Content-Type: image/gif
SINA-LB: aGEuNDEuZzEuc2h4LmxiLnNpbmFub2RlLmNvbQ==
SINA-TS: ZGFkYzk4Y2UgMCAwIDAgOCAwCg==
Via: http/1.1 ctc.ningbo.ha2ts4.70 (ApacheTrafficServer/4.2.1.1 [cRs f ])
X-Via-CDN: f=Edge,s=ctc.ningbo.ha2ts4.70,c=115.231.82.33
Age: 1
X-Via: 1.1 zjjhdx33:3 (Cdn Cache Server V2.0), 1.1 tzhoudxin37:5 (Cdn Cache Server V2.0)
Connection: keep-alive

这个返回了Cdn Cache Server V2.0,有多家公司都返回了这个,不知道这是个啥玩意,是不是个开源通用产品呢?Squid Varnish Nginx?

segmantfault:

命中

via:T.101203.R.1, M.ctn-zj-lna-204
x-cache:HIT(R) from ctn-zj-lna-204
x-request-id:c239b9ae8ec9f83030bbdfaabcfa8fb4
x-source:U/200, G/200

缓存MISS

via:T.101195.N.1, T.101163.R.1, V.mix-hz-fdi-163, M.ctn-zj-lna-200
x-cache:MISS(S) from ctn-zj-lna-200
x-request-id:724565e217e01e9f60e9f1b74aecedb3

在ctn-zj-lna上缓存没有命中,这个ctn-zj是个CDN集群么?

七牛

访问该图片:http://7xt44n.com2.z0.glb.qin...
Response header返回:

X-Log:mc.g;IO:1/304
X-Qiniu-Zone:0
X-Reqid:90oAABxCoNMaw2wU
X-Via:1.1 dxxz44:2 (Cdn Cache Server V2.0), 1.1 ngdianxin42:6 (Cdn Cache Server V2.0)

用的就是自家产品。

唯品会

Server:vipshop/Vbib
Transfer-Encoding:chunked
Vip-Cache:HIT
x-amz-delete-marker:false
X-Via:1.1 xxxz53:0 (Cdn Cache Server V2.0), 1.1 zhdx34:6 (Cdn Cache Server V2.0)

看Server的响应头,似乎也应该是自家搭建的CDN,显示了命中与否。


祝坤荣
1k 声望1.5k 粉丝

科幻影迷,书虫,硬核玩家,译者