CDN技術詳解

CDN,全稱爲Content DeliveryNetwork,中文意爲「內容分發網絡「」。經過將網絡內容發佈到最靠近用戶的『邊緣節點』,使不一樣地區的用戶在訪問相同頁面、圖片或視頻時就能夠就近獲取。算法

這樣可以減輕服務器的負載,也能夠減小整個網絡中流量分佈不均的問題,既可以下降互聯網公司的成本(硬件開銷、能耗和管理成本),也能有效改善整個網絡的性能。後端

 


所謂「邊緣節點」指的是CDN服務商通過精心選擇的距離用戶距離最近的服務器節點,即在各地均有機房集羣分佈,變得僅是「一跳」距離(traceroute命令後查看通過路由的個數),也就是說用戶在訪問時不須要通過多個路由器,能夠有效提升訪問時間。緩存

 

咱們來看以下圖示:服務器

 


 

 從上圖咱們能夠看到,在對某個須要CDN的域名解析時,是由智能CDN負載均衡系統選定的某個邊緣節點的IP。用戶利用這個IP地址訪問邊緣節點,而後經過該節點經過其內部DNS解析獲得源服務器IP併發出請求來獲取用戶所需的頁面或資源。若請求成功,邊緣點會將此資源緩存(cache)下來,下次用戶再訪問時能夠直接讀取,而不須要每次都去訪問源服務器。網絡

 

CDN架構架構

 

可使用第三方CDN平臺,若是有須要也能夠自建平臺,平臺資源用不了再拿出來賣,阿里雲等就是這個樣子發展的。併發

 

那麼咱們此次就舉例說明淘寶的CDN平臺是如何架構的。負載均衡

 

淘寶網的CDN主要用戶來支持用戶購物,好比雙11光棍節,有海量的圖片請求。分佈式

 

它的圖片存儲於後端的TFS集羣中,CDN系統將這些圖片緩存到用戶最近的邊緣節點。性能

 

CDN系統採用2級緩存:L1和L2級緩存。用戶在訪問淘寶網的圖片時,經過全局調度系統調度到某個L1級緩存節點,若是L1緩存命中,那麼就直接將圖片數據返回給用戶;不然,即請求L2級緩存,並將返回的圖片數據緩存到L1緩存節點。若是L2緩存節點被命中,直接將圖片數據返回給L1級緩存節點。

 

若是都沒有命中,最後請求源圖片服務器集羣。此集羣爲一個個的Nginx的Web 服務器,它也會在本地作圖片緩存,當本地緩存不命中再去請求後端的TFS集羣。圖片服務器集羣和TFS集羣會同時部署在同一個數據中心內。以下圖:

 

 

淘寶網CDN總體架構

 

針對於每一個CDN節點,其內部經過LVS+HAProxy的方式進行負載均衡。也能夠適當使用Keepalived等進行處理。

 

LVS是四層負載均衡軟件,可以支持靈活的負載均衡策略。經過其有機的結合二者,能夠將不一樣的圖片請求調度到不一樣的squid服務器。

 

LVS一般vip+master+backup三類機器組成,其中vip是控制機器,其接收外界訪問。master與backup爲工做與熱備節點。其能夠實現下面Haproxy機器的健康檢測與負載均衡,完成IP層的轉發後,交給一臺健康且相對負載較輕的Haproxy機器。

 

Haproxy:7層負載均衡技術,將請求轉發到真正的Web服務器上。除此以外,還有:

  • Haproxy優化-支持長連接;

  • Haproxy調度算法優化-一致性哈希,根據訪問內容(URL)來得出分配的機器

 

每臺圖片服務器本質是一我的的Squid服務器,用來緩存圖片的二進制數據。用戶請求按照必定的策略發送到某臺squid服務器,若是命中即返回,不然squid再去源服務器快取一份圖片再緩存到本地,接着再把該圖片數據返回給用戶。

 

數據經過一致性哈希分佈到不一樣的squid服務器中,使得增長/刪除服務器,只須要移動1/n(squid服務器總數)的對象。

 

小結 

 

CDN本質是一種分佈式緩存系統,無需考慮數據持久化,若是緩存服務器出現問題,在緩存集羣中標記爲刪除便可。

 

淘寶網CDN採用了分級存儲,在Squid服務器上使用了SSD + SAS + SATA混合存儲,圖片隨着熱點變化而遷移,最熱的圖片存儲在SSD上,中等熱度的存儲到SAS,輕熱度的存儲到SATA。經過此種方式,可以很好的結合幾種存儲介質的成本與優點。

順應摩爾定律,硬件技術的不斷髮展,SSD價格快速降低,大部分CDN緩存節點開始大規模配備SSD設備。

 

另外,CDN緩存服務屬於IO密集型,而非CPU密集型的服務,使用ATOM芯片可以有效總體下降功耗。

 

須要咱們注意的是,緩存系統訪問量較大,更新、刪除較少,但須要留意緩存與源服務器之間內容的一致性。好比源服務器更換了一張圖片,或者刪除了一個數據,須要可以相對實時的推送到CDN緩存節點。

 

本文由21CTO社區原創

相關文章
相關標籤/搜索