CDN詳解

文章同步於Github Pines-Cheng/blogcss

什麼是CDN

CDN(內容分發網絡)全稱是 Content Delivery Network,創建並覆蓋在承載網之上、由分佈在不一樣區域的邊緣節點服務器羣組成的分佈式網絡,替代傳統以 WEB Server 爲中心的數據傳輸模式。html

做用是將源內容發佈到邊緣節點,配合精準的調度系統;將用戶的請求分配至最適合他的節點,使用戶能夠以最快的速度取得他所需的內容,有效解決Internet網絡擁塞情況,提升用戶訪問的響應速度。git

CDN的基本工做過程

用戶經過瀏覽器等方式訪問網站的過程如圖所示:github

image

  1. 用戶在本身的瀏覽器中輸入要訪問的網站域名。web

  2. 瀏覽器向 本地DNS服務器 請求對該域名的解析。瀏覽器

  3. 本地DNS服務器中若是緩存有這個域名的解析結果,則直接響應用戶的解析請求。緩存

  4. 本地DNS服務器中若是沒有關於這個域名的解析結果的緩存,則以遞歸方式向整個DNS系統請求解析,得到應答後將結果反饋給瀏覽器。安全

  5. 瀏覽器獲得域名解析結果,就是該域名相應的服務設備的 IP地址服務器

  6. 瀏覽器向服務器請求內容。網絡

  7. 服務器將用戶請求內容傳送給瀏覽器。

在網站和用戶之間加入 CDN 之後,用戶不會有任何與原來不一樣的感受。最簡單的 CDN 網絡有一個 DNS 服務器和幾臺緩存服務器就能夠運行了。一個典型的 CDN 用戶訪問調度流程如圖所示:

image

  1. 當用戶點擊網站頁面上的內容URL,通過本地DNS系統解析,DNS 系統會最終將域名的解析權交給 CNAME 指向的 CDN 專用 DNS 服務器

  2. CDN 的 DNS 服務器將 CDN 的全局負載均衡設備 IP 地址返回用戶。

  3. 用戶向 CDN 的全局負載均衡設備發起內容 URL 訪問請求。

  4. CDN 全局負載均衡設備根據用戶 IP 地址,以及用戶請求的內容URL,選擇一臺用戶所屬區域的區域負載均衡設備,告訴用戶向這臺設備發起請求。

  5. 基於如下這些條件的綜合分析以後,區域負載均衡設備會向全局負載均衡設備返回一臺緩存服務器的IP地址:

    • 根據用戶 IP 地址,判斷哪一臺服務器距用戶最近;

    • 根據用戶所請求的 URL 中攜帶的內容名稱,判斷哪一臺服務器上有用戶所需內容;

    • 查詢各個服務器當前的負載狀況,判斷哪一臺服務器尚有服務能力。

  6. 全局負載均衡設備把服務器的 IP 地址返回給用戶。

  7. 用戶向緩存服務器發起請求,緩存服務器響應用戶請求,將用戶所需內容傳送到用戶終端。若是這臺緩存服務器上並無用戶想要的內容,而區域均衡設備依然將它分配給了用戶,那麼這臺服務器就要向它的上一級緩存服務器請求內容,直至追溯到網站的源服務器將內容拉到本地。

DNS 服務器根據用戶 IP 地址,將域名解析成相應節點的緩存服務器IP地址,實現用戶就近訪問。使用 CDN 服務的網站,只需將其域名解析權交給 CDN 的全局負載均衡(GSLB)設備,將須要分發的內容注入 CDN,就能夠實現內容加速了。

使用CDN後的http請求處理流程以下圖,其中左邊爲DNS解析過程,右邊爲內容訪問過程

image

CDN的功能架構

CDN基於這樣的原理:

  1. 挑選最優設備爲用戶提供服務;

  2. 若是某個內容被不少用戶所須要,它就被緩存到距離用戶最近的節點中。

CDN 公司在整個互聯網上部署數以百計的CDN服務器(Cache),這些服務器一般在運營商的 IDC (互聯網數據中心Internet Data Center)中,儘可能靠近接入網絡和用戶。CDN在Cache中複製內容,當內容的提供者更新內容時,CDN 向Cache從新分發這些被刷新的內容。CDN提供一種機制,當用戶請求內容時,該內容可以由以最快速度交付的Cache 來向用戶提供,這個挑選"最優"的過程就叫作負載均衡。被選中的最優 Cache 可能最靠近用戶,或者有一條與用戶之間條件最好的路徑。

從功能上劃分,典型的 CDN 系統架構由分發服務系統負載均衡系統運營管理系統三大部分組成,如圖所示:

image

分發服務系統

