theme: cyanosis
幾年前,我在瀏覽網際網路時偶然發現了一個新的電子商務網站,注意到網站上的圖片載入速度不快。我重新整理了頁面並重試了幾次。終於,十秒鐘後,我能夠看到帶有影象的渲染網頁。
最初,我以為我的網際網路連線很差,但網際網路下載速度足夠好。我也可以觀看高清的 Youtube 視訊。這激發了我的好奇心,想知道為什麼電子商務網站無法快速載入圖片。
我內心好奇的工程師決定研究網站效能緩慢的原因。我迅速開啟谷歌的開發者工具並導航到 Networking 索引標籤進行分析。在瀏覽了幾篇 Stack Overflow 貼文後,得出的結論是該站點沒有使用內容分發網路(CDN)。
在本文中,我們將瞭解CDN是什麼、為什麼需要它以及它的工作原理。此外,我們還將瞭解網站如何通過利用 CDN 來加速其內容得交付。
在當今世界,網站的效能至關重要。如果您的網站在載入時出現停機或緩慢,就很難留住使用者。
在詳細瞭解什麼是內容分發網路 (CDN) 之前,我們先回顧一下我們的基礎知識。讓我們瞭解一下網頁是如何在我們的裝置上顯示的。
使用者端向伺服器請求網頁
上圖概述了使用者端如何請求頁面並最終將其顯示給使用者。
HTML 頁面還可以包含影象、gif、視訊等。因此,與檔案一起,客戶還有責任顯示這些資料。
使用者端還需要 Javascript
檔案來使頁面動態化。此外,它還需要 CSS 檔案來設定網頁樣式。在 Developer tools
的 Networking
索引標籤中,您會看到下圖所示的選項。
如果您選擇JS作為一個選項,您應該能夠檢視 Javascript 檔案的所有請求和響應。這同樣適用於其他型別,例如CSS, Img,Doc等。
我們可以將任何網頁上的內容分為兩種型別——靜態資料和動態資料。
如果內容不經常變化,那麼它就變成靜態的。通常,影象、Javascript 和 CSS 檔案不會經常更改。
此外,即使這些檔案發生變化,我們也不會向用戶顯示不正確的資料。在任何檔案增強的情況下,只有使用者體驗或網站的外觀會發生變化。
在某些情況下,此類檔案會保留在伺服器的檔案系統中。換句話說,Web 伺服器將從硬碟中獲取這些檔案並將其傳送回使用者端。很多時候,這些檔案都儲存在 blob 儲存中,例如 S3、Azure Blob 儲存等。
靜態資料的大小可以是 KB、MB 或 GB。比如電影檔案很大並且佔用大量頻寬。
頻繁變化的資料是動態的。例如:在 Youtube 上觀看視訊的觀眾人數。社交媒體網站上的評論、點贊或分享。
通常,伺服器將動態資料儲存在資料庫中。根據用例,它可以是SQL或NoSQL。對於每個請求,伺服器都會查詢此資料,然後在響應中將其傳回。在大多數情況下,JSON用於資料序列化。
Json資料是動態資料
與電影、視訊或影象等靜態資料相比,動態資料的大小很小。它的數量級為幾 KB。伺服器還可以將此資料儲存在外部快取中,例如 Redis 或 MemCached 以提高效率。
延遲是指網站完全呈現所有資料所花費的時間。如果延遲增加,使用者必須等待更多時間。使用者等待的時間越長,轉化率就越低。
以較低延遲呈現頁面的網站效能更高。這些網站會在幾毫秒內將頁面顯示給使用者。
延遲取決於多種因素。它包括以下內容:
如果網站的伺服器崩潰,使用者端將無法檢視網頁。伺服器還應該能夠處理不斷增加的負載。
如果網站不可延伸,伺服器處理時間會增加並增加延遲。在當今世界,停機時間是不能容忍的。
由於這些網站是全球性的,因此預計它們會247365執行。使用者希望無縫地觀看視訊、線上購物、給朋友發訊息等。
假設我們正在啟動一個新的短視訊應用程式,例如TikTok。我們構建網站的第一個版本並將其部署在美國洛杉磯。我們的網站在全球範圍內均可存取,並且逐漸開始受到關注。
我們注意到我們正在接收來自歐洲、中東和印度的流量。隨著流量的增長,我們橫向擴充套件並新增更多伺服器。然而,來自印度的使用者抱怨他們的載入時間變長了。來自美國的使用者不會面臨同樣的問題。為什麼會這樣?
使用者端和伺服器之間的距離
如上所示,我們的伺服器部署在美國洛杉磯。對於印度使用者,與美國使用者相比,網路封包必須傳輸更遠的距離。隨著距離的增加,所花費的時間也會成比例地增加。如果在美國獲取資料所花費的時間是 5 毫秒,那麼印度使用者將花費 35 毫秒(距離是7 倍)。
這同樣適用於歐洲的使用者。歐盟的網站載入時間將超過美國的載入時間。這將接近3.5 倍。
此外,我們伺服器上的視訊檔不會經常更改。如果視訊成為病毒式傳播,則全球使用者都可以存取同一個視訊檔。如果視訊檔的大小更大,問題會更加嚴重,因為網路頻寬將成為瓶頸。
全球各地的客戶存取伺服器的檔案
如果我們減少使用者端和伺服器之間的距離,上述問題就會得到解決。而且由於視訊檔不經常變化,我們可以有一個快取機制。
通過快取,我們將從我們的伺服器請求一次檔案,後續請求將由快取提供服務。這將減少伺服器上的整體負載。
內容分發網路 (CDN) 應用此解決方案並加速網站的內容分發。我們的主要 Web 伺服器也稱為 Origin 伺服器。CDN 由一組在地理上分佈的伺服器組成。這些伺服器也稱為存在點 (POP) 伺服器。POP 伺服器所在的位置稱為邊緣位置。
CDN 伺服器位於南美和非洲。
POP 伺服器為居住在同一地理位置的使用者提供內容。例如: 歐洲的 POP 伺服器將為歐洲使用者提供資料服務。印度使用者將由位於印度的 POP 伺服器提供服務。
讓我們以從銀行提取現金為例。想象一下如果沒有 ATM 機會怎樣?如果沒有 ATM 機,銀行外就會排起長隊。我們要花很長時間才能拿到錢。此外,在銀行假期,人們將無法靈活地提取現金。
地鐵站、餐廳、機場等不同地點的 ATM 機可確保銀行不會排起長隊。人們可以在方便的時候取錢。此外,人們可以去最近的 ATM,而不是去銀行(距離可能更遠)。
您可以將銀行視為源伺服器,將ATM視為CDN。CDN 位於使用者位置附近。它們在地理上是分散式的,減少了源站伺服器的負載。此外,它們還通過處理靜態內容的流量來提高網站的可用性。
下圖顯示了在瀏覽器中載入網站時發生的工作原理。
從 CDN 伺服器獲取內容
瀏覽器向 DNS 傳送 IP 地址查詢請求。
DNS 伺服器將使用最近的 CDN 伺服器的地址進行響應。
瀏覽器將向 CDN 伺服器 (POP) 傳送請求以獲取資料。
CDN 伺服器將檢查其快取中是否存在資料(影象、js、css、視訊等)。
如果資料不存在,POP 伺服器將向源伺服器傳送請求以獲取內容。
稍後,POP 伺服器將儲存內容並將資料傳送回使用者。
CDN 使用者還可以對內容設定 TTL(Time to Live)。例如:- 影象檔案的 TTL 為 15 分鐘。CDN 伺服器將向用戶傳送相同的資料,直到它過期。
一旦 CDN 伺服器檢測到內容過時,它就會從源伺服器重新獲取它。
使用者端從 CDN 而不是源伺服器獲取靜態資料(影象、視訊等)。CDN 伺服器在地理位置上靠近使用者。隨著距離的縮短,獲取資料的時間也會縮短。這導致網站載入時間顯著改善。
載入時間更快的網站可以改善使用者體驗。使用者更傾向於高效和高效能的產品。例如:將 Google Chrome 與 Internet Explorer 進行比較。
CDN 伺服器佔用了大部分網站負載。由於 CDN 伺服器的行為類似於快取,因此可以保護源伺服器免受流量高峰的影響。由於 Origin 伺服器處理的負載較少,因此該伺服器出現故障的可能性較小。
網站的整體可用性得到提高。如果出現區域流量高峰,各個區域的 CDN 伺服器會擴充套件並處理不斷增加的負載。
網站的主要開銷是頻寬消耗成本。當 CDN 處理流量時,源伺服器提供的資料會大大減少。這有助於降低網站所有者的頻寬成本。
內容分發網路CDN由一組伺服器組成,這些伺服器在地理位置上靠近使用者,用於加速網站內容的交付。瀏覽器或移動應用程式從 CDN 而不是源伺服器請求靜態資料,CDN 從源伺服器獲取資料並快取它。後續請求由 CDN 伺服器提供。CDN 的主要好處是提高網站的效能、減少頻寬消耗成本以及提高網站的可用性。
翻譯:
https://animeshgaitonde.medium.com/content-delivery-network-cnd-explained-in-simple-words-674e971b06c3
歡迎關注個人公眾號【JAVA旭陽】交流學習
本文來自部落格園,作者:JAVA旭陽,轉載請註明原文連結:https://www.cnblogs.com/alvinscript/p/17095216.html