CDN performance

CDN 的一大優勢是能夠快速、高效率地傳遞內容。CDN 效能最佳化可分為三個類別。瀏覽 CDN 指南。

學習目標

閱讀本文後,您將能夠:

  • 了解 CDN 改善載入時間的方式
  • 對比使用 CDN 與不使用 CDN
  • 探索 CDN 快取的基本資訊
  • 了解 CDN 如何減小檔案大小

複製文章連結

CDN 如何改善載入時間?

基本上,網際網路上的每個人都體驗過內容發佈網路 (CDN) 的好處。包括 Google、Apple 和 Microsoft 等公司在內的大多數技術企業都使用 CDN 來減少載入網頁內容的延遲。

CDN 通常會將伺服器放置在不同網路之間的交換點。這些網際網路交換點 (IXPs) 是主要位置,不同的網際網路提供者在此連線,互相提供源自其不同網路之流量的存取權限。除 IXP 外,CDN 還把伺服器放置在位於全球高流量區域和策略位置的資料中心内,以便能夠盡快移動流量。

CDN 的一大優勢是能夠快速、高效率地傳遞內容。CDN 效能最佳化可分為三個類別:

  1. 縮短距離:縮短用戶端與所請求資料之間的實體距離
  2. 硬體/軟體最佳化:提高伺服器端基礎結構的效能,例如透過使用固態硬碟和高效率的負載平衡
  3. 減少資料傳輸:採用各種技術來減小檔案大小,以便快速進行初始頁面載入

為了能瞭解使用 CDN 的好處,我們來看看沒有 CDN 時一般的用戶端/伺服器資料傳輸會是什麼樣子。

使用 CDN 和不使用 CDN 在載入時間上有何不同?

假設紐約的某個人需要存取新加坡伺服器上託管的網站。這兩個位置相隔甚遠,實體距離為大約 9,520 英里。

無 CDN 時的距離

如果承載網站內容的伺服器 (原始站伺服器) 位於新加坡,則對每個網頁資產的每個請求都必須從紐約前往新加坡,然後再返回。就像搭乘具有許多連接點的國際航班一樣,每個請求都必須沿著從 A 點到 B 點的遠距旅程經過一系列路由器。

若要瞭解電腦從目前位置到達特定 Web 服務需要多少個不同連線 (躍點) 的真實範例,可以使用桌上型電腦探索一下 traceroute 公用程式。

CDN 傳輸時間改進

Because the request from New York to Singapore needs to pass through each of the router locations along the way, the amount of time (latency) is increased both by the total distance and the time it takes each router to process the request. Once the origin server processes the request and responds to the client making the request, it then sends information back through a similar sequence of routers before it returns to New York. The measurement of this total round trip is referred to in telecommunications as RTT for “round trip time.” Ignoring for the moment available bandwidth and potential network congestion, let’s walk through an example of the latency factors.

為便於闡述,我們假設:

  • 請求從紐約到新加坡需要 250 毫秒。
  • 建立一個 TCP/IP 連線會增加 3 次 250 毫秒延遲。
  • 網頁需要 5 個不同的資產,包括圖片、JavaScript 檔和網頁本身。

我們粗略看一下這個網頁的載入時間:

  • 750 毫秒:在紐約的用戶端和新加坡的原始伺服器之間建立 TCP/IP 連線。
  • 250 毫秒:對網頁的 HTTP 請求從紐約傳送到新加坡。
  • 250 毫秒:紐約的請求者收到來自新加坡的原始伺服器的回應,回應中包含 200 狀態代碼和網頁 (包括所有需要的其他資產)。
  • 250 毫秒:紐約的用戶端請求這 5 項資產中的每一項。
  • 1500 毫秒:這 5 項資產從新加坡的原始伺服器非同步傳遞給用戶端。

在這個簡單範例中,網頁載入的總傳輸時間約為 3000 毫秒

如您所見,每次發出請求並發送回應時,都要遍歷紐約用戶端與新加坡原點之間的整個路徑。隨著網站規模擴大並需要更多資產,A 點和 B 點之間的延遲會不斷增加。

我們再看一下向紐約的 Web 用戶端提供託管於新加坡的內容的範例,但這一次新加坡網站使用一個在亞特蘭大設有伺服器的 CDN,其含有靜態網站的快取副本:

  • 請求從紐約到亞特蘭大需要 50 毫秒。
  • 建立一個 TCP/IP 連線會增加 3 次 50 毫秒延遲。
  • 網頁需要 5 個不同的資產,包括圖片、JavaScript 檔和網頁本身。

我們粗略看一下使用 CDN 時這個網頁的載入時間:

  • 150 毫秒:在紐約的用戶端和亞特蘭大的邊緣伺服器之間建立 TCP/IP 連線。
  • 50 毫秒:對網頁的 HTTP 請求從用戶端傳送到邊緣伺服器。
  • 50 毫秒:用戶端收到來自邊緣伺服器快取的回應,回應中包含網頁以及還需要的其他資產清單。
  • 50 毫秒:用戶端請求這 5 項資產中的每一項。
  • 800 毫秒:這 5 項資產從邊緣伺服器非同步傳遞給用戶端。

網頁載入的總傳輸時間約為 1100 毫秒

CDN 距離最佳化