該系統的主要做用是實現將內容從內容源中心向邊緣的推送和存儲,承擔實際的內容數據流的全網分發工做和麪向最終用戶的數據請求服務。分發服務系統最基本的工做單元就是許許多多的 Cache設備(緩存服務器),Cache 負責直接響應最終用戶的訪問請求,把緩存在本地的內容快速地提供給用戶。同時 Cache 還負責與源站點進行內容同步,把更新的內容以及本地沒有的內容從源站點獲取並保存在本地。

通常來講,根據承載內容類型和服務種類的不一樣,分發服務系統會分爲多個子服務系統,如網頁加速子系統流媒體加速子系統應用加速子系統等。每一個子服務系統都是一個分佈式服務集羣,由一羣功能近似的、在地理位置上分佈部署的 Cache 或 Cache 集羣組成,彼此間相互獨立。每一個子服務系統設備集羣的數量根據業務發展和市場須要的不一樣,少則幾十臺,多則可達上萬臺,對外造成一個總體,共同承擔分發服務工做。Cache 設備的數量、規模、總服務能力是衡量一個 CDN 系統服務能力的最基本的指標。

分發服務系統在承擔內容的更新、同步和響應用戶需求的同時,還須要向上層的調度控制系統提供每一個Cache設備的健康情況信息、響應狀況,有時還須要提供內容分佈信息,以便調度控制系統根據設定的策略決定由哪一個Cache(組)來響應用戶的請求最優。

負載均衡系統

負載均衡系統是一個 CDN 系統的神經中樞,主要功能是負責對全部發起服務請求的用戶進行訪問調度,肯定提供給用戶的最終實際訪問地址。大多數 CDN 系統的負載均衡系統是分級實現的,這裏以最基本的兩級調度體系進行簡要說明。通常而言,兩級調度體系分爲全局負載均衡(GSLB)本地負載均衡(SLB)

其中,全局負載均衡(GSLB)主要根據 用戶就近性原則,經過對每一個服務節點進行"最優"判斷,肯定向用戶提供服務的 Cache 的物理位置。最通用的 GSLB 實現方法是基於DNS解析的方式實現,也有一些系統採用了應用層重定向等方式來解決。本地負載均衡(SLB)主要負責節點內部的設備負載均衡,當用戶請求從 GSLB 調度到 SLB 時,SLB 會根據節點內各 Cache 設備的實際能力或內容分佈等因素對用戶進行重定向,經常使用的本地負載均衡方法有基於4層調度基於7層調度鏈路負載調度等。

運營管理系統

CDN的運營管理系統與通常的電信運營管理系統相似,分爲運營管理和網絡管理兩個子系統。

運營管理子系統是CDN系統的業務管理功能實體,負責處理業務層面的與外界系統交互所必需的一些收集、整理、交付工做,包含客戶管理、產品管理、計費管理、統計分析等功能。

網絡管理子系統實現對CDN系統的網絡設備管理、拓撲管理、鏈路監控和故障管理,爲管理員提供對全網資源進行集中化管理操做的界面,一般是基於Web方式實現的。

CDN的部署架構

CDN 系統設計的首要目標是儘可能減小用戶的訪問響應時間,爲達到這一目標,CDN 系統應該儘可能將用戶所須要的內容存放在距離用戶最近的位置。也就是說,負責爲用戶提供內容服務的 Cache 設備應部署在物理上的網絡邊緣位置,咱們稱這一層爲CDN邊緣層。CDN 系統中負責全局性管理和控制的設備組成 中心層,中心層同時保存着最多的內容副本,當邊緣層設備未命中時,會向中心層請求,若是在中心層仍未命中,則須要中心層向源站回源。

不一樣CDN系統設計之間存在差別,中心層可能具有用戶服務能力,也可能不直接提供服務,只向下級節點提供內容。若是CDN網絡規模較大,邊緣層設備直接向中心層請求內容或服務會形成中心層設備壓力過大,就要考慮在邊緣層和中心層之間部署一個區域層,負責一個區域的管理和控制,也保存部份內容副本供邊緣層訪問。

如圖是一個典型的CDN系統三級部署示意圖:

image

節點是 CDN 系統中最基本的部署單元,一個CDN系統由大量的、地理位置上分散的 POP(point-of-presence)節點組成,爲用戶提供就近的內容訪問服務。

CDN 節點網絡主要包含 CDN 骨幹點POP 點CDN 骨幹點CDN POP 點在功能上不一樣。

  • 中心和區域節點通常稱爲骨幹點,主要做爲內容分發和邊緣未命中時的服務點;

  • 邊緣節點又被稱爲POP(point-of-presence)節點,CDN POP點主要做爲直接向用戶提供服務的節點。

