一文帶你弄懂 CDN 技術的原理

語言: CN / TW / HK

對於 CDN 這個東西,相信大家都有耳聞,感覺既陌生但又熟悉。最近深入瞭解了一下 CDN,這才發現原來 CDN 如此重要!今天就跟大家科普一下 CDN 是什麼,以及為啥要有 CDN,最後再講一下 CDN 的工作過程!

瀏覽器的網路請求

要理解 CDN 這件事情,我們就得先理解瀏覽器發出一個請求的過程是怎樣的,其整體過程如下圖所示。

  1. 使用者在瀏覽器中輸入要訪問的網址域名。
  2. 瀏覽器向本地 DNS 伺服器請求對域名的解析。
  3. 如果本地 DNS 伺服器有域名的解析結果,那麼直接響應使用者請求,返回該域名對應的 IP 地址。
  4. 如果本地 DNS 伺服器沒有域名的解析結果,那麼則會遞迴地向 DNS 系統請求解析,隨後將該結果返回給使用者。
  5. 瀏覽器得到域名解析結果後,其實也就是域名對應的 IP 地址。
  6. 隨後瀏覽器向伺服器請求內容。
  7. 伺服器將使用者請求內容返回給瀏覽器。

通過這麼複雜的步驟,使用者就可以看到頁面內容了。但實際上,在第 6、7 這兩步的時候,其中間也經過了非常複雜的過程。為了更清晰地表述,我們可以將這個過程分為 3 個主要節點,如下圖所示。

網站伺服器通過公網出口,再通過長途骨幹網,最後通過使用者的寬頻廣貓到達使用者所在的區域網,最終才到達使用者電腦的瀏覽器。 其中長途骨幹網的傳輸是最為耗時的,它需要經過網站伺服器所在的機房、骨幹網、使用者所在都會網路、使用者所在接入網等,其物理傳輸距離非常遙遠。 在這種情況下,如果傳輸的資料非常多,訪問的使用者特別大,那麼就會出現很長的延時,影響使用者體驗。同時,每請求一次資料都需要經過漫長的資料傳輸,對於長途骨幹網來說,都是一次負擔。

剛剛說的這個場景,很形象的一個例子是春節搶票的場景。當我們春節搶票時,我們都會登陸 12306 網站,網站上肯定有不少圖片資源。這時候可能同時會有 1 個億的人,同時去請求一張一模一樣的圖片。這時候如果我們都按照上面的過程去請求一次圖片資料,那麼將會產生 1 億次的網路資料傳輸,這對於我們整個國家的網際網路基礎設施是個災難啊!

但事實情況是:12306 貌似也沒有掛掉呀!

那麼他們是如何解決這個問題呢? 答案就是:CDN!

什麼是 CDN ?

其實 CDN 就是內容分發網路的意思,其英文全稱為 Content Delivery Network。 簡單地說,CDN 可以提前把資料存在離使用者最近的資料節點,從而避免長途跋涉經過長途骨幹網,最終達到減少骨幹網負擔、提高訪問速度的目的。 按照我們上面的場景,如果沒有 CDN 的話,每次請求都需要從網站伺服器經過公網出口、長途骨幹網、使用者接入區域網,最終到達瀏覽器。但是當有了 CDN 之後,可能就變成了下面這樣:

瀏覽器請求圖片資料時,會先去 CDN 快取伺服器獲取。如果獲取到資料,那麼就直接返回。否則才會經過長途骨幹網,最終到達網站伺服器獲取圖片資料。那麼只要我們提前在 CDN 快取伺服器上傳圖片,那麼我們就可以極大地減少網路流量,同時減少網路延遲。

從上圖我們可能會覺得:這不就是在長途骨幹網和使用者區域網中間,加了一個伺服器嘛。但事實上可並不是這樣,CDN 其實還縮短了請求資料的距離。我們知道使用者所處的位置可能是全國各地,為了儘可能地減少網路傳輸的延時,一般都會在離使用者較近的地方設定 CDN 快取伺服器,例如:在華南、華北、華東、西南設定一個主 CDN 伺服器,這樣各個地區的使用者就可以直接請求對應的 CDN 伺服器,而不需要來回跑大半個中國,極大地提高了效率! 因此,當我們說內容分發網路的時候,腦海裡應該有如下這樣一張圖片:遍佈全國各地的 CDN 快取伺服器,組成了我們的內容分發網路。每次使用者請求都會到離他最近的 CDN 伺服器請求資料,從而極大地提高訪問速度。

CDN 工作原理

到了這裡,相信大家都知道 CDN 是什麼了。但實際上 CDN 是如何與 DNS 結合起來的,這裡面還是有點複雜的。加入了 CDN 之後,瀏覽器的網路請求就變成如下圖所示的情況。

  1. 瀏覽器發起圖片 URL 請求,經過本地 DNS 解析,會將域名解析權交給域名 CNAME 指向的 CDN 專用 DNS 伺服器。
  2. CDN 的 DNS 伺服器將 CDN 的全域性負載均衡裝置 IP 地址返回給瀏覽器。
  3. 瀏覽器向 CDN 全域性負載均衡裝置發起 URL 請求。
  4. CDN 全域性負載均衡裝置根據使用者 IP 地址,以及使用者請求的 URL,選擇一臺使用者所屬區域的區域負載均衡裝置,向其發起請求。
  5. 區域負載均衡裝置會為使用者選擇最合適的 CDN 快取伺服器(考慮的依據包括:伺服器負載情況,距離使用者的距離等),並返回給全域性負載均衡裝置。
  6. 全域性負載均衡裝置將選中的 CDN 快取伺服器 IP 地址返回給使用者。
  7. 使用者向 CDN 快取伺服器發起請求,快取伺服器響應使用者請求,最終將使用者所需要偶的內容返回給瀏覽器。

使用 CDN 服務的網站,只需要將域名解析權交給 CDN 服務商,接著將需要分發的內容上傳到 CDN,就可以實現內容加速了!

總結

這麼看下來,其實 CDN 內容分發網路,本質上就是一大堆遍佈在全球各個角落的快取伺服器。通過與 DNS 的配合,找到最靠近使用者的一臺 CDN 快取伺服器,然後把資料快速地分發給使用者。通過 CDN 技術,我們不僅減少了對於整體骨幹網的流量負擔,還提高了使用者的體驗,真是一舉兩得啊!