內容傳遞網路 (CDN) 是伺服器的分散式網路,可以有效地將網頁內容傳遞給使用者。 CDN 會將快取的內容儲存在接近使用者的邊緣伺服器上,以將延遲降到最低。
CDN 通常用來傳遞靜態內容,例如影像、樣式表、文件、檔案、用戶端指令碼和 HTML 頁面。 使用 CDN 的主要優點是較低的延遲及更快將內容傳遞給使用者,而與裝載應用程式的資料中心的地理位置無關。 CDN 也能幫助減輕網頁應用程式的負載,因為應用程式不必處理 CDN 中託管內容的請求。
在Azure中,Azure Content Delivery Network 是一種全球性的 CDN 解決方案,用於傳送高頻寬內容,並可託管於Azure或其他地點。 使用 Azure Content Delivery Network,你可以快取來自 Azure blob 儲存、網頁應用程式、虛擬機或任何公開存取的網頁伺服器載入的公開物件。
本主題說明使用CDN時的一些一般最佳實務與考量。 欲了解更多資訊,請參見Azure CDN。
CDN 的使用方式和原因
CDN 的一般用法包括:
提供用戶端應用程式的靜態資源,通常是從網站傳遞。 這些資源可以是圖片、樣式表、文件、檔案、客戶端腳本、HTML 頁面、HTML 片段,或任何伺服器不需要為每次請求修改的內容。 應用程式可以在執行時建立項目並讓 CDN 使用(例如,建立當前新聞標題清單),但不會針對每個請求都如此。
將公用靜態和共用內容傳遞給行動電話和平板電腦等裝置。 應用程式本身是 Web 服務,可提供 API 給在各種裝置上執行的用戶端。 CDN 也可以傳遞靜態數據集(透過 Web 服務)供用戶端使用,或許可以產生用戶端 UI。 例如,CDN 可用來散發 JSON 或 XML 檔。
交付僅由公用靜態內容組成的整個網站給客戶端,而不需要任何專用計算資源。
視需要將視訊檔案串流至用戶端。 影片受益於提供CDN連線的全域數據中心提供的低延遲和可靠連線。
一般而言,改善用戶的體驗,尤其是遠離裝載應用程序的數據中心的使用者。 否則這些使用者可能會遇到較高的延遲。 Web 應用程式中內容總大小的很大一部分通常是靜態的,而使用 CDN 有助於維護效能和整體用戶體驗,同時不需要將應用程式部署至多個資料中心。 關於Azure Content Delivery Network節點位置的列表,請參見 Azure CDN POP Locations。
支援IoT(物聯網)解決方案。 IoT 解決方案所涉及的大量裝置和設備,如果應用程式必須直接將韌體更新散發到每個裝置,就很容易使應用程式不知所措。
在不要求應用程式調整的情況下應付需求尖峰和激增,避免因此增加運行成本。 例如,當作業系統更新針對硬體裝置(如特定型號的路由器)或消費性裝置(如智慧電視)發布時,需求會達到極高峰,因為數百萬用戶和裝置在短時間內下載。
挑戰
規劃使用CDN時,有幾個要考慮的挑戰。
部署。 決定 CDN 擷取內容的來源,以及您是否需要在多個記憶體系統中部署內容。 請考慮到部署靜態內容和資源的過程。 例如,你可能需要另外執行一個步驟來載入 Azure 的 Blob 儲存體。
版本控制和快取控制。 請考慮你如何更新靜態內容並部署新版本。 瞭解CDN如何執行快取和存留時間(TTL)。 關於 Azure 內容傳遞網路,請參見 快取如何運作。
測試。 在本機或預備環境中開發和測試應用程式時,執行 CDN 設定的本機測試可能會有困難。
搜尋引擎優化 (SEO)。 當您使用 CDN 時,影像和文件等內容會從不同的網域提供。 這會影響此內容的 SEO。
內容安全性。 並非所有CDN都提供任何形式的內容訪問控制。 部分 CDN 服務,包括 Azure Content Delivery Network,支援基於憑證的認證以保護 CDN 內容。 欲了解更多資訊,請參閱 用代幣認證保護Azure Content Delivery Network資產。
用戶端安全性。 用戶端可能從不允許存取 CDN 資源的環境中連線。 這可能是一個受安全性限制的環境,其僅限於一組已知來源的存取,或是一個防止從頁面來源以外的任何來源載入資源的環境。 需要後援實作才能處理這些案例。
復原能力。 CDN 是應用程式的潛在單一失敗點。
CDN 可能較不實用的情境包括:
如果內容的點擊率低,那麼在其有效期間(依據存活時間設定)可能只有少數幾次被存取。
如果數據是私人的,例如大型企業或供應鏈生態系統。
一般指導方針和良好作法
使用 CDN 是將應用程式負載降到最低,並將可用性和效能最大化的好方法。 請考慮針對應用程式使用的所有適當內容和資源採用此策略。 設計使用 CDN 的策略時,請考慮下列各節中的要點。
部署
如果你沒有將靜態內容納入應用程式部署套件或流程,則可能需要獨立於應用程式來配置和部署。 請考慮這如何影響你用來管理應用程式元件和靜態資源內容的版本管理方式。
請考慮使用組合和縮製技術來減少用戶端的負載時間。 捆綁會將多個檔案合併成單一檔案。 縮製會從腳本和 CSS 檔案中移除不必要的字元,而不會改變功能。
如果你需要將內容部署到其他地點,這是部署過程中的額外步驟。 若應用程式更新 CDN 內容,可能定期更新或回應事件,必須將更新內容儲存在其他位置及 CDN 端點。
請考慮當部分靜態內容預期會從 CDN 提供時,如何處理本地開發與測試。 例如,您可以將內容預先部署至 CDN,作為建置腳本的一部分。 或者,使用編譯指示詞或旗標來控制應用程式載入資源的方式。 例如,在偵錯模式中,應用程式可以從本機資料夾載入靜態資源。 在發行模式中,應用程式會使用CDN。
請考慮檔案壓縮的選項,例如 gzip (GNU zip)。 壓縮可由網頁應用程式主機在原始伺服器執行,或由 CDN 直接在邊緣伺服器執行。 更多資訊請參見 透過壓縮檔案提升效能Azure CDN。
路由和版本控制
你可能需要在不同時間使用不同的 CDN 實例。 例如,當你部署新版本應用程式時,可能會想使用新的 CDN,並保留舊的 CDN(以舊格式保存內容)以供先前版本使用。 如果你使用 Azure 的 blob 儲存作為內容來源,你可以建立獨立的儲存帳號或容器,並將 CDN 端點指向它。
不要用查詢字串來標示 CDN 資源連結中應用程式的不同版本,因為從 Azure blob 儲存擷取內容時,查詢字串是資源名稱(blob 名稱)的一部分。 此方法也會影響用戶端快取資源的方式。
當您更新應用程式時,發布新版本的靜態資源,如果 CDN 上先前的資源已被快取,可能會是一項挑戰。 欲了解更多資訊,請參閱以下關於快取控制的章節。
請考慮依國家/地區限制CDN內容存取。 Azure Content Delivery Network 允許你根據來源國家或地區篩選請求,並限制所傳送的內容。 如需詳細資訊,請參閱 依國家/地區限制對內容的存取。
快取控件
請考慮如何在系統內管理快取。 例如,在 Azure Content Delivery Network 中,你可以設定全域快取規則,並為特定來源端點設定自訂快取。 您也可以藉由在源端傳送快取指示詞標頭,來控制在CDN中執行快取的方式。
如需詳細資訊,請參閱 快取的運作方式。
為了防止物件在 CDN 上可用,你可以從來源刪除它們、移除或刪除 CDN 端點,或者在 blob 儲存時,將容器或 blob 設為私人。 不過,商品要等到上線時間結束後才會從 CDN 中移除。 您也可以手動清除 CDN 端點。
安全性
CDN 可透過 HTTPS(SSL)傳送內容,並使用其提供的憑證。 它也能透過標準 HTTP 傳送內容。 若要避免瀏覽器對混合內容發出警告,您可能需要使用 HTTPS 來要求透過 HTTPS 載入的頁面中顯示的靜態內容。
如果您使用 CDN 來傳遞靜態資產,例如字型檔案,如果您使用 XMLHttpRequest 呼叫從不同的網域要求這些資源,可能會遇到相同的原始原則問題。 許多網頁瀏覽器會防止跨來源資源分享(CORS),除非網頁伺服器已配置以設置適當的回應標頭。 您可以使用下列其中一種方法,將 CDN 設定為支援 CORS:
設定 CDN 以將 CORS 標頭新增至回應。 更多資訊請參見使用 Azure CDN 配合 CORS。
如果來源是 Azure 的 blob 儲存,請在儲存端點新增 CORS 規則。 欲了解更多資訊,請參閱Azure Storage服務的跨來源資源共享(CORS)支援。
設定應用程式以設定 CORS 標頭。 例如,請參閱 ASP.NET Core文件中的啟用跨來源請求(CORS)。
CDN 回退機制
請考慮您的應用程式在 CDN 失敗或暫時無法使用時的應對方式。 用戶端應用程式可能能使用先前請求時已在本地(用戶端)快取的資源副本,或者你可以加入偵測失敗的程式碼,若 CDN 無法使用,則從來源(應用程式資料夾或存放資源的 Azure blob 容器)請求資源。