以 Vercel 服务器为例
排查思路基本差不多, 根据测试指标做出相应的优化方案。
测试
国内访问测试
通过站长之家测试各个地区的访问时间
可以看出测试结果非常差, 之前测试都在几百 ms 左右。 推测是用户数增多, 服务器负载过大等
本地测试
例如: 27.9K 的 css, 多次测试, 网络下载至少要花 3.975 秒, 太夸张了~
原因
通过上面的测试结果发现明显是网络的问题, 但网络问题也存在多样化。浏览器网络传输是通过 HTTP 协议传输, 现代网站基本都用上了 HTTPS, 所以我们主要分析 HTTPS
一次完整、无缓存、未复用连接的 HTTPS 请求, 主要有以下几个阶段:
DNS 域名解析、TCP 握手、SSL 握手、服务器处理、内容传输等
通过 curl
可以快速测试相应的时间, 每次测试结果都不一样, 可以测试多次取平均值
1 | curl -w '\n time_namelookup=%{time_namelookup}\n time_connect=%{time_connect}\n time_appconnect=%{time_appconnect}\n time_redirect=%{time_redirect}\n time_pretransfer=%{time_pretransfer}\n time_starttransfer=%{time_starttransfer}\n time_total=%{time_total}\n' -o /dev/null -s 'https://full-books.itangqiao.top/' |
这些指标分别表示
- time_namelookup:DNS 解析时间
- time_connect:TCP 连接时间
- time_appconnect:SSL/TSL 握手时间
- time_pretransfer:请求前的所有步骤时间(发送第一个 GET/POST 请求之前的耗时)
- time_starttransfer:从发送请求到收到第一个字节的时间
- time_total:总时间
通过百分比量化结果
- DNS 解析时间 (time_namelookup) 占总时间的百分比:约为 0.14%
- 连接建立时间 (time_connect) 占总时间的百分比:约为 75.69%
- SSL 握手时间 (time_appconnect) 占总时间的百分比:约为 87.71%
- 请求到达前的总时间 (time_pretransfer) 占总时间的百分比:约为 87.74%
- 开始传输时间 (time_starttransfer) 占总时间的百分比:约为 99.96%
从测试结果可以看出 DNS 解析没有问题, vercel 去年被墙了, 之后使用了 vercel 为中国开放 DNS 解析服务器 CNAME: cname-china.vercel-dns.com
。DNS 服务主要是用来帮我们找到相应的服务器, 虽然可以找到, 但是服务器太远了, 基本都在美国加州, 并没有为我们优选服务器。
通过"炸了么"的测试结果可以直接看见服务器的位置, 都在美国, 很有可能是慢的主要原因。
其实 vercel 服务器也不少, 离我们最近的服务器有 台湾、香港、日本等。
1 | 34.95.57.145 [加拿大 魁北克省蒙特利尔 Google 云计算数据中心] |
那我们解析到最近的服务器不就行了?
当然没有这么简单, 因为国内使用 vercel 的用户越来越多了, 这几个服务器有的时候根本吃不消, 有的时候香港负载过大, 有的时候台湾负载过大 等等。 所以能不能搞一个负载均衡延迟测试? 看哪里的负载小就连接哪个地方/哪台服务器。 有的同学已经走在前面了! 我们可以直接使用。
优化
最后使用了 Fgaoxing 同学搭建的优选 IP 服务, 根据不同的地理位置和不同的运营商, 分别找到最优的服务器。
![img_0505182123](https://gcore.jsdelivr.net/gh/itangqiao/pic@main/blog/img_0505182123.webp)
优化前
CNAME: cname-china.vercel-dns.com
, 找到的服务器全部在美国
优化后
CNAME: vercel.cdn.yt-blog.top
, 优选最近的服务器, 这 11 台服务器分布在不同的地点
国内访问测试结果
摘取各个地区和各个运营商部分测试结果, 可以看见基本都连接到了 台湾、香港、新加坡等
本地测试结果
curl 测试结果
1.561266(before) → 0.172446 (now)
1 | time_namelookup=0.004840 |
Google PageSpeed Insights 报告
心得
vercel 免费服务也不知道持续到多久,免费的往往也是最贵的, 时间成本永远无法估量。有条件的同学还是推荐自己买云服务器和 CDN 服务~ 我的云服务器马上就到期了,暂时不续了,目前 vercel 也够用。
喜欢折腾的同学可以试试,希望这篇文章有帮助到你。
参考
书籍: 深入架构原理与实践
博客: Fgaoxing