5月27日 22:18

CDN 故障排查的流程是什么?有哪些常用工具?

直接回答

CDN 故障排查的核心流程:确认范围 → 检查DNS → 检查网络连通性 → 检查缓存状态 → 检查源站 → 定位修复

第一步,确认故障范围。 问三个问题:是全量用户还是部分地域?是持续报错还是间歇性?是从什么时候开始的?范围判断决定后续排查方向——全局故障看CDN节点和DNS,局部故障看网络链路和缓存。

第二步,检查DNS解析。 CDN 依赖 DNS 将用户调度到最近的边缘节点,DNS 出问题一切白搭。用 dignslookup 确认域名是否正确解析到 CDN CNAME,检查不同地域 DNS 服务器的解析结果是否一致。常见坑:DNS 缓存未更新导致调度到已下线节点。

第三步,检查网络连通性。 ping 看延迟,traceroutemtr 看链路丢包,curl -v 看 HTTP 握手各阶段耗时。重点关注 SSL 握手时间——如果证书链不完整或配置错误,握手会失败或变慢。

第四步,检查缓存状态。 看响应头里的 X-Cache 字段,HIT 还是 MISS。缓存命中率骤降是最常见的性能劣化原因。排查缓存键配置是否合理、TTL 是否过长导致内容不更新、是否有绕过缓存的请求头。

第五步,检查源站。 绕过 CDN 直接访问源站,如果源站也慢,问题在源站不在CDN。看源站负载、响应时间、错误日志。

核心工具速查

场景工具用法
DNS排查dig/nslookupdig @8.8.8.8 example.com
网络延迟ping/mtrmtr -r -c 10 cdn.example.com
HTTP调试curlcurl -w "@format.txt" -o /dev/null -s URL
SSL检查opensslopenssl s_client -connect host:443
缓存分析日志+响应头grep "X-Cache" access.log | sort | uniq -c
日志分析ELK StackKibana 看错误率趋势和地域分布
bash
# curl 计时模板 curl-format.txt time_namelookup: %{time_namelookup} time_connect: %{time_connect} time_starttransfer: %{time_starttransfer} time_total: %{time_total}

追问:缓存刷新后用户仍看到旧内容怎么办?

先确认刷新是否生效——用 curl -I 检查响应头的 X-CacheLast-Modified。如果刷新成功但用户仍看到旧内容,三个可能:本地浏览器缓存、中间运营商缓存、多CDN节点同步延迟。对应措施:版本化URL(app.js?v=2)、缩短TTL、检查CDN供应商的刷新接口是否覆盖全部节点。

追问:如何预防CDN故障?

三件事:监控告警(节点可用性、缓存命中率、错误率)、健康检查(定时探测各节点)、容灾预案(多CDN切换、源站冗余、DNS快速切流量)。面试中能讲出"监控+容灾"两条线,基本过关。

标签:CDN