一、什么是CDN?
CDN的全稱是Content Delivery Network,翻譯成中文就是內容分發網絡。CDN依靠部署在各地的邊緣服務器,通過中心平臺的負載均衡、內容分發、調度等功能模塊,使用戶就近獲取內容,降低網絡延遲,提高訪問速度。簡單來講,CDN是用來進行加速的,它可以讓用戶更快獲得所需的數據。
舉個例子,某個網站的服務器在北京,如果深圳的用戶想要獲取服務器上的數據,就需要跨越很遠的距離,由于傳輸速度和路由轉發等因素,就會導致訪問速度非常緩慢。但如果我們在深圳建立一個CDN服務器,上面緩存了一些服務器數據,那么深圳用戶只需要訪問這個CND的服務器就能獲取相關的內容,這樣速度就提升了很多。
二、什么是DNS?
要了解cdn就先要了解一下dns。當我們在瀏覽器中輸入一個域名時,就能訪問對應的站點。但實際的情況遠比我們看到的復雜,因為計算機不能直接識別域名,所以必須依靠某種環節將域名翻譯成IP地址才能,這個環節就是DNS。
當我們向DNS服務器發起解析域名的請求時,DNS服務器首先會查詢自己的緩存中有沒有該域名,如果緩存中存在該域名,則可以直接返回IP地址。如果緩存中沒有,服務器則會以遞歸的方式層層訪問。
例如,我們要訪問www.baidu.com,首先我們會先向全球13個根服務器發起請求,詢問com域名的地址,然后再向負責com域名的名稱服務器發送請求,找到baidu.com,這樣層層遞歸,最終找到我們需要的IP地址。
三、CDN和DNS的區別
上面我們提到CDN實際上提供就是一個就近訪問的功能,但現在有一個問題是,我們如何直到用戶所在的位置并為其分配最佳的CDN節點呢。這就需要用DNS服務進行定位了。
當我們使用DNS服務時,可以根據用戶使用的遞歸服務器進行定位。但你給我們看到用戶使用的是深圳的遞歸服務器,那么就認為該用戶來自深圳,然后調度服務器就讓該客戶去訪問深圳的CDN服務器。
但這種調度方式可能存在一個問題,就是用戶的實際IP與遞歸服務器并不一致。比如我是北京聯通的用戶卻使用了深圳電信的遞歸服務器,那么調度服務器為我分配深圳電信的CDN服務器,就會產生錯誤的調度。
四、HTTP調度
針對上面的問題,我們還有另一種調度方式——http調度。
當用戶訪問服務器時,先分析用戶的IP地址,然后服務器給用戶返回一個302重定向,將離用戶最近的服務器存在緩存中,用戶再去請求時就能得到最佳的CDN節點。
這種方式定位更加準確,但缺點是需要增加一次額外的HTTP訪問,這樣導致首次訪問的延時比較高。
所以在實際情況中,我們可以將兩種方式結合起來,先通過dns的方式來定位,然后通過http的方式來糾正偏差。
五、緩存的兩種方式
CDN節點中緩存了服務器上的部分資源。那么服務器怎么去更新CDN節點的緩存呢?
一種方式,是服務器主動進行緩存的更新,CDN節點被動接受。另一種方式是用戶請求的資源不存在時,CDN節點主動放棄請求,更新緩存,然后將數據返給用戶。
顯然第一種方式存在很多問題,例如很容易產生404等,所以一般采用第二種緩存方式。
六、CDN工作流程
當用戶請求一個文件時,CDN的工作過程如下:
1.DNS請求當地local DNS
2.當地local DNS遞歸地查詢服務器的gslb
3.服務器根據local DNS 分配最佳節點,返回IP
4.用戶獲得最佳接入IP,訪問最佳節點。
5.如果該節點沒有用戶想要獲取的內容,則通過內部路由訪問上一節點,直到找到文件或到達源站為止。
6.CDN節點緩存該數據,下次請求該文件時可以直接返回。