計算機網絡--詳解CDN

注:本文內容摘抄自CDN詳解 — 不挑食的程序員,博主在其基礎上進行了少量修改並加入了部分原創,感謝,侵刪~

之前我們已經學習過緩存機制以及Web代理,但對於大型網站的構建,這些還遠遠不夠。要想真正的構建一個流行的網站,內容分發網絡(Content Delivery Network)簡稱CDN,是一項不可或缺的技術。


什麼是CDN?

以下內容摘自維基百科:

內容分發網絡(CDN)是指一種通過互聯網互相連接的計算機網絡系統,利用最靠近每位用戶的服務器,更快、更可靠地將音樂、圖片、視頻、應用程序及其他文件發送給用戶。

如果對整個CDN系統做一個簡單的描述:

CDN系統主要由4大部分組成,每部分都由集羣所構成。這4部分分別由CDN專屬DNS服務器、全局負載均衡設備、區域負載均衡設備、CDN緩存服務器(邊緣節點)構成。除過CDN專屬DNS服務器,其他3部分集羣都有源服務器上對應資源的全部或部分副本。CDN系統通過各部分的負載均衡算法,最終指示客戶端使用附近最優的邊緣節點中的一臺緩存服務器作爲服務端,從而提高Web應用的性能。


CDN的基本工作過程

在傳統的Web模型中,發出請求後一般要經過如下幾個步驟:

  1. 用戶在自己的瀏覽器中輸入要訪問的網站域名。
  2. 瀏覽器向本地DNS服務器請求對該域名的解析。
  3. 本地DNS服務器中如果緩存有這個域名的解析結果,則直接響應用戶的解析請求。
  4. 本地DNS服務器中如果沒有關於這個域名的解析結果的緩存,則以迭代方式向整個DNS系統請求解析,獲得應答後將結果反饋給瀏覽器。
  5. 瀏覽器得到域名解析結果,就是該域名相應的服務設備的IP地址 。
  6. 瀏覽器獲取IP地址之後,經過標準的TCP握手流程,建立TCP連接。
  7. 瀏覽器向服務器發起HTTP請求。
  8. 服務器將用戶請求內容傳送給瀏覽器。
  9. 經過標準的TCP揮手流程,斷開TCP連接。

在網站和用戶之間加入CDN以後,用戶不會有任何與原來不同的感覺。從宏觀上來看,一個典型的CDN用戶訪問調度流程如下:

  1. 當用戶點擊網站頁面上的內容URL,先經過本地DNS系統解析,如果本地DNS服務器沒有相應域名的緩存,則本地DNS系統會將域名的解析權交給CNAME指向的CDN專用DNS服務器
  2. CDN的DNS服務器將CDN的 全局負載均衡設備 IP地址返回給用戶。
  3. 用戶向CDN的全局負載均衡設備發起URL訪問請求。
  4. CDN全局負載均衡設備根據用戶IP地址,以及用戶請求的URL,選擇一臺用戶所屬區域的區域負載均衡設備,並將請求轉發到此設備上。
  5. 基於以下這些條件的綜合分析之後,區域負載均衡設備會選擇一個最優的緩存服務器節點,並從緩存服務器節點處得到緩存服務器的IP地址,最終將得到的IP地址返回給全局負載均衡設備:
    • 根據用戶IP地址,判斷哪一個邊緣節點距用戶最近;
    • 根據用戶所請求的URL中攜帶的內容名稱,判斷哪一個邊緣節點上有用戶所需內容;
    • 查詢各個邊緣節點當前的負載情況,判斷哪一個邊緣節點尚有服務能力。
  6. 全局負載均衡設備把服務器的IP地址返回給用戶。
  7. 用戶向緩存服務器發起請求,緩存服務器響應用戶請求,將用戶所需內容傳送到用戶終端。如果這臺緩存服務器上並沒有用戶想要的內容,而區域均衡設備依然將它分配給了用戶,那麼這臺服務器就要向它的上一級緩存服務器請求內容,直至追溯到網站的源服務器將內容拉到本地。

CDN全局負載均衡設備與CDN區域負載均衡設備根據用戶IP地址,將域名解析成相應節點中緩存服務器的IP地址,實現用戶就近訪問,從而提高服務端響應內容的速度。