可是,從節點構成上來講,不管是CDN骨幹點仍是CDN POP點,都由Cache設備和本地負載均衡設備構成。

在一個節點中,Cache設備和本地負載均衡設備的鏈接方式有兩種:一種是旁路方式,一種是穿越方式。

如圖所示:

image

在穿越方式下,SLB(Server Load Balancer,負載均衡 通常由 L4-7 交換機實現,SLB 向外提供可訪問的 公網IP地址(VIP,每臺Cache僅分配私網IP地址,該臺SLB下掛的全部Cache構成一個服務組。全部用戶請求和媒體流都通過該SLB設備,再由SLB設備進行向上向下轉發。SLB實際上承擔了 NAT(Network Address Translation,網絡地址轉換)功能,向用戶屏蔽了Cache設備的IP地址。這種方式是CDN系統中應用較多的方式,優勢是具備較高的安全性和可靠性,缺點是L4-7交換機一般較爲昂貴。另外,當節點容量大時,L4-7交換機容易造成性能瓶頸。不過近年來,隨着 LVS (Linux Virtual Server,即Linux虛擬服務器) 等技術的興起,SLB設備價格有了大幅降低。

在旁路方式下,有兩種 SLB 實現方式:

  • 在早期,這種 SLB 通常由軟件實現。SLB 和 Cache 設備都具備公共的IP地址,SLB 和 Cache 構成並聯關係。用戶須要先訪問 SLB 設備,而後再以重定向的方式訪問特定的 Cache。這種實現方式簡單靈活,擴展性好,缺點是安全性較差,並且須要依賴於應用層重定向。

  • 隨着技術的發展,L4-7 交換機也可採用旁路部署(負載均衡硬件設備的部署)方式,旁掛在路由交換設備上,數據流量經過三角傳輸方式進行。

在CDN系統中,不只分發服務系統和調度控制系統是分佈式部署的,運營管理系統也是分級分佈式部署的,每一個節點都是運營管理數據的生成點和採集點,經過日誌和網管代理等方式上報數據。能夠說,CDN自己就是一個大型的具備中央控制能力的分佈式服務系統。

爲何須要CDN

當下的互聯網應用都包含大量的靜態內容,但靜態內容以及一些準動態內容又是最耗費帶寬的,特別是針對全國甚至全世界的大型網站,若是這些請求都指向主站的服務器的話,不只是主站服務器受不了,單端口500M左右的帶寬也扛不住,因此大多數網站都須要CDN服務。

根本上的緣由是,訪問速度對互聯網應用的用戶體驗、口碑、甚至說直接的營收都有巨大的影響,任何的企業都渴望本身站點有更快的訪問速度。而HTTP傳輸時延對web的訪問速度的影響很大,在絕大多數狀況下是起決定性做用的,這是由TCP/IP協議的一些特色決定的。物理層上的緣由是光速有限、信道有限,協議上的緣由有丟包、慢啓動、擁塞控制等。

這就是你使用CDN的第一個也是最重要的緣由:爲了加速網站的訪問。

除了加速網站的訪問以外,CDN還有一些做用:

  • 爲了實現跨運營商、跨地域的全網覆蓋

互聯不互通、區域ISP地域侷限、出口帶寬受限制等種種因素都形成了網站的區域性沒法訪問。CDN加速能夠覆蓋全球的線路,經過和運營商合做,部署IDC資源,在全國骨幹節點商,合理部署CDN邊緣分發存儲節點,充分利用帶寬資源,平衡源站流量。阿里雲在國內有500+節點,海外300+節點,覆蓋主流國家和地區不是問題,能夠確保CDN服務的穩定和快速。

  • 爲了保障你的網站安全

CDN的負載均衡和分佈式存儲技術,能夠增強網站的可靠性,至關無無形中給你的網站添加了一把保護傘,應對絕大部分的互聯網攻擊事件。防攻擊系統也能避免網站遭到惡意攻擊。

  • 爲了異地備援

當某個服務器發生意外故障時,系統將會調用其餘臨近的健康服務器節點進行服務,進而提供接近100%的可靠性,這就讓你的網站能夠作到永不宕機。

  • 爲了節約成本

投入使用CDN加速能夠實現網站的全國鋪設,你根據不用考慮購買服務器與後續的託管運維,服務器之間鏡像同步,也不用爲了管理維護技術人員而煩惱,節省了人力、精力和財力。

  • 爲了讓你更專一業務自己

CDN加速廠商通常都會提供一站式服務,業務不只限於CDN,還有配套的雲存儲、大數據服務、視頻雲服務等,並且通常會提供7x24運維監控支持,保證網絡隨時暢通,你能夠放心使用。而且將更多的精力投入到發展自身的核心業務之上。

適用場景

網站站點/應用加速

站點或者應用中大量靜態資源的加速分發,建議將站點內容進行動靜分離,動態文件能夠結合雲服務器ECS,靜態資源如各種型圖片、html、css、js文件等,建議結合 對象存儲OSS 存儲海量靜態資源,能夠有效加速內容加載速度,輕鬆搞定網站圖片、短視頻等內容分發。

image

視音頻點播/大文件下載分發加速

支持各種文件的下載、分發,支持在線點播加速業務,如mp四、flv視頻文件或者平均單個文件大小在20M以上,主要的業務場景是視音頻點播、大文件下載(如安裝包下載)等,建議搭配對象存儲OSS使用,可提高回源速度,節約近2/3回源帶寬成本。

image

視頻直播加速

視頻流媒體直播服務,支持媒資存儲、切片轉碼、訪問鑑權、內容分發加速一體化解決方案。結合彈性伸縮服務,及時調整服務器帶寬,應對突發訪問流量;結合媒體轉碼服務,享受高速穩定的並行轉碼,且任務規模無縫擴展。

image

移動應用加速

移動APP更新文件(apk文件)分發,移動APP內圖片、頁面、短視頻、UGC等內容的優化加速分發。提供httpDNS服務,避免DNS劫持並得到實時精確的DNS解析結果,有效縮短用戶訪問時間,提高用戶體驗。

image

其餘

流量劫持

其實,CDN自己就是一種DNS劫持,只不過是良性的。 不一樣於黑客強制DNS把域名解析到本身的釣魚IP上,CDN則是讓DNS主動配合,把域名解析到臨近的服務器上。

劫持一般分爲兩類:

  1. 域名劫持,又稱DNS劫持,一般是指域名指向到非正常IP(惡意IP),該惡意IP經過反向代理的方式,在能返回網頁正常內容的狀況,可能插入惡意代碼、監聽網民訪問、劫持敏感信息等操做。一般驗證一個域名是否被劫持的方法是PING一個域名,若是發現PING出來的IP不是您的服務器真實IP,則能夠肯定被劫持了(固然若是使用了知道創宇雲安全等安全加速平臺,獲得的IP爲平臺IP,並不是劫持)

  2. 數據劫持,一般由電信運營商中某些員工等勾結犯罪分子,在公網中進行數據支持,插入,此類狀況極隱蔽,不會改變用戶域名解析IP,而是直接數據流經運營商寬帶時在網頁中挺入內容,此類狀況,建議網頁啓用HTTPS加密,能夠解決這一問題(通訊是加密的,運營商沒法插入惡意內容)

某運營商對新浪首頁的廣告強制插入:

image

若是使用CDN服務時,當源站向CDN返回被劫持的內容時,此時CDN將獲取到的並非正確的網頁內容(而是經運營商篡改強制植入廣告的頁面),此時可能致使該內容在CDN中長時間緩存,發現這種問題,能夠清理CDN緩存後,通常便可恢復正常。

遇到劫持現象,能夠向工信部投訴:http://www.chinatcc.gov.cn:80...

可參考:

CDN緩存

CDN邊緣節點緩存策略因服務商不一樣而不一樣,但通常都會遵循http標準協議,經過http響應頭中的 Cache-control: max-age的字段來設置CDN邊緣節點數據緩存時間。

當客戶端向CDN節點請求數據時,CDN節點會判斷緩存數據是否過時,若緩存數據並無過時,則直接將緩存數據返回給客戶端;不然,CDN節點就會向源站發出回源請求(back to the source request),從源站拉取最新數據,更新本地緩存,並將最新數據返回給客戶端。

CDN服務商通常會提供基於文件後綴、目錄多個維度來指定CDN緩存時間,爲用戶提供更精細化的緩存管理。

CDN緩存時間會對回源率產生直接的影響。若CDN緩存時間較短,CDN邊緣節點上的數據會常常失效,致使頻繁回源,增長了源站的負載,同時也增大的訪問延時;若CDN緩存時間太長,會帶來數據更新時間慢的問題。開發者須要增對特定的業務,來作特定的數據緩存時間管理。

CDN邊緣節點對開發者是透明的,相比於瀏覽器 Ctrl+F5 的強制刷新來使瀏覽器本地緩存失效,開發者能夠經過CDN服務商提供的「刷新緩存」接口來達到清理CDN邊緣節點緩存的目的。這樣開發者在更新數據後,可使用 刷新緩存 功能來強制CDN節點上的數據緩存過時,保證客戶端在訪問時,拉取到最新的數據。

可參考:

深刻研究

參考

相關文章
相關標籤/搜索