CDN节点在日本、香港都有,国内用户访问回源还是慢,问题通常不在“有没有节点”

实际使用中发现,很多站点上了海外 CDN 以后,控制台里能看到日本节点、香港节点,甚至测试静态文件也能跑出不错的速度,但一到国内用户访问业务页面、接口、图片首次加载,就开始慢。这里容易误判,以为“香港节点离国内近,肯定快”。

CDN快不快,要分两段看:用户到 CDN 边缘节点这一段,CDN 边缘节点到源站这一段。国内用户访问慢,有时候用户到香港节点只要 30ms 到 80ms,但香港节点回源到你的源站可能要 500ms、1s、甚至 3s。页面最终等的是完整链路,不是只看前半段延迟。

尤其是动态接口、未缓存文件、频繁刷新资源、带鉴权的下载链接,这些请求大概率会触发回源。边缘节点再近,回源链路差,用户看到的 TTFB 还是高。

先看一个真实链路拆开后的样子

假设国内用户在广东,CDN调度到了香港边缘节点,源站放在美国普通线路机房。链路大概是:

广东用户 → 香港 CDN 节点:40ms 左右。

香港 CDN 节点 → 美国源站:180ms 到 260ms,晚高峰丢包时更高。

源站处理请求:50ms 到 300ms,看业务和数据库。

美国源站 → 香港 CDN 节点返回内容:同样走跨境链路。

香港 CDN 节点 → 广东用户:40ms 左右。

这时候如果是缓存命中,用户只走“广东 → 香港 → 广东”,体验会比较好;如果是缓存未命中,就要多走一趟“香港 → 美国 → 香港”。这就是很多人说的:CDN看起来开了,实际还是像裸连源站。

一个常见数据是:HIT请求 TTFB 50ms 到 150ms,MISS请求 TTFB 800ms 到 3000ms。页面里只要有几十个 MISS 资源,首屏就会很难看。

香港节点不等于回源线路好

这里补充一点,香港节点的“入口质量”和“回源质量”不是一回事。

国内用户访问香港 CDN 节点,走的是用户侧到 CDN 边缘的调度线路。CDN 节点回源,走的是 CDN 厂商内部网络、运营商出口、BGP路由、源站所在机房的接入线路。两段链路可能完全不是一套资源。

很多 CDN 厂商在香港、日本都有边缘节点,但回源到海外源站时,并不保证走 CN2、GIA、精品BGP 或专线。普通国际出口在晚高峰很容易抖,尤其是 20:00 到 23:30 这一段,表现会很明显:延迟升高、丢包、TCP重传、TLS握手变慢。

香港机房也分很多种。有些是面向国际业务的普通BGP,有些是对大陆优化线路,有些只有移动方向好,电信和联通表现一般。单看“香港”两个字判断速度,误差很大。

日本节点也一样,离得近不代表回国稳

日本节点经常被拿来做国内访问优化,因为物理距离比美国近,延迟看起来也还行。但日本到中国大陆的线路质量差异也很大。

普通日本BGP到国内,电信可能绕美国,联通可能绕新加坡,移动可能走 CMI 表现还不错。实际使用中,同一个日本源站,移动用户 80ms,联通用户 120ms,电信用户晚高峰 250ms 加丢包,这种情况并不少见。

如果 CDN 边缘在日本,源站也在日本,但没有回国优化,国内用户访问动态接口仍然可能慢。特别是游戏官网、支付回调、登录接口、API网关这类请求,对丢包比对带宽更敏感。1% 到 3% 的丢包,页面看起来只是慢;接口调用看起来就是偶发超时。

缓存命中率低,是最容易被忽略的根源

很多站点说“CDN慢”,实际看日志,HIT率只有 30% 到 60%。这就不是 CDN 加速效果差,而是大量请求根本没有被缓存。

常见原因有这些场景:URL里带随机参数,比如 ?v=时间戳、?token=用户ID;响应头里有 Cache-Control: no-cache、private、no-store;接口返回 Set-Cookie,CDN默认不缓存;图片做了鉴权,每次签名都不同;HTML页面频繁变化,但没有做边缘缓存策略;源站返回 302、403、500,CDN不缓存或缓存时间很短。

