万千争宠-CDN案例篇

“六宫粉黛无颜色”,

“万千宠爱在一身”。

得不到CDN的宠爱,不妨给点颜色它瞧瞧!

URL中常常会带有“?”参数,通过“?”也许就可以做到
“?”的第一个作用,传递参数
我们一般请求的URL可能是这样的,http://www.abc.com/flower.png
拿到的图片是这样的

如果通过“?”传递参数,比如,http://www.abc.com/flower.png?color=yellow
就会得到小雏菊,给它点颜色就是这么来的

“?”的第二个作用,对象独立缓存
每一个URL可以理解为一个对象,如jss、css、jpg,就好比是赵钱孙三人
这样一来,赵钱孙都能被CDN宠幸(缓存)
注:这里的赵钱孙都是标配的,即不带“?”参数

既然是对象,那自然就会有对象的属性或特征
如同上面的小白花变成小黄花,赵钱孙带上“?”后,摇身一变,就可以变成你想象的样子
相貌平平的赵变成了英姿飒爽的赵,穷困潦倒的钱变成了腰缠万贯的钱...
小编一直幻想着有这样的属性特征,然而贫穷确实限制了我的想象力

案例回顾

赵钱孙只是一个简单的例子
在实际操作中,对象之多、属性之复杂,CDN是怎么做到独立缓存的?
答案只有一个,就是设立一个Flag,即CDN为“?”后面的query string单独缓存
具体请看下面一则案例

客户反馈某个域名出现窜号的情况
顾名思义,窜号就是A用户能访问到B用户的信息

运营GG(编号001)迅速作出回应
小编感慨,运营GG每次响应都是做得那么潇洒和让人猝不及防
请记住咱们的运营GG(编号001),做事雷厉风行!
运营GG(编号002)为该域名设立一个Flag
这个Flag就是上面提到的,CDN为“?”后面的query string单独缓存
几个意思?就一个意思,CDN能为同一对象的不同属性单独缓存
拿赵钱孙这仨来说,CDN最初可能只缓存了这三位仁兄的标配版
http://www.abc.com/赵
http://www.abc.com/钱
http://www.abc.com/孙
哪天,赵变胖了、钱变穷了、孙变老了,此时CDN缓存的还是原来的赵钱孙
这是不合理的,客户的情况与之相似,大众访问到的内容都是标配版的赵钱孙,就出现了所谓的窜号
CDN应该根据对象的属性特征去做相应的缓存:设立Flag就能解决该问题,即CDN根据“?”后面的参数进行缓存
于是,CDN宠幸(缓存)的对象大致如下,包括3个标配版的赵钱孙,发福的赵、变穷的钱、年迈的孙
http://www.abc.com/赵
http://www.abc.com/钱
http://www.abc.com/孙
http://www.abc.com/赵?body=fat
http://www.abc.com/钱?money=little
http://www.abc.com/孙?age=old

至此,问题解决!
过程太短,解决问题太快
整个过程中,小编丝毫没感觉到客户有任何痛楚
最后,以一位海外技术的话来支持这次的案例分析
---如果CDN不为“?”后面的query string单独缓存,则缓存的内容只有对象的“首个且唯一”的副本


END

