使用阿里云ESA加速后网站访问速度较慢

更新时间:
复制为 MD 格式

问题描述

在使用边缘安全加速 ESA加速后,网站访问速度比较慢。

分析思路

在排查分析问题前,需要了解ESA的加速原理,请参见什么是ESA,它将有助于帮助您如何去思考和分析问题存在的可能原因。简单来说,ESA主要是通过在现有网络中增加一层新的缓存节点,将网站服务器的资源发布到最接近用户的网络节点,使得用户侧客户端在请求时直接访问到就近的ESA节点并命中该资源,减少回源情况,提高网站访问速度。因此,造成访问慢的可能原因可以简单归纳为以下几个类型:

  • 客户端本地网络因素,例如客户端下行带宽不足、DNS配置错误等。

  • 客户端到ESA节点之间的网络不佳,网络延迟较高。

  • 资源内容比较大,导致下载比较耗时。

  • ESA回源到源站时,回源网络不佳。

  • 源站本身响应速度慢。

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

  1. 可以先确认是否是全网都存在访问慢的问题,还是个别用户访问慢,抑或是某一个地区、某一个运营商的用户访问慢。阿里云为您提供了应用实时监控服务ARMS云监控等产品,您可以通过这些产品设定某一地区、某一运营商网络的探测机器去探测,精准性更高:

    • 如果只是极个别用户访问不佳,那么可能跟用户侧的网络有强相关性,很可能就是用户侧的网络问题。

    • 判断异常用户是否有集中性,比如:某市大量移动用户访问异常,而该市联通和电信用户访问正常。这种情况就有可能跟该地区的运营商网络有一定关联,可以使用一些基调工具,用该地区的探测机器进行探测。

    • 如果全网用户都存在访问慢的问题,那就可能是源站响应问题或者是配置方面的问题,因为几乎不可能同时所有的ESA节点或者所有地区的网络都出现问题。例如:排查是否是加速区域选择的错误,是否是动态请求或者无法缓存的请求,源站响应慢,需要重点往这方面考虑。

  2. 确认访问慢或者异常的请求是否被ESA缓存:

    • 如果是命中ESA缓存的请求,那么就不存在ESA回源,因此ESA会直接把节点上的缓存数据返回给客户端,这种情况就和源站没有关系。

    • 如果是没有命中缓存,那么需要重点查看是客户端到ESA的链路慢,还是源站响应慢。

衡量指标

使用ESA加速,除了通用的数据观测指标外,不同的场景下也有更具体的指标。观测这些指标,不仅可以帮助您体验ESA加速的效果,也能观测自身业务使用ESA的情况,帮助您更好地做出调整和决策。详情参见性能指标

信息搜集

我们知道一次完整的HTTP请求需要经过DNS解析>TCP建连>SSL握手(HTTPS需要SSL握手)>客户端发送请求>服务端响应请求的过程,了解HTTP请求的过程将有助于我们更深层次的去分析问题,因此在客户端侧搜集一些信息很有必要,通常可以搜集以下的几点信息。

搜集客户端网络情况和ESA节点IP

使用ping命令连接已接入的站点,确认是否正确解析到ESA,以及客户端到ESA节点之间网络是否是通畅,网络延迟如何。如果无法ping通,则需要进行一些链路诊断,具体信息请参见链路诊断方法

搜集客户端IPLocalDNS

ESA的节点调度策略是根据客户端的LocalDNS来分配调度,因此确认客户端的LocalDNS是否设置正确非常重要。可访问阿里昆仑用户诊断工具,获取客户端IP以及客户端DNS。

查找访问慢的URL

可以打开浏览器开发者模式,切换到Network标签页,输入URL之后,在Network标签页中查看浏览器发出的所有HTTP请求。单击Time选项,按照时间来排序,查看具体是哪些资源请求慢,在Domain列找到已接入的站点下访问慢的URL。

说明

通常情况下,一个网站加载的资源比较多,可能存在一些非ESA加速的URL,这时一些非ESA的资源访问慢,而ESA加速的资源都访问快,但是就是这些非ESA加速的资源加载慢导致整个网站响应速度变慢。因此根据Time排序,确认到底是哪些URL访问慢。

搜集HTTP请求的请求头和响应头

单击Network标签页访问慢的HTTP请求Name值,在Headers标签下可以看到这次请求的General、Response HeadersRequest Headers信息。通过请求头和响应头,我们可以了解这次请求是否是一个静态请求,且是否命中缓存等信息。

说明

如果是手机4G/5G慢,则需要在手机侧抓包获取信息,该操作对一般用户可能会有一些困难。可以考虑打开手机热点,PC端连接热点,在PC端搜集信息。

