1.
目标与准备工作
目标:通过可复现的测试流程,从延迟(Latency)与吞吐量(Throughput)两方面比较多家海外 CDN(coversent)提供商;准备:注册各家 CDN 账号、准备 100MB、1GB 的测试文件并放置于源站,准备至少 6 个测试节点(建议覆盖北美、欧洲、东亚、东南亚、南美、非洲),节点可用 AWS/GCP/Azure/DigitalOcean/Hetzner 或者 Speedtest/外部监测平台。
2.
选择对比的 CDN 列表
建议候选:Cloudflare、Akamai、Fastly、AWS CloudFront、Google Cloud CDN、BunnyCDN、KeyCDN、StackPath。说明:先做免费或 Trial 账号的基础配置,统一在每个 CDN 上配置同一源站与相同缓存策略,便于比较。
3.
部署测试文件与缓存配置
步骤:在源站放置 test-100MB.bin 和 test-1GB.bin;在 CDN 上创建相同的分发域名并指向源站;设置缓存策略(Cache-Control: public, max-age=3600);开启 gzip/brotli;记录每个 CDN 的默认 TTL 与是否强制 HTTPS。
4.
DNS 与解析设置
步骤:为每个 CDN 配置独立子域(如 cf.example.com、fastly.example.com);从测试节点使用 dig +short 对比解析的 IP 与 TTL;命令示例:dig @8.8.8.8 cf.example.com +short;注意:DNS 解析差异会直接影响首跳延迟,记录解析时间与返回的 IP。
5.
延迟测量——分解指标
要测的子指标:DNS 解析时间、TCP 握手时间、TLS 握手时间(如果 HTTPS)、TTFB(Time To First Byte)、首包到达延迟。工具与命令:curl -o /dev/null -s -w '%{time_namelookup} %{time_connect} %{time_appconnect} %{time_starttransfer}\n' https://cf.example.com/test-1KB.txt;httping -G -c 10 https://cf.example.com/。
6.
延迟测量——批量化脚本
操作:在每个测试节点写脚本循环请求每个 CDN 的相同小文件(1KB 或 10KB),记录上述 curl 输出并保存为 CSV;示例:for c in cf fastly cloudfront; do curl -o /dev/null -s -w "%{time_namelookup},%{time_connect},%{time_appconnect},%{time_starttransfer}\n" https://$c.example.com/test-1KB.txt >> results_$NODE.csv; done。运行 100 次取中位数与 95 百分位。
7.
路径层面排查(Traceroute/MTR)
步骤:对延迟高或波动大的节点,用 traceroute -n 和 mtr -r -c 50 追踪路由,识别在哪一跳出现突增;命令示例:mtr -r -c 100 cf.example.com;输出保存并比对不同 CDN 在同一地区的路由差异。
8.
吞吐量测试——方法概述
思路:使用大文件下载测峰值带宽与持续吞吐;避免缓存未命中导致回源瓶颈;在每个 CDN 下分别测试 cache-hit(首次从边缘)和 cache-miss(清除边缘缓存后)。工具:wget、curl、aria2、iperf3(仅用于自建服务器)。
9.
吞吐量测试——实际命令
建议命令:wget --output-document=/dev/null --report-speed=bits https://cf.example.com/test-100MB.bin 记录平均速度;或用 curl -o /dev/null -s -w '%{speed_download}\n' https://cf.example.com/test-100MB.bin;重复 5-10 次取平均,并按时间序列记录吞吐变化。
10.
并发与连接数测试
步骤:模拟并发下载以测试边缘并发吞吐,使用 aria2c -x 16 -s 16 -k 1M https://cf.example.com/test-1GB.bin 或用多进程 wget 并发请求;记录吞吐随并发连接数增长的曲线,找出饱和点。
11.
Cache Hit 与回源影响测试
操作:先确保文件被边缘缓存(先访问一次),再运行吞吐测试记录数据;随后清除缓存(CDN 控制台 purge)或修改文件名,再测试回源吞吐,比较差异以评估回源带来的瓶颈。
12.
数据记录与可视化
步骤:将所有测试结果写入统一 CSV(字段:时间、节点、CDN、DNS、TCP、TLS、TTFB、下载速度、并发数、cache-hit/miss);使用 Excel、Grafana 或 Python(pandas+matplotlib)绘制延迟箱线图、吞吐随并发增长曲线及地区热力图,便于直观比较。
13.
结果分析要点
重点:延迟关注中位数与 95 百分位,地域差异是否显著;吞吐关注峰值带宽与稳定性(抖动);注意缓存命中率、回源时间、协议(HTTP/2 vs HTTP/3)对延迟和吞吐的影响;归纳:某些 CDN 在特定地区的 PoP 更优。
14.
实际决策建议
依据:若业务侧重交互请求(小文件、低延迟),优先选中位与 95 百分位低且稳定的 CDN;若侧重大文件传输(高吞吐),看并发饱和点与持续带宽;综合考虑计费(流量 vs 请求数)和运维特性。
15.
常见陷阱与注意事项
注意:测试时要保证测试节点网络本身不是瓶颈(先跑本地 iperf3 测试);确保多个 CDN 的缓存策略完全一致;避免测试时间集中在网络抖动窗口;对 HTTPS 的 TLS 会增加时间,应分别记录加密时间。
16.
问:如何快速判断哪个海外 CDN 在目标地区延迟更低?
答:在目标地区部署临时云实例(Ping 或 curl 测试),用批量脚本并发请求每个 CDN 的小文件 100 次,取中位数与 P95;如果无节点可用,使用 WebPageTest/SpeedCurve 等全球测试节点快速比对。
17.
问:吞吐量差异大时我应如何定位是回源还是边缘限制?
答:先测试 cache-hit 情况(确保边缘已有缓存)与 cache-miss 情况(清缓存或用新文件名),若 cache-hit 高吞吐而 cache-miss 低,则回源是瓶颈;若两者均低,可能为边缘带宽或网络路由问题,需用 traceroute/mtr 排查。
18.
问:在实际生产选择时还应考虑哪些非性能因素?
答:除了延迟与吞吐,还要评估 SLA、支持响应、全球 PoP 覆盖、价格模型(流量计费、请求计费)、日志与分析能力、功能(WAF、负载均衡、HTTP/3 支持)以及与现有云/运维的集成成本。
来源:从延迟和吞吐量角度比较不同海外cdn coversent提供商