《CDN 之我見》系列二:原理篇(緩存、安全)

《CDN之我見》共由三個篇章組成,分爲原理篇、詳解篇和隕坑篇。本篇章適合那些從未接觸過、或僅瞭解一些 CDN 專業術語,想深刻了解和感覺 CDN 到底是什麼的同窗。本次由白金老師繼續爲你們分享《CDN之我見》系列二,主要講解緩存是什麼、工做的基本原理是怎樣的,以及 CDN 是如何面對安全挑戰的。css

首先咱們先來講一下 CDN 的緩存系統。

緩存也叫 Cache,是 CDN 領域最重要的一個組成部分,對於靜態內容分發,大至視頻點播、文件下載,小至 html 頁面、jpg/gif/png 圖片、css/js 等,均可以緩存到本地,最終用戶(網民)訪問時,沒必要回到原始服務器拿取數據,從而節省了時間、下降了源站服務器的網絡帶寬支出和負載。html

對於 CDN 來講,每臺 Cache 機器天天的請求量是十分驚人的,磁盤上所存儲的內容量也多得可怕,十幾塊 TB 級的硬盤被塞滿數據也是很正常的事情,所以當一個請求到來時,能迅速檢索出磁盤上的文件並讀取、吐給最終用戶成了一件很重要的事情。前端

如何快速檢索數據?

通常採用高效的數據結構或算法,例如 Hash(哈希)。算法

Hash 算法簡單說就是經過某種模運算取餘,按照有限餘數作爲不一樣鏈表的座標進行數據存儲。若當有多個數據餘數相同時,則再按照單鏈表的方式存儲數據。緩存

理論上 Hash 算法在最好的狀況下,和 map 無異,O(1) 的時間複雜度。安全

在最壞狀況下(全部數據樣本通過 Hash 運算都獲得同一個餘數),則性能與單鏈表無異,查找時間複雜度是 O(n)。bash

若是磁盤空間不夠了怎麼辦?

使用基於訪問熱度的內容淘汰算法,例如 FIFO、LRU、LFU、SLRU、LIRS 等,感興趣的同窗能夠看一下推薦的文章:服務器

SATA 盤雖然存儲空間大,但受尋道速度限制,IOPS 每每很低,響應時間會被拉長。而相比之下,SSD 能夠大幅度提高響應速度,但受成本和技術工藝限制,SSD 盤的空間相比 SATA 而言要小不少、貴不少。綜合上面兩種狀況,混合盤的分級存儲模式誕生了,即 SSD + SATA,經過熱度算法將最熱的內容放到內存、次熱放到 SSD,冷數據放到 SATA,最冷數據受磁盤空間限制不進行存儲,直接從 upstream 或源站獲取。網絡

當網民訪問到 Cache 服務器上時,Cache 服務器會利用 Hash 算法查找本地是否存有緩存數據,如有,則直接讀取,組織成 HTTP 報文內容,吐給網民。數據結構

同理,若當本地沒有緩存住的內容時,Cache 會向其上游(upstream)拿取數據吐給網民,並根據內容的描述(例如是否能夠緩存,須要緩存多久)來決定是否/如何緩存住這個請求內容。

CDN 的關鍵技術是調度和緩存,有不少開源軟件能夠實現 CDN 的基本需求,但性能卻遠達不到商業需求。真正要作高性能的 Cache 系統,不只須要在數據結構與算法層面深刻,更要從硬件、操做系統、文件系統、底層原理等多個領域作更多的研究(例如阿里雲自研的 CDN Cache 系統使用了裸盤技術)。
從上述內容大體能夠看出一個道理:CDN,入門易,作好難!

原理篇最後一部分簡單和你們介紹一下 CDN 的安全

通常的攻擊分爲兩種類型,一種是蠻力型攻擊,一種是技巧型攻擊。
例如 SYN-Flooding、反射攻擊、帶寬飽和攻擊等,都是經過海量請求(有些甚至是毫無用處的請求)將系統帶寬資源、計算資源耗盡,從而達到使目標沒法正常提供服務能力的目的,達到攻擊者的攻擊意圖。
這種攻擊的特色是:

  1. 攻擊源分佈普遍,攻擊具備持續性,難以準確溯源
  2. 攻擊手段暴力,流量大,以達到短期不能服務爲主要目的
  3. 技術門檻低,但因爲須要衆多資源,攻擊成本較高

而例如 XSS 跨站、SQL 注入、CSRF、漏洞利用等,都是經過網站提供的系統(例如老版本操做系統存在協議棧崩潰漏洞)、組件(例如 bash、OpenSSL、Struts2 存在遠程執行漏洞)、軟件邏輯漏洞(例如輸入框檢測存在缺陷致使拼湊 SQL 語句的 SQL 注入漏洞)等來進行攻擊。
這種攻擊的特色是:

  1. 攻擊流量小
  2. 攻擊較爲隱蔽,不易被察覺
  3. 以竊取內容爲主要目的
  4. 攻擊具備必定的破壞和不可逆性
  5. 無需大量攻擊資源,攻擊成本較低,技術含量較高

接入 CDN 後就能夠規避安全風險嗎?

是的,或者說能夠從必定程度上儘量解決或儘量規避安全風險。

1. 隱藏源站信息

當某個網站接入 CDN 後,源站信息會被隔離,外界很難找到真正的源站地址(這裏說很難,其實也是有可能的,主要看源站的安全防範意識),這樣攻擊者至少就沒法直接對源站進行直接攻擊。

2. 分佈式架構

若作不到直接對源站進行直接攻擊,則攻擊者實際攻擊的目標不是源站,而是 CDN 廠商的分佈式架構,此時除非 CDN 廠商的全部 CDN 節點的全部服務器都被攻陷,不然仍然有部分服務器是能夠提供服務的。

3. 安全防禦

對於技巧型攻擊,CDN 廠商前端能夠經過前置應用層過濾器的技術來分析、攔截可能存在的安全隱患。(例如阿里雲的 SCDN 則是集成了 Security 與 CDN 於一身的新產品)

做爲「系列二」的最後收尾,我想強調的是,CDN 除了技術,還有例如後臺支撐系統、售後、銷售等一系列的組件和團隊配合運做,纔能有安全、高效、穩定、極佳用戶體驗感的 CDN 產品。

最後仍是那句話:CDN,入門易,作好難!

__

因爲篇幅的關係,系列二把上次欠你們的「原理篇」補充齊全!

「系列三」 將開啓《CDN 之我見》的第二個篇章:「詳解篇」,會針對 CDN 領域的一些不爲人知的技術、理念進行深刻剖析,各位看官敬請期待。

原文連接

相關文章
相關標籤/搜索