搜集HTTP请求的Timing信息

Timing标签中可以显示资源在整个请求生命周期过程中各部分时间花费信息。

常见案例的解决方案

在了解ESA的加速原理和HTTP请求过程的基础下,结合问题现象进行初步分析,然后根据搜集到客户端侧的信息一起判断,基本已经可以发现或定位一些问题。下面介绍一些典型的问题案例。

案例一:客户端到ESA节点网络质量不佳

客户端使用ping命令测试已接入的站点,发现网络延迟较大,甚至出现丢包。这种情况下需要搜集客户端的IP、客户端的DNS以及ping的信息截图、MTR的信息截图。因为ESA调度节点是通过客户端的DNS来分配调度,根据客户端IP、DNS以及ESA节点可以判断调度是否异常,通过ping以及mtr的信息截图可以看到网络延迟以及具体延迟在哪个网络链路节点。本节通过两个案例进行介绍。

加速区域设置错误

中国内地的用户被解析到海外的节点,或者海外用户被解析到中国内地,具体场景如下所示:

说明

这种情况建议将加速区域设置为全球

  • ESA的加速区域选择的是中国内地,那么该域名的调度域就只有中国内地的ESA节点,海外用户访问该域名时,都会调度到中国内地的ESA节点。

  • 加速区域选择的是全球(不包含中国内地),那么该域名的调度域里就只有除中国内地之外的ESA节点,中国内地用户都会调度到海外的ESA节点。

客户端DNS设置错误

客户端DNS设置错误需要用户侧修改使用对应所在地对应运营商的DNS:

  • 一个广东移动的用户,使用了联通的DNS服务器,则会导致该用户请求到联通的ESA节点,远距离调度会延长网络链路。

  • 一个广东移动的用户,使用了哈尔滨移动DNS服务器,则会导致该用户请求到哈尔滨移动ESA节点,远距离调度延长网络链路。

说明

如果加速区域和DNS设置正确,在ESA正确分配调度的情况下,网络质量还是差,则需要搜集traceroutemtr信息进一步诊断。

案例二:缓存命中率低或频繁回源

ESA在静态资源加速场景的应用,将静态资源缓存在距离客户端最近的ESA节点。用户访问该资源时,直接从缓存中获取资源,避免通过较长的链路回源。如果ESA缓存命中率低,则会导致源站压力大,静态资源访问效率低。因此,ESA缓存命中率的高低直接影响用户体验,而保证较高的缓存命中率也成为ESA的核心课题。可以针对导致ESA缓存命中率低的具体原因,选择对应的优化策略,优化ESA的缓存命中率,请参见提高ESA的缓存命中率。我们可以通过ESA返回Response Header中的X-Cache字段来判断是否命中缓存。

image

说明
  • X-Site-Cache-Status : MISS,则表示未命中缓存,需要进行回源处理;X-Site-Cache-Status:HIT,则表示命中了ESA缓存,会直接读取缓存数据。

  • X-Swift-CacheTime的字段值表示ESA节点上的允许缓存时间,即该文件可以在ESA节点上缓存多久。如果是0,则表示该请求无法缓存。

缓存命中率低或频繁回源的现象和优化方案如下所示:

  • 首次访问会比直接访问源站还慢,因为第一次ESA节点没有缓存,需要先回源取数据。这种情况推荐使用预热URL功能,请参见刷新和预热资源,将源站的内容主动预热到ESA节点,用户首次访问可直接命中缓存,提高加载速度。

  • 资源访问量较低,文件热度不够,ESA收到请求较少,且无法有效命中缓存。ESA节点作为所有使用ESA的用户共用的节点资源,因此ESA配置的缓存规则表示该资源在ESA上的最长缓存时间。如果您的已接入的站点流量较低,则可能提前从ESA节点的缓存中清除,即缓存按照热度属性采取末尾淘汰制。热度是指文件在节点上被访问的频率,当文件热度不够,则会被提前剔除。

  • 缓存配置不合理,缓存时间过短,ESA节点频繁回源的场景如下所示:

    • ESA未配置缓存规则时,如果静态文件未返回ETagLast-modified响应头,则该静态文件不能缓存在ESA节点上。优化方案需要在源站配置这两个响应头,或者考虑在ESA侧配置缓存规则,请参见配置缓存

    • ESA未配置缓存规则时,ESA使用的是默认缓存策略,请参见阿里云默认缓存规则及优先级,缓存时间很短,最长不超过3600秒,因此容易造成频繁过期回源的情况,建议根据业务情况,在ESA侧设置合理的缓存时间。

    • 当源站配置了一些强制不缓存的Cache-Control的响应头时,即使您配置了缓存规则,ESA也不会对该资源进行缓存,因为这些响应头在ESA缓存规则中的优先级较高。若源站存在s-maxage=0max-age=0no-cacheno-storeprivatePragma: no-cache中的任一种规则,都会导致ESA无法缓存,需要在源站侧修改这些响应头。修改成Public等可以被缓存的响应头,详情请参见设置Nginx HTTP缓存策略设置Apache缓存策略

  • URL携带了可变参数

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

  • 大文件Range回源

    对于一些大文件需要缓存的情况,建议开启Range回源功能优化回源,请参见配置Range回源

