一篇文章弄懂CDN技術原理
概述
Internet的高速發展,給人們的工作和生活帶來了極大的便利,對Internet的服務品質和訪問速度要求越來越高,雖然頻寬不斷增加,使用者數量也在不斷增加,受Web伺服器的負荷和傳輸距離等因數的影響,響應速度慢還是經常抱怨和困擾。
解決方案就是在網路傳輸上利用快取技術使得Web服務資料流能就近訪問,是優化網路資料傳輸非常有效的技術,從而獲得高速的體驗和品質保證。
網路快取技術,其目的就是減少網路中冗餘資料的重複傳輸,使之最小化,將廣域傳輸轉為本地或就近訪問。網際網路上傳遞的內容,大部分為重複的Web/FTP資料,Cache伺服器及應用Caching技術的網路裝置,可大大優化資料鏈路效能,消除資料峰值訪問造成的結點裝置阻塞。
Cache伺服器具有快取功能,所以大部分網頁物件(Web page object),如html, htm, PHP等頁面檔案,gif,tif, png, bmp等圖片檔案,以及其他格式的檔案,在有效期(TTL)內,對於重複的訪問,不必從原始網站重新傳送檔案實體,只需通過簡單的認證(Freshness Validation)- 傳送幾十位元組的Header,即可將本地的副本直接傳送給訪問者。
由於快取伺服器通常部署在靠近使用者端,所以能獲得近似區域網的響應速度,並有效減少廣域頻寬的消耗。據統計,Internet上超過80%的使用者重複訪問20%的資訊資源,給快取技術的應用提供了先決的條件。
快取伺服器的體系結構與Web伺服器不同,快取伺服器能比Web伺服器獲得更高的效能,快取伺服器不僅能提高響應速度,節約頻寬,對於加速Web伺服器,有效減輕源伺服器的負荷是非常有效的。
快取記憶體伺服器(Cache Server)是軟硬體高度整合的專業功能伺服器,主要做快取記憶體加速服務,一般部署在網路邊緣。根據加速物件不同,分為客戶端加速和伺服器加速,客戶端加速Cache部署在網路出口處,把常訪問的內容快取在本地,提高響應速度和節約頻寬;伺服器加速,Cache部署在伺服器前端,作為Web伺服器的前置機,提高Web伺服器的效能,加速訪問速度。如果多臺Cache加速伺服器且分佈在不同地域,需要通過有效地機制管理Cache網路,引導使用者就近訪問,全域性負載均衡流量,這就是CDN內容傳輸網路的基本思想。
什麼是CDN內容分發網路?
CDN的全稱是Content Delivery Network,即內容分發網路。其目的是通過在現有的Internet中增加一層新的網路架構,將網站的內容釋出到最接近使用者的網路”邊緣”,使使用者可以就近取得所需的內容,解決Internet網路擁塞狀況,提高使用者訪問網站的響應速度。從技術上全面解決由於網路頻寬小、使用者訪問量大、網點分佈不均等原因,解決使用者訪問網站的響應速度慢的根本原因。
狹義地講,內容分發佈網絡(CDN)是一種新型的網路構建方式,它是為能在傳統的IP網釋出寬頻豐富媒體而特別優化的網路覆蓋層;而從廣義的角度,CDN代表了一種基於質量與秩序的網路服務模式。
簡單地說,內容釋出網路(CDN)是一個經策略性部署的整體系統,包括分散式儲存、負載均衡、網路請求的重定向和內容管理4個要件,而內容管理和全域性的網路流量管理(Traffic Management)是CDN的核心所在。通過使用者就近性和伺服器負載的判斷,CDN確保內容以一種極為高效的方式為使用者的請求提供服務。
總的來說,內容服務基於快取伺服器,也稱作代理快取(Surrogate),它位於網路的邊緣,距使用者僅有”一跳”(Single Hop)之遙。同時,代理快取是內容提供商源伺服器(通常位於CDN服務提供商的資料中心)的一個透明映象。這樣的架構使得CDN服務提供商能夠代表他們客戶,即內容供應商,向終端使用者提供儘可能好的體驗,而這些使用者是不能容忍請求響應時間有任何延遲的。
據統計,採用CDN技術,能處理整個網站頁面的70%~95%的內容訪問量,減輕伺服器的壓力,提升了網站的效能和可擴充套件性。
與目前現有的內容釋出模式相比較,CDN強調了網路在內容釋出中的重要性。通過引入主動的內容管理層的和全域性負載均衡,CDN從根本上區別於傳統的內容釋出模式。在傳統的內容釋出模式中,內容的釋出由ICP的應用伺服器完成,而網路只表現為一個透明的資料傳輸通道,這種透明性表現在網路的質量保證僅僅停留在資料包的層面,而不能根據內容物件的不同區分服務質量。
此外,由於IP網的”盡力而為”的特性使得其質量保證是依靠在使用者和應用伺服器之間端到端地提供充分的、遠大於實際所需的頻寬通量來實現的。在這樣的內容釋出模式下,不僅大量寶貴的骨幹頻寬被佔用,同時ICP的應用伺服器的負載也變得非常重,而且不可預計。
當發生一些熱點事件和出現浪湧流量時,會產生區域性熱點效應,從而使應用伺服器過載退出服務。這種基於中心的應用伺服器的內容釋出模式的另外一個缺陷在於個性化服務的缺失和對寬頻服務價值鏈的扭曲,內容提供商承擔了他們不該幹也幹不好的內容釋出服務。
縱觀整個寬頻服務的價值鏈,內容提供商和使用者位於整個價值鏈的兩端,中間依靠網路服務提供商將其串接起來。隨著網際網路工業的成熟和商業模式的變革,在這條價值鏈上的角色越來越多也越來越細分。
比如內容/應用的運營商、託管服務提供商、骨幹網路服務提供商、接入服務提供商等等。在這一條價值鏈上的每一個角色都要分工合作、各司其職才能為客戶提供良好的服務,從而帶來多贏的局面。從內容與網路的結合模式上看,內容的釋出已經走過了ICP的內容(應用)伺服器和IDC這兩個階段。IDC的熱潮也催生了託管服務提供商這一角色。但是,IDC並不能解決內容的有效釋出問題。內容位於網路的中心並不能解決骨幹頻寬的佔用和建立IP網路上的流量秩序。因此將內容推到網路的邊緣,為使用者提供就近性的邊緣服務,從而保證服務的質量和整個網路上的訪問秩序就成了一種顯而易見的選擇。而這就是內容釋出網(CDN)服務模式。CDN的建立解決了困擾內容運營商的內容”集中與分散”的兩難選擇。無疑對於構建良好的網際網路價值鏈是有價值的,也是不可或缺的。
CDN新應用和客戶
目前的CDN服務主要應用於證券、金融保險、ISP、ICP、網上交易、入口網站、媒體站點、大中型公司、網路教學等領域。另外在行業專網、網際網路中都可以用到,甚至可以對區域網進行網路優化。利用CDN,這些網站無需投資昂貴的各類伺服器、設立分站點,特別是流媒體資訊的廣泛應用、遠端教學課件等消耗頻寬資源多的媒體資訊,應用CDN網路,把內容複製到網路的最邊緣,使內容請求點和交付點之間的距離縮至最小,從而促進Web站點效能的提高,具有重要的意義。
CDN網路的建設主要有企業建設的CDN網路,為企業服務;IDC的CDN網路,主要服務於IDC和增值服務;網路運營上主建的CDN網路,主要提供內容推送服務;CDN網路服務商,專門建設的CDN用於做服務,使用者通過與CDN機構進行合作,CDN負責資訊傳遞工作,保證資訊正常傳輸,維護傳送網路,而網站只需要內容維護,不再需要考慮流量問題。
CDN能夠為網路的快速、安全、穩定、可擴充套件等方面提供保障。
IDC建立CDN網路,IDC運營商一般需要有分部各地的多個IDC中心,服務物件是託管在IDC中心的客戶,利用現有的網路資源,投資較少,容易建設。例如某IDC全國有10個機房,加入IDC的CDN網路,託管在一個節點的Web伺服器,相當於有了10個映象伺服器,就近供客戶訪問。
寬頻都會網路,域內網路速度很快,出城頻寬一般就會瓶頸,為了體現都會網路的高速體驗,解決方案就是將Internet網上內容快取記憶體到本地,將Cache部署在都會網路各POP點上,這樣形成高效有序的網路,使用者僅一跳就能訪問大部分的內容,這也是一種加速所有網站CDN的應用。
CDN的工作原理
在描述CDN的實現原理,讓我們先看傳統的未加快取服務的訪問過程,以便了解CDN快取訪問方式與未加快取訪問方式的差別:
由上圖可見,使用者訪問未使用CDN快取網站的過程為:
- 使用者向瀏覽器提供要訪問的域名;
- 瀏覽器呼叫域名解析函式庫對域名進行解析,以得到此域名對應的IP地址;
- 瀏覽器使用所得到的IP地址,域名的服務主機發出資料訪問請求;
- 瀏覽器根據域名主機返回的資料顯示網頁的內容。
通過以上四個步驟,瀏覽器完成從使用者處接收使用者要訪問的域名到從域名服務主機處獲取資料的整個過程。CDN網路是在使用者和伺服器之間增加Cache層,如何將使用者的請求引導到Cache上獲得源伺服器的資料,主要是通過接管DNS實現,下面讓我們看看訪問使用CDN快取後的網站的過程:
通過上圖,我們可以瞭解到,使用了CDN快取後的網站的訪問過程變為:
- 使用者向瀏覽器提供要訪問的域名;
- 瀏覽器呼叫域名解析庫對域名進行解析,由於CDN對域名解析過程進行了調整,所以解析函式庫一般得到的是該域名對應的CNAME記錄,為了得到實際IP地址,瀏覽器需要再次對獲得的CNAME域名進行解析以得到實際的IP地址;在此過程中,使用的全域性負載均衡DNS解析,如根據地理位置資訊解析對應的IP地址,使得使用者能就近訪問。
- 此次解析得到CDN快取伺服器的IP地址,瀏覽器在得到實際的IP地址以後,向快取伺服器發出訪問請求;
- 快取伺服器根據瀏覽器提供的要訪問的域名,通過Cache內部專用DNS解析得到此域名的實際IP地址,再由快取伺服器向此實際IP地址提交訪問請求;
- 快取伺服器從實際IP地址得得到內容以後,一方面在本地進行儲存,以備以後使用,二方面把獲取的資料返回給客戶端,完成資料服務過程;
- 客戶端得到由快取伺服器返回的資料以後顯示出來並完成整個瀏覽的資料請求過程。
通過以上的分析我們可以得到,為了實現既要對普通使用者透明(即加入快取以後使用者客戶端無需進行任何設定,直接使用被加速網站原有的域名即可訪問),又要在為指定的網站提供加速服務的同時降低對ICP的影響,只要修改整個訪問過程中的域名解析部分,以實現透明的加速服務,下面是CDN網路實現的具體操作過程。
- 作為ICP,只需要把域名解釋權交給CDN運營商,其他方面不需要進行任何的修改;操作時,ICP修改自己域名的解析記錄,一般用cname方式指向CDN網路Cache伺服器的地址。
- 作為CDN運營商,首先需要為ICP的域名提供公開的解析,為了實現sortlist,一般是把ICP的域名解釋結果指向一個CNAME記錄;
- 當需要進行sorlist時,CDN運營商可以利用DNS對CNAME指向的域名解析過程進行特殊處理,使DNS伺服器在接收到客戶端請求時可以根據客戶端的IP地址,返回相同域名的不同IP地址;
- 由於從cname獲得的IP地址,並且帶有hostname資訊,請求到達Cache之後,Cache必須知道源伺服器的IP地址,所以在CDN運營商內部維護一個內部DNS伺服器,用於解釋使用者所訪問的域名的真實IP地址;
- 在維護內部DNS伺服器時,還需要維護一臺授權伺服器,控制哪些域名可以進行快取,而哪些又不進行快取,以免發生開放代理的情況。
CDN的技術手段
實現CDN的主要技術手段是快取記憶體、映象伺服器。可工作於DNS解析或HTTP重定向兩種方式,通過Cache伺服器,或異地的映象站點完成內容的傳送與同步更新。
DNS方式使用者位置判斷準確率大於85%,HTTP方式準確率為99%以上;一般情況下,各Cache伺服器群的使用者訪問流入資料量與Cache伺服器到原始網站取內容的資料量之比在2:1到3:1之間,即分擔50%到70%的到原始網站重複訪問資料量(主要是圖片,流媒體檔案等內容);對於映象,除資料同步的流量,其餘均在本地完成,不訪問原始伺服器。
映象站點(Mirror Site)伺服器是我們經常可以看到的,它讓內容直截了當地進行分佈,適用於靜態和準動態的資料同步。但是購買和維護新伺服器的費用較高,另外還必須在各個地區設定映象伺服器,配備專業技術人員進行管理與維護。大型網站在隨時更新各地伺服器的同時,對頻寬的需求也會顯著增加,因此一般的網際網路公司不會建立太多的映象伺服器。
快取記憶體手段的成本較低,適用於靜態內容。Internet的統計表明,超過80%的使用者經常訪問的是20%的網站的內容,在這個規律下,快取伺服器可以處理大部分客戶的靜態請求,而原始的WWW伺服器只需處理約20%左右的非快取請求和動態請求,於是大大加快了客戶請求的響應時間,並降低了原始WWW伺服器的負載。根據美國IDC公司的調查,作為CDN的一項重要指標 —— 快取的市場正在以每年近100%的速度增長,全球的營業額在2004年將達到45億美元。網路流媒體的發展還將剌激這個市場的需求。
CDN的網路架構
CDN網路架構主要由兩大部分,分為中心和邊緣兩部分,中心指CDN網管中心和DNS重定向解析中心,負責全域性負載均衡,裝置系統安裝在管理中心機房,邊緣主要指異地節點,CDN分發的載體,主要由Cache和負載均衡器等組成。
當用戶訪問加入CDN服務的網站時,域名解析請求將最終交給全域性負載均衡DNS進行處理。全域性負載均衡DNS通過一組預先定義好的策略,將當時最接近使用者的節點地址提供給使用者,使使用者能夠得到快速的服務。同時,它還與分佈在世界各地的所有CDNC節點保持通訊,蒐集各節點的通訊狀態,確保不將使用者的請求分配到不可用的CDN節點上,實際上是通過DNS做全域性負載均衡。
對於普通的Internet使用者來講,每個CDN節點就相當於一個放置在它周圍的WEB。通過全域性負載均衡DNS的控制,使用者的請求被透明地指向離他最近的節點,節點中CDN伺服器會像網站的原始伺服器一樣,響應使用者的請求。由於它離使用者更近,因而響應時間必然更快。
每個CDN節點由兩部分組成:負載均衡裝置和快取記憶體伺服器
負載均衡裝置負責每個節點中各個Cache的負載均衡,保證節點的工作效率;同時,負載均衡裝置還負責收集節點與周圍環境的資訊,保持與全域性負載DNS的通訊,實現整個系統的負載均衡。
快取記憶體伺服器(Cache)負責儲存客戶網站的大量資訊,就像一個靠近使用者的網站伺服器一樣響應本地使用者的訪問請求。
CDN的管理系統是整個系統能夠正常運轉的保證。它不僅能對系統中的各個子系統和裝置進行實時監控,對各種故障產生相應的告警,還可以實時監測到系統中總的流量和各節點的流量,並儲存在系統的資料庫中,使網管人員能夠方便地進行進一步分析。通過完善的網管系統,使用者可以對系統配置進行修改。
理論上,最簡單的CDN網路有一個負責全域性負載均衡的DNS和各節點一臺Cache,即可執行。DNS支援根據使用者源IP地址解析不同的IP,實現就近訪問。為了保證高可用性等,需要監視各節點的流量、健康狀況等。一個節點的單臺Cache承載數量不夠時,才需要多臺Cache,多臺Cache同時工作,才需要負載均衡器,使Cache群協同工作。