跳到主要內容
黯羽輕揚每天積累一點點

CDN_系統設計筆記 4

免費2020-01-26#Back-End#Scattered CDN#Consolidated CDN#CDN Architecture#CDN架构图#CDN实现原理

CDN 是什麼?有什麼用?長什麼樣子?怎麼工作的?

一。概念

CDN(Content Delivery Network,內容分發網絡)是由分佈在不同地理位置的代理服務器及其數據中心組成的網絡:

A content delivery network or content distribution network (CDN) is a geographically distributed network of proxy servers and their data centers.

希望在空間距離上為用戶就近提供服務,以提高可用性和性能

The goal is to provide high availability and high performance by distributing the service spatially relative to end-users.

P.S. 空間距離體現在網絡傳輸上就是跳數(hop),從客戶端到服務器所經過的跳數越多,距離越遠,一般延遲也越大

二。作用

CDN 一般用來托管 Web 資源(包括文本、圖像和腳本),可供下載的資源(媒體文件、軟件、文檔等),應用程序(電子商務、門戶網站等),以及流媒體和社交媒體網站,加速這些資源的訪問

性能方面,引入 CDN 的作用在於:

  • 用戶收到的內容來自最近的數據中心,延遲更低,內容加載更快

  • 部分資源請求被外包給了 CDN,減少了服務器負載

一方面縮短了內容與最終用戶之間的距離,另一方面,內容不直接從服務器獲取,節省了服務器的計算資源,分擔了源站壓力

安全性上,CDN 有助於防禦 DDoS、MITM 等網絡攻擊:

  • DDoS(Distributed Denial of Service):通過監控分析異常流量,限制其請求頻率

  • MITM(Man-In-The-Middle):從源服務器到 CDN 節點到 ISP(Internet Service Provider),全鏈路 HTTPS 通信

此外,作為一種基礎的雲服務(IaaS),CDN 同樣具有資源托管、按需擴展(能夠應對流量高峰)等方面的優勢:

This reduces content providers' infrastructure requirements, and lets them deploy or expand services more quickly and easily.

P.S. 關於 IaaS、PaaS、SaaS 的更多信息,見 [IaaS-PaaS-SaaS 定義](/articles/iaas-paas-saas 定義/)

三。結構

拓撲結構上,CDN 分為分散式(Scattered CDN)和整合式(Consolidated CDN)兩種

Scattered CDN

在世界各地部署盡可能多的服務器,稱為分散式 CDN:

Scattered CDNs aim to have as many servers scattered around the world as possible.

早期的 CDN 用大量的中低性能服務器密集地填滿選定的地理區域,這些小節點易於部署,尤其適用於低連接性(low-connectivity)的區域

隨著全球連接性的不斷提高,縮減物理距離的收益逐漸減少,大量節點的維護成本也凸現出來,於是出現了整合式 CDN

Consolidated CDN

整合式 CDN 只在主要的數據中心有少量節點,但節點性能更強大,包括網絡、吞吐量以及抗 DDoS 的能力:

Consolidated CDNs have fewer points, but bigger ones built for network performance, throughput, and DDoS resistance.

這種集中式的結構有助於提升整體響應能力,為用戶和網絡運營商提供更多的控制,但部署相對複雜,而且在低連接性區域效果較差

四。分類

CDN 按內容分發方式分為 Push CDN 與 Pull CDN

前者由內容服務器提前把內容「推」到 CDN 緩存起來,後者在用戶訪問內容時 CDN 才去「拉」目標資源並緩存起來

Push CDN

每次內容發生變化時,都把新內容上傳到 Push CDN。由於只需要上傳新增的內容和發生變化的內容,用於傳輸的流量相對較少,但要存儲的內容相對較多

因此,Push CDN 適用於小流量,或內容更新不頻繁的站點,內容一次性放到 CDN,無需週期性地重新拉取。如果流量負擔本就很重,或者內容改動頻繁,Push CDN 會給服務器帶來額外的壓力

Pull CDN

Pull CDN 無需手動上傳,在用戶首次訪問時自動從服務器拉取新內容,並緩存起來。按需緩存節省了 CDN 存儲空間,但在文件過期或在未發生變化時重新拉取也會造成不必要的流量開銷

因此,Pull CDN 適用於大流量站點,只緩存最近使用(最受歡迎)的內容,一旦配置好就能按需緩存內容,維護成本較低

五。原理

涉及幾個術語:

  • 源服務器(Origin server):提供內容(數據)源的服務器

  • 邊緣服務器(Edge server):用來緩存來自源服務器的內容的服務器

  • 入網點(Point of Presence,PoP):邊緣服務器所在的物理位置,一個入網點可能存在多個邊緣服務器

  • CDN 反向代理(CDN Reverse Proxy):將用戶請求轉發到源服務器,並緩存來自源服務器的響應,用於 Pull CDN

  • 回源(Back-to-source):CDN 節點未緩存請求資源或緩存資源已到期時,回源站獲取資源,返回給客戶端

工作原理

以 Pull CDN 為例,特定地區的用戶首次訪問資源時,從源服務器取,內容響應給用戶之後,資源會被緩存在該地區的邊緣服務器上,如果同一地區的用戶再次請求相同資源,則從邊緣服務器響應:

![](https://www.keycdn.com/img/support/what-is-a-cdn-how-does-it-work-lg @2x.webp)

P.S. 可以通過響應頭的特定字段來區分內容響應來自源服務器還是 CDN 緩存,例如:

  • X-Cache: HIT:命中緩存,響應內容來自 CDN 緩存

  • X-Cache: MISS:未命中緩存,響應內容來自源服務器

實現原理

實現上,將子域名的解析權通過 CNAME 記錄 交給 CDN,接著通過 基於地理位置臨近程度的路由策略,將請求映射到距用戶最近的邊緣服務器:

對於 Push CDN,邊緣服務器僅提供緩存服務,未命中緩存就返回 404,而對於 Pull CDN,邊緣服務器提供反向代理服務,未命中緩存時回源去取

參考資料

評論

暫無評論,快來發表你的看法吧

提交評論