教程-CDN访问慢的分析和优化思路

Posted on 19 days ago  773 Views


CDN简单来讲就是内容分发、就近缓存,用户体验和CDN使用效果好坏也是由CDN缓存命中率等一系列因素影响的。

一、必要信息的收集

我们都知道完整的HTTP请求需要经过 DNS解析–>TCP建连–>SSL握手(HTTPS需要SSL握手)–>客户端发送请求–>服务端响应请求

那么我们就需要搜集这些信息来进一步分析判断:

客户端网络情况和CDN的节点IP;

客户端IP和本地DNS;

动用浏览器开发者模式来找到访问慢的URL;

HTTP请求的请求头和响应头。

通过搜集一些问题现象和信息,我们可以进一步再继续往下分析,确定一下初步的排查方向,这也是一个非常重要的环节。

二、常见问题场景

1.客户端到CDN加速节点的网络质量差

客户端 ping 加速域名网络延迟大,甚至丢包。那么这种情况需要搜集客户端的IP、客户端的DNS以及ping情况等,因为CDN调度节点是通过客户端的DNS来分配调度的,根据客户端IP、DNS以及CDN节点可以判断调度是否异常,通过ping情况的分析可以看到网络延迟以及具体延迟在哪个网络节点。

那么这类情况通常有这么几种情况:

(1)CDN加速区域的错误设置

比如从中国大陆解析到海外节点,或者海外节点被解析到中国大陆,这类情况通常需要将加速的区域设置为“全球加速”。

  • 若CDN选择加速区域是“仅中国大陆”,那么加速节点也会调到中国大陆,即便是海外用户访问。
教程-CDN访问慢的分析和优化思路插图
  • 若加速区域选择的是“全球(不包含中国大陆)”,那么该域名只会调度海外的CDN节点,中国大陆用户的请求也会调度到海外CDN节点。教程-CDN访问慢的分析和优化思路插图(2)

(2) 客户端DNS的错误设置

  • 比如上海移动的用户用了联通的DNS,则会导致该用户被调度到联通CDN节点上,存在跨运营商的情况。
  • 例如一个北京移动的用户,用了陕西移动的DNS,则会导致该用户被调度到陕西移动的CDN节点上,远距离调度拉长了网络链路。这种场景就需要用户修改使用对应所在地对应运营商的DNS。

注意:如果加速区域和DNS设置都正确,且CDN正确分配调度的情况下,网络质量还是差,那就需要搜集traceroute和mtr信息来进一步诊断。

2.CDN缓存命中率不高,且频繁回源

简单说下CDN的原理,就是将静态资源缓存在距离客户端最近的CDN节点上。用户访问该资源时,直接从缓存中获取资源,避免通过较长的链路回源。

如果CDN缓存命中率低,则会导致源站压力大,静态资源访问效率低。

可以针对导致CDN缓存命中率低的具体原因,选择对应的优化策略,来优化CDN的缓存命中率

一般的优化方案:

(1)首次加载资源较慢,第二次访问正常

首次访问会比直接访问源站相对还慢些,因为第一次CDN节点没有缓存,要回源取数据。此情况推荐使用预热功能,将源站的内容主动预热到CDN节点上,用户首次访问可直接命中缓存,提高加载速度。

(2)资源访问量较低,文件热度不够

这是因为CDN收到请求比较少,无法有效命中缓存导致。热度是指文件在节点上被访问的频率,文件热度不够,被提前剔除。所以如果您的CDN加速域名流量较低,则可能提前从CDN节点的缓存中清除。