理論上,最簡單的CDN網絡只有一個CDN專用DNS服務器,一個全局負載均衡設備,然後各節點一臺緩存服務器,即可運行。


CDN的部署架構

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

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

實際上,邊緣層、區域層、中心層分別對應於邊緣節點、區域負載均衡設備、全局負載均衡設備。

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

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

中心和區域節點一般稱爲骨幹點,主要作爲內容分發和邊緣未命中時的服務點;

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

從節點構成上來說(微觀上),CDN骨幹點、POP點都由緩存設備和本地負載均衡設備構成,它與全局負載均衡設備及區域負載均衡設備屬於不同視角下的東西,可以分開實現,也可以抽象出接口,對上層透明。

緩存設備和本地負載均衡設備的連接方式有兩種:一種是旁路方式,一種是穿越方式。我們只說穿越方式。

在穿越方式下,SLB(Server Load Balancer)本地負載均衡一般由L4-7交換機實現,SLB向外提供可訪問的公網IP地址,我們可以將其稱之爲VIP。每臺緩存服務器僅分配私網IP地址,該臺SLB下的所有緩存服務器構成一個服務組。所有用戶請求和媒體流都經過該SLB設備,再由SLB設備進行向上向下轉發。SLB實際上承擔了NAT(Network Address Translation,網絡地址轉換)功能,向用戶屏蔽了單臺緩存服務器設備的IP地址。

也就是說,我們所訪問的全局負載均衡設備,區域負載均衡設備,CDN邊緣節點服務器的IP地址,實際上都是VIP。這種方式是CDN系統中應用較多的方式,優點是具有較高的安全性和可靠性。


CDN的功能架構

CDN基於這樣的原理:

  1. 挑選最優設備爲用戶提供服務;
  2. 如果某個內容被很多用戶所需要,它就被緩存到距離用戶最近的節點中。

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

關於國內有名的CDN公司,我們熟知的包括阿里雲、騰訊雲、百度雲等等,他們都對外提供CDN服務。

至於IDC,請戳:雲、CDN、IDC 三個概念的區別是什麼?有什麼相互包含和影響 - DADAman的回答 - 知乎

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


分發服務系統

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

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

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


負載均衡系統

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

我們剛說的全局負載均衡設備及區域負載均衡設備都屬於全局負載均衡,本地負載均衡設備則屬於本地負載均衡。

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


運營管理系統

CDN的運營管理系統與一般的電信運營管理系統類似,分爲運營管理和網絡管理兩個子系統。

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

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

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

試着使用一下騰訊雲提供的CDN服務吧,或許會對你理解運營管理系統有幫助。


爲什麼需要CDN?

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

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

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

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

1. 實現跨運營商、跨地域的全網覆蓋

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

2. 保障你的網站安全

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

3. 異地備援

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

4. 節約成本

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

5. 讓你更專注業務本身

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


其它

流量劫持

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

劫持通常分爲兩類:

  1. 域名劫持,又稱DNS劫持,通常是指域名指向到非正常IP(惡意IP),該惡意IP通過反向代理的方式,在能返回網頁正常內容的情況,可能插入惡意代碼、監聽網民訪問、劫持敏感信息等操作。通常驗證一個域名是否被劫持的方法是PING一個域名,如果發現PING出來的IP不是您的服務器真實IP,則可以確定被劫持了。

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

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


CDN緩存

CDN邊緣節點緩存策略因服務商不同而不同,但一般都會遵循HTTP標準協議,通過HTTP緩存機制來設置CDN邊緣節點數據緩存時間。

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

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

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

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


總結

  1. 熟悉CDN系統的請求與響應流程;
  2. 熟悉CDN系統的部署架構及功能架構;
  3. 掌握CDN系統中全局負載均衡與本地負載均衡的相關概念;
  4. 掌握CDN系統中全局負載均衡設備、區域負載均衡設備、本地負載均衡設備間各個的功能及相關概念;
  5. 瞭解使用CDN的好處;
  6. 瞭解流量劫持與CDN緩存。

參考閱讀

如何自己架設部署CDN — 視界雲

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章