大白话讲 CDN:为啥你刷图、看视频能这么快?
用「就近仓库」的比喻讲清 CDN 是啥、解决啥问题,以及边缘节点、回源、命中率是怎么回事。
一、CDN 是啥?一句话
CDN(Content Delivery Network,内容分发网络)可以理解成:把你的静态资源(图片、JS、CSS、视频)提前搬到离用户更近的「小仓库」里,用户访问时从最近的仓库拿,而不是每次都跑到你自家服务器取。
就像电商在全国建分仓:你在北京下单,从北京仓发货;你在广州下单,从广州仓发货——少跑路、少排队。CDN 做的也是这件事,只不过「货」是网页里的图片、脚本、视频,「仓库」是分布在全国甚至全球的 边缘节点(一台台带缓存的服务器)。
二、为啥需要 CDN?
没有 CDN 时,所有用户都直接访问你的源站(你公司那几台或那一台服务器):
- 距离远:用户在上海,服务器在北京,每次请求都要跨大半中国,延迟高。
- 压力大:热门页面或大图,几万人同时点,源站容易扛不住、变慢或挂掉。
- 费带宽:流量全从你源站出,带宽贵、成本高。
用了 CDN 之后:
- 就近取:用户被「指路」到离他最近的边缘节点,从那里拿已经缓存好的资源,延迟低、打开快。
- 源站减压:大部分请求在边缘就满足了,只有缓存没有或过期时才回源站拿一次,源站压力小。
- 成本与体验:流量从 CDN 节点走,往往更便宜;用户体感就是「图秒开、视频不卡」。
所以 CDN 解决的核心问题就一个:让静态内容「离用户更近」,用空间换时间、换稳定性。
三、CDN 咋知道「最近的仓库」在哪?
你访问一个接了 CDN 的域名(比如 img.example.com)时,背后大致是这样:
- 浏览器要解析
img.example.com,先问 DNS:「这个域名对应哪台机器?」 - 你的源站或 CDN 厂商会把这个域名配成 CNAME,指到 CDN 的调度系统(GSLB,全局负载均衡)。
- GSLB 根据「你是谁」(你的 IP 大致在哪)、「哪几个节点还有余力」等,算出一个离你近、又不太忙的边缘节点 IP,告诉浏览器。
- 浏览器之后就去访问这个节点;节点上有缓存就直接返回,没有就去源站拉(回源),拉完再缓存、再给你。
所以:「最近的仓库」不是你自己选的,是 CDN 的 DNS/调度系统根据你的位置和负载帮你选的。
四、边缘节点、回源、命中率——三个常听到的词
1. 边缘节点
就是前面说的「小仓库」——分布在各地、离用户比较近的服务器。边缘相对的是源站(你的主站):边缘在「边上」,源站在「中心」。用户请求先到边缘,边缘能搞定就不麻烦源站。
2. 回源
回源就是:边缘节点上没有你要的资源(第一次有人请求),或者有过期了(按 TTL 算该更新了),于是边缘节点回你的源站去取一份,取完自己存一份,再给用户。
- 回源多:说明很多请求没在边缘命中,源站压力大、延迟也容易上去。
- 回源少:说明大部分请求在边缘就满足了,这是 CDN 理想状态。
所以我们会说:命中率越高越好,回源率越低越好。
3. 命中率
命中率 = 在边缘节点直接拿到资源的请求数 / 总请求数。命中率高,说明「仓库里经常有货」,用户快、源站轻松;命中率低,说明要么缓存策略太保守(TTL 太短、不缓存),要么内容太个性化(每人都不一样,没法共用缓存)。
五、典型能用到 CDN 的场景
- 静态资源:站点的图片、JS、CSS、字体,丢到 CDN 上,用 CDN 的域名访问,最常用、收益最明显。
- 视频、大文件:直播、点播、安装包、更新包,用 CDN 做分发,减少卡顿、减轻源站带宽。
- 整站加速:部分 CDN 还带「全站加速」(动态请求也经 CDN 转发、优化链路),适合接口、HTML 也想加速的场景,配置和计费会复杂一些,按需选用。
不太适合或要小心的:强实时、强个性化的接口(每人数据不同,缓存价值低);带敏感鉴权、不能落边缘的内容(要看清 CDN 的缓存与回源策略,避免误缓存)。
六、小结(大白话版)
- CDN = 把你的静态资源放到离用户更近的「边缘仓库」,用户从最近仓库拿,少跑路、少卡顿。
- 怎么找到最近仓库:域名通过 CNAME 指到 CDN,由 GSLB 根据用户位置和负载选一个边缘节点,用户直接连这个节点。
- 边缘节点 = 各地的缓存服务器;回源 = 边缘没有或过期时回你源站取;命中率高、回源率低 = 体验好、源站压力小。
- 典型用法:图片/JS/CSS/视频/大文件用 CDN 加速;动态、个性化接口要按需配置,别乱缓存。
若对你有用,欢迎点赞、收藏;你们项目里若有用 CDN 的实践或坑,也欢迎在评论区分享。