天天看點

CDN-内容推送網絡 1. 什麼是CDN? 2. CDN技術原理 3. CDN資源通路流程 4. 關于CDN的疑問 4.1. 使用CDN後,如何擷取用戶端真實IP? 4.2. 采用CDN服務以後如何保證内容的更新和同步?

cdn的實作是一組技術的組合,每個技術都可以單獨成文詳細讨論,這裡就不深入每個技術。内容目錄:

1. 什麼是cdn?

2. cdn技術原理

2.1. 分布式存儲

2.2. 内容管理

2.3. 負載均衡

2.4. 網絡請求的重定向

3. cdn資源通路流程

4. 關于cdn的疑問

4.1. 使用cdn後,如何擷取用戶端真實ip?

4.2. 采用cdn服務以後如何保證内容的更新和同步?

cdn的全稱是content delivery network,即内容分發網絡。其目的是通過在現有的internet中增加一層新的網絡架構,将網站的内容釋出到最接近使用者的網絡"邊緣"(邊緣伺服器),使使用者可以就近取得所需的内容,解決internet網絡擁擠的狀況,提高使用者通路網站的響應速度。從技術上全面解決由于網絡帶寬小、使用者通路量大、網點分布不均等原因所造成的使用者通路網站響應速度慢的問題。

cdn技術是在美國首先興起并迅速發展起來的一種解決網際網路性能不佳問題的有效手段。其基本思路就是盡可能避開網際網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使内容傳輸的更快、更穩。通過在網絡各處放置節點伺服器所構成的在現有的網際網路基礎之上的一層智能虛拟網絡,cdn系統能夠實時地根據網絡流量和各節點的連接配接、負載狀況以及到使用者的距離和響應時間等綜合資訊将使用者的請求重新導向離使用者最近的服務節點上。

cdn網絡架構主要由兩大部分,分為中心和邊緣兩部分,中心指cdn網管中心和dns重定向解析中心,負責全局負載均衡,裝置系統安裝在管理中心機房;邊緣主要指異地節點,cdn分發的載體,主要由cache和負載均衡器等組成。

實際上,cdn是一種新型的網絡建構方式,它是為能在傳統的ip網釋出寬帶豐富媒體而特别優化的網絡覆寫層;而從廣義的角度,cdn代表了一種基于品質與秩序的網絡服務模式。簡單地說,cdn是一個經政策性部署的整體系統,包括分布式存儲、負載均衡、網絡請求的重定向和内容管理4個要件。

這點顯而易見,cdn網絡将存儲資源分布到各個地理位置、各個網段。存儲系統作為cdn系統密不可分的一部分,将cdn分發的檔案和資料庫表記錄内容存儲起來,提供持續服務。存儲系統采用三級存儲架構,包括核心存儲、cdn服務節點分布式緩存和終端本地緩存。任意一個點的存儲崩潰或失效,并不影響系統服務的可用性。

CDN-内容推送網絡 1. 什麼是CDN? 2. CDN技術原理 3. CDN資源通路流程 4. 關于CDN的疑問 4.1. 使用CDN後,如何擷取用戶端真實IP? 4.2. 采用CDN服務以後如何保證内容的更新和同步?

圖:當下雲摘cdn的存儲示意圖(其它cdn也是類似)

如cdn系統在5大營運商(中國電信、中國網通、中國鐵通、中國移動、中國聯通)以及2大專有網絡(中國教育和科研計算機網、中國科技網)都布有cdn節點。這樣就消除了不同營運商之間互聯的瓶頸造成的影響,實作了跨營運商的網絡加速,保證不同網絡中的使用者都能得到良好的通路品質。

内容管理和全局的網絡流量管理(traffic management)是cdn的核心所在。通過使用者就近性和伺服器負載的判斷,cdn確定内容以一種極為高效的方式為使用者的請求提供服務。總的來說,内容服務基于緩存伺服器,也稱作代理緩存(surrogate),它位于網絡的邊緣,距使用者僅有"一跳"(single hop)之遙。同時,代理緩存是内容提供商源伺服器(通常位于cdn服務提供商的資料中心)的一個透明鏡像。這樣的架構使得cdn服務提供商能夠代表他們客戶,即内容供應商,向最終使用者提供盡可能好的體驗,而這些使用者是不能容忍請求響應時間有任何延遲的。據統計,采用cdn技術,能處理整個網站頁面的 70%~95%的内容通路量,減輕伺服器的壓力,提升了網站的性能和可擴充性。

cdn負載均衡系統實作cdn的内容路由功能。它的作用是将使用者的請求導向整個cdn網絡中的最佳節點。最佳節點的標明可以根據多種政策,例如距離最近、節點負載最輕等。負載均衡系統是整個cdn的核心,負載均衡的準确性和效率直接決定了整個cdn的效率和性能。通常負載均衡可以分為兩個層次:全局負載均衡(gslb)和本地負載均衡(slb)。