在本例中,用戶端與內容之間距離縮短使靜態內容的延遲時間縮短了 1900 毫秒;也就是說,載入時間縮短將近 2 秒鐘。

CDN 延遲改進

透過縮短所有必要流量都需要遍歷的總距離,網站的每一使用者都能節省大量載入時間。使用者會隨著等待時間增加而開始迅速離開網站 (跳出),因此這種改進既代表了更好的使用者體驗,也代表著更長的頁面停留時間。

CDN 如何載入内容?什麼是快取?

如前文所述,當用戶端從原始伺服器請求檔案時,通常需要將請求傳送到伺服器,然後再傳回來。CDN 在稱為「快取」的過程中將靜態內容檔案從原始伺服器拉到分散式 CDN 網路,從而改善延遲。某些 CDN 具有進階功能,允許有選擇地快取動態內容。資料快取之後,CDN 將從最近的 CDN 資料中心向用戶端提供內容。

無 CDN 快取的請求
有 CDN 快取的請求

完成 TCP 交握後,用戶端電腦向 CDN 的網路發出 HTTP 請求。如果內容尚未快取,則 CDN 將首先透過在原始伺服器和 CDN 邊緣伺服器之間執行一個額外請求,從原始伺服器下載內容。

典型的 CDN 快取過程包含如下四步:

  1. 當用戶請求網頁時,用戶的請求被路由到 CDN 中距離最近的邊緣伺服器
  2. 邊緣伺服器接著向原始伺服器請求使用者要求的內容。
  3. 原始伺服器回應邊緣伺服器的請求。
  4. 最後,邊緣伺服器回應用戶端。
CDN 快取請求

CDN 靠近用戶端的價值體現於向原始伺服器發出初始請求之後。一旦資料從原始伺服器快取到 CDN 網路中,來自用戶端的每個後續請求都只需到達最近的邊緣伺服器即可。這表示,如果最近的邊緣伺服器比原始伺服器更近,就能減少延遲,並且更快地提供內容。

快取 CDN 邊緣回應

務必要牢記一點,這不包括下載資產以及處理請求和回應所需的時間;到目前為止,僅計算在兩個位置之間傳送資訊所需的傳輸時間。我們將探索的其他重要延遲因素還包括資料縮減、硬碟速度和網路壅塞。

CDN 如何透過縮減檔案大小來提高速度?

為縮短頁面載入時間,CDN 要減少 CDN 的快取伺服器和用戶端之間的總體資料傳輸量。當傳輸的資料總量下降時,延遲和所需頻寬都會減少。帶來的結果是更快的頁面載入和更低的頻寬成本。這些縮減包括兩個關鍵組成部份:

縮製:縮製是指透過刪除有助於人類瞭解所發生情況的所有元件來減少程式碼區塊大小的過程。儘管工程師需要將想法分解為合理的變數名稱、空格和注釋,以使程式碼區塊易於閱讀和維護,但電腦在刪除這些字元後仍然可以成功執行程式碼。

下方列出了縮製前後的程式碼區塊:

縮製之前:八行程式碼

無縮製的 CDN

縮製之後:縮減為一行程式碼

CDN 縮製

現在,程式碼片段已從八行減少到一行,整個檔案的大小也隨之縮小。這表示傳輸檔案所需的時間將縮短,減少了延遲並有助於更快載入內容。

檔案壓縮:若要減少透過網際網絡傳輸資料時所需的延遲和頻寬消耗,檔案壓縮是一個重要組成部份。GZip 是常用的壓縮方法,視為傳輸網頁時所用的一種最佳實踐。許多 CDN 提供者預設情況下都啟用 GZip。GZip 壓縮的節省程度有多大?通常,壓縮後檔案的大小比初始檔案小了大約 50% 到 70%。

CDN 可以利用哪些硬體來提高速度?

就 CDN 硬體最佳化而言,與傳統硬碟 (HDD) 相比,使用固態硬碟 (SSD) 具有顯著的優勢。固態硬碟開啟檔案的速度比傳統硬碟最多快 30%,而且更具彈性和可靠性。

與電唱機類似,傳統硬碟由旋轉的圓形金屬碟片構成,碟片上的磁性塗層可以儲存資料。當碟片旋轉時,上方手臂上的讀/寫頭可以存取資訊。這是一種機械過程,會受到碟片旋轉速度的影響。隨著固態硬碟的誕生,舊式硬碟的使用已在減少,但它們目前仍在生產,並在許多電腦系統中廣泛使用。

A solid-state drive (SSD) is also a form of persistent storage, but functions much more similarly to USB thumb drives or the memory cards commonly found in devices like digital cameras; there are no moving parts. If a regular hard disk is spinning and the system is jostled, the HDD may skip, resulting in read/write errors and potential downtime. Another important SSD benefit is in accessing fragmented files. File fragmentation is a situation where parts of a file are in different locations across the disk, resulting in slower access for HDD drives. Because a SSD can access non-contiguous memory locations efficiently, fragmentation is not a threat to performance.

在首批 CDN 中,資料儲存在 HDD 硬碟上。現在的一些 CDN 服務將所有邊緣快取存放在 SSD 硬碟上進行。SSD 的缺點是成本高昂;SSD 的成本可達傳統介質的 5 倍。因此,一些 CDN 服務通常會避免使用 SSD,而選用較舊的技術。Cloudflare CDN 僅使用 SSD。