Products
GG网络技术分享 2025-03-18 16:16 0
有的小伙伴在使用阿里云CDN加速后,网站访问速度比较慢,感觉比原来不通过CDN加速还要慢了,这是为什么呢?由于造成访问慢的影响因素很多,如何去分析定位排除问题、优化网站速度、解决问题是一个十分重要的课题,接下来就分享一下解决排除阿里云CDN加速后网站访问速度变慢的图文教程。
首先要提醒您:
- 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
- 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
当您使用阿里云CDN加速后,出现网站访问速度比较慢的问题时,请参考以下内容解决问题。
在排查分析问题前,需要了解CDN的加速原理,它将有助于帮助您如何去思考和分析问题存在的可能原因。简单来说,CDN主要是通过在现有网络中增加一层新的缓存节点,将网站服务器的资源发布到最接近用户的网络节点,使得用户侧客户端在请求时直接访问到就近的CDN节点并命中该资源,减少回源情况,提高网站访问速度。因此,造成访问慢的可能原因可以简单归纳为以下几个类型:
通过搜集一些问题现象和信息,我们可以进一步分析,初步确定排查方向,这也是一个非常重要的环节。
使用CDN加速,除了通用的数据观测指标外,不同的场景下也有更具体的指标。观测这些指标,不仅可以帮助您体验CDN加速的效果,也能观测自身业务使用CDN的情况,帮助您更好地做出调整和决策。
我们知道一次完整的HTTP请求需要经过DNS解析>TCP建连>SSL握手(HTTPS需要SSL握手)>客户端发送请求>服务端响应请求的过程,了解HTTP请求的过程将有助于我们更深层次的去分析问题,因此在客户端侧搜集一些信息很有必要,通常可以搜集以下的几点信息。
使用ping命令连接加速域名,确认是否正确解析到CDN,以及客户端到CDN节点之间网络是否是通畅,网络延迟如何。如果无法ping通,则需要进行一些链路诊断。如果是手机客户端,则需要借助一些第三方的应用来协助诊断,例如Android可以用“网络万用表”,iOS可以用“iNetTools”。
CDN的节点调度策略是根据客户端的LocalDNS来分配调度,因此确认客户端的LocalDNS是否设置正确非常重要。可访问阿里昆仑用户诊断工具,获取客户端IP以及客户端DNS。
可以打开浏览器开发者模式,切换到Network标签页,输入URL之后,在Network标签页中查看浏览器发出的所有HTTP请求。单击Time选项,按照时间来排序,查看具体是哪些资源请求慢,在Domain列找到CDN加速域名下访问慢的URL。
注意:通常情况下,一个网站加载的资源比较多,可能存在一些非CDN加速的URL,这时一些非CDN的资源访问慢,而CDN加速的资源都访问快,但是就是这些非CDN加速的资源加载慢导致整个网站响应速度变慢。因此根据Time排序,确认到底是哪些URL访问慢。
单击Network标签页访问慢的HTTP请求Name值,在Headers标签下可以看到这次请求的General、Response Headers和Request Headers信息。通过请求头和响应头,我们可以了解这次请求是否是一个静态请求,且是否命中缓存等信息。
说明:如果是手机4G慢,则需要在手机侧抓包获取信息,该操作对一般用户可能会有一些困难。可以考虑打开手机热点,PC端连接热点,在PC端搜集信息。
在Timing标签中可以显示资源在整个请求生命周期过程中各部分时间花费信息。对于Timing中的信息介绍可以参见Understanding Resource Timing。
在了解CDN的加速原理和HTTP请求过程的基础下,结合问题现象进行初步分析,然后根据搜集到客户端侧的信息一起判断,基本已经可以发现或定位一些问题。下面介绍一些典型的问题案例。
客户端使用ping命令测试加速域名,发现网络延迟较大,甚至出现丢包。这种情况下需要搜集客户端的IP、客户端的DNS以及ping的信息截图、MTR的信息截图。因为CDN调度节点是通过客户端的DNS来分配调度,根据客户端IP、DNS以及CDN节点可以判断调度是否异常,通过ping以及mtr的信息截图可以看到网络延迟以及具体延迟在哪个网络链路节点。本节通过两个案例进行介绍。
中国内地的用户被解析到海外的节点,或者海外用户被解析到中国内地,具体场景如下所示:
说明:这种情况建议将加速区域设置为“全球”。
客户端DNS设置错误需要用户侧修改使用对应所在地对应运营商的DNS:
说明:如果加速区域和DNS设置正确,在CDN正确分配调度的情况下,网络质量还是差,则需要搜集traceroute和mtr信息进一步诊断。
CDN在静态资源加速场景的应用,将静态资源缓存在距离客户端最近的CDN节点。用户访问该资源时,直接从缓存中获取资源,避免通过较长的链路回源。如果CDN缓存命中率低,则会导致源站压力大,静态资源访问效率低。因此,CDN缓存命中率的高低直接影响用户体验,而保证较高的缓存命中率也成为CDN的核心课题。可以针对导致CDN缓存命中率低的具体原因,选择对应的优化策略,优化CDN的缓存命中率。我们可以通过CDN返回Response Header中的X-Cache字段来判断是否命中缓存。
说明:
- X-Cache:字段为MISS,则表示未命中缓存,需要进行回源处理;X-Cache字段为HIT,则表示命中了CDN缓存,会直接读取的缓存数据。
- X-Swift-CacheTime:字段值表示CDN节点上的允许缓存时间,即该文件可以在CDN节点上缓存多久。如果是0,则表示该请求无法缓存。
缓存命中率低或频繁回源的现象和优化方案如下所示:
如果访问慢的请求是一个动态请求,当客户端访问这些动态内容时,每次都需要访问用户的服务器,由服务器动态生成实时的数据并返回给客户端。这种场景下,CDN无法缓存实时变化的动态内容,因此CDN的缓存加速不适用于加速动态内容。对于动态内容请求,CDN节点只能转发回源站服务器,没有加速效果。如果用户的网站或App应用有较多动态内容,例如:需要对各种API接口进行加速,可以考虑以下方案。
当请求访问慢时,若该请求是不缓存资源的请求,或者是一个动态请求,都是需要回源处理。但是由于源站的响应速度非常慢,导致最终响应的速度慢。该情况下可以直接在本地绑定源站域名访问源站,或者在源站服务器中测试源站域名的响应速度。导致该情况出现的原因如下所示:
当客户端访问http://www.example.com/
网站时,浏览器会请求该首页,请求成功以后,服务端返回HTML代码给浏览器,然后浏览器再根据返回的HTML代码来请求代码中需要引入的一些资源,例如图片、JS、CSS等这些URL。如果首页是一个动态资源或者是不需要缓存的资源,则会导致每次请求首页时,CDN都会经过回源处理。如果源站响应慢就会最终导致首页加载慢,该请求在Network中的Pending状态持续时间比较久。具体是否命中缓存可以参见案例二:缓存命中率低或频繁回源的介绍。
这种首页不缓存且请求访问慢的场景,造成的现象就是首页请求一直为Pending,等首页请求到数据后,静态资源很快都会加载出来。
说明:如果是首页慢的情况,这种情况使用“站长工具”、“17测”等平台去验证CDN的加速效果可能不准确。因为探测地址如果填写是“http://[$Domai]”,那么探测平台实际探测的是首页地址,并没有去探测网站里的一些静态文件的资源。如果探测URL输入的是一个具体的静态资源URL,才可以验证加速效果。
如果网站加载的资源比较大,可以通过设置加速域名的性能优化功能,缩小访问文件的体积,提升加速效率和页面可读性。目前智能压缩支持的内容格式:text/html、text/xml、text/plain、text/css、application/javascript、application/x-javascript、application/rss+xml、text/javascript、image/tiff、image/svg+xml、application/json、application/xmltext。
有一些问题场景,客户端存在共性。比如:某一个时间段,某市移动用户有大量用户反馈访问慢或者异常,而联通电信用户都正常。这类问题很有可能跟当地运营商网络或者该地区请求到的CDN节点有关联,通常的排查方法就是在用户侧去搜集ping信息,先确认客户端和CDN节点之间的网络延迟情况。
另外根据用户请求到的CDN节点IP,可以绑定到该CDN节点进行测试,测试方法跟绑定到源站去测试类似,将IP地址转换成CDN节点的IP即可。绑定节点测试前,可以先验证该节点本身是否存在响应慢的情况。如果响应慢,再查看该请求是否命中缓存、加载的资源是否过大,结合前面的案例进一步分析。如果无法定位问题,可以通过提交工单等方式联系阿里云。
Demand feedback