CDN 的工做原理介紹

概念

CDN

CDN 即內容分發網絡(Content Delivery Network)的簡稱,是創建在承載網基礎上的虛擬分佈式網絡,可以將源站內容(包括各種動靜態資源)智能緩存到全球各節點服務器上。這樣不只方便了用戶就近獲取內容,提升了資源的訪問速度,也分擔了源站壓力。html

CNAME、A 記錄、NS 記錄

DNS ( Domain Name System,域名系統)提供了將域名轉換爲 IP 地址的服務。爲了完成這個轉化工做,DNS 的數據庫中須要維護相關的數據,這些數據被叫作 RR(Resource Record,資源記錄)。資源記錄有不少種類型,好比 A、NS、SOA、CNAME 和 PTR 記錄。數據庫

你們接觸最多的就是 A(Address)記錄。A 記錄是一條從域名到 IP 地址的映射記錄。而 CNAME(Canonical Name)記錄是一條從域名到域名的映射記錄。它在 CDN 技術中有舉足輕重的做用,很好地實現了業務域名與 CDN 系統域名的解耦。簡單理解,若是一個域名配置了 A 記錄,DNS 就會把它解析成 A 記錄指定的 IP 地址;若是一個域名配置了 CNAME 記錄,DNS 就會把它解析成 CNAME 記錄指定的另一個域名;A 記錄和 CNAME 記錄是互斥的,不能同時存在。緩存

NS (Name Server)記錄是和 DNS 服務器相關的一條記錄,它指定該域名應該由哪一臺 DNS 服務器進行解析。通常把經過 NS 記錄指定的 DNS 服務器叫作該域名的權威 DNS 服務器。服務器

加速域名

加速域名指須要使用 CDN 加速的域名。加速域名也是一個域名。加速域名通常配置 CNAME 記錄,指向 CDN 網絡節點。普通域名通常配置 A 記錄,指向提供服務的業務服務器。markdown

源站

提供原始資源(使用 CDN 加速的資源)的業務服務器,能夠指定爲域名或 IP 地址。網絡

回溯

CDN 節點未緩存資源,或者緩存資源已過時時,回到源站獲取資源,返回給客戶端。架構

工做原理

假設我創建了一個網站,域名爲 www.tt.com,用戶訪問的主頁連接爲 www.tt.com/idx.html。爲了緩解服務端壓力和加快訪問速度,決定使用阿里雲 CDN 服務。 爲了更好地理解工做原理,先了解一下 CDN 的接入流程。負載均衡

接入流程

主要接入步驟以下:分佈式

  1. 到某域名供應商處申請一個加速域名:js.tt.com
  2. 到阿里雲 CDN 平臺添加加速域名 js.tt.com,同時設置其源站域名爲 www.tt.com
  3. 阿里雲 CDN 平臺自動分配一個 CNAME 域名:js.tt.com.ali.com
  4. 到域名供應商處給加速域名 js.tt.com 添加 CNAME 記錄,其值爲上一步獲得的 CNAME 域名:js.tt.com.ali.com

對以上步驟作進一步說明:網站

  • 爲了使用 CDN,必需另外再申請一個加速域名,做爲使用 CDN 的入口。
  • 加速域名配置的是 CNAME 記錄,值爲 CDN 平臺提供的 CNAME 域名,該 CNAME 域名指向 CDN 系統節點。
  • 添加加速域名時須要配置源站域名,據此,CDN 平臺保存了加速域名與源站域名的映射關係。
  • CNAME 域名的格式通常是:<加速域名> + <供應商主域名>。

CDN 系統架構

從功能上看,典型的 CDN 系統由分發服務系統負載均衡系統運營管理系統組成。分發服務系統主要負責資源的響應、緩存和同步。負載均衡系統主要負責對用戶請求進行調度。運營管理系統則負責運營需求管理和網絡系統管理。

從節點分佈上看,CDN 系統主要分爲 邊緣層中心層。邊緣層分佈在 CDN 網絡的邊緣位置,給用戶提供就近訪問服務。中心層則負責完成資源同步和運營管理等功能。中心層保存了加速域名的相關配置信息,好比源站域名,也緩存了加速域名下的各類資源。在邊緣層節點未命中緩存時,須要向中心層節點發起請求;而中心層節點未能命中緩存時,須要查找對應的源站域名,並向該源站域名發起請求。而後再逐層返回並緩存用戶請求的資源。

訪問流程

用戶 A 的第一次訪問流程以下圖所示:

  • 第 1 步訪問的是加速域名,而不是源站域名。
  • 第 3 步返回 CNAME 域名。
  • 第 5 步返回 CNAME 域名對應的 IP 地址,指向 CDN 邊緣層節點。
  • 第 6 步請求的 URL (或者說 Referer )仍爲 js.tt.com/idx.html
  • 第 7 步請求中心層節點時,會帶上第 6 步的 URL 做爲參數。
  • 第 8 步經過查詢配置數據獲得源站域名,進而向源站發起請求。這裏的業務服務器即爲 CDN 的源站。簡單起見,省略了從 DNS 服務器查詢 A 記錄的過程。
  • 在整個過程當中,URL 的域名會變化,可是 URL 的路徑不會變化。

用戶 A 第二次訪問流程如圖 2 所示:

須要進一步說明的是:

  • 因爲本地 DNS 客戶端擁有了加速域名的解析緩存,就不須要再查詢 DNS 服務器了。
  • 因爲 CDN 邊緣層節點有了對應資源的緩存,就不須要再向上請求資源了。

用戶 B 第一次訪問流程如圖 3 所示:

須要進一步說明的是:

  • 因爲用戶 A 和用戶 B 地域相差比較遠,使用不一樣的邊緣層節點,因此邊緣層節點沒有對應資源的緩存,須要向中心層節點請求資源。
  • 中心層節點擁有該資源的緩存,因此就不須要回源了。

就近訪問原理

CDN 系統是如何實現就近訪問的呢?

CNAME 域名是 CDN 供應商提供的,CDN 供應商擁有對 CNAME 域名的配置權。CDN 供應商會把 CNAME 域名的 NS 記錄設置爲本身搭建的 DNS 服務器。這樣一來,解析 CNAME 域名的時候就會請求 CDN 供應商搭建的 DNS 服務器。而 CDN 供應商在 DNS 服務器中實現了負載均衡,會返回離用戶較近的邊緣層節點的 IP 地址。如此便實現了就近訪問。 在圖 1 中,第 4 步是向阿里雲 DNS 服務器查詢的,該 DNS 服務器會根據地理位置和健康狀態等信息返回多個較近的可用的 CDN 邊緣節點的 IP 地址。DNS 客戶端會選擇其中一個 IP 地址做爲解析結果,通常是第一個。

相關文章
相關標籤/搜索