周梦康 发表于 2015-02-04 5465 次浏览 标签 : cdnawk

业务需求:现在要对某个域名(a.mengkang.net)下图片访问的流量切到cdn上去。

做法是:

1.先对原域名下访问日志做统计,统计出访问频次最高的14万行图片地址,把这些地址交给cdn服务商。

2.让他们先去预热抓取这14万个地址。

3.预热完毕后,我们再把(a.mengkang.net)的一部分域名换为(b.mengkang.net)。然后把b.mengkang.net做cname解析到cdn服务器给定的域名地址上去(比如b.mengkang.ccgslb.com.cn)。

4.通过wget测试是访问域名b.mengkang.net下的图片是否能够被cdn缓存住。

5.cache测试没有问题之后,我再把a.mengkang.net下的部分流量切到b.mengkang.net上去,同事运维的同事监控流量回源的情况,根据回源情况再对分配流量的大小做调整。

日志格式:

222.246.232.150|-|[20/Jan/2015:00:00:07 +0800]|GET /a/3e/01/1199107779875013eam.jpg HTTP/1.1|200|17589|-|android|-|-|0.000|a.mengkang.net

统计日志:

awk -F'|' '{split($4,b," ");a[b[2]]++}END{for(i in a)print i,a[i]}'   a3.topitme.com.count.txt  |sort -k2nr > cwm.log
awk '$2 >=  3' cwm.log > a3.cc.toptime.top14w.log
awk '/jpg/{print "http://a3.cc.topitme.com"$1}'  a3.cc.toptime.top14w.log  > top14w.log

预热期间需要观察CDN访问日志情况,以防出现多节点(或者多个层级)都同时来源站抓起,避免不必要的带宽开销和服务器IO负载。

如下图就出现了不必要的多次加载,所以加载过程中对日志的监控、检查还是很重要的。

给某域名下图片添加 cdn

被告知预加载完毕后,访问测试:wget -S -O /dev/null 'http://b.mengkang.net/9/1e/89/1145214073728891e9m.jpg'

还可以加上参数-U来标识特定UserAgent,方便去源站上看日志,这个条访问记录是否有回源。

wget -S -O /dev/null 'http://b.mengkang.net/9/1e/89/1145214073728891e9m.jpg' -U zhoumengkang

上面的统计中只要有一个Powered-By-ChinaCache命中,其他的MISS也没有回源。现在的CDN服务商一般都是有多层回源机制,CDN那边只有一层(比如010104f3H9)来回源抓取我们源站,其他用户访问的时候如果访问060105f3HA的是MISS,则再回源到010104f3H9上。这主要是考虑解决并发回源压力比较大的问题。

评论列表

回复 beiwei48 2015-02-04 18:33:27
都用上cdn了,真土豪啊!
回复 康哥 2015-02-04 18:34:18
每个月的费用还不少。
回复 康哥 2015-03-13 18:57:05
cat Collection.txt |awk -F '|' '{split($4,b," ");a[b[2]]++}END{for(i in a){print i,a[i]}}' | sort -k2nr | awk '$2 >=10' | awk '{print "http://a3.cc.topitme.com"$1}' > cdnUrl.log 又复习了下哈。
回复 康哥 2015-03-14 13:34:06
The awk function split(s,a,sep) splits a string s into an awk array a using the delimiter sep.