(3)CDN的缓存配置不合理

  • 若CDN缓存时间过短的话,会导致CDN节点频繁回源加载最新资源。这个时候就需要优化CDN的缓存配置
  • 当CDN未配置缓存规则时,CDN用的是默认缓存策略。缓存时间很短,最长不超过3600秒,因此容易造成频繁过期回源的情况。建议可以根据业务情况到CDN设置合理的缓存时间。
  • 当源站配置了一些强制不缓存的Cache-Control的响应头时,即使您配置了缓存规则,CDN也不会对该资源进行缓存,因为这些响应头在CDN缓存规则中的优先级较高。以下有”s-maxage=0”、”max-age=0”、”no-cache”、”no-store”、”private”、”Pragma: no-cache”中的任一种,都会导致CDN无法缓存,需要源站去修改这些响应头,比如修改成Public等可以被缓存的响应头。具体请参考设置Nginx缓存策略Apache缓存策略的设置

(4)访问的URL中携带可变参数

访问资源的URL携带不断变化的参数,这时用不同的URL去访问CDN的时候,CDN会认为这是一个新请求(即便这两个不同的URL其实是访问到了同一个文件,并且该文件已经缓存在节点上),还是会回源去拉取所请求的内容,建议开启过滤参数功能。

(5)大文件加载较慢

这个时候,建议开启Range回源来优化回源。

3.动态请求访问非常慢

如果是动态访问请求,当客户端访问这些动态内容时,每次都需要访问用户的服务器,由服务器动态生成实时的数据并返回给客户端。这个时候一般CDN无法满足,建议用全站加速DCDN。因为CDN无法缓存实时变化的动态内容,因此CDN的缓存加速不适用于加速动态内容。

注意:全站加速对于动态请求的加速是通过阿里云的路由优化、传输优化等动态加速技术以最快的速度访问您的服务器源站获取数据,是一个四层链路的优化,如果源站服务器本身响应速度就很慢,那这种情况还是需要优化源站。

4.源站响应比较慢

这个时候一般由这么几种情况:

(1)源站本身的性能限制,本身处理速度比较慢。比如源站的带宽、CPU等达到瓶颈,或者源站程序处理速度慢等,需要考虑优化源站。如果是性能不足则需要对源站升级配置。

(2)源站的网络比较差,或者源站涉及到跨境链路,这个时候建议部署双源站(境外+境内)调整架构来优化。

5.首页加载非常慢

打开一个网站,实际的过程是:浏览器发起一个请求,服务端返回一个html(也就是首页的请求),浏览器拿到首页请求再解析html,然后才继续去请求网页里的图片、css、Js等资源。

如果首页是一个动态请求或者是不缓存的请求,会导致每次请求首页的时候,CDN都是回源处理的。若源站响应慢就会导致最终首页加载慢。

若是首页慢,用“站长工具”、“17测”等平台去验证CDN的加速效果结果可能不准确。需要输入一个具体的静态资源的URL,那才可以验证加速效果。

6.网站需要加载的内容多

这个时候,需要通过设置CDN的性能优化来提升加速效果。

教程-CDN访问慢的分析和优化思路插图(4)

7.地区运营商的用户访问比较慢

比如某个地区某些运营商有问题,比如某地联通有问题,但移动电信正常,又比如某地联通正常,其他比较慢。

通常的排查方法就是在用户侧去搜集ping信息,先确认客户端和CDN节点之间的网络延迟情况,另外根据用户请求到的CDN节点IP可以绑定到该CDN节点去测试,

如果响应慢,再查看该请求是否命中缓存、加载的资源是否过大等,结合前面的案例进一步分析。如果无法定位也可以通过提交工单等方式联系云厂商解决。

三、造成访问慢原因总结

  1. 客户端本地网络因素,比如客户端下行带宽不足、DNS配置错误等
  2. 客户端到CDN节点之间的网络不佳,网络延迟高
  3. 资源内容比较大,导致下载比较耗时
  4. CDN回源到源站时,回源网络不佳
  5. 源站本身响应速度慢
  6. CDN节点异常,响应速度慢

注意:CDN的作用在于就近缓存,缓存命中情况下对应资源的访问速度会相对较快,加速效果较好;如果CDN缓存命中率差,对应的CDN加速效果是相对不理想的,故提升CDN缓存命中率对于CDN加速效果有着重大影响。


这是励志成为一个优秀产品经理的的学生的奋斗笔记。