CDN和智能DNS怎么配合用
CDN和智能DNS怎么配合用
CDN和智能DNS经常被放在一起讲,但实际接入时很容易搞混:到底是DNS负责调度,还是CDN负责调度?用户访问慢了,是该换CDN节点,还是该调DNS线路?遇到攻击时,是让CDN扛,还是回源机房扛?
实际使用中发现,CDN和智能DNS不是谁替代谁,而是分工不同。智能DNS更像“入口分流”,决定用户应该去哪个服务入口;CDN更像“边缘缓存和加速层”,决定用户到了入口以后,内容怎么就近返回、怎么减少回源、怎么抗突发流量。
先把访问链路拆开看
一个用户访问 www.example.com,大致链路是:用户本地DNS发起解析,请求到权威DNS,智能DNS根据用户运营商、地域、线路质量返回一个IP或者CNAME,然后用户访问这个地址。如果返回的是CDN的CNAME,后面就进入CDN调度,由CDN再把用户引到合适的边缘节点。
所以链路可以理解成两层调度:
第一层是智能DNS:按地域、运营商、国家、解析来源做入口选择,比如电信用户走电信优化入口,联通用户走联通入口,海外用户走海外入口。
第二层是CDN:在某个入口内继续做节点选择,比如上海电信用户被调到华东电信CDN节点,广州移动用户被调到华南移动CDN节点。
这里补充一点,很多CDN厂商本身也带DNS调度能力,但这不等于业务侧就不需要智能DNS。尤其是多CDN、多机房、国内外分流、高防切换这些场景,业务侧保留智能DNS会更灵活。
常见组合方式:智能DNS返回CDN CNAME
最常见的接法是这样的:业务域名 www.example.com 接入智能DNS,智能DNS里面配置不同线路的CNAME记录。比如国内用户返回国内CDN的CNAME,海外用户返回海外CDN的CNAME,搜索引擎线路返回源站或者专门的SEO入口。
例子可以这样配:
默认线路:www.example.com CNAME cdn-default.example-cdn.com
中国电信:www.example.com CNAME cdn-ct.example-cdn.com
中国联通:www.example.com CNAME cdn-cu.example-cdn.com
中国移动:www.example.com CNAME cdn-cm.example-cdn.com
境外:www.example.com CNAME cdn-global.example-cdn.com
这种方式适合图片、JS、CSS、下载包、视频切片、官网静态页。智能DNS负责把用户导到对应CDN入口,CDN负责缓存和加速。
实际跑下来,静态资源命中率如果能做到90%以上,源站压力会降很多。比如一个日均500GB静态流量的站点,CDN命中率从80%提升到95%,源站回源流量会从100GB降到25GB。这个差距不只是带宽钱的问题,回源连接数、磁盘IO、应用层日志量都会跟着降。
动态业务不要盲目套CDN
登录、下单、支付、游戏接口、WebSocket、API网关这类动态业务,接CDN要谨慎。不是不能接,而是要看CDN是否支持动态加速、TCP优化、HTTP/2、HTTP/3、WebSocket转发,以及回源链路质量。
动态请求没有缓存收益,核心看链路质量。比如用户在广东电信,请求源站在香港。如果直接走普通国际出口,晚高峰RTT可能飙到80ms到150ms,丢包上来以后接口耗时会很难看。换成CN2、GIA或者优质回国线路,RTT可能稳定在20ms到40ms,接口体验差异非常明显。
这种场景下,智能DNS可以按用户来源把动态域名调到不同源站入口。例如国内用户走香港CN2入口,海外用户走新加坡或者美国入口;华东用户走宁波高防,华南用户走香港CN2,境外用户走海外节点。
如果你也在找这种适合动态业务回源、香港CN2或者高防源站的资源,可以看看129云。像香港CN2大宽带-B型,4C 4G DDR4 ECC、30Mbps峰值、500G流量,适合做中小型动态站点、API回源、海外业务回国入口;香港综合-A型走CN2+CMI+CU,带宽10Mbps峰值,适合官网、管理后台、低并发业务入口。需要按业务流量选型时,也可以直接打客服热线400-9177118确认线路和防护细节。
多CDN场景下,智能DNS价值更明显
只接一家CDN时,智能DNS更多是做地域分流。接两家以上CDN时,智能DNS就开始承担故障切换和质量调度。
多CDN常见原因不是“追求复杂”,而是线上真的会遇到这些情况:某家CDN在某个运营商晚高峰质量差;某个地区节点回源异常;证书更新失败;单家CDN被打穿;厂商调度策略变化导致部分用户被分到远端节点。
实际配置里,可以把业务拆成这样:
静态资源域名 static.example.com:电信走CDN A,移动走CDN B,联通按监控质量动态切换。
下载域名 download.example.com:大文件走带宽便宜的CDN,热点包提前预热,冷门包允许回源。
API域名 api.example.com:不缓存,智能DNS按地域返回不同高质量源站入口,CDN只做动态加速或不接CDN。
主站域名 www.example.com:页面静态化部分走CDN,登录态接口单独拆到 api.example.com,避免缓存规则误伤。
多说一句,多CDN不要只看平均延迟。平均值很好看,P95、P99可能很差。线上用户投诉通常不是因为平均慢,而是某一批地区、某一类运营商、某个时间段明显慢。
TTL别乱设,切换速度和缓存压力要平衡
智能DNS里最容易被忽略的是TTL。TTL太长,故障切换慢;TTL太短,解析压力大,而且部分Local DNS不一定严格遵守。
实际使用中,常见配置可以参考这些范围:
普通官网、静态资源域名:TTL 300秒到600秒。稳定性优先,不需要频繁切换。
多CDN调度域名:TTL 60秒到300秒。方便质量波动时切流。
高防切换域名:TTL 30秒到60秒。遇到DDoS时要尽快切到高防入口。
内部服务发现或者灰度入口:TTL 10秒到60秒,但要确认DNS服务商承载能力和客户端缓存行为。
这里要注意,TTL不是写了30秒,全网用户就一定30秒后切完。运营商Local DNS、浏览器、App内置DNS缓存都可能影响生效时间。App场景尤其要关注,有些客户端会把解析结果缓存几分钟甚至更久。
高防和CDN怎么放在一起
有DDoS风险的业务,经常会问一个问题:CDN前面放高防,还是高防前面放CDN?这要看攻击类型和业务形态。
如果是静态网站、图片站、下载站,CDN放在前面比较常见。CDN天然分布式,能吸收一部分HTTP Flood和带宽突发,缓存命中高时源站暴露面也小。源站IP一定要藏好,只允许CDN回源IP访问。
如果是游戏、TCP长连接、UDP业务、强动态API,高防入口往往更关键。智能DNS可以在正常状态下返回优质线路IP,比如香港CN2、国内BGP;被打时切到高防IP,或者不同运营商返回不同高防入口。
比如游戏登录服在国内,平时访问量不大,但容易被DDoS。可以把 login.example.com 接入智能DNS,正常情况下返回低延迟BGP入口,攻击时切到高防机房。宁波高防-E型这类100Gbps防御的机器就适合做被攻击时的业务入口或者高防回源节点,16C 16G DDR4 ECC、100G U.2、上行40Mbps峰值、下行300Mbps,对中小型游戏、接口服务、业务防护入口比较友好。相关资源可以在129云看,重点确认清洗策略、回源限制、带宽峰值和业务协议支持。
源站IP保护要认真做
CDN和智能DNS配好了,但源站IP泄露,很多防护就白做。攻击者绕过CDN直接打源站,这种情况线上非常常见。
源站保护通常要做这些动作:
源站安全组只放行CDN回源IP段、高防回源IP段、运维堡垒机IP。不要全网开放80、443、数据库端口。
业务域名不要直接A记录到源站。测试域名、历史域名、临时域名也要检查,很多源站IP都是从这些地方漏出去的。
回源Host要固定,源站Nginx只响应指定Host。直接拿IP访问时返回403或者空站。
日志里关注异常Host、异常User-Agent、直接IP访问、非CDN来源IP。如果发现大量非CDN IP打到源站,说明入口已经绕过。
证书申请记录、历史DNS记录、Git仓库配置、监控探针配置也会泄露IP。实战里见过不少业务,CDN规则做得很细,结果prometheus.yml里明文写着源站公网IP。
国内、香港、海外访问要分开看
CDN和智能DNS配合时,地域差异非常大。国内三网、香港回国、东南亚、欧美,网络质量完全不是一个模型。
国内访问国内CDN节点,重点看电信、联通、移动覆盖和省份命中。比如华东用户被调到华北节点,RTT可能从20ms变成50ms;如果再跨运营商,丢包和抖动会更明显。
国内访问香港源站,重点看CN2、CMI、CU、BGP质量。普通香港线路白天可能还行,晚高峰差异很明显。CN2和GIA这类线路贵一些,但动态业务能感知到。
海外访问国内源站,通常不建议直接回国内。可以放海外CDN,或者按区域部署源站。比如北美用户走美国节点,东南亚用户走新加坡节点,中国用户走香港CN2或者国内节点。
跨境业务里,智能DNS的价值很高。它可以让中国大陆用户走回国优化线路,让海外用户留在海外CDN或海外源站,避免所有用户挤到同一个入口。
缓存规则要和DNS调度一起设计
很多故障不是DNS错,也不是CDN节点差,而是缓存规则没设计好。比如带登录态的页面被缓存,用户看到别人的信息;接口本来不能缓存,却因为规则写成 /* 全站缓存;图片带鉴权参数,CDN忽略Query String后返回错内容。
常见做法是按域名拆开,不要把所有东西混在 www 下面:
static.example.com:静态资源,缓存时间7天到30天,文件名带hash,允许强缓存。
img.example.com:图片资源,缓存时间1天到7天,按业务是否带鉴权决定是否缓存Query String。
api.example.com:接口请求,默认不缓存,只开动态加速、压缩、HTTP/2、HTTP/3。
download.example.com:大文件下载,缓存时间长,发布前预热,老版本包保留。
www.example.com:页面入口,静态化页面可以短缓存,比如30秒到300秒;登录后页面不缓存。
DNS调度和缓存规则要对得上。比如 static 域名可以大胆多CDN,api 域名切换要更谨慎,因为接口对一致性、连接保持、鉴权、源站状态更敏感。
监控不能只盯源站
CDN加智能DNS之后,故障点变多了。只看源站CPU、内存、带宽不够,还要看DNS解析、CDN命中率、边缘状态码、回源状态码、各地区延迟。
比较有效的监控维度包括:
DNS解析结果:不同省份、不同运营商解析到哪里,是否符合预期。
CDN边缘延迟:用户到CDN节点的RTT和HTTP耗时。
回源延迟:CDN节点到源站的连接耗时、首包时间、失败率。
缓存命中率:按域名、目录、文件类型拆开看。全站命中率意义有限,图片命中率、JS/CSS命中率、大文件命中率更有价值。
状态码分布:边缘4xx、5xx,回源4xx、5xx要分开统计。边缘502和源站502处理方向不一样。
P95、P99延迟:不要只看平均值。晚高峰、弱网、跨运营商问题,经常藏在高分位里。
故障切换时不要只改DNS
遇到CDN故障或者源站异常,很多人第一反应是改智能DNS,把流量切走。这个动作没错,但只改DNS经常不够。
切换前要确认新入口证书是否完整,Host回源是否配置好,源站白名单是否放行,缓存规则是否一致,WAF规则是否会误拦,POST、PUT、WebSocket这类方法是否支持。
切换后要看两类数据:一类是新入口流量是否上来了,另一类是旧入口流量是否还残留。由于TTL和客户端缓存存在,旧入口通常会残留一段时间。不要刚切完就把旧源站下线,否则会出现部分用户访问失败。
实际操作中,比较稳的方式是先小比例切流,比如只切某个省份、某个运营商、某个测试域名,确认状态码和延迟正常后再扩大范围。智能DNS如果支持按线路、按地域、按权重调度,会方便很多。
一个典型业务可以这样拆
假设业务是一个面向国内用户的游戏社区,包含官网、图片、下载包、登录接口、游戏公告,还有一定DDoS风险。可以拆成多个域名处理。
www.example.com:官网页面,接CDN,缓存静态化页面60秒到300秒,国内三网走国内CDN,海外走海外CDN。
static.example.com:JS、CSS、字体文件,接多CDN,缓存30天,文件名带hash,发布时自动刷新入口HTML,不频繁刷新静态文件。
img.example.com:用户头像、帖子图片,接CDN,缓存1天到7天,鉴权图片单独域名处理。
download.example.com:客户端下载包,接大带宽CDN,提前预热热门版本,灰度包放低权重入口。
api.example.com:动态接口,国内用户智能DNS到高质量BGP或CN2入口,不做普通静态缓存,只开动态加速。
login.example.com:登录和鉴权入口,平时走低延迟线路,攻击时智能DNS切到高防入口,源站只放行高防回源。
admin.example.com:后台管理,不接公网CDN,限制IP访问,或者走VPN、堡垒机、Zero Trust入口。
这样拆的好处是每个域名的策略比较清楚。静态资源追求缓存命中和带宽成本,API追求链路质量,高防入口追求抗攻击和可切换,后台入口追求安全边界。
配置时容易踩的坑
CNAME链路太长。业务域名CNAME到智能DNS,智能DNS再CNAME到CDN,CDN内部再CNAME几层,解析耗时会增加。不是不能用,但要测解析时间,尤其是移动网络和海外网络。
同一个域名既做A记录又做CNAME。标准DNS里同名CNAME不能和其他记录共存,有些平台会限制,有些平台表现不一致,迁移时容易出问题。
CDN回源协议和源站协议不一致。用户到CDN是HTTPS,CDN到源站却走HTTP,可能引入安全风险;反过来,源站证书不匹配会导致回源失败。
忽略IPv6。现在移动网络IPv6比例不低,如果AAAA记录和A记录调度策略不一致,会出现IPv4正常、IPv6慢或者失败的情况。
刷新和预热混用。刷新是让缓存失效,预热是提前把资源拉到CDN节点。大文件发布时只刷新不预热,用户第一波访问还是会打源站。
把WAF规则放得太激进。CDN侧WAF、源站WAF、高防清洗规则叠加后,误杀排查会变复杂。尤其是游戏登录、支付回调、第三方Webhook,要提前加白名单或单独规则。
选资源时关注线路和业务形态
买CDN、智能DNS、源站服务器时,不要只看带宽数字。30Mbps CN2和100Mbps普通国际线路,实际体验可能完全不是一个级别。高防也不是只看防御峰值,还要看清洗后可用带宽、是否支持业务协议、被打时延迟抖动、回源策略。
静态资源多,优先看CDN覆盖、缓存命中、刷新预热速度、HTTPS请求价格。
动态接口多,优先看线路质量、RTT、丢包、P95延迟、回源稳定性。
DDoS风险高,优先看高防能力、清洗策略、业务端口支持、攻击期间是否限速。
跨境访问多,优先看CN2、GIA、CMI、CU等线路表现,不同地区要实际ping、mtr、curl测试。
如果业务需要香港回国、国内高防、海外访问组合,可以把CDN和智能DNS策略先画出来,再选源站和高防资源。129云的产品线里有香港CN2大宽带、香港综合线路、宁波高防这些选择,适合按官网、API、高防入口、下载业务分别拆开配置。
上线前要压一遍真实链路
配置看起来没问题,不代表线上就没问题。上线前至少要从不同运营商、不同地区测一遍解析和访问链路。
可以测这些内容:北京电信、上海联通、广州移动、成都电信、海外新加坡、海外美国分别解析到哪里;curl首包时间是多少;静态资源是否命中CDN;API是否被缓存;HTTPS证书链是否完整;源站是否只允许CDN或高防回源;切换DNS后旧入口残留多久。
压测时要区分CDN边缘压力和源站压力。如果缓存命中率高,压测CDN不等于压测源站。要测源站承载能力,可以带随机Query String或者设置不缓存路径,但别在线上高峰这么干。
灰度期间建议把监控面板放在一起看:DNS解析结果、CDN命中率、回源带宽、源站CPU、源站连接数、5xx比例、各地区P95延迟。哪一段抖了,基本能快速定位到是DNS调度、CDN边缘、CDN回源,还是源站本身的问题。