这里不是说动态内容一定不能走 CDN,而是要分清楚哪些能缓存,哪些必须回源。比如商品详情页的主体 HTML 可以短缓存 10s 到 60s,价格库存接口单独回源;图片、CSS、JS 设长缓存;用户态接口不要和公共资源混在同一个域名策略里。

如果静态资源 HIT率能做到 95%以上,CDN节点在香港、日本的价值会明显提升。如果 HIT率只有一半,剩下那一半请求都在赌回源链路质量。

源站位置和线路比 CDN 节点列表更关键

源站放在哪里,决定了回源链路的上限。国内用户访问海外业务时,比较常见的源站选择有香港、日本、韩国、新加坡、美国西海岸。每个位置都能用,但对国内三网表现差异很大。

大致经验值可以这样看:香港优化线路到华南电信、联通、移动,正常能做到 20ms 到 80ms;普通香港BGP晚高峰可能飙到 150ms 以上。日本优化线路到国内通常 50ms 到 120ms;普通线路不稳定时可能绕路。韩国到华北、华东有时候很舒服,尤其是优化线路,延迟可以压到 40ms 到 90ms。美国西海岸普通线路到国内一般 150ms 起步,精品线路能稳很多,但成本也更高。

如果源站本身是普通国际线路,CDN回源再怎么调度,也只是把问题延后了一段。用户看不到源站 IP,不代表源站线路不存在瓶颈。

回源协议和连接复用也会拖慢首包

除了网络线路,协议层也会影响回源速度。很多慢请求不是单纯 RTT 高,而是每次都重新建连。

一次 HTTPS 回源,可能包含 TCP三次握手、TLS握手、HTTP请求、源站处理、内容返回。如果 CDN 到源站没有长连接复用,或者源站 keepalive 设置太短,每个 MISS 请求都要重新握手。跨境链路上 RTT 150ms,握手消耗就很明显。

HTTP/2、HTTP/3 对用户侧有帮助,但 CDN 回源侧不一定默认启用。有些厂商用户侧支持 HTTP/2,回源仍然是 HTTP/1.1。源站如果配置了短连接、低并发、TLS性能差,CDN MISS 请求一多,延迟会被放大。

实际排查时,可以重点看源站连接数、TIME_WAIT数量、Nginx upstream响应时间、TLS握手耗时、CDN日志里的 origin time。不要只看 ping。

DNS调度不准,会把国内用户分到不合适的节点

CDN调度一般依赖 DNS、Anycast 或者调度系统。国内网络环境复杂,同一个省份里电信、联通、移动路径完全不同。调度不准时,广东用户可能被分到日本,华北用户可能被分到香港,甚至部分用户被分到美国边缘。

还有一种情况是 Local DNS 出口不准。用户人在国内,但 DNS解析请求从海外公共DNS出去,CDN以为这是海外用户,于是分配到海外节点。使用 8.8.8.8、1.1.1.1 的用户更容易遇到这种现象。

这类问题看单点测速不准,最好按运营商、地区采样。比如广州电信、深圳移动、上海联通、北京电信、成都移动分别测解析结果、边缘IP、HTTP状态、TTFB。只拿一台本地电脑测,容易把调度问题看漏。

国内没有备案节点时,海外 CDN 只能绕着走

如果域名没有 ICP备案,通常无法使用中国大陆 CDN 节点,只能用香港、日本、新加坡等境外节点承接国内用户访问。这种架构能用,但不能期待它达到大陆节点的效果。

大陆节点访问国内用户,链路在境内运营商网络里走,延迟和稳定性天然更好。海外节点服务国内用户,必然要经过跨境出口。跨境出口一拥塞,静态资源还能靠缓存扛一下,动态回源就会暴露问题。

所以业务如果长期面向国内用户,又对加载速度要求高,备案、国内 CDN、国内源站或国内对象存储要尽早规划。只是临时落海外,可以接受;业务规模起来后,跨境链路会成为经常性的性能变量。