案例三:动态请求访问慢

ESA对于动态请求的加速是通过阿里云的路由优化、传输优化等动态加速技术,以最快的速度访问您的服务器源站获取数据。导致该情况出现的原因:

  • 源站性能受限,本身处理速度比较慢:例如源站的带宽、CPU等达到瓶颈,或者源站程序处理速度慢等,需要考虑优化源站。如果性能不足,则需要对源站扩容。

  • Web服务部署在中国内地以外地区,并通过加速区域为全球(不包含中国内地)的站点向全球用户提供服务,中国内地用户的访问体验较差:您可以通过开启中国大陆网络-接入优化,解决中国内地访问中国内地以外源站时面临的跨地域网络服务问题。

  • 全球服务类型业务,动静态内容混合等复杂场景下加速效果一般:开启智能路由ESA将基于阿里云全球边缘节点进行实时网络探测,根据实时网络情况,选择最佳路由传输请求数据,并结合高性能协议栈等优化技术大幅降低全球网络延迟和请求失败率,提升用户体验,保障您业务的连续性。

案例四:源站响应慢

说明
  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。

  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。

  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

当请求访问慢时,若该请求是不缓存资源的请求,或者是一个动态请求,都是需要回源处理。但是由于源站的响应速度非常慢,导致最终响应的速度慢。该情况下可以直接在本地绑定源站域名访问源站,或者在源站服务器中测试源站域名的响应速度。导致该情况出现的原因如下所示:

  • 源站性能限制,本身处理速度比较慢,例如源站的带宽、CPU等达到瓶颈,或者源站程序处理速度慢等,需要考虑优化源站。如果性能不足,则需要对源站扩容。

  • 源站的网络比较差,或者源站涉及跨境链路,比如用户请求中国内地的ESA节点,而源站在中国内地外。由于ESA回源到源站的链路也是公网地址,如果涉及到跨境链路的话确实会受到一些影响,因为跨境链路涉及到不同的运营商、境外运营商,而且需要走国际互联网出口,这些情况ESA侧和源站侧都不可控,ESA单方面优化的空间很小,建议部署双源站(境外和境内)调整架构进行优化。

案例五:网站首页加载慢

当客户端访问http://www.example.com/网站时,浏览器会请求该首页,请求成功以后,服务端返回HTML代码给浏览器,然后浏览器再根据返回的HTML代码来请求代码中需要引入的一些资源,例如图片、JS、CSS等这些URL。如果首页是一个动态资源或者是不需要缓存的资源,则会导致每次请求首页时,ESA都会经过回源处理。如果源站响应慢就会最终导致首页加载慢,该请求在Network中的Pending状态持续时间比较久。具体是否命中缓存可以参见案例二:缓存命中率低或频繁回源的介绍。

这种首页不缓存且请求访问慢的场景,造成的现象就是首页请求一直为Pending,等首页请求到数据后,静态资源很快都会加载出来。

案例六:网站加载的资源比较大

如果网站加载的资源比较大,可以通过设置已接入的站点的性能优化功能,请参见设置资源压缩,缩小访问文件的体积,提升加速效率和页面可读性。目前智能压缩支持的内容格式:text/xmltext/plaintext/cssapplication/javascriptapplication/x-javascriptapplication/rss+xmltext/javascriptimage/tiffimage/svg+xmlapplication/jsonapplication/xml

案例七:某地区某运营商用户访问慢

有一些问题场景,客户端存在共性。比如:某一个时间段,某市移动用户有大量用户反馈访问慢或者异常,而联通电信用户都正常。这类问题很有可能跟当地运营商网络或者该地区请求到的ESA节点有关联,通常的排查方法就是在用户侧去搜集ping信息,先确认客户端和ESA节点之间的网络延迟情况。

另外根据用户请求到的ESA节点IP,可以绑定到该ESA节点进行测试,测试方法跟绑定到源站去测试类似,将IP地址转换成ESA节点的IP即可。绑定节点测试前,可以先验证该节点本身是否存在响应慢的情况。如果响应慢,再查看该请求是否命中缓存、加载的资源是否过大,结合前面的案例进一步分析。如果无法定位问题,可以通过提交工单等方式联系阿里云。

