什么是 CDN ?
CDN全稱是 Content Delivery Network/Content Distribution Network,翻譯過的意思是內容分發網絡。
我們可以將內容分發網絡拆開來看:
內容 :指的是靜態資源比如圖片、視頻、文檔、JS、CSS、HTML。
分發網絡 :指的是將這些靜態資源分發到位于多個不同的地理位置機房中的服務器上,這樣,就可以實現靜態資源的就近訪問比如北京的用戶直接訪問北京機房的數據。
所以,簡單來說,CDN 就是將靜態資源分發到多個不同的地方以實現就近訪問,進而加快靜態資源的訪問速度,減輕服務器以及帶寬的負擔。
類似于京東建立的龐大的倉儲運輸體系,京東物流在全國擁有非常多的倉庫,倉儲網絡幾乎覆蓋全國所有區縣。這樣的話,用戶下單的第一時間,商品就從距離用戶最近的倉庫,直接發往對應的配送站,再由京東小哥送到你家。
京東倉配系統
你可以將 CDN 看作是服務上一層的特殊緩存服務,分布在全國各地,主要用來處理靜態資源的請求。
CDN 簡易示意圖
我們經常拿全站加速和內容分發網絡做對比,不要把兩者搞混了!全站加速(不同云服務商叫法不同,騰訊云叫 ECDN、阿里云叫 DCDN)既可以加速靜態資源又可以加速動態資源,內容分發網絡(CDN)主要針對的是靜態資源。
絕大部分公司都會在項目開發中交使用 CDN 服務,但很少會有自建 CDN 服務的公司。基于成本、穩定性和易用性考慮,建議直接選擇專業的云廠商(比如阿里云、騰訊云、華為云、青云)或者 CDN 廠商(比如網宿、藍汛)提供的開箱即用的 CDN 服務。
很多朋友可能要問了:既然是就近訪問,為什么不直接將服務部署在多個不同的地方呢?
成本太高,需要部署多份相同的服務。
靜態資源通常占用空間比較大且經常會被訪問到,如果直接使用服務器或者緩存來處理靜態資源請求的話,對系統資源消耗非常大,可能會影響到系統其他服務的正常運行。
同一個服務在在多個不同的地方部署多份(比如同城災備、異地災備、同城多活、異地多活)是為了實現系統的高可用而不是就近訪問。
CDN 工作原理是什么?
搞懂下面 3 個問題也就搞懂了 CDN 的工作原理:
靜態資源是如何被緩存到 CDN 節點中的?
如何找到最合適的 CDN 節點?
如何防止靜態資源被盜用?
靜態資源是如何被緩存到 CDN 節點中的?
你可以通過預熱的方式將源站的資源同步到 CDN 的節點中。這樣的話,用戶首次請求資源可以直接從 CDN 節點中取,無需回源。這樣可以降低源站壓力,提升用戶體驗。
如果不預熱的話,你訪問的資源可能不再 CDN 節點中,這個時候 CDN 節點將請求源站獲取資源,這個過程是大家經常說的回源。
命中率和回源率是衡量 CDN 服務質量兩個重要指標。命中率越高越好,回源率越低越好。
如果資源有更新的話,你也可以對其刷新,刪除 CDN 節點上緩存的資源,當用戶訪問對應的資源時直接回源獲取最新的資源,并重新緩存。
如何找到最合適的 CDN 節點?
GSLB (Global Server Load Balance,全局負載均衡)是 CDN 的大腦,負責多個 CDN 節點之間相互協作,最常用的是基于 DNS 的 GSLB。
CDN 會通過 GSLB 找到最合適的 CDN 節點,更具體點來說是下面這樣的:
瀏覽器向 DNS 服務器發送域名請求;
DNS 服務器向根據 CNAME( Canonical Name ) 別名記錄向 GSLB 發送請求;
GSLB 返回性能最好(通常距離請求地址最近)的 CDN 節點(邊緣服務器,真正緩存內容的地方)的地址給瀏覽器;
瀏覽器直接訪問指定的 CDN 節點。
CDN 原理示意圖
為了方便理解,上圖其實做了一點簡化。GSLB 內部可以看作是 CDN 專用 DNS 服務器和負載均衡系統組合。CDN 專用 DNS 服務器會返回負載均衡系統 IP 地址給瀏覽器,瀏覽器使用 IP 地址請求負載均衡系統進而找到對應的 CDN 節點。
GSLB 是如何選擇出最合適的 CDN 節點呢?GSLB 會根據請求的 IP 地址、CDN 節點狀態(比如負載情況、性能、響應時間、帶寬)等指標來綜合判斷具體返回哪一個 CDN 節點的地址。
如何防止資源被盜刷?
如果我們的資源被其他用戶或者網站非法盜刷的話,將會是一筆不小的開支。
解決這個問題最常用最簡單的辦法設置Referer 防盜鏈,具體來說就是根據 HTTP 請求的頭信息里面的 Referer 字段對請求進行限制。我們可以通過 Referer 字段獲取到當前請求頁面的來源頁面的網站地址,這樣我們就能確定請求是否來自合法的網站。
CDN 服務提供商幾乎都提供了這種比較基礎的防盜鏈機制。
騰訊云 CDN Referer 防盜鏈配置
不過,如果站點的防盜鏈配置允許 Referer 為空的話,通過隱藏 Referer,可以直接繞開防盜鏈。
通常情況下,我們會配合其他機制來確保靜態資源被盜用,一種常用的機制是時間戳防盜鏈。相比之下,時間戳防盜鏈的安全性更強一些。時間戳防盜鏈加密的 URL 具有時效性,過期之后就無法再被允許訪問。
時間戳防盜鏈的 URL 通常會有兩個參數一個是簽名字符串,一個是過期時間。簽名字符串一般是通過對用戶設定的加密字符串、請求路徑、過期時間通過 MD5 哈希算法取哈希的方式獲得。
時間戳防盜鏈 URL 示例:
http://cdn.wangsu.com/4/123.mp3?wsSecret=79aead3bd7b5db4adeffb93a010298b5&wsTime=1601026312
wsSecret :簽名字符串。
wsTime: 過期時間。
時間戳防盜鏈的實現也比較簡單,并且可靠性較高,推薦使用。并且,絕大部分 CDN 服務提供商都提供了開箱即用的時間戳防盜鏈機制。
七牛云時間戳防盜鏈配置
除了 Referer 防盜鏈和時間戳防盜鏈之外,你還可以 IP 黑白名單配置、IP 訪問限頻配置等機制來防盜刷。
總結
CDN 就是將靜態資源分發到多個不同的地方以實現就近訪問,進而加快靜態資源的訪問速度,減輕服務器以及帶寬的負擔。
基于成本、穩定性和易用性考慮,建議直接選擇專業的云廠商(比如阿里云、騰訊云、華為云、青云)或者 CDN 廠商(比如網宿、藍汛)提供的開箱即用的 CDN 服務。
GSLB (Global Server Load Balance,全局負載均衡)是 CDN 的大腦,負責多個 CDN 節點之間相互協作,最常用的是基于 DNS 的 GSLB。CDN 會通過 GSLB 找到最合適的 CDN 節點。
為了防止靜態資源被盜用,我們可以利用Referer 防盜鏈+時間戳防盜鏈。
審核編輯:郭婷
-
服務器
+關注
關注
12文章
9129瀏覽量
85349 -
CDN
+關注
關注
0文章
314瀏覽量
28794
原文標題:美團二面:什么是 CDN ?CDN 工作原理是什么?
文章出處:【微信號:cxuangoodjob,微信公眾號:程序員cxuan】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論