背景
最近有反应公司网站在东南亚印尼地区响应时间非常不稳定, 由于没有接入用户系统,只能宏观的分析。
过程
服务器在国内地区不稳定, 首先怀疑是CDN服务不稳定, 这里牵出来一个问题,如果没有问题区域的样本客户端怎样判定是CDN问题呢?
经过一番查找 https://www.webpagetest.org 属实可以,结合 https://www.feitsui.com/zh-hans/article/1 ,虽然走的都是机房线路,但是异地的加载分析可以提供出思路了。
CDN 的链路1)、用户向浏览器提供要访问的域名;2)、浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以解析函数库一般得到的是该域名对应的CNAME记录,为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问。3)、此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;4)、缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;5)、缓存服务器从实际IP地址得得到内容以后,一方面在本地进行保存,以备以后使用,另一方面把获取的数据返回给客户端,完成数据服务过程;6)、客户端得到由缓存服务器返回的数据以后显示出来并完成整个浏览的数据请求过程。通过以上的分析我们可以得到,为了实现既要对普通用户透明(即加入缓存以后用户客户端无需进行任何设置,直接使用被加速网站原有的域名即可访问,又要在为指定的网站提供加速服务的同时降低对ICP的影响,只要修改整个访问过程中的域名解析部分,以实现透明的加速服务,下面是CDN网络实现的具体操作过程。1)、作为ICP,只需要把域名解释权交给CDN运营商,其他方面不需要进行任何的修改;操作时,ICP修改自己域名的解析记录,一般用cname方式指向CDN网络Cache服务器的地址。2)、作为CDN运营商,首先需要为ICP的域名提供公开的解析,为了实现sortlist,一般是把ICP的域名解释结果指向一个CNAME记录;3)、当需要进行sortlist时,CDN运营商可以利用DNS对CNAME指向的域名解析过程进行特殊处理,使DNS服务器在接收到客户端请求时可以根据客户端的IP地址,返回相同域名的不同IP地址;4)、由于从cname获得的IP地址,并且带有hostname信息,请求到达Cache之后,Cache必须知道源服务器的IP地址,所以在CDN运营商内部维护一个内部DNS服务器,用于解释用户所访问的域名的真实IP地址;5)、在维护内部DNS服务器时,还需要维护一台授权服务器,控制哪些域名可以进行缓存,而哪些又不进行缓存,以免发生开放代理的情况。
其实简单点来说,CDN是通过DNS来返回给用户最近的IP节点来实现资源加速的。
以阿里云为例
X-Cache 可以看出l1的缓存状态 HIT是缓存 MISS是没有缓存 Via 可以看出l1 l2的缓存状态 H是缓存 M是没有缓存 X-Swift-CacheTime 这个是允许缓存的时间 单位是s X-Swift-SaveTime 这个是开始缓存的时间
如上图 L1就是jp6命中, L2 hjk71 命中 (实际返回节点是L1jp6)
还有一种分析的方法,就是下载阿里云的CDN日志, 自行进行分析。
OSS加速和cdn的区别
很多人对使用场景有误解, 像是上传慢,或者首次下载慢,这种低频的差异性大(用户)资源,使用OSS传输加速才是正确的选择。
举个例子海外抠图,需要用户上传自己的图片,然后编辑器需要从远端下载这个已经上传好的图片,这时使用oss加速才是正确选择,因为用户上传上去的的数据可能需要是十分钟,数十次的加载才能被判断为热点(边缘)数据,而这个场景显然达不到。
DNS相关文章分享
DNS 协议解析 https://zhuanlan.zhihu.com/p/351059293
美国如果把根域名服务器封了,中国会从网络上消失吗 https://zhuanlan.zhihu.com/p/194253085