让代码更简单

腾讯CDN业务变更导致多次请求TTFB变长

重要:本文最后更新于2022-11-03 16:29:58,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

前一阵将网站环境换了下,折腾一阵后发现请求速度变慢了,TTFB由以前的100ms内变成了200多毫秒,直接多了一倍不止。当初换下别人的主题自己开发就是为了追求速度,如今居然闹这种幺蛾子,一定不能忍,于是开始找问题。

首先找服务器的问题,准备一个静态页和动态页,然后分别请求,观察请求时间。结果静态页居然也需要花费接近200毫秒,动态页甚至能达到300毫秒。然而Nginx日志中的耗时静态页1毫秒,动态页100毫秒左右,问题不在PHP上。

然后通过ssh链接上服务器,在服务器本机执行curl命令模拟访问本机网站,发现与PC电脑访问速度并无区别。

复制
curl -s -w 'Testing Website Response Time for :%{url_effective}\n\nLookup Time:\t\t%{time_namelookup}\nConnect Time:\t\t%{time_connect}\nAppCon Time:\t\t%{time_appconnect}\nRedirect Time:\t\t%{time_redirect}\nPre-transfer Time:\t%{time_pretransfer}\nStart-transfer Time:\t%{time_starttransfer}\n\nTotal Time:\t\t%{time_total}\n' -o /dev/null https://domain

从结果中发现https的耗时较高,比http多了100毫秒左右,不过在浏览器中这段时间是不会计入TTFB的等待时间中的。不过本机访问静态页不应该这么慢才对,于是继续测试了本机下的另一个网站,结果如下:

腾讯CDN业务变更导致请求变慢

这才是正常的访问速度才对,整个TTFB等待时间仅有3毫秒,与Nginx日志中记录的时间相差不大。而https的链接时间又和本站耗时差不多,于是可以确定协议配置没问题。两个站唯一的区别就是一个有CDN,见以前的折腾记录,腾讯云CDN内容分发缓存导致首页内容不更新的解决办法,而另一个一个没有。

于是在PC电脑上对本站访问做host回源操作,即通过host文件将域名指向指定地址,从而跳过CDN的域名解析。编辑 C:\Windows\System32\drivers\etc 里面的host文件,新增一行ip地址 域名

然后通过浏览器访问后,奇迹出现了

腾讯CDN业务变更导致请求变慢
腾讯CDN业务变更导致请求变慢

PC电脑的网络延迟+Nginx日志记录的耗时之和几乎与浏览器的TTFB相等,且比使用CDN解析的时候少了接近一半的耗时。

查看响应头后才发现,腾讯CDN居然给我查询了4次,查不到缓存才给我回源,真的坑,缓存命中规则如下。

腾讯CDN业务变更导致请求变慢

这也解释了为什么会有4个缓存查询头部,Hit From Inner Cluster响应头的意思就是没找到从邻近节点查找。腾讯云CDN以前默认是全站缓存,现在全站缓存独立出来了改名Ecdn,CDN现在仅仅加速静态文件。为了提高缓存文件命中率,又做了两层CDN,边缘节点没有的时候就会去中间源查询,如果还没有就会回源。

找到问题后去CDN后台修改配置,发现有些功能已经不见了,真的坑。将缓存设置由基础设置改为高级设置后发现,4次缓存查询变成了两次。

腾讯CDN业务变更导致请求变慢

虽然变少了两次,但结果并没有改变多少,于是直接给腾讯云提交工单,经过一夜的协商,决定将中间源节点取消,只保留边缘节点。担心只保留边缘节点CDN仍然会对邻近节点进行查询,于是再次补充“我希望对设置不缓存的文件直接回源”。

提交后没一会儿就能看见效果了,缓存头只剩下一个,且对设置了缓存的文件无影响,仍然会进行中间源查询,但这无关紧要,我要的是设置不缓存的文件直接回源。TTFB成功降低到了100ms内,效果不错。

对本次事件个人觉得像是腾讯CDN的BUG,因为当我提及使用基础设置和高级设置响应头数量多一倍的时候,腾讯CND的技术人员表示惊讶不知道这个事,还一个劲的给我推销ECDN,用那玩意儿我还不如换一家,简直钱多烧得慌。且我查询过几个使用腾讯CDN的网站,他们的请求头就是正常的。

记录在此,如果你跟我一样很久之前配置好就没管了,说不定也有一样的问题,可以参考我的解决办法。

感觉很棒!可以赞赏支持我哟~

1 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