l 全局負載均衡(gslb)主要的目的是在整個網絡範圍内将使用者的請求定向到最近的節點(或者區域)。是以,就近性判斷是全局負載均衡的主要功能。

l 本地負載均衡一般局限于一定的區域範圍内,其目标是在特定的區域範圍内尋找一台最适合的節點提供服務,是以,cdn節點的健康性、負載情況、支援的媒體格式等運作狀态是本地負載均衡進行決策的主要依據。

負載均衡可以通過多種方法實作,主要的方法包括dns、應用層重定向、傳輸層重定向等等。對于全局負載均衡而言,為了執行就近性判斷,通常可以采用兩種方式,一種是靜态的配置,例如根據靜态的ip位址配置表進行ip位址到cdn節點的映射。另一種方式是動态的檢測,例如實時地讓cdn節點探測到目标ip的距離(可以采用rrt,hops作為度量機關),然後比較探測結果進行負載均衡。當然,靜态和動态的方式也可以綜合起來使用。

對于本地負載均衡而言,為了執行有效的決策,需要實時地擷取cache裝置的運作狀态。擷取的方法一般有兩種,一種是主動探測,一種是協定互動。主動探測針對slb裝置和cache裝置沒有協定互動接口的情況,通過ping等指令主動發起探測,根據傳回結果分析狀态。另一種是協定互動,即slb和 cache根據事先定義好的協定實時交換運作狀态資訊,以便進行負載均衡。比較而言,協定互動比探測方式要準确可靠,但是目前尚沒有标準的協定,各廠家的實作一般僅是私有協定,互通比較困難。

當使用者通路了使用cdn服務的資源時,dns域名伺服器通過cname方式将最終域名請求重定向到cdn系統中的智能dns負載均衡系統。智能dns負載均衡系統通過一組預先定義好的政策(如内容類型、地理區域、網絡負載狀況等),将當時能夠最快響應使用者的節點位址提供給使用者,使使用者可以得到快速的服務。

同時,它還與分布在不同地點的所有cdn節點保持通信,搜集各節點的健康狀态,確定不将使用者的請求配置設定到任何一個已經不可用的節點上。

使用了cdn服務後,使用者的通路流程如下圖所示:

CDN-内容推送網絡 1. 什麼是CDN? 2. CDN技術原理 3. CDN資源通路流程 4. 關于CDN的疑問 4.1. 使用CDN後,如何擷取用戶端真實IP? 4.2. 采用CDN服務以後如何保證内容的更新和同步?

使用者向浏覽器提供要通路網站的域名,域名解析的請求被發往網站的dns域名解析伺服器;

由于網站的dns域名解析伺服器對此域名的解析設定了cname,請求被指向cdn網絡中的智能dns負載均衡系統;

智能dns負載均衡系統對域名進行智能解析,将響應速度最快的節點ip傳回給使用者;

浏覽器在得到速度最快節點的ip位址以後,向cdn節點發出通路請求;

由于是第一次通路,cdn節點将回到源站取使用者請求的資料并發給使用者;

當有其他使用者再次通路同樣内容時,cdn将直接将資料傳回給客戶,完成請求/服務過程。

使用cdn服務之後獲得原始ip位址發生變化。因為源伺服器的請求都來自cdn節點,不知道客戶原始ip。一般來說,cdn節點會以某種方式将源用戶端的ip傳遞給源伺服器,如有的網宿cdn,它是将源ip添加到了一個叫“cdn-src-ip”的http header裡,以c#語言為例,獲得用戶端真實ip的方式如下:(根據不同的cdn提供商可能會有所不同)。

c#代碼

string srcip = request.headers["cdn-src-ip"];

if(srcip == null) {

srcip = request.userhostaddress;

}

或者從http請求header中“http_x_forwarded_for”字段獲得。http_x_forwarded_for的值是:"原始真實ip,1層代理ip,2層代理ip,....."。判斷http_x_forwarded_for是否為空(沒有使用cdn或代理這個字段為空),不為空把這個作為ip位址。這是一個簡單有效的方法。至于很複雜的情況就不處理了,比如多層代理。

在cdn服務中,cdn節點中的内容與源網站内容的同步主要是靠設定重新整理時間政策來實作的。針對不同的内容設定不同的重新整理時間,對于更新頻率比較低的内容可以設定較長的重新整理時間以減輕回源站的通路壓力;對頻繁更新的内容,我們可以設定成10分鐘或更短,以此來保證内容的同步。設定重新整理時間可以按目錄來設定,也可以按具體url來設定,或按某個關鍵字段來設定,非常靈活。