對於 CDN 這個東西,相信大家都有耳聞,感覺既陌生但又熟悉。最近深入瞭解了一下 CDN,這才發現原來 CDN 如此重要!今天就跟大家科普一下 CDN 是什麼,以及為啥要有 CDN,最後再講一下 CDN 的工作過程!
要理解 CDN 這件事情,我們就得先理解瀏覽器發出一個請求的過程是怎樣的,其整體過程如下圖所示。
通過這麼複雜的步驟,使用者就可以看到頁面內容了。但實際上,在第 6、7 這兩步的時候,其中間也經過了非常複雜的過程。為了更清晰地表述,我們可以將這個過程分為 3 個主要節點,如下圖所示。
網站伺服器通過公網出口,再通過長途骨幹網,最後通過使用者的寬頻廣貓到達使用者所在的區域網,最終才到達使用者電腦的瀏覽器。其中長途骨幹網的傳輸是最為耗時的,它需要經過網站伺服器所在的機房、骨幹網、使用者所在都會網路、使用者所在接入網等,其物理傳輸距離非常遙遠。 在這種情況下,如果傳輸的資料非常多,存取的使用者特別大,那麼就會出現很長的延時,影響使用者體驗。同時,每請求一次資料都需要經過漫長的資料傳輸,對於長途骨幹網來說,都是一次負擔。
剛剛說的這個場景,很形象的一個例子是春節搶票的場景。當我們春節搶票時,我們都會登陸 12306 網站,網站上肯定有不少圖片資源。這時候可能同時會有 1 個億的人,同時去請求一張一模一樣的圖片。這時候如果我們都按照上面的過程去請求一次圖片資料,那麼將會產生 1 億次的網路資料傳輸,這對於我們整個國家的網際網路基礎設施是個災難啊!
但事實情況是:12306 貌似也沒有掛掉呀!
那麼他們是如何解決這個問題呢?答案就是:CDN!
其實 CDN 就是內容分發網路的意思,其英文全稱為 Content Delivery Network。簡單地說,CDN 可以提前把資料存在離使用者最近的資料節點,從而避免長途跋涉經過長途骨幹網,最終達到減少骨幹網負擔、提高存取速度的目的。 按照我們上面的場景,如果沒有 CDN 的話,每次請求都需要從網站伺服器經過公網出口、長途骨幹網、使用者接入區域網,最終到達瀏覽器。但是當有了 CDN 之後,可能就變成了下面這樣:
瀏覽器請求圖片資料時,會先去 CDN 快取伺服器獲取。如果獲取到資料,那麼就直接返回。否則才會經過長途骨幹網,最終到達網站伺服器獲取圖片資料。那麼只要我們提前在 CDN 快取伺服器上傳圖片,那麼我們就可以極大地減少網路流量,同時減少網路延遲。
從上圖我們可能會覺得:這不就是在長途骨幹網和使用者區域網中間,加了一個伺服器嘛。但事實上可並不是這樣,CDN 其實還縮短了請求資料的距離。我們知道使用者所處的位置可能是全國各地,為了儘可能地減少網路傳輸的延時,一般都會在離使用者較近的地方設定 CDN 快取伺服器,例如:在華南、華北、華東、西南設定一個主 CDN 伺服器,這樣各個地區的使用者就可以直接請求對應的 CDN 伺服器,而不需要來回跑大半個中國,極大地提高了效率!因此,當我們說內容分發網路的時候,腦海裡應該有如下這樣一張圖片:遍佈全國各地的 CDN 快取伺服器,組成了我們的內容分發網路。每次使用者請求都會到離他最近的 CDN 伺服器請求資料,從而極大地提高存取速度。
到了這裡,相信大家都知道 CDN 是什麼了。但實際上 CDN 是如何與 DNS 結合起來的,這裡面還是有點複雜的。加入了 CDN 之後,瀏覽器的網路請求就變成如下圖所示的情況。
使用 CDN 服務的網站,只需要將域名解析權交給 CDN 服務商,接著將需要分發的內容上傳到 CDN,就可以實現內容加速了!
這麼看下來,其實 CDN 內容分發網路,本質上就是一大堆遍佈在全球各個角落的快取伺服器。通過與 DNS 的配合,找到最靠近使用者的一臺 CDN 快取伺服器,然後把資料快速地分發給使用者。通過 CDN 技術,我們不僅減少了對於整體骨幹網的流量負擔,還提高了使用者的體驗,真是一舉兩得啊!