CDN加速靜態文件訪問 全局調度 緩存技術 內容分發 帶寬優化 CDN是Content Delivery Network的縮寫,意思是內容分髮網絡。CDN的作用是把用戶需要的內容分發到離用戶近的地方,這樣可以使用戶 能夠就近獲取所需內容。 整個CDN系統(如圖1-1所示)分為CDN源站和CDN節點, ...
CDN加速靜態文件訪問
CDN是Content Delivery Network的縮寫,意思是內容分髮網絡。CDN的作用是把用戶需要的內容分發到離用戶近的地方,這樣可以使用戶
能夠就近獲取所需內容。
整個CDN系統(如圖1-1所示)分為CDN源站和CDN節點,CDN源站提供CDN節點使用的數據源頭,而CDN節點則部署在距離最終用戶比較
近的地方,加速用戶對站點的訪問。
CDN其實就是一種網路緩存技術,能夠把一些相對穩定的資源放到距離最終用戶較近的機房,一方面可以節省整個廣域網的帶寬消耗,另外
一方面可以提升用戶的訪問速度,改進用戶體驗。我們一般把一些相對靜態的文件(例如圖片、視頻、JS腳本、一些頁面框架)放在CDN中。
圖1-1
我們通過瀏覽器訪問一個網站的過程大致如圖1-2所示。
圖1-2
(1)用戶向瀏覽器提交要訪問的功能變數名稱。
(2)瀏覽器對功能變數名稱進行解析,得到功能變數名稱對應的IP地址。
(3)瀏覽器向所得的IP地址發送請求。
(4)瀏覽器根據返回的數據顯示網頁的內容。
而在有了CDN以後,用戶通過瀏覽器訪問網站的過程會產生一些變化。如圖1-3
圖1-3
(1)用戶向瀏覽器提交要訪問的功能變數名稱。
(2)瀏覽器對功能變數名稱進行解析,由於CDN對功能變數名稱解析過程進行了調整,所以得到的是該功能變數名稱對應的CNAME記錄。
(3)對CNAME再次進行解析,得到實際IP地址。在這次的解析中,會使用全局負載均衡DNS解析,也就是我們需要返回
具體IP地址,需要根據地理位置信息以及所在的ISP來確定返回的結果,這個過程才能讓身處不同地域、連接不同接入商的
用戶得到最適合自己訪問的CDN地址,才能做到就近訪問,從而提升速度。
(4)得到實際的IP地址以後,向伺服器發出訪問請求。
(5)CDN會根據請求的內容是否在本地緩存進行不同處理:
1)如果存在,則直接返回結果。
2)如果不存在,則CDN請求源站,獲取內容,然後再返回結果。
通過這個流程,我們可以看到CDN中的幾個關鍵技術。
全局調度
全局調度是完成用戶就近訪問的第一步,我們需要根據用戶地域、接入運營商以及CDN機房的負載情況去調度。前面兩個調度因素需要一個
儘可能精準的IP地址庫,這是正確調用的前提(誤識別的IP地址到地理位置的對應可能會把東北的用戶調度到華南的站點去),當然,做到
100%的精確是不現實的。IP地址庫的維護是一個持續和變化的過程,並且調度的策略隨著CDN機房的增加也會變化。例如,我們不可能在
所有城市都設置CDN機房,假設剛開始河南整個省份沒有CDN機房,可能河南靠北的城市使用天津的CDN,同時河南靠南的城市使用湖北
的CDN會比較好,而如果後來在鄭州市建設了CDN機房的話,那麼原來的調度策略就會修改了。CDN的負載也是調度中的一個影響因素,
舉例來說,如果一個CDN機房舉例你的位置比較近,但是它的負載已經很高,響應很慢,那麼你的請求送到距離稍遠的CDN機房反而會更快。
緩存技術
從上面的流程中我們看到,如果用戶請求的內容不在CDN中的話,CDN會回到源站去載入內容,然後返回給用戶。所以,如果CDN機房的請求
命中率不高的話,那麼起到的加速效果也是相對有限的。
要提升命中率,就需要CDN機房中有儘可能全面的數據,這要求CDN機房的緩存容量要足夠大,我們可以使用“內容+SSD+機械硬碟”的混合存
儲方式來提升整體的緩存容量,並且我們做好冷熱數據的交換,在提升命中率時也儘量降低緩存的響應時間。
此外,當CDN的Cache沒有命中要回源載入數據時,合併同樣數據的請求也是一個很重要的優化,這樣可以減少重覆的請求,降低源站的壓力。
最後,新增、變更數據後的CDN預載入也是一個提升命中率的辦法。也就是在沒有請求進來時,CDN主動去載入數據,做好準備。當然這個主
動載入一般也需要源站有一個通知過來。
內容分發
這裡提到的內容分發主要是對內容全部在CDN上不用回源的數據的管理和分發,例如一些靜態頁面等。具體做法是在內容管理系統中進行編輯
修改後,通過分發系統分發到各個CDN的節點上。分發的效率以及對分發文件一致性、正確性的校驗是需要關註的點。
帶寬優化
CDN提供了內容加速,很多請求和流量都壓到了CDN上,那麼如何能夠比較有效地節省帶寬會是一個很重要的事情,因為這直接關係到流量
成本。優化的思路是只返回必要的數據、用更好的壓縮演算法等。
在CDN的應用中,從傳統意義上來講,主要是把用戶需要訪問的內容放到離用戶近的地方。可以發現大部分流量是從源站到CDN機房的流量,我們也可以利用CDN機房距離目標用戶近的地點,讓一些上傳的工作從CDN接入,然後再從CDN傳到源站
,這一方面可以提升用戶的上傳速度,另一方面也很好地利用了從CDN機房到源站的上行帶寬。
參考書籍 :大型網站系統與Java中間件實踐