架構設計(四):CDN
作者:Grey
原文地址:
CDN 全稱 Content delivery network ,即:內容分發網絡。
CDN 是一個地理上分散的服務器網絡,主要用於提供靜態內容。如:圖片、視頻、CSS、JavaScript 文件等。
還有一種是動態內容緩存,它可以實現基於請求路徑、查詢字符串、cookies和請求頭的HTML頁面的緩存。參考Amazon CloudFront 動態內容分發。本文主要介紹 CDN 技術
當用戶訪問一個網站時,離用戶最近的 CDN 服務器將提供靜態內容。也就是說,用戶離 CDN 服務器越遠,網站的加載速度就越慢。架構如下
整個工作流程如下
-
客戶端通過使用一個圖像 URL 來獲取圖片信息。該 URL 的域是由 CDN 提供者提供的。URL 類似如下的形式:https://mysite.cloudfront.net/logo.jpg
-
如果 CDN 服務器的緩存中沒有這張圖片,則 CDN 服務器就會從原始服務器中請求該文件。
-
原始服務器向 CDN 服務器返回該圖片,其中包括可選的 HTTP 頭 TTL(Time-to-Live),描述圖像被緩存多長時間。
-
CDN 緩存圖像並將其返回給用戶A。圖像一直緩存在CDN中,直到 TTL 過期。
-
-
另外一個客戶端發送請求以獲得相同的圖像。
-
只要 TTL 沒有過期,圖像就會從 CDN 緩存中返回。
使用 CDN 要考慮的因素
-
成本。CDN 是由第三方供應商運行的,要爲進出 CDN 的數據傳輸付費。緩存不經常使用的內容不會帶來明顯的好處,還會增加成本,所以,你應該考慮將它們從 CDN 中移出。
-
設置一個適當的緩存過期時間。對於時間敏感的內容,設置一個緩存過期時間時間是很重要的。緩存過期時間既不能太長也不能太短。如果它是太長,內容可能不再是最新的。如果它太短,它可能會導致重複從原始服務器重新加載內容到 CDN。
-
考慮你的網站或應用程序如何應對 CDN 故障。如果 CDN 暫時中斷,客戶應該能夠檢測到這個問題並從原始服務器請求資源。
-
如果 CDN 的內容無效了,應該要可以在一個文件過期前從 CDN 中把無效內容刪除,有兩種刪除方式
- 第一種方式,是使用 CDN 供應商提供的 API 使 CDN 對象失效。
- 使用版本管理來提供對象的不同版本。可以在 URL 中添加一個參數,比如說版本號,
image.png?v=2
,當版本號不同的時候,獲取的內容也就不一樣了。