什么是 CDN?为什么要用 CDN?
2025年11月16日
在实际开发系统,或者系统设计面试时,很可能会遇到如何让网站与内容加载变快的问题。举例来说,在设计像 Netflix 或 YouTube 这种影音内容为主的平台,或者像 Instagram 这种有大量图片的社群网站,加载速度非常重要,过去有研究显示,对电商网站来说,如果每让用户多等一秒,用户跳出网站的比例就会上升不少。
要如何让网站本身,或者网站中有用到的影片、图片的加载变快,CDN 是很常见的手段。在这篇文章,我们会来讨论 CDN 是什么?具体如何运作?可以如何用在系统设计上?
CDN 是什么?
CDN 是 Content Delivery Network 的缩写,中文是指"内容传递网络"。如果进一步拆解这几个字,首先 CDN 是一个网络,意味着是由非常多个节点(服务器)所组成的。Netflix 著名的 Open Connect CDN,由全球超过六千个地点、超过一万八千台服务器所组成的大型网络。
在理解 CDN 是个网络后,让我们接着来看"内容传递"。网络可以做很多事,而 CDN 的网络是专注在传递内容,进一步来说是会用来传递静态资源(static content)。
常见会被放到 CDN 上传递的静态资源包含:
- 图片:将网站的图片资源(如 JPG、PNG、GIF 等)放在 CDN 上,让用户从最近的 CDN 节点获取,减少图片加载时间。
- 影音:将网站上的影音内容(如 MP4、HLS)存在 CDN 上,让用户能从最近的节点流畅地播放,减少缓冲和卡顿。
- HTML、CSS 和 JavaScript 文件:通过 CDN 分发网站的 HTML、CSS 和 JavaScript 文件,缩短这些资源的加载时间。
- 字体文件:将字体文件(如 Google Fonts 或其他自定义字体)存储在 CDN 上,让用户能更快地加载字体,避免因为网页要等字体加载所以得等比较久。
为什么需要 CDN?用 CDN 有什么好处?
在理解 CDN 的定义后,相信读者会问为什么需要 CDN,用 CDN 有什么好处?为什么 Netflix 愿意投资超过十亿美元建置他们的 Open Connect CDN 系统?
如同我们在开头提到的,CDN 的一个重要功能,是能够让静态内容更快被呈现到用户面前。
要理解这点,就不能不谈软件背后的物理世界。虽然我们平常写的软件,是数字与虚拟的,但事实是背后仍得遵守物理世界的法则。具体来说,当今天在服务器端的一个内容,不论是让网页能被渲染用的 HTML、CSS 和 JavaScript 文件,又或者是串流平台的影片、社群平台的照片,如果要传给客户端,传输都仍受物理世界的限制。
这个最基本的法则,是当给定同样的传输速度,如果距离长,传输时间就会越久。
以 Netflix 这间美国公司来说,假如今天没有用 CDN,Netflix 把传内容的服务器架在美国,等于在台湾的观众的客户端装置,请求影音时都要等超过一万公里的传输。这会导致,如果人在美国的观众,会觉得 Netflix 跑很快,但在台湾的则可能觉得慢。
然而,今天假如能在全球各地都有节点,能够就近把影音资源回传给在地用户,这样不管人在哪里,都会觉得 Netflix 跑很快(或者用技术角度来说,Netflix 的延迟性很低)。
用比喻的方式来理解的话,可以把 CDN 想像成桌上的资料柜。在工作时,多数人会把目前正在处理的文件放在桌上,这样要用的时候可以随手拿到,不用每次都得走到书架上去拿文件。假如每次拿一个文件,还要走到隔壁房间的书架,那每次要拿文件就必然要多花时间。
事实上,假如从一个要展示内容的网站角度来看,今天用户浏览一个页面,例如上面截图浏览 ExplainThis 的 IG 首页来说,请求发送、服务器处理、服务器跟数据库互动,到回传账号 IG 首页的图片,这整个过程中,因为不是处理什么复杂逻辑,所以可能都是几十毫秒内完成。
但假如一个图片请求从台湾到美国,然后在美国的服务器回传图片,可能就得花个 200 毫秒在传输上。换句话说,假如没有 CDN 这种就近的节点,整个流程中延迟度最大的瓶颈,很可能会落在图片传输的时间上。
CDN 的其他好处
除了上面提到的,可以透过缩短物理距离,来让传输时间减少,当建置 CDN 这样有多个节点分散于全球的系统,还有许多其他好处。
当今天有多个节点,意味着提供静态资源的服务器,不会成为单点故障(single point of failure)的来源。试想,假如今天只有一台原本用来提供静态资源的服务器,没有其他的节点,假如因为天灾因素,导致该服务器所在位置被影响,进而让该服务器无法正常运作,这会导致整个系统无法继续提供静态资源。
反之,假如有像 CDN 这样的网络,静态资源被复制到各个节点,假如一台掛掉,还有其他台可以用,进而避免单点故障的可能性。
除了避免单点故障,另一个有多节点的好处,是能够分散掉集中在某台服务器的请求压力。换句话说,CDN 网络的存在,等于是对静态资源的水平扩展(horizontal scaling)。试想,像 Netflix 这样的平台,很常会有某个影片突然全球疯传(例如当年的鱿鱼游戏热潮),在这种状况下,假如只有原本的一台服务器,即使该服务器的硬件规格再好,也难以支应来自全球的大量请求。当有 CDN 的其他节点,就能够有效分散流量,进而避免单一台服务器撑不住的状况。
最后,一个常见的 CDN 附加好处,是能够透过 CDN 来增加防护,CDN 提供的 DDoS 防护服务能够抵御分布式拒绝服务攻击,保护网站稳定运行。具体来说,因为原服务器的位置被隐藏在 CDN 后面,所以如果有 DDoS 攻击,也会需要先过 CDN 这一关。而由于 CDN 网络遍布全球,通常很难成功攻击。
阅读更多
如果你觉得这篇内容有帮助,想阅读关于 CDN 更深入的内容,欢迎加入 ExplainThis 筹办的 E+ 成长计划,在 E+ 的主题文中我们有更深入的讨论。加入 E+ 除了透过每周的深度主题文,还有技术讨论社群,让读者在前端、后端、软件工程的领域上持续成长。