DDoS清洗和安全策略也可能让回源变慢

高防 CDN、WAF、DDoS清洗节点会增加安全检测链路。正常情况下影响不大,但规则过重、回源校验复杂、Bot检测误伤时,会出现请求排队、挑战页、回源放行慢的问题。

常见表现是静态文件不慢,登录、下单、查询接口慢;同一接口在白名单IP访问很快,通过 CDN 后变慢;CDN日志里安全模块耗时明显。

如果用了海外高防,还要看清洗中心在哪里。有些清洗中心在美国或欧洲,香港节点接入后再绕到清洗中心,然后再回源,这条链路就很长。抗攻击能力上去了,普通访问延迟也可能跟着上去。

源站带宽小,CDN回源会把瓶颈打出来

CDN不是无限放大源站能力。缓存命中时源站压力小;缓存失效、大文件刷新、热门资源首次请求时,多个边缘节点可能同时回源。源站带宽小、磁盘慢、Nginx worker配置低,就会被打满。

比如一个 500MB 安装包刚发布,香港、日本、新加坡多个节点同时 MISS。源站只有 20Mbps 带宽,几个节点一起拉,回源队列就排起来。用户看到的是 CDN 下载慢,实际是源站出不来。

这类文件要么提前预热,要么放对象存储,要么源站带宽做大。G口源站不是所有业务都需要,但下载站、游戏补丁、客户端更新这类场景,源站带宽太小会非常明显。

怎么判断慢在用户到节点,还是节点到源站

排查时不要只跑 ping,也不要只看网页测速分数。比较有效的是把请求拆开看。

看 CDN 响应头:X-Cache、CF-Cache-Status、Age、Via、Server-Timing 这些字段能告诉你是不是 HIT。HIT 慢,优先看用户到节点和节点负载;MISS 慢,优先看回源。

看 TTFB 和 total time:TTFB高,通常是回源、源站处理、握手、排队问题;total time高但 TTFB正常,更多是带宽、下载速度、资源大小问题。

看 CDN日志里的 origin response time:很多 CDN 控制台能看到回源耗时。如果用户侧 TTFB 1200ms,origin time 900ms,那基本就是回源链路或源站在拖。

看分运营商数据:电信慢、移动快,通常是线路问题;三网都慢,更像源站处理、缓存策略或 CDN配置问题。

看晚高峰对比:白天 200ms,晚上 1500ms,跨境链路拥塞概率很高。源站CPU如果没变化,业务QPS也没明显上升,就更像线路波动。

选节点和源站时,别只看国家地区,要看回国线路

购买海外服务器或 CDN 资源时,页面上写“香港”“日本”“韩国”只是位置,不代表线路。更应该问清楚:电信走什么、联通走什么、移动走什么;有没有 CN2、GIA、CMI、优化BGP;是否保证回国方向;晚高峰是否限速;被 DDoS 后是否切清洗线路。

如果业务面向国内用户,又暂时不能备案,可以优先考虑香港、韩国、日本的优化线路源站,CDN边缘也尽量选择对大陆友好的节点。下载类、大文件分发类业务要额外看带宽峰值和流量计费方式。

如果你也在找这种海外源站、优化线路、大带宽或高防服务器,可以看看129云。它们家覆盖云服务器、G口大带宽服务器、高防服务器和海外云计算方案,偏游戏、企业、高防场景比较多。需要确认具体回国线路、带宽、抗攻击配置,可以直接打客服热线 400-9177118 问清楚,不要只按地区名下单。

比如面向国内用户的下载分发,如果源站在美国,可以关注美国精品大宽带-C型这类配置:8C CPU、8G DDR4 ECC、120G SSD、1Gbps峰值、2.5TB流量、三网精品线路,适合需要较大出站能力但又希望线路质量别太差的场景。韩国活动机型则更适合轻量业务、官网、接口中转这类对稳定性敏感但带宽需求不大的场景。印尼雅加达节点更偏东南亚访问,不带回国保障,别拿它当国内访问优化节点用。

缓存策略要按业务拆,不要全站一把梭

