什麼是 CDN?為什麼要用 CDN?

2025年11月16日

💎 加入 E+ 成長計畫 與超過 800+ 位工程師一同在社群成長,並獲得更多深度的軟體前後端學習資源

在實際開發系統,或者系統設計面試時,很可能會遇到如何讓網站與內容加載變快的問題。舉例來說,在設計像 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+ 除了透過每週的深度主題文,還有技術討論社群,讓讀者在前端、後端、軟體工程的領域上持續成長。

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們