你知道CDN是幹嘛的嗎?

2023-02-06 15:00:44
theme: cyanosis

前言

幾年前,我在瀏覽網際網路時偶然發現了一個新的電子商務網站,注意到網站上的圖片載入速度不快。我重新整理了頁面並重試了幾次。終於,十秒鐘後,我能夠看到帶有影象的渲染網頁。

最初,我以為我的網際網路連線很差,但網際網路下載速度足夠好。我也可以觀看高清的 Youtube 視訊。這激發了我的好奇心,想知道為什麼電子商務網站無法快速載入圖片。

我內心好奇的工程師決定研究網站效能緩慢的原因。我迅速開啟谷歌的開發者工具並導航到 Networking 索引標籤進行分析。在瀏覽了幾篇 Stack Overflow 貼文後,得出的結論是該站點沒有使用內容分發網路(CDN)。

在本文中,我們將瞭解CDN是什麼、為什麼需要它以及它的工作原理。此外,我們還將瞭解網站如何通過利用 CDN 來加速其內容得交付。

背景

在當今世界,網站的效能至關重要。如果您的網站在載入時出現停機或緩慢,就很難留住使用者。

在詳細瞭解什麼是內容分發網路 (CDN) 之前,我們先回顧一下我們的基礎知識。讓我們瞭解一下網頁是如何在我們的裝置上顯示的。

使用者端向伺服器請求網頁

上圖概述了使用者端如何請求頁面並最終將其顯示給使用者。

  1. 使用者端(移動應用程式/瀏覽器)向Web 伺服器傳送HTTP請求。
  2. 伺服器處理請求,執行檢查和驗證,從資料庫、硬碟或 blob 儲存中獲取資料返回響應。
  3. 使用者端讀取響應。響應通常是返回給使用者端的HTML頁面。
  4. 最後,將HTML頁面顯示給使用者。

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 的工作機制

下圖顯示了在瀏覽器中載入網站時發生的工作原理。

從 CDN 伺服器獲取內容

  1. 瀏覽器向 DNS 傳送 IP 地址查詢請求。

  2. DNS 伺服器將使用最近的 CDN 伺服器的地址進行響應。

  3. 瀏覽器將向 CDN 伺服器 (POP) 傳送請求以獲取資料。

  4. CDN 伺服器將檢查其快取中是否存在資料(影象、js、css、視訊等)。

  5. 如果資料不存在,POP 伺服器將向源伺服器傳送請求以獲取內容。

  6. 稍後,POP 伺服器將儲存內容並將資料傳送回使用者。

  7. CDN 使用者還可以對內容設定 TTL(Time to Live)。例如:- 影象檔案的 TTL 為 15 分鐘。CDN 伺服器將向用戶傳送相同的資料,直到它過期。

  8. 一旦 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旭陽】交流學習