实际配置 CDN 时,最怕全站一个缓存规则。HTML、API、图片、CSS、JS、下载包、视频切片、用户头像,这些资源的缓存方式完全不同。

CSS、JS、图片可以用文件名 hash,缓存 7 天、30 天甚至更久。发布时换文件名,不靠强刷。

HTML页面可以短缓存,根据业务接受程度设置 5s、30s、60s。新闻、活动页、落地页很适合这么做。

API接口要分公共接口和用户接口。公共配置、分类、地区列表可以缓存;用户订单、余额、登录态接口不要乱缓存。

下载包和大文件要做预热。不要等用户访问时让每个边缘节点同时回源拉大文件。

带 token 的资源要控制参数参与缓存的方式。否则每个用户一个 URL,CDN看起来有缓存,实际每次都是新对象。

源站也要配合 CDN,不是套一层就完事

源站 Nginx、应用、数据库、对象存储都要为回源做准备。CDN MISS 请求集中打过来时,源站看到的不是一个用户,而是一批边缘节点。

Nginx keepalive 要开,worker连接数要够,sendfile、gzip、brotli、open_file_cache 这些基础配置要检查。HTTPS证书链不要太长,TLS版本和加密套件不要拖后腿。

应用接口要看慢查询和外部依赖。很多回源慢并不是网络,而是接口里查数据库、调第三方、读远程存储。CDN日志里只能看到 origin 慢,继续往下要看应用 APM 和数据库日志。

源站防火墙也要注意。有些安全组把 CDN 回源 IP 当异常流量限速,或者 fail2ban 把边缘节点封了,表现出来就是部分地区访问慢、偶发 502、504。

一个常见故障场景:香港 CDN + 美国源站 + 动态页面

有个站点首页用了香港 CDN,国内访问静态图标很快,但首页打开要 4 秒以上。看瀑布图,CSS、JS 大部分 HIT,TTFB 80ms 到 120ms;HTML 文档是 MISS,TTFB 2.4s;几个接口也是 MISS,TTFB 1.5s 到 3s。

继续看 CDN日志,origin time 基本在 1.2s 到 2.8s。源站在美国普通BGP,晚高峰 MTR 有 3% 到 6% 丢包。源站CPU不高,数据库也不慢。

处理方式不是换一个香港节点就结束,而是把首页 HTML 做 30s 边缘缓存,公共接口做 10s 缓存,静态资源缓存 30 天,大图预热;同时把源站迁到对大陆更友好的线路。调整后,首页 HTML TTFB 从 2.4s 降到 120ms 左右,接口 P95 从 2s 多降到 400ms 左右。

这里关键不是“香港好不好”,而是 MISS 请求原来一直在跨境回源。

另一个容易踩的坑:刷新缓存太频繁

有些发布系统每次上线都会全站刷新 CDN。刷新后,边缘节点缓存被清空,国内用户第一波访问全部回源。业务低峰还好,晚高峰全量刷新,源站和跨境链路一起抖。

更稳的做法是静态资源用版本化文件名,上线新文件不刷新旧文件;HTML做短缓存;必须刷新的资源按目录或URL精确刷新;大文件先预热再放量。这样 CDN 缓存层不会反复被打空。

判断该不该换 CDN,先把数据拿出来

CDN厂商确实有差异,但换之前要把 HIT率、MISS TTFB、origin time、运营商分布、源站带宽、源站地区这些数据拿出来。否则换一家 CDN,还是香港节点,还是回美国普通线路,问题大概率会重复出现。

如果 HIT 请求也慢,再看 CDN节点质量、调度、运营商线路。如果只有 MISS 慢,重点看源站位置、回源线路、缓存策略、源站处理能力。如果只有电信慢,查电信路径;只有移动慢,查 CMI 或移动出口;只有晚高峰慢,优先怀疑跨境拥塞和带宽争抢。

CDN节点在日本、香港都有,只说明边缘覆盖存在;国内用户访问回源慢,更多时候是缓存没有命中、回源链路普通、源站线路不适合国内、动态请求占比太高、协议和源站配置没有跟上。