性能指标

通过性能衡量指标,观察使用ESA前后网站加速的情况,评估ESA加速的效果,帮助您更好地做出业务调整和决策。衡量指标主要包括:

通用指标

您可以根据以下通用性能指标(包括但不限于),观察使用ESA前后您的网站情况。

  • 数据上传路径上传

  • 数据下载路径下载

说明
  • 通常使用ESA后的网络延时、丢包率、回源率都会降低,缓存命中率则会提高。但是由于业务场景和业务类型不同,即使您选择了相同配置的ESA服务,实际产生的加速效果也不相同,因此本文仅提供了定性的指标以供观测。

  • 表格中提到的回源率、缓存命中率是指使用ESA后的衡量指标,如果您没有使用ESA,回源请求数为100%,缓存命中率为0。

指标

说明

DNS时间

指从浏览器终端发起的访问请求开始,到浏览器终端获得最终访问主机IP地址所消耗的时间。

TCP时间

指客户端与目标服务器建立TCP连接所消耗的时间。

SSL时间

指客户端和Web服务器建立安全套接层(SSL)连接的消耗时间。

发送时间

SSL握手完成开始发送请求到请求发送完成所消耗的时间。

建立连接时间

建立连接时间简称为建连时间,如果ESA节点使用HTTP协议加速客户业务,建连时间包含“DNS时间+TCP时间”;如果ESA节点使用HTTPS协议加速客户业务,建连时间包含“DNS时间+TCP时间+SSL时间”。建立连接的时间长短,可以反映ESA服务的节点资源覆盖的丰富程度以及调度能力。

响应时间

指浏览器发出HTTP请求后,Web服务器进行后台处理以及响应的时间。

下载用时

指您收到Web服务器返回的第一个数据包,到完成下载的总时间。

首包时间

指从客户端开始发送请求到收到服务器端返回的第一个HTTP协议数据包之间所需要的时间,首包时间可以反映出ESA服务节点的整体性能。

在上传和下载路径中,首包时间主要包含了DNS解析时间、TCP用时、SSL用时、发送时间和响应时间。

说明

刚购买的域名,通常解析时间较长,和ESA的缓存时间无关。

整体性能

指完成整个文件的上传或下载所需要的总时长。

丢包率

指在网络传输中丢失数据包的数量占发送数据包总数的比率。

回源率

回源率分为回源请求数比例及回源流量比例两种:

  • 回源请求数比:指ESA节点(包括边缘节点和汇聚节点)对于没有缓存、缓存过期(可缓存)和不可缓存的请求占全部请求的比例。回源请求数比=ESA节点回源请求数÷用户访问ESA节点的总请求数,通常越低则性能越好(如果ESA回源做了分片,但是用户访问ESA没有分片,那么会出现ESA节点回源请求数远大于用户访问ESA的请求数的情况)。

  • 回源流量比:回源流量指的是ESA节点回源拉取资源的过程中源站响应给ESA节点的所有流量。回源流量比=源站响应给ESA节点的总字节数÷ESA节点响应给用户的总字节数,比值越低,性能越好。

缓存命中率

ESA缓存命中率包括字节命中率和请求命中率,ESA缓存命中率通用指字节命中率,缓存命中率越高,性能越好。

  • 字节命中率=(ESA节点响应用户的总字节数-源站响应ESA节点的总字节数)÷ ESA节点响应用户的总字节数。

    说明

    字节缓存命中率越低,回源流量越大,源站的流出流量越大,源站的带宽资源以及其他的负载越大,因此回源流量代表了源站服务器接收到的负载压力,在业务使用中主要关心字节缓存命中率。

  • 请求命中率=(用户访问ESA节点的总请求数-ESA节点回源请求数)÷ 用户访问ESA节点的总请求数。

加速图片小文件的主要指标

图片小文件主要指HTMLJSJPGCSS等网页资源,延迟时间是决定高性能的关键,延迟越小,性能越好。以下指标均会影响延迟时间:

  • 首包时间(最核心)

  • 建立连接时间

  • 传输时间(下载用时)

加速大文件下载的主要指标

大文件下载指单个文件的大小在20 MB以上的下载,该场景核心的指标为:

  • 下载速度

  • 下载总时间

加速视音频点播的主要指标

视音频点播的场景主要涵盖FLVMP4WMVMKV等视音频文件,主要衡量指标包括:

  • 首播时间:指从打开视频到看到视频画面的时间,通常会受域名解析、连接时间和首包时间的影响。首播时间越短,性能越好。

  • 卡顿率:指每100个用户中播放出现卡顿比例(视音频播放、资源加载等场景下出现的画面滞帧)。卡顿率越低,性能越好。